summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskotti <skotti@wintermute>2009-10-27 14:57:42 +0100
committerskotti <skotti@wintermute>2009-10-27 14:57:42 +0100
commita32c335c3dcff3da622620e6f2aba8669c3692c2 (patch)
tree5f95d90a2f9066dfabb8dcc565329bd2391953e2
parente92917d1bc75f095222ec757f0006b8ef6883a9b (diff)
parentb8519a1c00b47e863f7e8499c7e14bf2099b2252 (diff)
Merge latest DEV300 and CWS sb111
-rw-r--r--basic/source/app/app.cxx35
-rw-r--r--configmgr/qa/unit/common.hxx114
-rw-r--r--configmgr/qa/unit/performance.cxx271
-rw-r--r--configmgr/qa/unit/threading.cxx262
-rw-r--r--configmgr2/inc/configmgr/detail/configmgrdllapi.hxx43
-rw-r--r--configmgr2/inc/configmgr/update.hxx53
-rw-r--r--configmgr2/inc/makefile.mk42
-rw-r--r--configmgr2/inc/pch/precompiled_configmgr.cxx30
-rw-r--r--configmgr2/inc/pch/precompiled_configmgr.hxx34
-rw-r--r--configmgr2/prj/build.lst3
-rw-r--r--configmgr2/prj/d.lst8
-rw-r--r--configmgr2/qa/unit/data.xcd5192
-rw-r--r--configmgr2/qa/unit/makefile.mk92
-rw-r--r--[-rwxr-xr-x]configmgr2/qa/unit/no_localization (renamed from connectivity/util/delzip)0
-rw-r--r--configmgr2/qa/unit/test.cxx680
-rw-r--r--configmgr2/qa/unit/urebootstrap.ini32
-rw-r--r--configmgr2/qa/unit/version.map36
-rw-r--r--configmgr2/qa/unoapi/makefile.mk40
-rw-r--r--configmgr2/qa/unoapi/module.sce31
-rw-r--r--configmgr2/source/access.cxx2188
-rw-r--r--configmgr2/source/access.hxx584
-rw-r--r--configmgr2/source/broadcaster.cxx239
-rw-r--r--configmgr2/source/broadcaster.hxx183
-rw-r--r--configmgr2/source/childaccess.cxx383
-rw-r--r--configmgr2/source/childaccess.hxx159
-rw-r--r--configmgr2/source/components.cxx644
-rw-r--r--configmgr2/source/components.hxx151
-rw-r--r--configmgr2/source/configurationprovider.cxx521
-rw-r--r--configmgr2/source/configurationprovider.hxx69
-rw-r--r--configmgr2/source/data.cxx320
-rw-r--r--configmgr2/source/data.hxx88
-rw-r--r--configmgr2/source/defaultprovider.cxx133
-rw-r--r--configmgr2/source/defaultprovider.hxx61
-rw-r--r--configmgr2/source/groupnode.cxx90
-rw-r--r--configmgr2/source/groupnode.hxx77
-rw-r--r--configmgr2/source/localizedpropertynode.cxx89
-rw-r--r--configmgr2/source/localizedpropertynode.hxx76
-rw-r--r--configmgr2/source/localizedvaluenode.cxx80
-rw-r--r--configmgr2/source/localizedvaluenode.hxx68
-rw-r--r--configmgr2/source/lock.cxx41
-rw-r--r--configmgr2/source/lock.hxx43
-rw-r--r--configmgr2/source/makefile.mk84
-rw-r--r--configmgr2/source/modifications.cxx68
-rw-r--r--configmgr2/source/modifications.hxx67
-rw-r--r--configmgr2/source/node.cxx110
-rw-r--r--configmgr2/source/node.hxx88
-rw-r--r--configmgr2/source/nodemap.cxx52
-rw-r--r--configmgr2/source/nodemap.hxx51
-rw-r--r--configmgr2/source/pad.cxx80
-rw-r--r--configmgr2/source/pad.hxx59
-rw-r--r--configmgr2/source/parsemanager.cxx87
-rw-r--r--configmgr2/source/parsemanager.hxx71
-rw-r--r--configmgr2/source/parser.hxx64
-rw-r--r--configmgr2/source/path.hxx45
-rw-r--r--configmgr2/source/propertynode.cxx112
-rw-r--r--configmgr2/source/propertynode.hxx83
-rw-r--r--configmgr2/source/rootaccess.cxx316
-rw-r--r--configmgr2/source/rootaccess.hxx157
-rw-r--r--configmgr2/source/services.cxx116
-rw-r--r--configmgr2/source/setnode.cxx128
-rw-r--r--configmgr2/source/setnode.hxx86
-rw-r--r--configmgr2/source/span.hxx66
-rw-r--r--configmgr2/source/type.cxx186
-rw-r--r--configmgr2/source/type.hxx58
-rw-r--r--configmgr2/source/update.cxx56
-rw-r--r--configmgr2/source/valueparser.cxx451
-rw-r--r--configmgr2/source/valueparser.hxx95
-rw-r--r--configmgr2/source/writemodfile.cxx611
-rw-r--r--configmgr2/source/writemodfile.hxx47
-rw-r--r--configmgr2/source/xcdparser.cxx185
-rw-r--r--configmgr2/source/xcdparser.hxx80
-rw-r--r--configmgr2/source/xcsparser.cxx559
-rw-r--r--configmgr2/source/xcsparser.hxx108
-rw-r--r--configmgr2/source/xcuparser.cxx1030
-rw-r--r--configmgr2/source/xcuparser.hxx143
-rw-r--r--configmgr2/source/xmldata.cxx213
-rw-r--r--configmgr2/source/xmldata.hxx61
-rw-r--r--configmgr2/source/xmlreader.cxx1056
-rw-r--r--configmgr2/source/xmlreader.hxx186
-rw-r--r--connectivity/prj/build.lst2
-rwxr-xr-xconnectivity/util/langfilter.xsl37
-rwxr-xr-xconnectivity/util/makefile.mk78
-rw-r--r--desktop/prj/build.lst2
-rw-r--r--desktop/source/app/userinstall.cxx2
-rw-r--r--desktop/source/deployment/makefile.mk3
-rw-r--r--desktop/source/deployment/registry/configuration/dp_configuration.cxx569
-rw-r--r--desktop/source/pagein/makefile.mk2
-rw-r--r--fpicker/source/office/OfficeFilePicker.cxx5
-rw-r--r--linguistic/source/lngsvcmgr.cxx11
-rw-r--r--officecfg/prj/d.lst6
-rw-r--r--officecfg/registry/component-schema.dtd153
-rw-r--r--officecfg/registry/component-schema.xsd224
-rw-r--r--officecfg/registry/component-types.xsd135
-rw-r--r--officecfg/registry/component-update.dtd138
-rw-r--r--officecfg/registry/component-update.xsd113
-rw-r--r--officecfg/registry/data/org/openoffice/Inet.xcu64
-rw-r--r--officecfg/registry/data/org/openoffice/LDAP.xcu.sample73
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Common.xcu125
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Labels.xcu4631
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Paths.xcu9
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Recovery.xcu44
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/BasicIDEWindowState.xcu2
-rw-r--r--officecfg/registry/data/org/openoffice/Office/makefile.mk7
-rw-r--r--officecfg/registry/data/org/openoffice/Setup.xcu17
-rw-r--r--officecfg/registry/data/org/openoffice/System.xcu47
-rw-r--r--officecfg/registry/data/org/openoffice/UserProfile.xcu7
-rw-r--r--officecfg/registry/data/org/openoffice/VCL.xcu9
-rw-r--r--officecfg/registry/data/org/openoffice/makefile.mk19
-rw-r--r--officecfg/registry/schema/oo-ad-ldap-attr.map50
-rw-r--r--officecfg/registry/schema/oo-ad-ldap.xcd.sample155
-rw-r--r--officecfg/registry/schema/oo-ldap-attr.map50
-rw-r--r--officecfg/registry/schema/oo-ldap.xcd.sample158
-rw-r--r--officecfg/registry/schema/org/openoffice/LDAP.xcs2
-rw-r--r--officecfg/util/alllang.xsl3
-rw-r--r--officecfg/util/data_val.xsl3
-rw-r--r--sfx2/source/appl/sfxhelp.cxx3
-rw-r--r--sfx2/source/bastyp/helper.cxx14
-rw-r--r--shell/source/backends/desktopbe/desktopbackend.cxx292
-rw-r--r--shell/source/backends/desktopbe/desktopbe.xml37
-rw-r--r--shell/source/backends/desktopbe/desktopbe1-ucd.txt3
-rw-r--r--shell/source/backends/desktopbe/desktopbecdef.cxx205
-rw-r--r--shell/source/backends/desktopbe/exports.map10
-rw-r--r--shell/source/backends/desktopbe/makefile.mk66
-rw-r--r--shell/source/backends/gconfbe/exports.map10
-rw-r--r--shell/source/backends/gconfbe/gconfaccess.cxx (renamed from shell/source/backends/gconfbe/gconflayer.cxx)591
-rw-r--r--shell/source/backends/gconfbe/gconfaccess.hxx121
-rw-r--r--shell/source/backends/gconfbe/gconfbackend.cxx1184
-rw-r--r--shell/source/backends/gconfbe/gconfbackend.hxx225
-rw-r--r--shell/source/backends/gconfbe/gconfbe.xml35
-rw-r--r--shell/source/backends/gconfbe/gconfbecdef.cxx151
-rw-r--r--shell/source/backends/gconfbe/gconflayer.hxx133
-rw-r--r--shell/source/backends/gconfbe/makefile.mk9
-rw-r--r--shell/source/backends/kde4be/exports.map10
-rw-r--r--shell/source/backends/kde4be/kde4access.cxx321
-rw-r--r--shell/source/backends/kde4be/kde4access.hxx49
-rw-r--r--shell/source/backends/kde4be/kde4backend.cxx342
-rw-r--r--shell/source/backends/kde4be/kde4backend.hxx123
-rw-r--r--shell/source/backends/kde4be/kde4be.xml35
-rw-r--r--shell/source/backends/kde4be/kde4becdef.cxx143
-rw-r--r--shell/source/backends/kde4be/kde4commonlayer.cxx157
-rw-r--r--shell/source/backends/kde4be/kde4commonlayer.hxx51
-rw-r--r--shell/source/backends/kde4be/kde4inetlayer.cxx255
-rw-r--r--shell/source/backends/kde4be/kde4inetlayer.hxx59
-rw-r--r--shell/source/backends/kde4be/kde4pathslayer.cxx124
-rw-r--r--shell/source/backends/kde4be/kde4pathslayer.hxx82
-rw-r--r--shell/source/backends/kde4be/kde4vcllayer.cxx115
-rw-r--r--shell/source/backends/kde4be/kde4vcllayer.hxx53
-rw-r--r--shell/source/backends/kde4be/makefile.mk17
-rw-r--r--shell/source/backends/kdebe/exports.map10
-rw-r--r--shell/source/backends/kdebe/kdeaccess.cxx316
-rw-r--r--shell/source/backends/kdebe/kdeaccess.hxx49
-rw-r--r--shell/source/backends/kdebe/kdebackend.cxx341
-rw-r--r--shell/source/backends/kdebe/kdebackend.hxx128
-rw-r--r--shell/source/backends/kdebe/kdebe.xml35
-rw-r--r--shell/source/backends/kdebe/kdebecdef.cxx143
-rw-r--r--shell/source/backends/kdebe/kdecommonlayer.cxx153
-rw-r--r--shell/source/backends/kdebe/kdecommonlayer.hxx56
-rw-r--r--shell/source/backends/kdebe/kdeinetlayer.cxx254
-rw-r--r--shell/source/backends/kdebe/kdeinetlayer.hxx62
-rw-r--r--shell/source/backends/kdebe/kdepathslayer.cxx121
-rw-r--r--shell/source/backends/kdebe/kdepathslayer.hxx86
-rw-r--r--shell/source/backends/kdebe/kdevcllayer.cxx116
-rw-r--r--shell/source/backends/kdebe/kdevcllayer.hxx56
-rw-r--r--shell/source/backends/kdebe/makefile.mk17
-rw-r--r--shell/source/backends/localebe/localebackend.cxx115
-rw-r--r--shell/source/backends/localebe/localebackend.hxx94
-rw-r--r--shell/source/backends/localebe/localebe.xml1
-rw-r--r--shell/source/backends/localebe/localebecdef.cxx44
-rw-r--r--shell/source/backends/localebe/localelayer.cxx88
-rw-r--r--shell/source/backends/localebe/localelayer.hxx64
-rw-r--r--shell/source/backends/localebe/makefile.mk5
-rw-r--r--shell/source/backends/macbe/macbackend.cxx447
-rw-r--r--shell/source/backends/macbe/macbackend.hxx86
-rw-r--r--shell/source/backends/macbe/macbe.xml1
-rw-r--r--shell/source/backends/macbe/macbecdef.cxx43
-rw-r--r--shell/source/backends/macbe/macbelayer.cxx443
-rw-r--r--shell/source/backends/macbe/macbelayer.hxx104
-rw-r--r--shell/source/backends/macbe/makefile.mk3
-rw-r--r--shell/source/backends/wininetbe/makefile.mk5
-rw-r--r--shell/source/backends/wininetbe/wininetbackend.cxx361
-rw-r--r--shell/source/backends/wininetbe/wininetbackend.hxx118
-rw-r--r--shell/source/backends/wininetbe/wininetbe.xml1
-rw-r--r--shell/source/backends/wininetbe/wininetbecdef.cxx43
-rw-r--r--shell/source/backends/wininetbe/wininetlayer.cxx377
-rw-r--r--shell/source/backends/wininetbe/wininetlayer.hxx73
-rw-r--r--svx/prj/build.lst2
-rw-r--r--svx/source/cui/optsave.cxx12
-rw-r--r--xmlhelp/source/cxxhelp/provider/databases.cxx7
-rw-r--r--xmlhelp/source/cxxhelp/provider/databases.hxx6
-rw-r--r--xmlhelp/source/cxxhelp/provider/provider.cxx35
-rw-r--r--xmlhelp/source/cxxhelp/provider/urlparameter.cxx15
-rw-r--r--xmlhelp/source/treeview/tvread.cxx24
192 files changed, 25898 insertions, 11042 deletions
diff --git a/basic/source/app/app.cxx b/basic/source/app/app.cxx
index 4743b8c0ddca..ba9d263b0707 100644
--- a/basic/source/app/app.cxx
+++ b/basic/source/app/app.cxx
@@ -194,41 +194,6 @@ BOOL IsTTSignatureForUnicodeTextfile( String aLine )
BasicApp aBasicApp; // Application instance
-static const char * const components[] =
-{
- SAL_MODULENAME( "ucb1" ) // KSO, ABI
- , SAL_MODULENAME( "ucpfile1" )
- , "configmgr2.uno" SAL_DLLEXTENSION
- , "sax.uno" SAL_DLLEXTENSION
- , "stocservices.uno" SAL_DLLEXTENSION
- , SAL_MODULENAME( "fileacc" )
- , SAL_MODULENAME( "mcnttype" ) // Clipboard Ask Oliver Braun
- , "i18npool.uno" SAL_DLLEXTENSION
- // Reading of files in specific encodings like UTF-8 using
- // createUnoService( "com.sun.star.io.TextInputStream" ) and such
- , "textinstream.uno" SAL_DLLEXTENSION
- , "textoutstream.uno" SAL_DLLEXTENSION
- , "introspection.uno" SAL_DLLEXTENSION
- , "reflection.uno" SAL_DLLEXTENSION
- // RemoteUno
- , "connector.uno" SAL_DLLEXTENSION
- , "bridgefac.uno" SAL_DLLEXTENSION
- , "remotebridge.uno" SAL_DLLEXTENSION
-#ifdef SAL_UNX
-#ifdef QUARTZ
- , SVLIBRARY( "dtransaqua" ) // Mac OS X Aqua uses a dedicated libdtransaqua
-#else
- , SVLIBRARY( "dtransX11" ) // OBR
-#endif
-#endif
-#ifdef SAL_W32
- , SAL_MODULENAME( "sysdtrans" )
- , SAL_MODULENAME( "ftransl" )
- , SAL_MODULENAME( "dnd" )
-#endif
- , 0
-};
-
uno::Reference< XContentProviderManager > InitializeUCB( void )
{
uno::Reference< XMultiServiceFactory > xSMgr;
diff --git a/configmgr/qa/unit/common.hxx b/configmgr/qa/unit/common.hxx
deleted file mode 100644
index d53d52d55ad7..000000000000
--- a/configmgr/qa/unit/common.hxx
+++ /dev/null
@@ -1,114 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: common.hxx,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "sal/config.h"
-#include <cstdlib>
-#include "com/sun/star/beans/NamedValue.hpp"
-#include "com/sun/star/beans/XPropertySet.hpp"
-#include "com/sun/star/beans/XPropertyState.hpp"
-#include "com/sun/star/lang/XComponent.hpp"
-#include "com/sun/star/lang/XMultiComponentFactory.hpp"
-#include "com/sun/star/lang/XMultiServiceFactory.hpp"
-#include "com/sun/star/container/XNameReplace.hpp"
-#include "com/sun/star/container/XHierarchicalNameAccess.hpp"
-#include "com/sun/star/util/XChangesBatch.hpp"
-#include "com/sun/star/uno/Any.hxx"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/XComponentContext.hpp"
-#include "cppuhelper/component_context.hxx"
-#include "cppuhelper/servicefactory.hxx"
-#include "cppunit/simpleheader.hxx"
-#include "osl/file.hxx"
-#include "osl/thread.h"
-#include "osl/process.h"
-#include "rtl/string.h"
-#include "rtl/bootstrap.h"
-#include "rtl/ustring.h"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-namespace css = com::sun::star;
-
-#define CATCH_FAIL(msg) \
- catch (const css::uno::Exception &e) { \
- t_print ("msg '%s'\n", rtl::OUStringToOString (e.Message, RTL_TEXTENCODING_UTF8).getStr()); \
- CPPUNIT_FAIL( msg ); \
- throw; \
- }
-
-class Magic
-{
- rtl::OUString maTempDir;
- public:
- Magic();
- ~Magic();
-};
-
-class Test: public CppUnit::TestFixture {
- Magic *mpMagic;
-public:
- // init
- virtual void setUp();
- virtual void tearDown();
-
- // helpers
- void normalizePathKey (rtl::OString &rPath, rtl::OString &rKey);
- css::uno::Reference< css::uno::XInterface > createView(const sal_Char *pNodepath, bool bUpdate);
- css::uno::Any getKey (const sal_Char *pPath, rtl::OUString aName);
- css::uno::Any getKey (const sal_Char *pPath, const sal_Char *pName)
- { return getKey (pPath, rtl::OUString::createFromAscii (pName)); }
- void setKey (const sal_Char *pPath, rtl::OUString aName, css::uno::Any a);
- void resetKey (const sal_Char *pPath, rtl::OUString aName);
-
- // tests
- void keyFetch();
- void keySet();
- void keyReset();
- void readCommands();
- void threadTests();
- void recursiveTests();
- void eventTests();
-
- CPPUNIT_TEST_SUITE(Test);
- CPPUNIT_TEST(keyFetch);
- CPPUNIT_TEST(keySet);
- CPPUNIT_TEST(keyReset);
- CPPUNIT_TEST(readCommands);
- CPPUNIT_TEST(threadTests);
- CPPUNIT_TEST(recursiveTests);
- CPPUNIT_TEST(eventTests);
- CPPUNIT_TEST_SUITE_END();
-
-private:
- css::uno::Reference< css::uno::XComponentContext > mxContext;
- css::uno::Reference< css::lang::XMultiServiceFactory > mxProvider;
-};
-
-void disposeComponent (const css::uno::Reference<css::uno::XInterface> &xComp);
diff --git a/configmgr/qa/unit/performance.cxx b/configmgr/qa/unit/performance.cxx
deleted file mode 100644
index a1e338bf16be..000000000000
--- a/configmgr/qa/unit/performance.cxx
+++ /dev/null
@@ -1,271 +0,0 @@
-// To debug me use:
-// $ export ENVCFGFLAGS='-me -ti -tw -tp -td'
-
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: performance.cxx,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "common.hxx"
-
-void Test::setUp()
-{
- mpMagic = new Magic();
-
- char const * f = getForwardString();
- rtl::OUString args(
- f, rtl_str_getLength(f), osl_getThreadTextEncoding());
- //TODO: handle conversion failure
- sal_Int32 i = args.indexOf('#');
- if (i < 0)
- std::abort();
-
- rtl::OUString rdb(args.copy(0, i));
- rtl::OUString regpath(args.copy(i + 1));
- rtl::OUString regurl;
- if (osl::FileBase::getFileURLFromSystemPath(regpath, regurl) !=
- osl::FileBase::E_None)
- std::abort();
-
- css::uno::Reference< css::beans::XPropertySet > factory(
- cppu::createRegistryServiceFactory(rdb), css::uno::UNO_QUERY_THROW);
- css::uno::Reference< css::uno::XComponentContext > context(
- factory->getPropertyValue(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext"))),
- css::uno::UNO_QUERY_THROW);
- cppu::ContextEntry_Init entry(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "/modules/com.sun.star.configuration/bootstrap/Strata")),
- css::uno::makeAny(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LocalStratum:"))
- + regurl));
- mxContext = cppu::createComponentContext(&entry, 1, context);
-
- CPPUNIT_ASSERT_MESSAGE ("component context is valid", mxContext.is());
-
- try {
- mxProvider = css::uno::Reference< css::lang::XMultiServiceFactory >(
- (css::uno::Reference< css::lang::XMultiComponentFactory >(
- mxContext->getServiceManager(), css::uno::UNO_QUERY_THROW)->
- createInstanceWithContext(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.configuration.ConfigurationProvider")),
- mxContext)),
- css::uno::UNO_QUERY_THROW);
-
- } catch (css::uno::Exception&e) {
- CPPUNIT_FAIL( "exception creating provider" );
- throw;
- }
-}
-
-css::uno::Reference< css::uno::XInterface >
-Test::createView(const sal_Char *pNodepath, bool bUpdate)
-{
- rtl::OUString aNodePath = rtl::OUString::createFromAscii(pNodepath);
- static const rtl::OUString kInfoViewService(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationAccess")) ;
- static const rtl::OUString kUpdateViewService(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationUpdateAccess")) ;
- static const rtl::OUString kNodepath(RTL_CONSTASCII_USTRINGPARAM("nodepath")) ;
- static const rtl::OUString kAsync(RTL_CONSTASCII_USTRINGPARAM("EnableAsync")) ;
-
- const rtl::OUString & kViewService = bUpdate ? kUpdateViewService : kInfoViewService;
- css::uno::Sequence< css::uno::Any > aViewArgs(2);
- aViewArgs[0] <<= css::beans::NamedValue( kNodepath, css::uno::makeAny(aNodePath) );
- aViewArgs[1] <<= css::beans::NamedValue( kAsync, css::uno::makeAny(sal_False) );
-
- css::uno::Reference< css::uno::XInterface > xView(
- mxProvider->createInstanceWithArguments( kViewService, aViewArgs ) );
- return xView;
-}
-
-void disposeComponent (const css::uno::Reference<css::uno::XInterface> &xComp)
-{
- css::uno::Reference< css::lang::XComponent >(
- xComp, css::uno::UNO_QUERY_THROW)->dispose();
-}
-
-void Test::tearDown()
-{
- disposeComponent (mxProvider);
- disposeComponent (mxContext);
-
- delete mpMagic;
-}
-
-void Test::normalizePathKey (rtl::OString &rPath, rtl::OString &rKey)
-{
- sal_Int32 idx = rKey.lastIndexOf("/");
- if (idx > 0) {
- rPath += "/";
- rPath += rKey.copy (0, idx);
- rKey = rKey.copy (idx + 1);
-// t_print ("write to '%s' '%s'\n", (const sal_Char *)rPath,
-// (const sal_Char *)rKey);
- }
-}
-
-css::uno::Any Test::getKey (const sal_Char *pPath, rtl::OUString aName)
-{
- css::uno::Reference< css::container::XHierarchicalNameAccess > xNameAccess(
- createView(pPath, false), css::uno::UNO_QUERY_THROW);
- css::uno::Any aVal;
- aVal = xNameAccess->getByHierarchicalName (aName);
- disposeComponent (xNameAccess);
- return aVal;
-}
-
-void Test::setKey (const sal_Char *pPath, rtl::OUString aName, css::uno::Any a)
-{
- css::uno::Reference< css::util::XChangesBatch > xAppView;
-
- xAppView = css::uno::Reference< css::util::XChangesBatch > (
- createView(pPath, true), css::uno::UNO_QUERY_THROW );
- css::uno::Reference< css::container::XNameReplace > xSettings(xAppView, css::uno::UNO_QUERY_THROW);
- rtl::OUString aStr;
-
- // set key
- xSettings->replaceByName(aName, a);
- xAppView->commitChanges();
-
- disposeComponent(xAppView);
-}
-
-void Test::resetKey (const sal_Char *pPath, rtl::OUString aName)
-{
- css::uno::Reference< css::util::XChangesBatch > xAppView;
-
- // reset to default
- xAppView = css::uno::Reference< css::util::XChangesBatch > ( createView(pPath, true), css::uno::UNO_QUERY_THROW );
- css::uno::Reference< css::container::XNameReplace > xSettings(xAppView, css::uno::UNO_QUERY_THROW);
-
- css::uno::Reference< css::beans::XPropertyState > xSettingsState(xSettings, css::uno::UNO_QUERY);
- xSettingsState->setPropertyToDefault(aName);
- xAppView->commitChanges();
-
- disposeComponent(xAppView);
-}
-
-void Test::keyFetch()
-{
- try {
- rtl::OUString aStr;
- if (!(getKey ("/org.openoffice.Setup", "L10N/ooLocale") >>= aStr))
- CPPUNIT_FAIL("to fetch key");
- if (!(getKey ("/org.openoffice.Setup", "Test/AString") >>= aStr))
- CPPUNIT_FAIL("to fetch key");
- } CATCH_FAIL ("fetching key")
-}
-
-void Test::keySet()
-{
- try {
- setKey ("/org.openoffice.Setup/Test",
- rtl::OUString::createFromAscii("AString"),
- css::uno::makeAny (rtl::OUString::createFromAscii("baa")));
-
- // check value
- rtl::OUString aStr;
- if (!(getKey ("/org.openoffice.Setup/Test", "AString") >>= aStr))
- CPPUNIT_FAIL("to fetch key");
-
- CPPUNIT_ASSERT_MESSAGE ("check set value valid", aStr.equalsAscii("baa"));
- } CATCH_FAIL ("exception setting keys" )
-}
-
-void Test::keyReset()
-{
- try {
- resetKey ("/org.openoffice.Setup/Test",
- rtl::OUString::createFromAscii("AString"));
-
- // check value
- rtl::OUString aStr;
- if (!(getKey ("/org.openoffice.Setup/Test", "AString") >>= aStr))
- CPPUNIT_FAIL("to fetch key");
-
- CPPUNIT_ASSERT_MESSAGE ("check default value valid",
- aStr == rtl::OUString::createFromAscii("Foo"));
- } CATCH_FAIL ("exception setting keys" )
-}
-
-// This simulates the framework UI description code paths
-void Test::readCommands()
-{
- rtl::OUString aPropUILabel( RTL_CONSTASCII_USTRINGPARAM( "Label" ));
- rtl::OUString aPropUIContextLabel( RTL_CONSTASCII_USTRINGPARAM( "ContextLabel" ));
- rtl::OUString aPropProperties( RTL_CONSTASCII_USTRINGPARAM( "Properties" ));
-
- try {
- css::uno::Reference< css::container::XNameAccess > xNameAccess (
- createView("/org.openoffice.UI.GenericCommands/UserInterface/Commands", false),
- css::uno::UNO_QUERY_THROW);
-
- CPPUNIT_ASSERT_MESSAGE ("fetched UI generic commands", xNameAccess.is());
-
- css::uno::Any a;
- css::uno::Sequence< rtl::OUString > aNameSeq = xNameAccess->getElementNames();
-
- CPPUNIT_ASSERT_MESSAGE ("right element / sequence", aNameSeq.getLength() == 696);
- sal_uInt32 end, start = osl_getGlobalTimer();
- for ( sal_Int32 j = 0; j < 8; j++ )
- {
- for ( sal_Int32 i = 0; i < aNameSeq.getLength(); i++ )
- {
- try
- {
- {
- css::uno::Reference< css::container::XNameAccess > xChildNameAccess;
- // This is the slow bit ! ...
- // Creating the @#$@#$ing XNameAccess object [ 650 times ]
- // which we then use to 'getByName' etc.
- a = xNameAccess->getByName( aNameSeq[i] );
- if ( a >>= xChildNameAccess )
- {
- a = xChildNameAccess->getByName( aPropUILabel );
- a = xChildNameAccess->getByName( aPropUIContextLabel );
- a = xChildNameAccess->getByName( aPropProperties );
- }
- }
- } CATCH_FAIL( "fetching keys" );
- }
- }
- end = osl_getGlobalTimer();
- t_print ("Reading elements took %d ms\n", (int)(end-start));
- disposeComponent (xNameAccess);
- } CATCH_FAIL( "accessing commands" );
-}
-
-CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Test, "alltests");
-
-NOADDITIONAL;
diff --git a/configmgr/qa/unit/threading.cxx b/configmgr/qa/unit/threading.cxx
deleted file mode 100644
index 1531e9f49138..000000000000
--- a/configmgr/qa/unit/threading.cxx
+++ /dev/null
@@ -1,262 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: threading.cxx,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#include "common.hxx"
-#include <osl/thread.hxx>
-#include <osl/conditn.hxx>
-#include <cppuhelper/implbase1.hxx>
-#include "com/sun/star/beans/XPropertyChangeListener.hpp"
-
-class KeyTester : public osl::Thread
-{
- osl::Condition *m_pCond;
- protected:
- rtl::OString m_aPath;
- rtl::OString m_aKey;
- Test *m_pTest;
- public:
- KeyTester (osl::Condition *pCond, Test *pTest,
- const char *pPath, const char *pKey)
- : m_pCond (pCond)
- , m_aPath (pPath)
- , m_aKey (pKey)
- , m_pTest (pTest)
- {
- }
- virtual ~KeyTester ()
- {
- }
- virtual void run ()
- {
- testIteration();
- while (!m_pCond->check())
- testIteration();
- }
- virtual void testIteration()
- {
- css::uno::Any a = m_pTest->getKey (m_aPath, m_aKey);
- CPPUNIT_ASSERT_MESSAGE ("no value", a.hasValue());
- }
-};
-
-class KeyReader : public KeyTester
-{
-public:
- KeyReader (osl::Condition *pCond, Test *pTest,
- const char *pPath, const char *pKey)
- : KeyTester (pCond, pTest, pPath, pKey)
- {
- // to ensure we have the right vtable when we hit 'run'
- create();
- }
-};
-
-class KeyWriter : public KeyTester
-{
- int curOpt;
- public:
- KeyWriter (osl::Condition *pCond, Test *pTest,
- const char *pPath, const char *pKey)
- : KeyTester (pCond, pTest, pPath, pKey)
- , curOpt(0)
- {
- m_pTest->normalizePathKey (m_aPath, m_aKey);
- create();
- }
- virtual void testIteration ()
- {
- try {
- static const char *options[] = { "fish", "chips", "kippers", "bloaters" };
-// fprintf (stderr, "set key %d\n",
-// (int) osl_getThreadIdentifier(NULL));
- m_pTest->setKey (m_aPath, rtl::OUString::createFromAscii (m_aKey),
- css::uno::makeAny (rtl::OUString::createFromAscii(options[(curOpt++ & 3)])));
- } CATCH_FAIL ("setting keys")
- }
-};
-
-void Test::threadTests()
-{
- osl::Condition stop;
- stop.reset();
-
- struct {
- const char *pPath;
- const char *pKey;
- } keyList[] = {
- { "/org.openoffice.Setup", "Test/AString" },
- { "/org.openoffice.Setup", "Test/AString" },
- { "/org.openoffice.UI.GenericCommands", "UserInterface/Commands/dotuno:WebHtml/Label" },
- { "/org.openoffice.UI.GenericCommands", "UserInterface/Commands/dotuno:NewPresentation/Label" },
- { "/org.openoffice.UI.GenericCommands", "UserInterface/Commands/dotuno:RecentFileList/Label" },
-
- { "/org.openoffice.Setup", "L10N/ooLocale" },
- { "/org.openoffice.Setup", "Test/ABoolean" }
- };
- const int numReaders = sizeof (keyList) / sizeof (keyList[0]);
- const int numWriters = (sizeof (keyList) / sizeof (keyList[0])) - 2;
- KeyReader *pReaders[numReaders];
- KeyWriter *pWriters[numReaders];
-
- int i;
- try {
- for (i = 0; i < numReaders; i++) {
- css::uno::Any a = getKey (keyList[i].pPath, keyList[i].pKey);
- CPPUNIT_ASSERT_MESSAGE ("check key", a.hasValue());
- }
-
- // a few readers
- for (i = 0; i < numReaders; i++)
- pReaders[i] = new KeyReader (&stop, this, keyList[i].pPath,
- keyList[i].pKey);
- // a few writers
- for (i = 0; i < numWriters; i++)
- pWriters[i] = new KeyWriter (&stop, this, keyList[i].pPath,
- keyList[i].pKey);
-
- // Threads are running ...
- const int numIters = 5;
- for (int j = 0; j < numIters; j++) {
- for (i = 0; i < numReaders; i++)
- {
- try {
- rtl::OString aPath (keyList[i].pPath);
- rtl::OString aKey (keyList[i].pKey);
- normalizePathKey (aPath, aKey);
- resetKey (aPath, rtl::OUString::createFromAscii (aKey));
- osl::Thread::yield();
- } CATCH_FAIL ("resetting keys");
- }
- }
- stop.set();
-
- for (i = 0; i < numReaders; i++) {
- pReaders[i]->join();
- delete pReaders[i];
- }
- for (i = 0; i < numWriters; i++) {
- pWriters[i]->join();
- delete pWriters[i];
- }
-
- } CATCH_FAIL ("checking keys exist")
-}
-
-class RecursiveListener : public cppu::WeakImplHelper1< css::beans::XPropertyChangeListener >
-{
-public:
- sal_Int32 m_nRecurse;
- css::uno::Reference< css::beans::XPropertySet > mxPropSet;
- protected:
- Test *m_pTest;
- rtl::OString m_pPath;
- rtl::OString m_pKey;
- public:
- RecursiveListener (Test *pTest, int nCount,
- const char *pPath, const char *pKey)
- : m_nRecurse (nCount)
- , m_pTest (pTest)
- , m_pPath (pPath)
- , m_pKey (pKey)
- {
- mxPropSet = css::uno::Reference< css::beans::XPropertySet > (
- pTest->createView (pPath, true), css::uno::UNO_QUERY_THROW );
-
- CPPUNIT_ASSERT_MESSAGE ("is prop set", mxPropSet.is());
- mxPropSet->addPropertyChangeListener (rtl::OUString::createFromAscii (m_pKey),
- css::uno::Reference<css::beans::XPropertyChangeListener>(this));
- }
- virtual ~RecursiveListener()
- {
- disposeComponent (mxPropSet);
- }
-
- virtual void SAL_CALL acquire() throw() { cppu::WeakImplHelper1< css::beans::XPropertyChangeListener >::acquire(); }
- virtual void SAL_CALL release() throw() { cppu::WeakImplHelper1< css::beans::XPropertyChangeListener >::acquire(); }
- // XPropertyChangeListener
- virtual void SAL_CALL propertyChange( const ::css::beans::PropertyChangeEvent& ) throw (::css::uno::RuntimeException)
- {
- if (m_nRecurse-- > 0)
- runTest();
- }
- // XEventListener
- virtual void SAL_CALL disposing( const ::css::lang::EventObject& ) throw (::css::uno::RuntimeException)
- {
- }
- virtual void runTest()
- {
- m_pTest->setKey (m_pPath, rtl::OUString::createFromAscii (m_pKey),
- css::uno::makeAny(
- rtl::OUString::valueOf (m_nRecurse) ) );
- }
-};
-
-class CrossThreadListener : public RecursiveListener
-{
- public:
- CrossThreadListener (Test *pTest, int nCount,
- const char *pPath, const char *pKey)
- : RecursiveListener (pTest, nCount, pPath, pKey)
- {
- }
- virtual ~CrossThreadListener()
- {
- }
- virtual void runTest()
- {
- osl::Condition stopAfterOne;
- stopAfterOne.set();
- KeyWriter aWriter (&stopAfterOne, m_pTest, m_pPath, m_pKey);
- aWriter.join();
-
- rtl::OString aPath (m_pPath), aKey (m_pKey);
- m_pTest->normalizePathKey (aPath, aKey);
- m_pTest->resetKey (aPath, rtl::OUString::createFromAscii (aKey));
- }
-};
-
-void Test::recursiveTests()
-{
- RecursiveListener *pList = new RecursiveListener(this, 100,
- "/org.openoffice.UI.GenericCommands/UserInterface/Commands/dotuno:WebHtml",
- "Label");
- css::uno::Reference< css::beans::XPropertyChangeListener > xListener(pList);
- pList->runTest();
-}
-
-void Test::eventTests()
-{
- CrossThreadListener *pList = new CrossThreadListener(this, 10,
- "/org.openoffice.UI.GenericCommands/UserInterface/Commands/dotuno:WebHtml",
- "Label");
- css::uno::Reference< css::beans::XPropertyChangeListener > xListener(pList);
- pList->runTest();
-}
-
diff --git a/configmgr2/inc/configmgr/detail/configmgrdllapi.hxx b/configmgr2/inc/configmgr/detail/configmgrdllapi.hxx
new file mode 100644
index 000000000000..1a72e8a08690
--- /dev/null
+++ b/configmgr2/inc/configmgr/detail/configmgrdllapi.hxx
@@ -0,0 +1,43 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_DETAIL_CONFIGMGRDLLAPI_HXX
+#define INCLUDED_CONFIGMGR_DETAIL_CONFIGMGRDLLAPI_HXX
+
+#include "sal/config.h"
+
+#include "sal/types.h"
+
+#if defined OOO_DLLIMPLEMENTATION_CONFIGMGR
+#define OOO_DLLPUBLIC_CONFIGMGR SAL_DLLPUBLIC_EXPORT
+#else
+#define OOO_DLLPUBLIC_CONFIGMGR SAL_DLLPUBLIC_IMPORT
+#endif
+
+#endif
diff --git a/configmgr2/inc/configmgr/update.hxx b/configmgr2/inc/configmgr/update.hxx
new file mode 100644
index 000000000000..2983ae819475
--- /dev/null
+++ b/configmgr2/inc/configmgr/update.hxx
@@ -0,0 +1,53 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_UPDATE_HXX
+#define INCLUDED_CONFIGMGR_UPDATE_HXX
+
+#include "sal/config.h"
+
+#include "configmgr/detail/configmgrdllapi.hxx"
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+namespace update {
+
+OOO_DLLPUBLIC_CONFIGMGR void insertXcsFile(
+ int layer, rtl::OUString const & fileUri);
+
+OOO_DLLPUBLIC_CONFIGMGR void insertXcuFile(
+ int layer, rtl::OUString const & fileUri);
+
+}
+
+}
+
+#endif
diff --git a/configmgr2/inc/makefile.mk b/configmgr2/inc/makefile.mk
new file mode 100644
index 000000000000..5ade6c235f14
--- /dev/null
+++ b/configmgr2/inc/makefile.mk
@@ -0,0 +1,42 @@
+#*************************************************************************
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2009 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile,v $
+#
+# $Revision: 1.4 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#***********************************************************************/
+
+PRJ = ..
+PRJNAME = configmgr
+TARGET = inc
+
+ENABLE_EXCEPTIONS = TRUE
+VISIBILITY_HIDDEN = TRUE
+
+.INCLUDE: settings.mk
+.INCLUDE: target.mk
+
+.IF "$(ENABLE_PCH)" != ""
+ALLTAR: $(SLO)/precompiled.pch $(SLO)/precompiled_ex.pch
+.ENDIF
diff --git a/configmgr2/inc/pch/precompiled_configmgr.cxx b/configmgr2/inc/pch/precompiled_configmgr.cxx
new file mode 100644
index 000000000000..edc693d742f7
--- /dev/null
+++ b/configmgr2/inc/pch/precompiled_configmgr.cxx
@@ -0,0 +1,30 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
diff --git a/configmgr2/inc/pch/precompiled_configmgr.hxx b/configmgr2/inc/pch/precompiled_configmgr.hxx
new file mode 100644
index 000000000000..c56afda783a9
--- /dev/null
+++ b/configmgr2/inc/pch/precompiled_configmgr.hxx
@@ -0,0 +1,34 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#if defined PRECOMPILED_HEADERS
+
+#include "sal/config.h"
+
+#endif
diff --git a/configmgr2/prj/build.lst b/configmgr2/prj/build.lst
new file mode 100644
index 000000000000..2fd4e03fa442
--- /dev/null
+++ b/configmgr2/prj/build.lst
@@ -0,0 +1,3 @@
+cg configmgr : BOOST:boost comphelper cppu cppuhelper offuh sal salhelper stlport NULL
+cg configmgr\inc nmake - all cg_inc NULL
+cg configmgr\source nmake - all cg_source cg_inc NULL
diff --git a/configmgr2/prj/d.lst b/configmgr2/prj/d.lst
new file mode 100644
index 000000000000..a9d91980b213
--- /dev/null
+++ b/configmgr2/prj/d.lst
@@ -0,0 +1,8 @@
+mkdir: %_DEST%\inc%_EXT%\configmgr
+mkdir: %_DEST%\inc%_EXT%\configmgr\detail
+..\%__SRC%\bin\configmgr.dll %_DEST%\bin%_EXT%\configmgr.dll
+..\%__SRC%\lib\iconfigmgr.lib %_DEST%\lib%_EXT%\iconfigmgr.lib
+..\%__SRC%\lib\libconfigmgr.dylib %_DEST%\lib%_EXT%\libconfigmgr.dylib
+..\%__SRC%\lib\libconfigmgr.so %_DEST%\lib%_EXT%\libconfigmgr.so
+..\inc\configmgr\detail\configmgrdllapi.hxx %_DEST%\inc%_EXT%\configmgr\detail\configmgrdllapi.hxx
+..\inc\configmgr\update.hxx %_DEST%\inc%_EXT%\configmgr\update.hxx
diff --git a/configmgr2/qa/unit/data.xcd b/configmgr2/qa/unit/data.xcd
new file mode 100644
index 000000000000..31dc5a8f2f01
--- /dev/null
+++ b/configmgr2/qa/unit/data.xcd
@@ -0,0 +1,5192 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+**********************************************************************-->
+<oor:data xmlns:oor="http://openoffice.org/2001/registry">
+
+<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="Setup" oor:package="org.openoffice" xml:lang="en-US">
+ <info>
+ <author>mmeeks</author>
+ <desc >Setup prefs (for configmgr) and unit test schema bits.</desc>
+ </info>
+ <component>
+ <group oor:name="L10N">
+ <info>
+ <author>PB</author>
+ <desc>Specifies the installation locales.</desc>
+ </info>
+ <prop oor:name="ooLocale" oor:type="xs:string">
+ <info>
+ <author>PB</author>
+ <desc>Indicates the Office language selected by the user.</desc>
+ <label>Locale</label>
+ </info>
+ <value/>
+ </prop>
+ </group>
+ <group oor:name="Test">
+ <info>
+ <author>mmeeks</author>
+ <desc>Misc test pieces</desc>
+ </info>
+ <prop oor:name="ABoolean" oor:type="xs:boolean">
+ <info>
+ <author>mmeeks</author>
+ <desc>A boolean</desc>
+ <label>Boolean</label>
+ </info>
+ <value>false</value>
+ </prop>
+ <prop oor:name="AString" oor:type="xs:string">
+ <info>
+ <author>mmeeks</author>
+ <desc>A string</desc>
+ <label>String</label>
+ </info>
+ <value>Foo</value>
+ </prop>
+ </group>
+ </component>
+</oor:component-schema>
+
+<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="Commands" oor:package="org.openoffice.UI" xml:lang="en-US"> <info>
+ <author>CD</author>
+ <desc >Contains general information about ~ and rules, and about actions based on office commands.</desc>
+ </info>
+ <templates>
+ <group oor:name="LabelType">
+ <info>
+ <desc>Provides a mapping between commands and their textual representation on the user interface.</desc>
+ </info>
+ <prop oor:name="Label" oor:type="xs:string" oor:localized="true">
+ <info>
+ <desc>A localized text that describes the command or identifier. Can be used as a label inside a menu or as short tool tip help.</desc>
+ </info>
+ </prop>
+ <prop oor:name="ContextLabel" oor:type="xs:string" oor:localized="true">
+ <info>
+ <desc>A localized text that describes the identifier of a command in a structured menu. </desc>
+ </info>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <info>
+ <desc>
+ Additional information about a single command.
+ Bit 0 = Command has an image.
+ Bit 1 = Image must be mirrored (CTL/vertical text).
+ Bit 2 = Image must be rotated (CTL/vertical text).
+ </desc>
+ </info>
+ <value>0</value>
+ </prop>
+ </group>
+ </templates>
+ <component/>
+</oor:component-schema>
+
+<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="GenericCommands" oor:package="org.openoffice.UI" xml:lang="en-US">
+ <info>
+ <author>CD</author>
+ <desc >Contains general information about ~ and rules, and about actions based on office commands.</desc>
+ </info>
+ <import oor:component="org.openoffice.UI.Commands"/>
+ <uses oor:component="org.openoffice.UI.Commands"/>
+ <templates/>
+ <component>
+ <group oor:name="UserInterface">
+ <info>
+ <desc>Contains user interface data for Office commands and identifiers that are used by the user interface."</desc>
+ </info>
+ <set oor:name="Commands" oor:node-type="LabelType" oor:component="org.openoffice.UI.Commands">
+ <info>
+ <desc>Contains label text for Office commands and identifiers that are used by the user interface."</desc>
+ </info>
+ </set>
+ </group>
+ </component>
+</oor:component-schema>
+
+<oor:component-data oor:name="Setup" oor:package="org.openoffice" xmlns:oor="http://openoffice.org/2001/registry" xmlns:install="http://openoffice.org/2004/installation" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <node oor:name="L10N">
+ <prop oor:name="ooLocale" oor:type="xs:string">
+ <value>en-US</value>
+ </prop>
+ </node>
+ <node oor:name="Test">
+ <prop oor:name="ABoolean" oor:type="xs:boolean">
+ <value>true</value>
+ </prop>
+ <prop oor:name="AString" oor:type="xs:string">
+ <value>Foo</value>
+ </prop>
+ </node>
+</oor:component-data>
+
+<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="GenericCommands" oor:package="org.openoffice.UI">
+ <node oor:name="UserInterface">
+ <node oor:name="Commands">
+ <node oor:name="dotuno:WebHtml" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Preview in Web Browser</value>
+ </prop>
+ </node>
+ <node oor:name="dotuno:NewPresentation" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">New Presentation</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkGalleryFloater" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fontwork Gallery</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fontwork Shape</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkSameLetterHeights" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fontwork Same Letter Heights</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkAlignmentFloater" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fontwork Alignment</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkCharacterSpacingFloater" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fontwork Character Spacing</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Basic Shapes</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Symbol Shapes</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Block Arrows</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowcharts</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CalloutShapes" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Callouts</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Stars</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.rectangle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Rectangle</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.round-rectangle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Rectangle, Rounded</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.quadrat" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Square</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.round-quadrat" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Square, Rounded</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.circle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.ellipse" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Ellipse</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.circle-pie" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle Pie</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.isosceles-triangle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Isosceles Triangle</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.right-triangle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Right Triangle</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.trapezoid" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Trapezoid</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.diamond" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Diamond</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.parallelogram" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Parallelogram</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.pentagon" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Regular Pentagon</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.hexagon" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Hexagon</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.octagon" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Octagon</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.cross" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Cross</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.ring" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Ring</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.block-arc" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Block Arc</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.can" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Cylinder</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.cube" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Cube</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.paper" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Folded Corner</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicShapes.frame" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Frame</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.smiley" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Smiley Face</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.sun" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Sun</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.moon" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Moon</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.lightning" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Lightning Bolt</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.heart" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Heart</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.flower" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flower</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.cloud" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Cloud</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.forbidden" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">"Prohibited" Symbol</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.puzzle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Puzzle</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.bracket-pair" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Double Bracket</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.left-bracket" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Left Bracket</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.right-bracket" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Right Bracket</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.brace-pair" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Double Brace</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.left-brace" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Left Brace</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.right-brace" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Right Brace</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.quad-bevel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Square Bevel</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.octagon-bevel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Octagon Bevel</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SymbolShapes.diamond-bevel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Diamond Bevel</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.left-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Left Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.right-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Right Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.up-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Up Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.down-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Down Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.left-right-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Left and Right Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.up-down-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Up and Down Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.up-right-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Up and Right Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.up-right-down-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Up, Right and Down Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.quad-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">4-way Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.corner-right-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Corner Right Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.split-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Split Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.striped-right-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Striped Right Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.notched-right-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Notched Right Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.pentagon-right" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Pentagon</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.chevron" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Chevron</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.right-arrow-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Right Arrow Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.left-arrow-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Left Arrow Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.up-arrow-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Up Arrow Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.down-arrow-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Down Arrow Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.left-right-arrow-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Left and Right Arrow Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.up-down-arrow-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Up and Down Arrow Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.up-right-arrow-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Up and Right Arrow Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.quad-arrow-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">4-way Arrow Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.circular-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circular Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.split-round-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Right or Left Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ArrowShapes.s-sharped-arrow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">S-shaped Arrow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-process" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Process</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-alternate-process" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Alternate Process</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-decision" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Decision</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-data" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Data</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-predefined-process" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Predefined Process</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-internal-storage" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Internal Storage</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-document" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Document</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-multidocument" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Multidocument</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-terminator" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Terminator</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-preparation" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Preparation</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-manual-input" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Manual Input</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-manual-operation" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Manual Operation</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-connector" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Connector</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-off-page-connector" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Off-page Connector</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-card" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Card</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-punched-tape" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Punched Tape</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-summing-junction" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Summing Junction</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-or" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Or</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-collate" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Collate</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-sort" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Sort</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-extract" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Extract</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-merge" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Merge</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-stored-data" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Stored Data</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-delay" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Delay</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-sequential-access" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Sequential Access</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-magnetic-disk" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Magnetic Disc</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-direct-access-storage" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Direct Access Storage</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FlowChartShapes.flowchart-display" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flowchart: Display</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CalloutShapes.rectangular-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Rectangular Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CalloutShapes.round-rectangular-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Rounded Rectangular Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CalloutShapes.round-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Round Callout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CalloutShapes.cloud-callout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Cloud</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CalloutShapes.line-callout-1" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Callout 1</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CalloutShapes.line-callout-2" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Callout 2</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CalloutShapes.line-callout-3" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Callout 3</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.bang" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Explosion</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.star4" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">4-Point Star</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.star5" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">5-Point Star</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.star6" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">6-Point Star</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.star8" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">8-Point Star</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.star12" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">12-Point Star</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.star24" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">24-Point Star</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.concave-star6" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">6-Point Star, concave</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.vertical-scroll" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Vertical Scroll</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.horizontal-scroll" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Horizontal Scroll</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.signet" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Signet</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StarShapes.doorplate" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Doorplate</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-plain-text" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Plain Text</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-wave" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Wave</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-inflate" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Inflate</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-stop" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Stop</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-curve-up" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Curve Up</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-curve-down" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Curve Down</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-triangle-up" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Triangle Up</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-triangle-down" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Triangle Down</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-fade-right" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fade Right</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-fade-left" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fade Left</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-fade-up" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fade Up</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-fade-down" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fade Down</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-slant-up" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Slant Up</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-slant-down" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Slant Down</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-fade-up-and-right" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fade Up and Right</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-fade-up-and-left" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fade Up and Left</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-chevron-up" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Chevron Up</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-chevron-down" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Chevron Down</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-arch-up-curve" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Arch Up (Curve)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-arch-down-curve" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Arch Down (Curve)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-arch-left-curve" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Arch Left (Curve)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-arch-right-curve" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Arch Right (Curve)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-circle-curve" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle (Curve)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-open-circle-curve" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Open Circle (Curve)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-arch-up-pour" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Arch Up (Pour)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-arch-down-pour" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Arch Down (Pour)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-arch-left-pour" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Arch Left (Pour)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-arch-right-pour" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Arch Right (Pour)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-circle-pour" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle (Pour)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontworkShapeType.fontwork-open-circle-pour" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Open Circle (Pour)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:UndoAction" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Can't Undo</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrabControlFocus" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Control Focus</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ScrollBar" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Scrollbar</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Zoom" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Zoom...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SpinButton" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Spin Button</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToScrollBar" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Scrollbar</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToSpinButton" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Spin Button</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToNavigationBar" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Navigation Bar</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ToggleBreakPoint" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Breakpoint On/Off</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Text" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Text</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:LaunchStarImage" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Start Image Editor</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AddWatch" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Enable Watch</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CharFontName" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Font Name</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ChooseMacro" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select Macro</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Italic" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Italic</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Bold" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Bold</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ModuleDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select Module</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Shadowed" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Shadow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ObjectCatalog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Object Catalog</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineFont" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Outline</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Strikeout" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Strikethrough</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HelpOnHelp" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Help on Help</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Underline" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Underline</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HelpIndex" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">%PRODUCTNAME ~Help</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontHeight" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Font Size</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtendedHelp" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">What's ~This?</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ActiveHelp" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Extended Tips</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Color" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Font Color</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HelpTip" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Tips</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:MatchGroup" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Find Parenthesis</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicIDEAppear" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Edit Macros</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:LibSelector" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Current Library</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:LeftPara" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Align Left</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>3</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RightPara" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Align Right</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>3</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CenterPara" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Centered</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>3</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SendFax" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Send Default Fax</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:JustifyPara" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Justified</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>7</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HelpChooseFile" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Choose Help File</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SpacePara1" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Spacing: 1</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>7</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SpacePara15" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Spacing : 1.5</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>7</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SpacePara2" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Spacing : 2</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>7</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StatusGetPosition" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Position</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StatusGetTitle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Current Basic Module</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ManageBreakPoints" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Manage Breakpoints</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TransformDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Position and Si~ze...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrafLuminance" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Brightness</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrafContrast" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Contrast</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ZoomToolBox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Zoom</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrafRed" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Red</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ZoomPlus" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Zoom In</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrafGreen" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Green</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ZoomIn" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Zoom Out</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ZoomMinus" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Zoom Out</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrafBlue" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Blue</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OptionsTreeDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Options...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Zoom100Percent" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Zoom 100%</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrafGamma" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Gamma</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ZoomPage" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Zoom Page</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrafTransparence" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Transparency</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ZoomOptimal" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Optimal</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrafInvert" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Invert</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Line" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrafMode" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Graphics mode</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Line_Diagonal" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line (45°)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Rect" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Rectangle</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Rect_Rounded" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Rectangle, Rounded</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Ellipse" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Ellipse</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BibliographyComponent" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Bibliography Database</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Pie" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Ellipse Pie</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierEliminatePoints" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Eliminate Points</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DatasourceAdministration" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Data Sources...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GrafAttrCrop" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Crop</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:NewDoc" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">New Document From Template</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Arc" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Arc</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Open" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Open...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CircleCut" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle Segment</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SaveAs" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Save ~As...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CloseDoc" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Close</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Print" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Print...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierFill" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Curve, Filled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Save" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Save</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierInsert" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Insert Points</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierDelete" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Delete Points</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierMove" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Move Points</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Reload" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Reload</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierClose" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Close Bézier</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:PrintDefault" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Print File Directly</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierSmooth" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Smooth Transition</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ToggleObjectBezierMode" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Poi~nts</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertAnnotation" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Not~e</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierCutLine" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Split Curve</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SelectObject" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ToggleObjectRotateMode" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Rotate</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ObjectAlignLeft" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Left</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AlignCenter" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Centered</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ObjectAlignRight" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Right</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AlignUp" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Top</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AlignMiddle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">C~enter</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AlignDown" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Bottom</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:VerticalText" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Vertical Text</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:VerticalCaption" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Vertical Callouts</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TextdirectionLeftToRight" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Text direction from left to right</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TextdirectionTopToBottom" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Text direction from top to bottom</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertObjectChart" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Chart...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DefaultBullet" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Bullets On/Off</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>7</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormatArea" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">A~rea...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormatLine" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">L~ine...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ChangeCaseToUpper" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Uppercase</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ChooseControls" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Insert Controls</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ChangeCaseToLower" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Lowercase</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ChangeCaseToHalfWidth" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">H~alf-width</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertDoc" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~File...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertPushbutton" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Button</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ChangeCaseToFullWidth" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Full-width</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DefaultNumbering" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Numbering On/Off</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>7</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierConvert" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Convert to Curve</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Stop" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Stop Loading</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Radiobutton" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Option Button</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ChangeCaseToHiragana" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Hiragana</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierEdge" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Corner Point</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Checkbox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Check Box</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ChangeCaseToKatakana" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Katakana</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SetDocumentProperties" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Propert~ies...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BezierSymmetric" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Symmetric Transition</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineUp" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Move Up</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AddDirect" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~New</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineDown" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Move Down</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SaveAsTemplate" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Save...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineLeft" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Promote</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DesignerDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">St~yles and Formatting</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineRight" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Demote</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Organizer" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Organize...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineFormat" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Formatting On/Off</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineCollapseAll" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">First Level</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineBullet" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Bullets and Numbering...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>7</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:EditDoc" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Edit File</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertImageControl" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Image Control</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BrowseView" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Web Layout</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ProgressBar" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Progress Bar</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:PlugInsActive" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">P~lug-in</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HFixedLine" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Horizontal Line</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FileDocument" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">File Document</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:VFixedLine" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Vertical Line</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ChoosePolygon" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Symbol Selection</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ShowBrowser" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Display Properties</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FillStyle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Area Style / Filling</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoPilotAddressDataSource" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">AutoPilot: Address Data Source</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FillColor" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fill Color</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StyleApply" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Apply Style</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AddDateField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Date Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertTimeField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Time Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StyleNewByExample" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">New Style from Selection</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:XLineStyle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Style</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertNumericField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Numeric Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StyleUpdateByExample" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Update Style</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:LineDash" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Dash/Dot</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertCurrencyField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Currency Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:LineWidth" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Width</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertFormattedField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Formatted Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:XLineColor" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Color</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertPatternField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Pattern Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertFileControl" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">File Selection</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertTreeControl" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Tree Control</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ShowPropBrowser" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Properties</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertObject" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~OLE Object...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertObjectFloatingFrame" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Float~ing Frame</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:EnterGroup" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Enter Group</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:LeaveGroup" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">E~xit group</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HideDetail" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Hide Details</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ZoomPageWidth" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Zoom Page Width</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ShowDetail" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Show Details</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ZoomObjects" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Object Zoom</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ParaLeftToRight" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Left-To-Right</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>3</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Group" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Group...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ParaRightToLeft" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Right-To-Left</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>3</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Ungroup" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Ungroup...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BackgroundColor" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Background Color</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BackgroundPatternController" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Background Pattern</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OpenHyperlinkOnCursor" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Open Hyperlink</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OpenSmartTagMenuOnCursor" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Open Smart Tag Menu</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StyleCatalog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Catalog...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertImage" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Insert from Image Editor</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SetBorderStyle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Borders</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertMath" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Formula...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertFixedText" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Label field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ObjectMenue" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Ob~ject</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Groupbox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Group Box</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OpenXMLFilterSettings" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~XML Filter Settings...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertEdit" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Text Box</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HangulHanjaConversion" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Hangul/Hanja Conversion...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ChineseConversion" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Chinese translation...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertListbox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">List Box</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Combobox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Combo Box</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Spinbutton" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Spin Button</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HScrollbar" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Horizontal Scroll Bar</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:VScrollbar" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Vertical Scroll Bar</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Preview" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Preview</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:URLButton" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">URL Button</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ModifiedStatus" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Document Modified</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SelectMode" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:IsLoading" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Load Document</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TestMode" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Test Mode On/Off</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:LineStyle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Style</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FrameLineColor" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Line Color (of the border)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OpenTemplate" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Edit...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OpenUrl" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Load URL</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertSpreadsheet" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Sp~readsheet</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertMode" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Insert Mode</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Size" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Size</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StateTableCell" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Cell</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoPilotMenu" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Wizards</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineCollapse" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Hide Subpoints</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineExpandAll" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">All Levels</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OutlineExpand" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Show Subpoints</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:NewWindow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~New Window</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ClearOutline" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Remove</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HelplinesMove" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Guides When Moving</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CloseWin" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Close Window</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GridUse" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Snap to Grid</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertTextFrame" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Insert Text Frame</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FullScreen" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">F~ull Screen</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertGraphic" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~From File...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoFormat" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Auto~Format...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SpellDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Spellcheck...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertDraw" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Show Draw Functions</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:NewFrameSet" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">New FrameSet</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Thesaurus" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Thesaurus...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DrawText" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Text</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DrawCaption" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Callouts</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontWork" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">F~ontwork</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SaveAsUrl" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Save Document As URL</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ObjectForwardOne" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Forward One</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ObjectBackOne" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Back One</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:EditFrameSet" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Edit FrameSet</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SplitHorizontal" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Split Frame Horizontally</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SplitVertical" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Split Frame Vertically</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SplitParentHorizontal" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Split FrameSet Horizontally</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SplitParentVertical" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Split FrameSet Vertically</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ModifyFrame" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Frame Properties</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DeleteFrame" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Delete Frame</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SetObjectToBackground" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">To Background</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SetObjectToForeground" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">To Foreground</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertLabels" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Insert Labels</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertBusinessCard" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Insert business cards</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertPlugin" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Plug-in...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BringToFront" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Bring to Front</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertApplet" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Applet...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SendToBack" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Send to Back</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SourceView" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">HT~ML Source</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertSound" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Sound...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertVideo" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Video...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HyperlinkDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Hyperlink</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Merge" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Merge</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Substract" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Subtract</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SuperScript" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Superscript</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Intersect" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">I~ntersect</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SubScript" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Subscript</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FontDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">C~haracter...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DistributeSelection" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Distribution...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ParagraphDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">P~aragraph...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FillShadow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Shadow</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:LineEndStyle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Arrow Style</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Redo" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Can't Restore</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Undo" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Can't Undo</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormatPaintbrush" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Format Paintbrush</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Repeat" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Repeat</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ClearHistory" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Delete History</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Cut" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Cu~t</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Copy" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Copy</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Paste" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Paste</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Delete" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Delete C~ontents...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TwainSelect" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Select Source...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TwainTransfer" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Request...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Select" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select ~All</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ContourDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Edit Contour...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SelectAll" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select ~All</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoDown" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Move Down</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoUp" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Move Up</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoLeft" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Move Left</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoRight" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Move Right</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoDownBlock" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Page Down</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoUpBlock" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Page Up</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BmpMask" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Eyedropper</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoLeftBlock" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Page Left</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FrameSpacing" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">FrameSet Spacing</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoToEndOfData" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">To File End</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoToStart" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">To File Begin</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoToStartOfRow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">To Document Begin</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertHyperlink" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Hyperlink Bar</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoToEndOfRow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">To Document End</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Navigator" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Navigator</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RestoreEditingView" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Restore Editing View</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicBreak" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Interrupt Macro</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TextFitToSize" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Fit to Frame</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ImageMapDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">ImageMap</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoDownSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select Down</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoUpSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select Up</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoLeftSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select Left</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoRightSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select Right</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoDownBlockSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select Page Down</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoUpBlockSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select Page Up</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Rect_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Rectangle, Unfilled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Rect_Rounded_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Rounded Rectangle, Unfilled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoLeftBlockSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select Page Left</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Square" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Square</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Square_Rounded" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Rounded Square</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OnlineRegistrationDlg" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Registration...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoToStartSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select to File Begin</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Square_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Square, Unfilled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Square_Rounded_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Rounded Square, Unfilled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoToEndOfDataSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select to File End</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Ellipse_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Ellipse, Unfilled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoToStartOfRowSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select to Document Begin</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Circle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GoToEndOfRowSel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Select to Document End</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Circle_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle, Unfilled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Pie_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Ellipse Pie, Unfilled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CirclePie" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle Pie</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CirclePie_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle Pie, Unfilled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CircleArc" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle Arc</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CircleCut_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Circle Segment, Unfilled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:EllipseCut" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Ellipse Segment</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:EllipseCut_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Ellipse Segment, unfilled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Polygon_Diagonal" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Polygon (45°), Filled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Polygon_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Polygon</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Polygon_Diagonal_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Polygon (45°)</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Bezier_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Curve</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ZoomNext" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Zoom Next</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ZoomPrevious" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Zoom Previous</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GridVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Display Grid</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Flash" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Flash</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ToolsMacroEdit" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Edit Macros</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InternetDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Internet Options</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ColorControl" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Color Bar</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoCorrectDlg" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~AutoCorrect...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoPilotPresentations" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">AutoPilot: Presentation</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoPilotAgenda" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">AutoPilot: Agenda</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoPilotFax" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">AutoPilot: Fax</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoPilotLetter" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">AutoPilot: Letter</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:VersionDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Versions...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoPilotMemo" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">AutoPilot: Memo</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CompareDocuments" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Co~mpare Document...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:MergeDocuments" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Merge Document...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SwEditOptions" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Text Document Options</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SdEditOptions" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Presentation Options</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ScEditOptions" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Spreadsheet Options</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SmEditOptions" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Formula Options</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SchEditOptions" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Chart Options</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SimEditOptions" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Image Options</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FrameName" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Name</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FrameContent" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Contents</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GetColorTable" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Color Palette</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExportTo" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Expor~t...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SdGraphicOptions" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Presentation Graphic Options</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:NavigationBarVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Navigation Bar Visible</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormatGroup" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Group</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormatUngroup" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Ungroup</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SetDefault" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Default Formatting</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DecrementIndent" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Decrease Indent</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>7</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:IncrementIndent" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Increase Indent</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>7</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Freeline" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Freeform Line, Filled</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Freeline_Unfilled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Freeform Line</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Text_Marquee" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Text Animation</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterToolbox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Filter</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterInvert" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Invert</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterSmooth" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Smooth</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterSharpen" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Sharpen</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterRemoveNoise" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Remove Noise</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterSobel" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Charcoal Sketch</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterMosaic" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Mosaic</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterRelief" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Relief</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterPoster" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Posterize</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterPopart" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Pop Art</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterSepia" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Aging</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GraphicFilterSolarize" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Solarization</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SpellOnline" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~AutoSpellcheck</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HideSpellMark" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Do Not Mark Errors</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AddressBookSource" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Address Book Source...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RubyDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">As~ian phonetic guide...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertSymbol" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">S~pecial Character...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ViewDataSourceBrowser" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Data Sources</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:MenuBarVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Menu On/Off</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:MacroRecorder" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Record Macro</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StopRecording" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Stop Recording</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SendMailDocAsPDF" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">E-mail as P~DF...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExportToPDF" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Export as P~DF...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConfigureDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Customize...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExportDirectToPDF" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Export Directly as PDF</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ObjectBarVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Object Bar</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConfigureToolboxVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Customi~ze...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ToolBarVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Main ~Toolbar</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FunctionBarVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Function Bar</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ShowImeStatusWindow" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Input M~ethod Status</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OptionBarVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Optio~n Bar</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HelpSupport" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Support</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:StatusBarVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Status ~Bar</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:MacroBarVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Macro Toolbar On/Off</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CommonTaskBarVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Presentation</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SaveConfiguration" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Save configuration</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TaskBarVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value/>
+ </prop>
+ </node>
+ <node oor:name=".uno:LoadConfiguration" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Load Configuration</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:LoadBasic" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Insert BASIC Source</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SaveBasicAs" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Save BASIC</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExportDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Export Dialog</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CompileBasic" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Compile</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RunBasic" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Run BASIC</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicStepInto" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Step Into</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicStepOver" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Step Over</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicStop" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Stop Macro</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:MacroDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">%PRODUCTNAME ~Basic...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:MacroOrganizer?TabId:short=1" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Organize ~Dialogs...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ScriptOrganizer" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Organize Macros</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RunMacro" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">R~un Macro...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Gallery" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Gallery</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SearchDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Find &amp; Replace...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:HelperDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Help ~Agent</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:BasicStepOut" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Step Out</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Config" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Controls</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:MoreControls" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">More Controls</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormDesignTools" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Form Design</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Pushbutton" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Push Button</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RadioButton" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Option Button</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CheckBox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Check Box</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Label" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Label Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:GroupBox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Group Box</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Edit" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Text Box</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ListBox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">List Box</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ComboBox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Combo Box</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Grid" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Table Control</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Imagebutton" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Image Button</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FileControl" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">File Selection</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ControlProperties" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Con~trol...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormProperties" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">For~m...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TabDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Activation Order...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FirstRecord" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">First Record</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:NextRecord" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Next Record</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:PrevRecord" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Previous Record</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:LastRecord" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Last Record</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:NewRecord" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">New Record</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DeleteRecord" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Delete Record</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AbsoluteRecord" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Absolute Record</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AddField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Add Field...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RecText" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Record</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RecFromText" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Text -&gt; Record</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RecTotal" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Total No. of Records</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RecSave" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Save Record</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SwitchControlDesignMode" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Design Mode On/Off</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SwitchXFormsDesignMode" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Design Mode On/Off</value>
+ <value xml:lang="ar">إظهار/إخفاء وضع التصميم</value>
+ <value xml:lang="no">Design Mode On/Off</value>
+ <value xml:lang="ca">Mode de disseny activat/desactivat</value>
+ <value xml:lang="zh-TW">啟動或關閉設計模式</value>
+ <value xml:lang="cs">Režim návrhu zap/vyp</value>
+ <value xml:lang="da">Udkasttilstand til/fra</value>
+ <value xml:lang="el">Κατάσταση σχεδιασμού Ναι/Όχι</value>
+ <value xml:lang="es">Modo Diseño</value>
+ <value xml:lang="fi">Suunnittelutila käytössä / poissa käytöstä</value>
+ <value xml:lang="fr">(Dés)activer le mode Conception</value>
+ <value xml:lang="he">‮מצב עיצוב מופעל/מופסק‬</value>
+ <value xml:lang="it">Mostra/nascondi Modo bozza</value>
+ <value xml:lang="ja">デザインモード オン/オフ</value>
+ <value xml:lang="ko">디자인 모드 적용/적용 안함</value>
+ <value xml:lang="nl">Ontwerpmodus aan/uit</value>
+ <value xml:lang="pl">Włącz/Wyłącz tryb projektu</value>
+ <value xml:lang="pt-BR">Ativar/Desativar Modo Esboço</value>
+ <value xml:lang="ru">Визуальное проектирование формы</value>
+ <value xml:lang="sk">Režim návrhu zap/vyp</value>
+ <value xml:lang="sv">Utkastläge på/av</value>
+ <value xml:lang="th">โหมดออกแบบ มี/ไม่มี</value>
+ <value xml:lang="tr">Tasarım kipini aç/kapat</value>
+ <value xml:lang="hi">डिसैन प्रकार शुरू/बंद</value>
+ <value xml:lang="zh-CN">启动或关闭设计模式</value>
+ <value xml:lang="pt">Modo Esboço</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RecUndo" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Undo: Data entry</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Repaint" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Redraw</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ShowFmExplorer" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Form Navigator...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ShowDataNavigator" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Data Navigator...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Window3D" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~3D Effects</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Quit" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">E~xit</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:About" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">A~bout %PRODUCTNAME</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:PrinterSetup" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">P~rinter Settings...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SaveAll" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Sa~ve All</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Context" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Current Context</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CurrentTime" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Current Time</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CurrentDate" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Current Date</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:VersionVisible" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Version Visible</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ShowItemBrowser" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Item Browser On/Off</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DateField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Date Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TimeField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Time Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:NumericField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Numerical Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CurrencyField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Currency Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:PrintPreview" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Pa~ge Preview</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:PatternField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Pattern Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OpenReadOnly" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Open in Design Mode</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ImageControl" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Image Control</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RemoveFilterSort" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Remove Filter/Sort</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Sortup" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Sort Ascending</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SortDown" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Sort Descending</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SendMail" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Document as ~E-mail...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:OrderCrit" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Sort...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FilterCrit" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Standard Filter...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoFilter" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">AutoFilter</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CountAll" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Records</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SbaNativeSql" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Run SQL command directly</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:SbaExecuteSql" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Run Query</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AddTable" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Add Table...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormFiltered" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Apply Filter</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Refresh" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Refresh</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RecSearch" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Find Record...</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:UseWizards" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Wizards On/Off</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormattedField" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Formatted Field</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormFilter" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Form-Based Filters</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormFilterExit" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Close</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormFilterExecute" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Apply Form-Based Filter</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:FormFilterNavigator" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Filter Navigation</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToEdit" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Text Box</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToButton" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Button</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToFixed" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Label Field</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToList" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with List Box</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToCheckBox" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Check Box</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToRadio" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Radio Button</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToGroup" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Group Box</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToCombo" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Combo Box</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToImageBtn" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Image Button</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToFileControl" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with File Selection</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToDate" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Date Field</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToTime" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Time Field</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToNumeric" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Numerical Field</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToCurrency" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Currency Field</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToPattern" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Pattern Field</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToImageControl" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Image Control</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ConvertToFormatted" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Replace with Formatted Field</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ViewFormAsGrid" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Data source as Table</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:RemoveFilter" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Remove Filter</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AutoControlFocus" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Automatic Control Focus</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DSBrowserExplorer" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Explorer On/Off</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionToggle" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Extrusion On/Off</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionTiltDown" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Tilt Down</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionTiltUp" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Tilt Up</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionTiltLeft" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Tilt Left</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionTiltRight" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Tilt Right</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionDirectionFloater" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Direction</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionLightingFloater" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Lighting</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionSurfaceFloater" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Surface</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Extrusion3DColor" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">3D Color</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionDepth" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Extrusion</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionDepthDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Extrusion Depth</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ExtrusionDepthFloater" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Depth</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ShowToolbar" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Toolbars</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:AvailableToolbars" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Toolbars</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:NavigationBar" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Navigation Bar</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:ToggleBreakPointEnabled" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Breakpoint Enabled/Disabled</value>
+ </prop>
+ </node>
+ <node oor:name="service:com.sun.star.deployment.ui.PackageManagerDialog" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">~Extension Manager...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:Signature" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Digital Signatu~res...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:MacroSignature" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Digital Signature...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CommonAlignLeft" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Left</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CommonAlignHorizontalCenter" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Centered</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CommonAlignRight" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Right</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CommonAlignTop" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Top</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CommonAlignVerticalCenter" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Center</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CommonAlignBottom" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Bottom</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CommonAlignJustified" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Justified</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CommonAlignHorizontalDefault" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Default</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:CommonAlignVerticalDefault" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Default</value>
+ </prop>
+ </node>
+ <node oor:name="dotuno:RecentFileList" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="x-no-translate"></value><value xml:lang="en-US">Recent Doc~uments</value>
+ </prop>
+ </node>
+ </node>
+ </node>
+</oor:component-data>
+
+</oor:data>
diff --git a/configmgr2/qa/unit/makefile.mk b/configmgr2/qa/unit/makefile.mk
new file mode 100644
index 000000000000..44746a5a6ada
--- /dev/null
+++ b/configmgr2/qa/unit/makefile.mk
@@ -0,0 +1,92 @@
+#*************************************************************************
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2009 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile,v $
+#
+# $Revision: 1.4 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#***********************************************************************/
+
+PRJ = ../..
+PRJNAME = configmgr
+TARGET = unit
+
+ENABLE_EXCEPTIONS = TRUE
+
+.INCLUDE: settings.mk
+
+SLOFILES = $(SLO)/test.obj
+
+SHL1OBJS = $(SLOFILES)
+SHL1STDLIBS = \
+ $(CPPUHELPERLIB) \
+ $(CPPULIB) \
+ $(CPPUNITLIB) \
+ $(SALLIB)
+SHL1TARGET = unit
+SHL1VERSIONMAP = version.map
+DEF1NAME = $(SHL1TARGET)
+
+.INCLUDE: target.mk
+
+ALLTAR: TEST
+
+.IF "$(OS)" == "OS2" || "$(OS)" == "WNT"
+MY_INI = .ini
+.ELSE
+MY_INI = rc
+.ENDIF
+
+$(MISC)/unit.rdb .ERRREMOVE:
+ cp $(SOLARBINDIR)/types.rdb $@
+ $(REGCOMP) -register -r $@ -c $(DLLDEST)/$(DLLPRE)configmgr$(DLLPOST)
+
+TEST .PHONY: $(SHL1TARGETN) $(MISC)/unit.rdb
+ rm -rf $(MISC)/unitdata
+ mkdir $(MISC)/unitdata
+ cp urebootstrap.ini $(MISC)/unitdata
+ mkdir $(MISC)/unitdata/basis
+ mkdir $(MISC)/unitdata/basis/program
+ echo '[Bootstrap]' > $(MISC)/unitdata/basis/program/uno$(MY_INI)
+ echo 'UNO_SHARED_PACKAGES_CACHE = $$OOO_BASE_DIR' \
+ >> $(MISC)/unitdata/basis/program/uno$(MY_INI)
+ echo 'UNO_USER_PACKAGES_CACHE =' \
+ '$${$$BRAND_BASE_DIR/program/bootstrap$(MY_INI):UserInstallation}' \
+ >> $(MISC)/unitdata/basis/program/uno$(MY_INI)
+ mkdir $(MISC)/unitdata/basis/share
+ mkdir $(MISC)/unitdata/basis/share/registry
+ cp data.xcd $(MISC)/unitdata/basis/share/registry
+ mkdir $(MISC)/unitdata/brand
+ mkdir $(MISC)/unitdata/brand/program
+ echo '[Bootstrap]' > $(MISC)/unitdata/brand/program/bootstrap$(MY_INI)
+ echo 'UserInstallation = $$ORIGIN/../../user' \
+ >> $(MISC)/unitdata/brand/program/bootstrap$(MY_INI)
+.IF "$(USE_SHELL)" == "bash"
+ export \
+ URE_BOOTSTRAP=vnd.sun.star.pathname:$(MISC)/unitdata/urebootstrap.ini \
+ && $(TESTSHL2) $(SHL1TARGETN) -forward $(MISC)/unit.rdb
+.ELSE
+ setenv \
+ URE_BOOTSTRAP vnd.sun.star.pathname:$(MISC)/unitdata/urebootstrap.ini \
+ && $(TESTSHL2) $(SHL1TARGETN) -forward $(MISC)/unit.rdb
+.ENDIF
diff --git a/connectivity/util/delzip b/configmgr2/qa/unit/no_localization
index e69de29bb2d1..e69de29bb2d1 100755..100644
--- a/connectivity/util/delzip
+++ b/configmgr2/qa/unit/no_localization
diff --git a/configmgr2/qa/unit/test.cxx b/configmgr2/qa/unit/test.cxx
new file mode 100644
index 000000000000..d7fa8eed753f
--- /dev/null
+++ b/configmgr2/qa/unit/test.cxx
@@ -0,0 +1,680 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <cstddef>
+
+#include "com/sun/star/beans/NamedValue.hpp"
+#include "com/sun/star/beans/PropertyChangeEvent.hpp"
+#include "com/sun/star/beans/XPropertyChangeListener.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+#include "com/sun/star/beans/XPropertyState.hpp"
+#include "com/sun/star/container/XHierarchicalNameAccess.hpp"
+#include "com/sun/star/container/XNameReplace.hpp"
+#include "com/sun/star/container/XNamed.hpp"
+#include "com/sun/star/lang/EventObject.hpp"
+#include "com/sun/star/lang/XComponent.hpp"
+#include "com/sun/star/lang/XMultiServiceFactory.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "com/sun/star/util/XChangesBatch.hpp"
+#include "cppuhelper/implbase1.hxx"
+#include "cppuhelper/servicefactory.hxx"
+#include "cppunit/simpleheader.hxx"
+#include "osl/conditn.hxx"
+#include "osl/thread.h"
+#include "osl/thread.hxx"
+#include "osl/time.h"
+#include "rtl/ref.hxx"
+#include "rtl/string.h"
+#include "rtl/textcvt.h"
+#include "rtl/ustrbuf.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+namespace {
+
+namespace css = com::sun::star;
+
+void normalize(
+ rtl::OUString const & path, rtl::OUString const & relative,
+ rtl::OUString * normalizedPath, rtl::OUString * name)
+{
+ sal_Int32 i = relative.lastIndexOf('/');
+ if (i == -1) {
+ *normalizedPath = path;
+ *name = relative;
+ } else {
+ rtl::OUStringBuffer buf(path);
+ buf.append(sal_Unicode('/'));
+ buf.append(relative.copy(0, i));
+ *normalizedPath = buf.makeStringAndClear();
+ *name = relative.copy(i + 1);
+ }
+}
+
+class Test: public CppUnit::TestFixture {
+public:
+ virtual void setUp();
+
+ virtual void tearDown();
+
+ void testKeyFetch();
+
+ void testKeySet();
+
+ void testKeyReset();
+
+ void testSetSetMemberName();
+
+ void testReadCommands();
+
+ void testThreads();
+
+ void testRecursive();
+
+ void testCrossThreads();
+
+ css::uno::Any getKey(
+ rtl::OUString const & path, rtl::OUString const & relative) const;
+
+ void setKey(
+ rtl::OUString const & path, rtl::OUString const & name,
+ css::uno::Any const & value) const;
+
+ bool resetKey(rtl::OUString const & path, rtl::OUString const & name) const;
+
+ css::uno::Reference< css::uno::XInterface > createViewAccess(
+ rtl::OUString const & path) const;
+
+ css::uno::Reference< css::uno::XInterface > createUpdateAccess(
+ rtl::OUString const & path) const;
+
+ CPPUNIT_TEST_SUITE(Test);
+ CPPUNIT_TEST(testKeyFetch);
+ CPPUNIT_TEST(testKeySet);
+ CPPUNIT_TEST(testKeyReset);
+ CPPUNIT_TEST(testSetSetMemberName);
+ CPPUNIT_TEST(testReadCommands);
+ CPPUNIT_TEST(testThreads);
+ CPPUNIT_TEST(testRecursive);
+ CPPUNIT_TEST(testCrossThreads);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ css::uno::Reference< css::uno::XComponentContext > context_;
+ css::uno::Reference< css::lang::XMultiServiceFactory > provider_;
+};
+
+class TestThread: public osl::Thread {
+public:
+ TestThread(osl::Condition & stop);
+
+ bool getSuccess() const;
+
+protected:
+ virtual bool iteration() = 0;
+
+private:
+ virtual void SAL_CALL run();
+
+ osl::Condition & stop_;
+ bool success_;
+};
+
+TestThread::TestThread(
+ osl::Condition & stop):
+ stop_(stop), success_(true)
+{}
+
+bool TestThread::getSuccess() const {
+ return success_;
+}
+
+void TestThread::run() {
+ try {
+ while (!stop_.check()) {
+ if (!iteration()) {
+ success_ = false;
+ }
+ }
+ } catch (...) {
+ success_ = false;
+ }
+}
+
+class ReaderThread: public TestThread {
+public:
+ ReaderThread(
+ osl::Condition & stop, Test const & test, rtl::OUString const & path,
+ rtl::OUString const & relative);
+
+private:
+ virtual bool iteration();
+
+ Test const & test_;
+ rtl::OUString path_;
+ rtl::OUString relative_;
+};
+
+ReaderThread::ReaderThread(
+ osl::Condition & stop, Test const & test, rtl::OUString const & path,
+ rtl::OUString const & relative):
+ TestThread(stop), test_(test), path_(path), relative_(relative)
+{
+ create();
+}
+
+bool ReaderThread::iteration() {
+ return test_.getKey(path_, relative_).hasValue();
+}
+
+class WriterThread: public TestThread {
+public:
+ WriterThread(
+ osl::Condition & stop, Test const & test, rtl::OUString const & path,
+ rtl::OUString const & relative);
+
+private:
+ virtual bool iteration();
+
+ Test const & test_;
+ rtl::OUString path_;
+ rtl::OUString name_;
+ std::size_t index_;
+};
+
+WriterThread::WriterThread(
+ osl::Condition & stop, Test const & test, rtl::OUString const & path,
+ rtl::OUString const & relative):
+ TestThread(stop), test_(test), index_(0)
+{
+ normalize(path, relative, &path_, &name_);
+ create();
+}
+
+bool WriterThread::iteration() {
+ rtl::OUString options[] = {
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("fish")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("chips")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("kippers")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bloaters")) };
+ test_.setKey(path_, name_, css::uno::makeAny(options[index_]));
+ index_ = (index_ + 1) % (sizeof options / sizeof (rtl::OUString));
+ return true;
+}
+
+class RecursiveTest:
+ public cppu::WeakImplHelper1< css::beans::XPropertyChangeListener >
+{
+public:
+ RecursiveTest(Test const & theTest, int count, bool * destroyed);
+
+ void test();
+
+protected:
+ virtual ~RecursiveTest();
+
+ virtual void step() const = 0;
+
+ Test const & test_;
+
+private:
+ virtual void SAL_CALL disposing(css::lang::EventObject const &)
+ throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL propertyChange(
+ css::beans::PropertyChangeEvent const &)
+ throw (css::uno::RuntimeException);
+
+ int count_;
+ bool * destroyed_;
+ css::uno::Reference< css::beans::XPropertySet > properties_;
+};
+
+RecursiveTest::RecursiveTest(
+ Test const & theTest, int count, bool * destroyed):
+ test_(theTest), count_(count), destroyed_(destroyed)
+{}
+
+void RecursiveTest::test() {
+ properties_ = css::uno::Reference< css::beans::XPropertySet >(
+ test_.createUpdateAccess(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands/UserInterface/Commands/"
+ "dotuno:WebHtml"))),
+ css::uno::UNO_QUERY_THROW);
+ properties_->addPropertyChangeListener(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Label")), this);
+ step();
+ CPPUNIT_ASSERT(count_ == 0);
+ css::uno::Reference< css::lang::XComponent >(
+ properties_, css::uno::UNO_QUERY_THROW)->dispose();
+}
+
+RecursiveTest::~RecursiveTest() {
+ *destroyed_ = true;
+}
+
+void RecursiveTest::disposing(css::lang::EventObject const & Source)
+ throw (css::uno::RuntimeException)
+{
+ CPPUNIT_ASSERT(properties_.is() && Source.Source == properties_);
+ properties_.clear();
+}
+
+void RecursiveTest::propertyChange(css::beans::PropertyChangeEvent const & evt)
+ throw (css::uno::RuntimeException)
+{
+ CPPUNIT_ASSERT(
+ evt.Source == properties_ &&
+ evt.PropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Label")));
+ if (count_ > 0) {
+ --count_;
+ step();
+ }
+}
+
+class SimpleRecursiveTest: public RecursiveTest {
+public:
+ SimpleRecursiveTest(Test const & theTest, int count, bool * destroyed);
+
+private:
+ virtual void step() const;
+};
+
+SimpleRecursiveTest::SimpleRecursiveTest(
+ Test const & theTest, int count, bool * destroyed):
+ RecursiveTest(theTest, count, destroyed)
+{}
+
+void SimpleRecursiveTest::step() const {
+ test_.setKey(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands/UserInterface/Commands/"
+ "dotuno:WebHtml")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Label")),
+ css::uno::makeAny(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("step"))));
+}
+
+class CrossThreadTest: public RecursiveTest {
+public:
+ CrossThreadTest(Test const & theTest, int count, bool * destroyed);
+
+private:
+ virtual void step() const;
+};
+
+CrossThreadTest::CrossThreadTest(
+ Test const & theTest, int count, bool * destroyed):
+ RecursiveTest(theTest, count, destroyed)
+{}
+
+void CrossThreadTest::step() const {
+ osl::Condition stop;
+ stop.set();
+ WriterThread(
+ stop, test_,
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands/UserInterface/Commands/"
+ "dotuno:WebHtml")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Label"))).join();
+ test_.resetKey(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands/UserInterface/Commands/"
+ "dotuno:WebHtml")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Label")));
+}
+
+void Test::setUp() {
+ char const * forward = getForwardString();
+ rtl_uString * registry = 0;
+ CPPUNIT_ASSERT(
+ rtl_convertStringToUString(
+ &registry, forward, rtl_str_getLength(forward),
+ osl_getThreadTextEncoding(),
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)));
+ context_ = css::uno::Reference< css::uno::XComponentContext >(
+ css::uno::Reference< css::beans::XPropertySet >(
+ cppu::createRegistryServiceFactory(
+ rtl::OUString(registry, SAL_NO_ACQUIRE)),
+ css::uno::UNO_QUERY_THROW)->getPropertyValue(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext"))),
+ css::uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(
+ context_->getValueByName(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/singletons/"
+ "com.sun.star.configuration.theDefaultProvider"))) >>=
+ provider_);
+}
+
+void Test::tearDown() {
+ css::uno::Reference< css::lang::XComponent >(
+ context_, css::uno::UNO_QUERY_THROW)->dispose();
+}
+
+void Test::testKeyFetch() {
+ rtl::OUString s;
+ CPPUNIT_ASSERT(
+ getKey(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Setup")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("L10N/ooLocale"))) >>=
+ s);
+ CPPUNIT_ASSERT(
+ getKey(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Setup")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Test/AString"))) >>=
+ s);
+}
+
+void Test::testKeySet() {
+ setKey(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Setup/Test")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AString")),
+ css::uno::makeAny(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("baa"))));
+ rtl::OUString s;
+ CPPUNIT_ASSERT(
+ getKey(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Setup/Test")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AString"))) >>=
+ s);
+ CPPUNIT_ASSERT(s.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("baa")));
+}
+
+void Test::testKeyReset() {
+ if (resetKey(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Setup/Test")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AString"))))
+ {
+ rtl::OUString s;
+ CPPUNIT_ASSERT(
+ getKey(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Setup/Test")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AString"))) >>=
+ s);
+ CPPUNIT_ASSERT(s.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Foo")));
+ }
+}
+
+void Test::testSetSetMemberName() {
+ rtl::OUString s;
+ CPPUNIT_ASSERT(
+ getKey(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands/UserInterface/Commands/"
+ ".uno:FontworkShapeType")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Label"))) >>=
+ s);
+ CPPUNIT_ASSERT(
+ s.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Fontwork Shape")));
+
+ css::uno::Reference< css::container::XNameAccess > access(
+ createUpdateAccess(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands/UserInterface/"
+ "Commands"))),
+ css::uno::UNO_QUERY_THROW);
+ css::uno::Reference< css::container::XNamed > member;
+ access->getByName(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(".uno:FontworkGalleryFloater"))) >>=
+ member;
+ CPPUNIT_ASSERT(member.is());
+ member->setName(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(".uno:FontworkShapeType")));
+ css::uno::Reference< css::util::XChangesBatch >(
+ access, css::uno::UNO_QUERY_THROW)->commitChanges();
+ css::uno::Reference< css::lang::XComponent >(
+ access, css::uno::UNO_QUERY_THROW)->dispose();
+
+ CPPUNIT_ASSERT(
+ getKey(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands/UserInterface/Commands/"
+ ".uno:FontworkShapeType")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Label"))) >>=
+ s);
+ CPPUNIT_ASSERT(
+ s.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Fontwork Gallery")));
+}
+
+void Test::testReadCommands() {
+ css::uno::Reference< css::container::XNameAccess > access(
+ createViewAccess(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands/UserInterface/"
+ "Commands"))),
+ css::uno::UNO_QUERY_THROW);
+ css::uno::Sequence< rtl::OUString > names(access->getElementNames());
+ CPPUNIT_ASSERT(names.getLength() == 695);
+ // testSetSetMemberName() already removed ".uno:FontworkGalleryFloater"
+ sal_uInt32 n = osl_getGlobalTimer();
+ for (int i = 0; i < 8; ++i) {
+ for (sal_Int32 j = 0; j < names.getLength(); ++j) {
+ css::uno::Reference< css::container::XNameAccess > child;
+ if (access->getByName(names[j]) >>= child) {
+ CPPUNIT_ASSERT(child.is());
+ child->getByName(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Label")));
+ child->getByName(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ContextLabel")));
+ child->getByName(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Properties")));
+ }
+ }
+ }
+ n = osl_getGlobalTimer() - n;
+ t_print("Reading elements took %" SAL_PRIuUINT32 " ms\n", n);
+ css::uno::Reference< css::lang::XComponent >(
+ access, css::uno::UNO_QUERY_THROW)->dispose();
+}
+
+void Test::testThreads() {
+ struct Entry { rtl::OUString path; rtl::OUString relative; };
+ Entry list[] = {
+ { rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Setup")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Test/AString")) },
+ { rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Setup")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Test/AString")) },
+ { rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands")),
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "UserInterface/Commands/dotuno:WebHtml/Label")) },
+ { rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands")),
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "UserInterface/Commands/dotuno:NewPresentation/Label")) },
+ { rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/org.openoffice.UI.GenericCommands")),
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "UserInterface/Commands/dotuno:RecentFileList/Label")) },
+ { rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Setup")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("L10N/ooLocale")) },
+ { rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Setup")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Test/ABoolean")) }
+ };
+ std::size_t const numReaders = sizeof list / sizeof (Entry);
+ std::size_t const numWriters = numReaders - 2;
+ ReaderThread * readers[numReaders];
+ WriterThread * writers[numWriters];
+ osl::Condition stop;
+ for (std::size_t i = 0; i < numReaders; ++i) {
+ CPPUNIT_ASSERT(getKey(list[i].path, list[i].relative).hasValue());
+ readers[i] = new ReaderThread(
+ stop, *this, list[i].path, list[i].relative);
+ }
+ for (std::size_t i = 0; i < numWriters; ++i) {
+ writers[i] = new WriterThread(
+ stop, *this, list[i].path, list[i].relative);
+ }
+ for (int i = 0; i < 5; ++i) {
+ for (std::size_t j = 0; j < numReaders; ++j) {
+ rtl::OUString path;
+ rtl::OUString name;
+ normalize(list[j].path, list[j].relative, &path, &name);
+ resetKey(path, name);
+ osl::Thread::yield();
+ }
+ }
+ stop.set();
+ bool success = true;
+ for (std::size_t i = 0; i < numReaders; ++i) {
+ readers[i]->join();
+ success = success && readers[i]->getSuccess();
+ delete readers[i];
+ }
+ for (std::size_t i = 0; i < numWriters; ++i) {
+ writers[i]->join();
+ success = success && writers[i]->getSuccess();
+ delete writers[i];
+ }
+ CPPUNIT_ASSERT(success);
+}
+
+void Test::testRecursive() {
+ bool destroyed = false;
+ rtl::Reference< RecursiveTest >(
+ new SimpleRecursiveTest(*this, 100, &destroyed))->test();
+ CPPUNIT_ASSERT(destroyed);
+}
+
+void Test::testCrossThreads() {
+ bool destroyed = false;
+ rtl::Reference< RecursiveTest >(
+ new SimpleRecursiveTest(*this, 10, &destroyed))->test();
+ CPPUNIT_ASSERT(destroyed);
+}
+
+css::uno::Any Test::getKey(
+ rtl::OUString const & path, rtl::OUString const & relative) const
+{
+ css::uno::Reference< css::container::XHierarchicalNameAccess > access(
+ createViewAccess(path), css::uno::UNO_QUERY_THROW);
+ css::uno::Any value(access->getByHierarchicalName(relative));
+ css::uno::Reference< css::lang::XComponent >(
+ access, css::uno::UNO_QUERY_THROW)->dispose();
+ return value;
+}
+
+void Test::setKey(
+ rtl::OUString const & path, rtl::OUString const & name,
+ css::uno::Any const & value) const
+{
+ css::uno::Reference< css::container::XNameReplace > access(
+ createUpdateAccess(path), css::uno::UNO_QUERY_THROW);
+ access->replaceByName(name, value);
+ css::uno::Reference< css::util::XChangesBatch >(
+ access, css::uno::UNO_QUERY_THROW)->commitChanges();
+ css::uno::Reference< css::lang::XComponent >(
+ access, css::uno::UNO_QUERY_THROW)->dispose();
+}
+
+bool Test::resetKey(rtl::OUString const & path, rtl::OUString const & name)
+ const
+{
+ //TODO: support setPropertyToDefault
+ css::uno::Reference< css::util::XChangesBatch > access(
+ createUpdateAccess(path), css::uno::UNO_QUERY_THROW);
+ css::uno::Reference< css::beans::XPropertyState > state(
+ access, css::uno::UNO_QUERY);
+ if (!state.is()) {
+ return false;
+ }
+ state->setPropertyToDefault(name);
+ access->commitChanges();
+ css::uno::Reference< css::lang::XComponent >(
+ access, css::uno::UNO_QUERY_THROW)->dispose();
+ return true;
+}
+
+css::uno::Reference< css::uno::XInterface > Test::createViewAccess(
+ rtl::OUString const & path) const
+{
+ css::uno::Any arg(
+ css::uno::makeAny(
+ css::beans::NamedValue(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("nodepath")),
+ css::uno::makeAny(path))));
+ return provider_->createInstanceWithArguments(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationAccess")),
+ css::uno::Sequence< css::uno::Any >(&arg, 1));
+}
+
+css::uno::Reference< css::uno::XInterface > Test::createUpdateAccess(
+ rtl::OUString const & path) const
+{
+ css::uno::Any arg(
+ css::uno::makeAny(
+ css::beans::NamedValue(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("nodepath")),
+ css::uno::makeAny(path))));
+ return provider_->createInstanceWithArguments(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationUpdateAccess")),
+ css::uno::Sequence< css::uno::Any >(&arg, 1));
+}
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Test, "alltest");
+
+}
+
+NOADDITIONAL;
diff --git a/configmgr2/qa/unit/urebootstrap.ini b/configmgr2/qa/unit/urebootstrap.ini
new file mode 100644
index 000000000000..323183d4e8bc
--- /dev/null
+++ b/configmgr2/qa/unit/urebootstrap.ini
@@ -0,0 +1,32 @@
+#*************************************************************************
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2009 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile,v $
+#
+# $Revision: 1.4 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#***********************************************************************/
+
+[Bootstrap]
+OOO_BASE_DIR = $ORIGIN/basis
+BRAND_BASE_DIR = $ORIGIN/brand
diff --git a/configmgr2/qa/unit/version.map b/configmgr2/qa/unit/version.map
new file mode 100644
index 000000000000..fbd2a7b218da
--- /dev/null
+++ b/configmgr2/qa/unit/version.map
@@ -0,0 +1,36 @@
+#*************************************************************************
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2009 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile,v $
+#
+# $Revision: 1.4 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#***********************************************************************/
+
+UDK_3_0_0 {
+ global:
+ registerAllTestFunction;
+
+ local:
+ *;
+};
diff --git a/configmgr2/qa/unoapi/makefile.mk b/configmgr2/qa/unoapi/makefile.mk
new file mode 100644
index 000000000000..489e79b1490d
--- /dev/null
+++ b/configmgr2/qa/unoapi/makefile.mk
@@ -0,0 +1,40 @@
+#*************************************************************************
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2009 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile,v $
+#
+# $Revision: 1.4 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#***********************************************************************/
+
+PRJ = ../..
+PRJNAME = configmgr
+TARGET = unoapi
+
+.INCLUDE: settings.mk
+.INCLUDE: target.mk
+
+ALLTAR: TEST
+
+TEST .PHONY:
+ $(SOLARENV)/bin/checkapi -sce module.sce
diff --git a/configmgr2/qa/unoapi/module.sce b/configmgr2/qa/unoapi/module.sce
new file mode 100644
index 000000000000..80421e8eaa7f
--- /dev/null
+++ b/configmgr2/qa/unoapi/module.sce
@@ -0,0 +1,31 @@
+#*************************************************************************
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2009 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile,v $
+#
+# $Revision: 1.4 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#***********************************************************************/
+
+-o configmgr.ConfigurationProvider
+-o configmgr.DefaultProvider
diff --git a/configmgr2/source/access.cxx b/configmgr2/source/access.cxx
new file mode 100644
index 000000000000..032c3703c0ce
--- /dev/null
+++ b/configmgr2/source/access.cxx
@@ -0,0 +1,2188 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <vector>
+
+#include "com/sun/star/beans/Property.hpp"
+#include "com/sun/star/beans/PropertyAttribute.hpp"
+#include "com/sun/star/beans/PropertyChangeEvent.hpp"
+#include "com/sun/star/beans/PropertyVetoException.hpp"
+#include "com/sun/star/beans/UnknownPropertyException.hpp"
+#include "com/sun/star/beans/XExactName.hpp"
+#include "com/sun/star/beans/XHierarchicalPropertySet.hpp"
+#include "com/sun/star/beans/XHierarchicalPropertySetInfo.hpp"
+#include "com/sun/star/beans/XMultiHierarchicalPropertySet.hpp"
+#include "com/sun/star/beans/XMultiPropertySet.hpp"
+#include "com/sun/star/beans/XPropertiesChangeListener.hpp"
+#include "com/sun/star/beans/XProperty.hpp"
+#include "com/sun/star/beans/XPropertyChangeListener.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+#include "com/sun/star/beans/XPropertySetInfo.hpp"
+#include "com/sun/star/beans/XVetoableChangeListener.hpp"
+#include "com/sun/star/container/ContainerEvent.hpp"
+#include "com/sun/star/container/NoSuchElementException.hpp"
+#include "com/sun/star/container/XContainer.hpp"
+#include "com/sun/star/container/XContainerListener.hpp"
+#include "com/sun/star/container/XElementAccess.hpp"
+#include "com/sun/star/container/XHierarchicalName.hpp"
+#include "com/sun/star/container/XHierarchicalNameAccess.hpp"
+#include "com/sun/star/container/XNameAccess.hpp"
+#include "com/sun/star/container/XNameContainer.hpp"
+#include "com/sun/star/container/XNamed.hpp"
+#include "com/sun/star/lang/DisposedException.hpp"
+#include "com/sun/star/lang/EventObject.hpp"
+#include "com/sun/star/lang/IllegalArgumentException.hpp"
+#include "com/sun/star/lang/NoSupportException.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/lang/XComponent.hpp"
+#include "com/sun/star/lang/XEventListener.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/XSingleServiceFactory.hpp"
+#include "com/sun/star/lang/XTypeProvider.hpp"
+#include "com/sun/star/lang/XUnoTunnel.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/Type.hxx"
+#include "com/sun/star/uno/TypeClass.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "com/sun/star/uno/XWeak.hpp"
+#include "com/sun/star/util/ElementChange.hpp"
+#include "comphelper/sequenceasvector.hxx"
+#include "cppu/unotype.hxx"
+#include "cppuhelper/queryinterface.hxx"
+#include "cppuhelper/weak.hxx"
+#include "osl/diagnose.h"
+#include "osl/interlck.h"
+#include "osl/mutex.hxx"
+#include "rtl/ref.hxx"
+#include "rtl/ustrbuf.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "access.hxx"
+#include "broadcaster.hxx"
+#include "childaccess.hxx"
+#include "components.hxx"
+#include "data.hxx"
+#include "groupnode.hxx"
+#include "localizedpropertynode.hxx"
+#include "localizedvaluenode.hxx"
+#include "lock.hxx"
+#include "modifications.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "path.hxx"
+#include "propertynode.hxx"
+#include "rootaccess.hxx"
+#include "setnode.hxx"
+#include "type.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+oslInterlockedCount Access::acquireCounting() {
+ return osl_incrementInterlockedCount(&m_refCount);
+}
+
+void Access::releaseNondeleting() {
+ osl_decrementInterlockedCount(&m_refCount);
+}
+
+bool Access::isValue() {
+ rtl::Reference< Node > p(getNode());
+ switch (p->kind()) {
+ case Node::KIND_PROPERTY:
+ case Node::KIND_LOCALIZED_VALUE:
+ return true;
+ case Node::KIND_LOCALIZED_PROPERTY:
+ return !Components::allLocales(getRootAccess()->getLocale());
+ default:
+ return false;
+ }
+}
+
+void Access::markChildAsModified(rtl::Reference< ChildAccess > const & child) {
+ OSL_ASSERT(child.is() && child->getParentAccess() == this);
+ modifiedChildren_[child->getNameInternal()] = ModifiedChild(child, true);
+ for (rtl::Reference< Access > p(this);;) {
+ rtl::Reference< Access > parent(p->getParentAccess());
+ if (!parent.is()) {
+ break;
+ }
+ OSL_ASSERT(dynamic_cast< ChildAccess * >(p.get()) != 0);
+ parent->modifiedChildren_.insert(
+ ModifiedChildren::value_type(
+ p->getNameInternal(),
+ ModifiedChild(dynamic_cast< ChildAccess * >(p.get()), false)));
+ p = parent;
+ }
+}
+
+void Access::releaseChild(rtl::OUString const & name) {
+ cachedChildren_.erase(name);
+}
+
+void Access::initBroadcaster(
+ Modifications::Node const & modifications, Broadcaster * broadcaster)
+{
+ initBroadcasterAndChanges(modifications, broadcaster, 0);
+}
+
+Access::Access(Components & components):
+ components_(components), disposed_(false)
+{}
+
+Access::~Access() {}
+
+void Access::initDisposeBroadcaster(Broadcaster * broadcaster) {
+ OSL_ASSERT(broadcaster != 0);
+ for (DisposeListeners::iterator i(disposeListeners_.begin());
+ i != disposeListeners_.end(); ++i)
+ {
+ broadcaster->addDisposeNotification(
+ *i,
+ css::lang::EventObject(static_cast< cppu::OWeakObject * >(this)));
+ }
+ for (ContainerListeners::iterator i(containerListeners_.begin());
+ i != containerListeners_.end(); ++i)
+ {
+ broadcaster->addDisposeNotification(
+ i->get(),
+ css::lang::EventObject(static_cast< cppu::OWeakObject * >(this)));
+ }
+ for (PropertyChangeListeners::iterator i(propertyChangeListeners_.begin());
+ i != propertyChangeListeners_.end(); ++i)
+ {
+ for (PropertyChangeListenersElement::iterator j(i->second.begin());
+ j != i->second.end(); ++j)
+ {
+ broadcaster->addDisposeNotification(
+ j->get(),
+ css::lang::EventObject(
+ static_cast< cppu::OWeakObject * >(this)));
+ }
+ }
+ for (VetoableChangeListeners::iterator i(vetoableChangeListeners_.begin());
+ i != vetoableChangeListeners_.end(); ++i)
+ {
+ for (VetoableChangeListenersElement::iterator j(i->second.begin());
+ j != i->second.end(); ++j)
+ {
+ broadcaster->addDisposeNotification(
+ j->get(),
+ css::lang::EventObject(
+ static_cast< cppu::OWeakObject * >(this)));
+ }
+ }
+ for (PropertiesChangeListeners::iterator i(
+ propertiesChangeListeners_.begin());
+ i != propertiesChangeListeners_.end(); ++i)
+ {
+ broadcaster->addDisposeNotification(
+ i->get(),
+ css::lang::EventObject(static_cast< cppu::OWeakObject * >(this)));
+ }
+ //TODO: iterate over children w/ listeners (incl. unmodified ones):
+ for (ModifiedChildren::iterator i(modifiedChildren_.begin());
+ i != modifiedChildren_.end(); ++i)
+ {
+ rtl::Reference< ChildAccess > child(getModifiedChild(i));
+ if (child.is()) {
+ child->initDisposeBroadcaster(broadcaster);
+ }
+ }
+}
+
+void Access::clearListeners() throw() {
+ disposeListeners_.clear();
+ containerListeners_.clear();
+ propertyChangeListeners_.clear();
+ vetoableChangeListeners_.clear();
+ propertiesChangeListeners_.clear();
+ //TODO: iterate over children w/ listeners (incl. unmodified ones):
+ for (ModifiedChildren::iterator i(modifiedChildren_.begin());
+ i != modifiedChildren_.end(); ++i)
+ {
+ rtl::Reference< ChildAccess > child(getModifiedChild(i));
+ if (child.is()) {
+ child->clearListeners();
+ }
+ }
+}
+
+css::uno::Any Access::queryInterface(css::uno::Type const & aType)
+ throw (css::uno::RuntimeException)
+{
+ css::uno::Any res(OWeakObject::queryInterface(aType));
+ if (res.hasValue()) {
+ return res;
+ }
+ res = cppu::queryInterface(
+ aType, static_cast< css::lang::XTypeProvider * >(this),
+ static_cast< css::lang::XServiceInfo * >(this),
+ static_cast< css::lang::XComponent * >(this),
+ static_cast< css::container::XHierarchicalNameAccess * >(this),
+ static_cast< css::container::XContainer * >(this),
+ static_cast< css::beans::XExactName * >(this),
+ static_cast< css::container::XHierarchicalName * >(this),
+ static_cast< css::container::XNamed * >(this),
+ static_cast< css::beans::XProperty * >(this),
+ static_cast< css::container::XElementAccess * >(this),
+ static_cast< css::container::XNameAccess * >(this));
+ if (res.hasValue()) {
+ return res;
+ }
+ if (getNode()->kind() == Node::KIND_GROUP) {
+ res = cppu::queryInterface(
+ aType, static_cast< css::beans::XPropertySetInfo * >(this),
+ static_cast< css::beans::XPropertySet * >(this),
+ static_cast< css::beans::XMultiPropertySet * >(this),
+ static_cast< css::beans::XHierarchicalPropertySet * >(this),
+ static_cast< css::beans::XMultiHierarchicalPropertySet * >(this),
+ static_cast< css::beans::XHierarchicalPropertySetInfo * >(this));
+ if (res.hasValue()) {
+ return res;
+ }
+ }
+ if (getRootAccess()->isUpdate()) {
+ res = cppu::queryInterface(
+ aType, static_cast< css::container::XNameReplace * >(this));
+ if (res.hasValue()) {
+ return res;
+ }
+ if (getNode()->kind() != Node::KIND_GROUP ||
+ dynamic_cast< GroupNode * >(getNode().get())->isExtensible())
+ {
+ res = cppu::queryInterface(
+ aType, static_cast< css::container::XNameContainer * >(this));
+ if (res.hasValue()) {
+ return res;
+ }
+ }
+ if (getNode()->kind() == Node::KIND_SET) {
+ res = cppu::queryInterface(
+ aType, static_cast< css::lang::XSingleServiceFactory * >(this));
+ }
+ }
+ return res;
+}
+
+Components & Access::getComponents() const {
+ return components_;
+}
+
+void Access::checkLocalizedPropertyAccess() {
+ if (getNode()->kind() == Node::KIND_LOCALIZED_PROPERTY &&
+ !Components::allLocales(getRootAccess()->getLocale()))
+ {
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr Access to specialized LocalizedPropertyNode")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+}
+
+rtl::Reference< Node > Access::getParentNode() {
+ rtl::Reference< Access > parent(getParentAccess());
+ return parent.is() ? parent->getNode() : rtl::Reference< Node >();
+}
+
+rtl::Reference< ChildAccess > Access::getChild(rtl::OUString const & name) {
+ ModifiedChildren::iterator i(modifiedChildren_.find(name));
+ return i == modifiedChildren_.end()
+ ? getUnmodifiedChild(name) : getModifiedChild(i);
+}
+
+std::vector< rtl::Reference< ChildAccess > > Access::getAllChildren() {
+ std::vector< rtl::Reference< ChildAccess > > vec;
+ NodeMap & members = getNode()->getMembers();
+ for (NodeMap::iterator i(members.begin()); i != members.end(); ++i) {
+ if (modifiedChildren_.find(i->first) == modifiedChildren_.end()) {
+ vec.push_back(getUnmodifiedChild(i->first));
+ OSL_ASSERT(vec.back().is());
+ }
+ }
+ for (ModifiedChildren::iterator i(modifiedChildren_.begin());
+ i != modifiedChildren_.end(); ++i)
+ {
+ rtl::Reference< ChildAccess > child(getModifiedChild(i));
+ if (child.is()) {
+ vec.push_back(child);
+ }
+ }
+ return vec;
+}
+
+void Access::checkValue(css::uno::Any const & value, Type type, bool nillable) {
+ bool ok;
+ switch (type) {
+ case TYPE_NIL:
+ OSL_ASSERT(false);
+ // fall through (cannot happen)
+ case TYPE_ERROR:
+ ok = false;
+ break;
+ case TYPE_ANY:
+ switch (mapType(value)) {
+ case TYPE_ANY:
+ OSL_ASSERT(false);
+ // fall through (cannot happen)
+ case TYPE_ERROR:
+ ok = false;
+ break;
+ case TYPE_NIL:
+ ok = nillable;
+ break;
+ default:
+ ok = true;
+ break;
+ }
+ break;
+ default:
+ ok = value.hasValue() ? value.isExtractableTo(mapType(type)) : nillable;
+ break;
+ }
+ if (!ok) {
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr inappropriate property value")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+ }
+}
+
+void Access::insertLocalizedValueChild(
+ rtl::OUString const & name, css::uno::Any const & value,
+ Modifications * localModifications)
+{
+ OSL_ASSERT(localModifications != 0);
+ LocalizedPropertyNode * locprop = dynamic_cast< LocalizedPropertyNode * >(
+ getNode().get());
+ checkValue(value, locprop->getType(), locprop->isNillable());
+ rtl::Reference< ChildAccess > child(
+ new ChildAccess(
+ components_, getRootAccess(), this, name,
+ new LocalizedValueNode(Data::NO_LAYER, value)));
+ markChildAsModified(child);
+ localModifications->add(child->getRelativePath());
+}
+
+void Access::reportChildChanges(
+ std::vector< css::util::ElementChange > * changes)
+{
+ OSL_ASSERT(changes != 0);
+ for (ModifiedChildren::iterator i(modifiedChildren_.begin());
+ i != modifiedChildren_.end(); ++i)
+ {
+ rtl::Reference< ChildAccess > child(getModifiedChild(i));
+ if (child.is()) {
+ child->reportChildChanges(changes);
+ changes->push_back(css::util::ElementChange());
+ //TODO: changed value and/or inserted node
+ } else {
+ changes->push_back(css::util::ElementChange()); //TODO: removed node
+ }
+ }
+}
+
+void Access::commitChildChanges(
+ bool valid, Modifications * globalModifications)
+{
+ OSL_ASSERT(globalModifications != 0);
+ while (!modifiedChildren_.empty()) {
+ bool childValid = valid;
+ ModifiedChildren::iterator i(modifiedChildren_.begin());
+ rtl::Reference< ChildAccess > child(getModifiedChild(i));
+ if (child.is()) {
+ childValid = childValid && !child->isFinalized();
+ child->commitChanges(childValid, globalModifications);
+ //TODO: currently, this is called here for directly inserted
+ // children as well as for children whose sub-children were
+ // modified (and should never be called for directly removed
+ // children); clarify what exactly should happen here for
+ // directly inserted children
+ }
+ NodeMap & members = getNode()->getMembers();
+ NodeMap::iterator j(members.find(i->first));
+ if (child.is()) {
+ // Inserted:
+ if (j != members.end()) {
+ childValid = childValid &&
+ j->second->getFinalized() == Data::NO_LAYER;
+ if (childValid) {
+ child->getNode()->setMandatory(j->second->getMandatory());
+ }
+ }
+ if (childValid) {
+ members[i->first] = child->getNode();
+ }
+ } else {
+ // Removed:
+ childValid = childValid && j != members.end() &&
+ j->second->getFinalized() == Data::NO_LAYER &&
+ j->second->getMandatory() == Data::NO_LAYER;
+ if (childValid) {
+ members.erase(j);
+ }
+ }
+ if (childValid && i->second.directlyModified) {
+ Path path(getAbsolutePath());
+ path.push_back(i->first);
+ components_.addModification(path);
+ globalModifications->add(path);
+ }
+ i->second.child->committed();
+ modifiedChildren_.erase(i);
+ }
+}
+
+void Access::initBroadcasterAndChanges(
+ Modifications::Node const & modifications, Broadcaster * broadcaster,
+ std::vector< css::util::ElementChange > * allChanges)
+{
+ OSL_ASSERT(broadcaster != 0);
+ comphelper::SequenceAsVector< css::beans::PropertyChangeEvent > propChanges;
+ bool collectPropChanges = !propertiesChangeListeners_.empty();
+ for (Modifications::Node::Children::const_iterator i(
+ modifications.children.begin());
+ i != modifications.children.end(); ++i)
+ {
+ rtl::Reference< ChildAccess > child(getChild(i->first));
+ if (child.is()) {
+ switch (child->getNode()->kind()) {
+ case Node::KIND_LOCALIZED_PROPERTY:
+ if (!i->second.children.empty()) {
+ if (Components::allLocales(getRootAccess()->getLocale())) {
+ child->initBroadcasterAndChanges(
+ i->second, broadcaster, allChanges);
+ //TODO: if allChanges==0, recurse only into children
+ // w/ listeners
+ } else {
+ //TODO: filter child mods that are irrelevant for
+ // locale:
+ for (ContainerListeners::iterator j(
+ containerListeners_.begin());
+ j != containerListeners_.end(); ++j)
+ {
+ broadcaster->
+ addContainerElementReplacedNotification(
+ *j,
+ css::container::ContainerEvent(
+ static_cast< cppu::OWeakObject * >(
+ this),
+ css::uno::makeAny(i->first),
+ css::uno::Any(), css::uno::Any()));
+ //TODO: non-void Element, ReplacedElement
+ }
+ PropertyChangeListeners::iterator j(
+ propertyChangeListeners_.find(i->first));
+ if (j != propertyChangeListeners_.end()) {
+ for (PropertyChangeListenersElement::iterator k(
+ j->second.begin());
+ k != j->second.end(); ++k)
+ {
+ broadcaster->addPropertyChangeNotification(
+ *k,
+ css::beans::PropertyChangeEvent(
+ static_cast< cppu::OWeakObject * >(
+ this),
+ i->first, false, -1, css::uno::Any(),
+ css::uno::Any()));
+ }
+ }
+ j = propertyChangeListeners_.find(rtl::OUString());
+ if (j != propertyChangeListeners_.end()) {
+ for (PropertyChangeListenersElement::iterator k(
+ j->second.begin());
+ k != j->second.end(); ++k)
+ {
+ broadcaster->addPropertyChangeNotification(
+ *k,
+ css::beans::PropertyChangeEvent(
+ static_cast< cppu::OWeakObject * >(
+ this),
+ i->first, false, -1, css::uno::Any(),
+ css::uno::Any()));
+ }
+ }
+ if (allChanges != 0) {
+ allChanges->push_back(
+ css::util::ElementChange(
+ css::uno::makeAny(
+ child->getRelativePathRepresentation()),
+ css::uno::Any(), css::uno::Any()));
+ //TODO: non-void Element, ReplacedElement
+ }
+ if (collectPropChanges) {
+ propChanges.push_back(
+ css::beans::PropertyChangeEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ i->first, false, -1, css::uno::Any(),
+ css::uno::Any()));
+ }
+ }
+ }
+ // else: spurious Modifications::Node not representing a change
+ break;
+ case Node::KIND_LOCALIZED_VALUE:
+ OSL_ASSERT(
+ Components::allLocales(getRootAccess()->getLocale()));
+ for (ContainerListeners::iterator j(
+ containerListeners_.begin());
+ j != containerListeners_.end(); ++j)
+ {
+ broadcaster->addContainerElementReplacedNotification(
+ *j,
+ css::container::ContainerEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ css::uno::makeAny(i->first), child->asValue(),
+ css::uno::Any()));
+ //TODO: distinguish add/modify; non-void ReplacedElement
+ }
+ if (allChanges != 0) {
+ allChanges->push_back(
+ css::util::ElementChange(
+ css::uno::makeAny(
+ child->getRelativePathRepresentation()),
+ child->asValue(), css::uno::Any()));
+ //TODO: non-void ReplacedElement
+ }
+ OSL_ASSERT(!collectPropChanges);
+ break;
+ case Node::KIND_PROPERTY:
+ {
+ for (ContainerListeners::iterator j(
+ containerListeners_.begin());
+ j != containerListeners_.end(); ++j)
+ {
+ broadcaster->addContainerElementReplacedNotification(
+ *j,
+ css::container::ContainerEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ css::uno::makeAny(i->first), child->asValue(),
+ css::uno::Any()));
+ //TODO: distinguish add/remove/modify; non-void
+ // ReplacedElement
+ }
+ PropertyChangeListeners::iterator j(
+ propertyChangeListeners_.find(i->first));
+ if (j != propertyChangeListeners_.end()) {
+ for (PropertyChangeListenersElement::iterator k(
+ j->second.begin());
+ k != j->second.end(); ++k)
+ {
+ broadcaster->addPropertyChangeNotification(
+ *k,
+ css::beans::PropertyChangeEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ i->first, false, -1, css::uno::Any(),
+ css::uno::Any()));
+ }
+ }
+ j = propertyChangeListeners_.find(rtl::OUString());
+ if (j != propertyChangeListeners_.end()) {
+ for (PropertyChangeListenersElement::iterator k(
+ j->second.begin());
+ k != j->second.end(); ++k)
+ {
+ broadcaster->addPropertyChangeNotification(
+ *k,
+ css::beans::PropertyChangeEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ i->first, false, -1, css::uno::Any(),
+ css::uno::Any()));
+ }
+ }
+ if (allChanges != 0) {
+ allChanges->push_back(
+ css::util::ElementChange(
+ css::uno::makeAny(
+ child->getRelativePathRepresentation()),
+ child->asValue(), css::uno::Any()));
+ //TODO: non-void ReplacedElement
+ }
+ if (collectPropChanges) {
+ propChanges.push_back(
+ css::beans::PropertyChangeEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ i->first, false, -1, css::uno::Any(),
+ css::uno::Any()));
+ }
+ }
+ break;
+ case Node::KIND_GROUP:
+ case Node::KIND_SET:
+ if (i->second.children.empty()) {
+ if (child->getNode()->getTemplateName().getLength() != 0) {
+ for (ContainerListeners::iterator j(
+ containerListeners_.begin());
+ j != containerListeners_.end(); ++j)
+ {
+ broadcaster->
+ addContainerElementInsertedNotification(
+ *j,
+ css::container::ContainerEvent(
+ static_cast< cppu::OWeakObject * >(
+ this),
+ css::uno::makeAny(i->first),
+ child->asValue(), css::uno::Any()));
+ }
+ if (allChanges != 0) {
+ allChanges->push_back(
+ css::util::ElementChange(
+ css::uno::makeAny(
+ child->getRelativePathRepresentation()),
+ css::uno::Any(), css::uno::Any()));
+ //TODO: non-void Element, ReplacedElement
+ }
+ }
+ // else: spurious Modifications::Node not representing a
+ // change
+ } else {
+ child->initBroadcasterAndChanges(
+ i->second, broadcaster, allChanges);
+ //TODO: if allChanges==0, recurse only into children w/
+ // listeners
+ }
+ break;
+ }
+ } else {
+ switch (getNode()->kind()) {
+ case Node::KIND_LOCALIZED_PROPERTY:
+ // Removed localized property value:
+ OSL_ASSERT(
+ Components::allLocales(getRootAccess()->getLocale()));
+ for (ContainerListeners::iterator j(
+ containerListeners_.begin());
+ j != containerListeners_.end(); ++j)
+ {
+ broadcaster->addContainerElementRemovedNotification(
+ *j,
+ css::container::ContainerEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ css::uno::makeAny(i->first), css::uno::Any(),
+ css::uno::Any()));
+ //TODO: non-void ReplacedElement
+ }
+ if (allChanges != 0) {
+ rtl::OUStringBuffer path(getRelativePathRepresentation());
+ if (path.getLength() != 0) {
+ path.append(sal_Unicode('/'));
+ }
+ path.append(
+ Data::createSegment(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("*")),
+ i->first));
+ allChanges->push_back(
+ css::util::ElementChange(
+ css::uno::makeAny(path.makeStringAndClear()),
+ css::uno::Any(), css::uno::Any()));
+ //TODO: non-void ReplacedElement
+ }
+ OSL_ASSERT(!collectPropChanges);
+ break;
+ case Node::KIND_GROUP:
+ {
+ // Removed (non-localized) extension property:
+ for (ContainerListeners::iterator j(
+ containerListeners_.begin());
+ j != containerListeners_.end(); ++j)
+ {
+ broadcaster->addContainerElementRemovedNotification(
+ *j,
+ css::container::ContainerEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ css::uno::makeAny(i->first), css::uno::Any(),
+ css::uno::Any()));
+ //TODO: non-void ReplacedElement
+ }
+ PropertyChangeListeners::iterator j(
+ propertyChangeListeners_.find(i->first));
+ if (j != propertyChangeListeners_.end()) {
+ for (PropertyChangeListenersElement::iterator k(
+ j->second.begin());
+ k != j->second.end(); ++k)
+ {
+ broadcaster->addPropertyChangeNotification(
+ *k,
+ css::beans::PropertyChangeEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ i->first, false, -1, css::uno::Any(),
+ css::uno::Any()));
+ }
+ }
+ j = propertyChangeListeners_.find(rtl::OUString());
+ if (j != propertyChangeListeners_.end()) {
+ for (PropertyChangeListenersElement::iterator k(
+ j->second.begin());
+ k != j->second.end(); ++k)
+ {
+ broadcaster->addPropertyChangeNotification(
+ *k,
+ css::beans::PropertyChangeEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ i->first, false, -1, css::uno::Any(),
+ css::uno::Any()));
+ }
+ }
+ if (allChanges != 0) {
+ rtl::OUStringBuffer path(
+ getRelativePathRepresentation());
+ if (path.getLength() != 0) {
+ path.append(sal_Unicode('/'));
+ }
+ path.append(i->first);
+ allChanges->push_back(
+ css::util::ElementChange(
+ css::uno::makeAny(path.makeStringAndClear()),
+ css::uno::Any(), css::uno::Any()));
+ //TODO: non-void ReplacedElement
+ }
+ if (collectPropChanges) {
+ propChanges.push_back(
+ css::beans::PropertyChangeEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ i->first, false, -1, css::uno::Any(),
+ css::uno::Any()));
+ }
+ }
+ break;
+ case Node::KIND_SET:
+ // Removed set member:
+ if (i->second.children.empty()) {
+ for (ContainerListeners::iterator j(
+ containerListeners_.begin());
+ j != containerListeners_.end(); ++j)
+ {
+ broadcaster->addContainerElementRemovedNotification(
+ *j,
+ css::container::ContainerEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ css::uno::makeAny(i->first),
+ css::uno::Any(), css::uno::Any()));
+ //TODO: non-void ReplacedElement
+ }
+ //TODO: if (allChanges != 0) {
+ // allChanges->push_back(
+ // css::util::ElementChange(
+ // css::uno::makeAny(...),
+ // css::uno::Any(), css::uno::Any()));
+ // //TODO: non-void ReplacedElement
+ //}
+ }
+ // else: spurious Modifications::Node not representing a change
+ break;
+ default:
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ }
+ }
+ if (!propChanges.empty()) {
+ css::uno::Sequence< css::beans::PropertyChangeEvent > seq(
+ propChanges.getAsConstList());
+ for (PropertiesChangeListeners::iterator i(
+ propertiesChangeListeners_.begin());
+ i != propertiesChangeListeners_.end(); ++i)
+ {
+ broadcaster->addPropertiesChangeNotification(*i, seq);
+ }
+ }
+}
+
+bool Access::isDisposed() const {
+ return disposed_;
+}
+
+Access::ModifiedChild::ModifiedChild() {}
+
+Access::ModifiedChild::ModifiedChild(
+ rtl::Reference< ChildAccess > const & theChild, bool theDirectlyModified):
+ child(theChild), directlyModified(theDirectlyModified)
+{}
+
+css::uno::Sequence< css::uno::Type > Access::getTypes()
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ comphelper::SequenceAsVector< css::uno::Type > types;
+ types.push_back(cppu::UnoType< css::uno::XInterface >::get());
+ types.push_back(cppu::UnoType< css::uno::XWeak >::get());
+ types.push_back(cppu::UnoType< css::lang::XTypeProvider >::get());
+ types.push_back(cppu::UnoType< css::lang::XServiceInfo >::get());
+ types.push_back(cppu::UnoType< css::lang::XComponent >::get());
+ types.push_back(
+ cppu::UnoType< css::container::XHierarchicalNameAccess >::get());
+ types.push_back(cppu::UnoType< css::container::XContainer >::get());
+ types.push_back(cppu::UnoType< css::beans::XExactName >::get());
+ types.push_back(cppu::UnoType< css::container::XHierarchicalName >::get());
+ types.push_back(cppu::UnoType< css::container::XNamed >::get());
+ types.push_back(cppu::UnoType< css::beans::XProperty >::get());
+ types.push_back(cppu::UnoType< css::container::XElementAccess >::get());
+ types.push_back(cppu::UnoType< css::container::XNameAccess >::get());
+ if (getNode()->kind() == Node::KIND_GROUP) {
+ types.push_back(cppu::UnoType< css::beans::XPropertySetInfo >::get());
+ types.push_back(cppu::UnoType< css::beans::XPropertySet >::get());
+ types.push_back(cppu::UnoType< css::beans::XMultiPropertySet >::get());
+ types.push_back(
+ cppu::UnoType< css::beans::XHierarchicalPropertySet >::get());
+ types.push_back(
+ cppu::UnoType< css::beans::XMultiHierarchicalPropertySet >::get());
+ types.push_back(
+ cppu::UnoType< css::beans::XHierarchicalPropertySetInfo >::get());
+ }
+ if (getRootAccess()->isUpdate()) {
+ types.push_back(cppu::UnoType< css::container::XNameReplace >::get());
+ if (getNode()->kind() != Node::KIND_GROUP ||
+ dynamic_cast< GroupNode * >(getNode().get())->isExtensible())
+ {
+ types.push_back(
+ cppu::UnoType< css::container::XNameContainer >::get());
+ }
+ if (getNode()->kind() == Node::KIND_SET) {
+ types.push_back(
+ cppu::UnoType< css::lang::XSingleServiceFactory >::get());
+ }
+ }
+ addTypes(&types);
+ return types.getAsConstList();
+}
+
+css::uno::Sequence< sal_Int8 > Access::getImplementationId()
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ return css::uno::Sequence< sal_Int8 >();
+}
+
+rtl::OUString Access::getImplementationName() throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr Access has no service implementation name")),
+ static_cast< cppu::OWeakObject * >(this));
+}
+
+sal_Bool Access::supportsService(rtl::OUString const & ServiceName)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ css::uno::Sequence< rtl::OUString > names(getSupportedServiceNames());
+ for (sal_Int32 i = 0; i < names.getLength(); ++i) {
+ if (names[i] == ServiceName) {
+ return true;
+ }
+ }
+ return false;
+}
+
+css::uno::Sequence< rtl::OUString > Access::getSupportedServiceNames()
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ comphelper::SequenceAsVector< rtl::OUString > services;
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationAccess")));
+ if (getRootAccess()->isUpdate()) {
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationUpdateAccess")));
+ }
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.HierarchyAccess")));
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.HierarchyElement")));
+ if (getNode()->kind() == Node::KIND_GROUP) {
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.GroupAccess")));
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.PropertyHierarchy")));
+ if (getRootAccess()->isUpdate()) {
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.GroupUpdate")));
+ }
+ } else {
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.SetAccess")));
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.SimpleSetAccess")));
+ if (getRootAccess()->isUpdate()) {
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.SetUpdate")));
+ services.push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.SimpleSetUpdate")));
+ }
+ }
+ addSupportedServiceNames(&services);
+ return services.getAsConstList();
+}
+
+void Access::dispose() throw (css::uno::RuntimeException) {
+ OSL_ASSERT(thisIs(IS_ANY));
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ if (getParentAccess().is()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr dispose inappropriate Access")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ if (disposed_) {
+ return;
+ }
+ initDisposeBroadcaster(&bc);
+ clearListeners();
+ disposed_ = true;
+ }
+ bc.send();
+}
+
+void Access::addEventListener(
+ css::uno::Reference< css::lang::XEventListener > const & xListener)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ {
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ if (!xListener.is()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("null listener")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ if (!disposed_) {
+ disposeListeners_.insert(xListener);
+ return;
+ }
+ }
+ try {
+ xListener->disposing(
+ css::lang::EventObject(static_cast< cppu::OWeakObject * >(this)));
+ } catch (css::lang::DisposedException &) {}
+}
+
+void Access::removeEventListener(
+ css::uno::Reference< css::lang::XEventListener > const & aListener)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ DisposeListeners::iterator i(disposeListeners_.find(aListener));
+ if (i != disposeListeners_.end()) {
+ disposeListeners_.erase(i);
+ }
+}
+
+css::uno::Type Access::getElementType() throw (css::uno::RuntimeException) {
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ rtl::Reference< Node > p(getNode());
+ switch (p->kind()) {
+ case Node::KIND_LOCALIZED_PROPERTY:
+ return mapType(
+ dynamic_cast< LocalizedPropertyNode * >(p.get())->getType());
+ case Node::KIND_GROUP:
+ //TODO: Should a specific type be returned for a non-extensible group
+ // with homogeneous members or for an extensible group that currently
+ // has only homegeneous members?
+ return cppu::UnoType< cppu::UnoVoidType >::get();
+ case Node::KIND_SET:
+ return cppu::UnoType< cppu::UnoVoidType >::get(); //TODO: correct?
+ default:
+ OSL_ASSERT(false);
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("this cannot happen")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+}
+
+sal_Bool Access::hasElements() throw (css::uno::RuntimeException) {
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ return !getAllChildren().empty(); //TODO: optimize
+}
+
+css::uno::Any Access::getByName(rtl::OUString const & aName)
+ throw (
+ css::container::NoSuchElementException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ rtl::Reference< ChildAccess > child(getChild(aName));
+ if (!child.is()) {
+ throw css::container::NoSuchElementException(
+ aName, static_cast< cppu::OWeakObject * >(this));
+ }
+ return child->asValue();
+}
+
+css::uno::Sequence< rtl::OUString > Access::getElementNames()
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ std::vector< rtl::Reference< ChildAccess > > children(getAllChildren());
+ comphelper::SequenceAsVector< rtl::OUString > names;
+ for (std::vector< rtl::Reference< ChildAccess > >::iterator i(
+ children.begin());
+ i != children.end(); ++i)
+ {
+ names.push_back((*i)->getNameInternal());
+ }
+ return names.getAsConstList();
+}
+
+sal_Bool Access::hasByName(rtl::OUString const & aName)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ return getChild(aName).is();
+}
+
+css::uno::Any Access::getByHierarchicalName(rtl::OUString const & aName)
+ throw (css::container::NoSuchElementException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ rtl::Reference< ChildAccess > child(getSubChild(aName));
+ if (!child.is()) {
+ throw css::container::NoSuchElementException(
+ aName, static_cast< cppu::OWeakObject * >(this));
+ }
+ return child->asValue();
+}
+
+sal_Bool Access::hasByHierarchicalName(rtl::OUString const & aName)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ return getSubChild(aName).is();
+}
+
+void Access::addContainerListener(
+ css::uno::Reference< css::container::XContainerListener > const & xListener)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ {
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ if (!xListener.is()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("null listener")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ if (!disposed_) {
+ containerListeners_.insert(xListener);
+ return;
+ }
+ }
+ try {
+ xListener->disposing(
+ css::lang::EventObject(static_cast< cppu::OWeakObject * >(this)));
+ } catch (css::lang::DisposedException &) {}
+}
+
+void Access::removeContainerListener(
+ css::uno::Reference< css::container::XContainerListener > const & xListener)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ ContainerListeners::iterator i(containerListeners_.find(xListener));
+ if (i != containerListeners_.end()) {
+ containerListeners_.erase(i);
+ }
+}
+
+rtl::OUString Access::getExactName(rtl::OUString const & aApproximateName)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ return aApproximateName;
+}
+
+css::uno::Sequence< css::beans::Property > Access::getProperties()
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ std::vector< rtl::Reference< ChildAccess > > children(getAllChildren());
+ comphelper::SequenceAsVector< css::beans::Property > properties;
+ for (std::vector< rtl::Reference< ChildAccess > >::iterator i(
+ children.begin());
+ i != children.end(); ++i)
+ {
+ properties.push_back((*i)->asProperty());
+ }
+ return properties.getAsConstList();
+}
+
+css::beans::Property Access::getPropertyByName(rtl::OUString const & aName)
+ throw (css::beans::UnknownPropertyException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ rtl::Reference< ChildAccess > child(getChild(aName));
+ if (!child.is()) {
+ throw css::beans::UnknownPropertyException(
+ aName, static_cast< cppu::OWeakObject * >(this));
+ }
+ return child->asProperty();
+}
+
+sal_Bool Access::hasPropertyByName(rtl::OUString const & Name)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ return getChild(Name).is();
+}
+
+rtl::OUString Access::getHierarchicalName() throw (css::uno::RuntimeException) {
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ return getRelativePathRepresentation();
+}
+
+rtl::OUString Access::composeHierarchicalName(
+ rtl::OUString const & aRelativeName)
+ throw (
+ css::lang::IllegalArgumentException, css::lang::NoSupportException,
+ css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ if (aRelativeName.getLength() == 0 || aRelativeName[0] == '/') {
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr composeHierarchicalName inappropriate relative"
+ " name")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+ }
+ rtl::OUStringBuffer path(getRelativePathRepresentation());
+ if (path.getLength() != 0) {
+ path.append(sal_Unicode('/'));
+ }
+ path.append(aRelativeName);
+ return path.makeStringAndClear();
+}
+
+rtl::OUString Access::getName() throw (css::uno::RuntimeException) {
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ return getNameInternal();
+}
+
+void Access::setName(rtl::OUString const & aName)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ checkFinalized();
+ Modifications localMods;
+ switch (getNode()->kind()) {
+ case Node::KIND_GROUP:
+ case Node::KIND_SET:
+ {
+ rtl::Reference< Access > parent(getParentAccess());
+ if (parent.is()) {
+ rtl::Reference< Node > node(getNode());
+ if (node->getTemplateName().getLength() != 0) {
+ rtl::Reference< ChildAccess > other(
+ parent->getChild(aName));
+ if (other.get() == this) {
+ break;
+ }
+ if (node->getMandatory() == Data::NO_LAYER &&
+ !(other.is() && other->isFinalized()))
+ {
+ rtl::Reference< RootAccess > root(getRootAccess());
+ rtl::Reference< ChildAccess > childAccess(
+ dynamic_cast< ChildAccess * >(this));
+ localMods.add(getRelativePath());
+ // unbind() modifies the parent chain that
+ // markChildAsModified() walks, so order is
+ // important:
+ parent->markChildAsModified(childAccess);
+ //TODO: must not throw
+ childAccess->unbind(); // must not throw
+ if (other.is()) {
+ other->unbind(); // must not throw
+ }
+ childAccess->bind(root, parent, aName);
+ // must not throw
+ parent->markChildAsModified(childAccess);
+ //TODO: must not throw
+ localMods.add(getRelativePath());
+ break;
+ }
+ }
+ }
+ }
+ // fall through
+ case Node::KIND_LOCALIZED_PROPERTY:
+ // renaming a property could only work for an extension property,
+ // but a localized property is never an extension property
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr setName inappropriate node")),
+ static_cast< cppu::OWeakObject * >(this));
+ default:
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ getNotificationRoot()->initBroadcaster(localMods.getRoot(), &bc);
+ }
+ bc.send();
+}
+
+css::beans::Property Access::getAsProperty() throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ return asProperty();
+}
+
+css::uno::Reference< css::beans::XPropertySetInfo > Access::getPropertySetInfo()
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ return this;
+}
+
+void Access::setPropertyValue(
+ rtl::OUString const & aPropertyName, css::uno::Any const & aValue)
+ throw (
+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ if (!getRootAccess()->isUpdate()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr setPropertyValue on non-update access")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ Modifications localMods;
+ if (!setChildProperty(aPropertyName, aValue, &localMods)) {
+ throw css::beans::UnknownPropertyException(
+ aPropertyName, static_cast< cppu::OWeakObject * >(this));
+ }
+ getNotificationRoot()->initBroadcaster(localMods.getRoot(), &bc);
+ }
+ bc.send();
+}
+
+css::uno::Any Access::getPropertyValue(rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ rtl::Reference< ChildAccess > child(getChild(PropertyName));
+ if (!child.is()) {
+ throw css::beans::UnknownPropertyException(
+ PropertyName, static_cast< cppu::OWeakObject * >(this));
+ }
+ return child->asValue();
+}
+
+void Access::addPropertyChangeListener(
+ rtl::OUString const & aPropertyName,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &
+ xListener)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ {
+ osl::MutexGuard g(lock);
+ if (!xListener.is()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("null listener")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ checkKnownProperty(aPropertyName);
+ if (!disposed_) {
+ propertyChangeListeners_[aPropertyName].insert(xListener);
+ return;
+ }
+ }
+ try {
+ xListener->disposing(
+ css::lang::EventObject(static_cast< cppu::OWeakObject * >(this)));
+ } catch (css::lang::DisposedException &) {}
+}
+
+void Access::removePropertyChangeListener(
+ rtl::OUString const & aPropertyName,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &
+ aListener)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ checkKnownProperty(aPropertyName);
+ PropertyChangeListeners::iterator i(
+ propertyChangeListeners_.find(aPropertyName));
+ if (i != propertyChangeListeners_.end()) {
+ PropertyChangeListenersElement::iterator j(i->second.find(aListener));
+ if (j != i->second.end()) {
+ i->second.erase(j);
+ if (i->second.empty()) {
+ propertyChangeListeners_.erase(i);
+ }
+ }
+ }
+}
+
+void Access::addVetoableChangeListener(
+ rtl::OUString const & PropertyName,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &
+ aListener)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ {
+ osl::MutexGuard g(lock);
+ if (!aListener.is()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("null listener")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ checkKnownProperty(PropertyName);
+ if (!disposed_) {
+ vetoableChangeListeners_[PropertyName].insert(aListener);
+ //TODO: actually call vetoableChangeListeners_
+ return;
+ }
+ }
+ try {
+ aListener->disposing(
+ css::lang::EventObject(static_cast< cppu::OWeakObject * >(this)));
+ } catch (css::lang::DisposedException &) {}
+}
+
+void Access::removeVetoableChangeListener(
+ rtl::OUString const & PropertyName,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &
+ aListener)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ checkKnownProperty(PropertyName);
+ VetoableChangeListeners::iterator i(
+ vetoableChangeListeners_.find(PropertyName));
+ if (i != vetoableChangeListeners_.end()) {
+ VetoableChangeListenersElement::iterator j(i->second.find(aListener));
+ if (j != i->second.end()) {
+ i->second.erase(j);
+ if (i->second.empty()) {
+ vetoableChangeListeners_.erase(i);
+ }
+ }
+ }
+}
+
+void Access::setPropertyValues(
+ css::uno::Sequence< rtl::OUString > const & aPropertyNames,
+ css::uno::Sequence< css::uno::Any > const & aValues)
+ throw (
+ css::beans::PropertyVetoException, css::lang::IllegalArgumentException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ if (!getRootAccess()->isUpdate()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr setPropertyValues on non-update access")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ if (aPropertyNames.getLength() != aValues.getLength()) {
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr setPropertyValues: aPropertyNames/aValues of"
+ " different length")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+ }
+ Modifications localMods;
+ for (sal_Int32 i = 0; i < aPropertyNames.getLength(); ++i) {
+ if (!setChildProperty(aPropertyNames[i], aValues[i], &localMods)) {
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr setPropertyValues inappropriate property"
+ " name")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+ }
+ }
+ getNotificationRoot()->initBroadcaster(localMods.getRoot(), &bc);
+ }
+ bc.send();
+}
+
+css::uno::Sequence< css::uno::Any > Access::getPropertyValues(
+ css::uno::Sequence< rtl::OUString > const & aPropertyNames)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ css::uno::Sequence< css::uno::Any > vals(aPropertyNames.getLength());
+ for (sal_Int32 i = 0; i < aPropertyNames.getLength(); ++i) {
+ rtl::Reference< ChildAccess > child(getChild(aPropertyNames[i]));
+ if (!child.is()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr getPropertyValues inappropriate property"
+ " name")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ vals[i] = child->asValue();
+ }
+ return vals;
+}
+
+void Access::addPropertiesChangeListener(
+ css::uno::Sequence< rtl::OUString > const &,
+ css::uno::Reference< css::beans::XPropertiesChangeListener > const &
+ xListener)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ {
+ osl::MutexGuard g(lock);
+ if (!xListener.is()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("null listener")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ if (!disposed_) {
+ propertiesChangeListeners_.insert(xListener);
+ return;
+ }
+ }
+ try {
+ xListener->disposing(
+ css::lang::EventObject(static_cast< cppu::OWeakObject * >(this)));
+ } catch (css::lang::DisposedException &) {}
+}
+
+void Access::removePropertiesChangeListener(
+ css::uno::Reference< css::beans::XPropertiesChangeListener > const &
+ xListener)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ PropertiesChangeListeners::iterator i(
+ propertiesChangeListeners_.find(xListener));
+ if (i != propertiesChangeListeners_.end()) {
+ propertiesChangeListeners_.erase(i);
+ }
+}
+
+void Access::firePropertiesChangeEvent(
+ css::uno::Sequence< rtl::OUString > const & aPropertyNames,
+ css::uno::Reference< css::beans::XPropertiesChangeListener > const &
+ xListener)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ css::uno::Sequence< css::beans::PropertyChangeEvent > events(
+ aPropertyNames.getLength());
+ for (sal_Int32 i = 0; i < events.getLength(); ++i) {
+ events[i].Source = static_cast< cppu::OWeakObject * >(this);
+ events[i].PropertyName = aPropertyNames[i];
+ events[i].Further = false;
+ events[i].PropertyHandle = -1;
+ }
+ xListener->propertiesChange(events);
+}
+
+css::uno::Reference< css::beans::XHierarchicalPropertySetInfo >
+Access::getHierarchicalPropertySetInfo() throw (css::uno::RuntimeException) {
+ OSL_ASSERT(thisIs(IS_GROUP));
+ return this;
+}
+
+void Access::setHierarchicalPropertyValue(
+ rtl::OUString const & aHierarchicalPropertyName,
+ css::uno::Any const & aValue)
+ throw (
+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ if (!getRootAccess()->isUpdate()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr setHierarchicalPropertyName on non-update"
+ " access")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ rtl::Reference< ChildAccess > child(
+ getSubChild(aHierarchicalPropertyName));
+ if (!child.is()) {
+ throw css::beans::UnknownPropertyException(
+ aHierarchicalPropertyName,
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ child->checkFinalized();
+ Modifications localMods;
+ child->setProperty(aValue, &localMods);
+ getNotificationRoot()->initBroadcaster(localMods.getRoot(), &bc);
+ }
+ bc.send();
+}
+
+css::uno::Any Access::getHierarchicalPropertyValue(
+ rtl::OUString const & aHierarchicalPropertyName)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ rtl::Reference< ChildAccess > child(getSubChild(aHierarchicalPropertyName));
+ if (!child.is()) {
+ throw css::beans::UnknownPropertyException(
+ aHierarchicalPropertyName,
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ return child->asValue();
+}
+
+void Access::setHierarchicalPropertyValues(
+ css::uno::Sequence< rtl::OUString > const & aHierarchicalPropertyNames,
+ css::uno::Sequence< css::uno::Any > const & Values)
+ throw (
+ css::beans::PropertyVetoException, css::lang::IllegalArgumentException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ if (!getRootAccess()->isUpdate()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr setPropertyValues on non-update access")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ if (aHierarchicalPropertyNames.getLength() != Values.getLength()) {
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr setHierarchicalPropertyValues:"
+ " aHierarchicalPropertyNames/Values of different"
+ " length")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+ }
+ Modifications localMods;
+ for (sal_Int32 i = 0; i < aHierarchicalPropertyNames.getLength(); ++i) {
+ rtl::Reference< ChildAccess > child(
+ getSubChild(aHierarchicalPropertyNames[i]));
+ if (!child.is()) {
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr setHierarchicalPropertyValues"
+ " inappropriate property name")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+ }
+ child->checkFinalized();
+ child->setProperty(Values[i], &localMods);
+ }
+ getNotificationRoot()->initBroadcaster(localMods.getRoot(), &bc);
+ }
+ bc.send();
+}
+
+css::uno::Sequence< css::uno::Any > Access::getHierarchicalPropertyValues(
+ css::uno::Sequence< rtl::OUString > const & aHierarchicalPropertyNames)
+ throw (
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ css::uno::Sequence< css::uno::Any > vals(
+ aHierarchicalPropertyNames.getLength());
+ for (sal_Int32 i = 0; i < aHierarchicalPropertyNames.getLength(); ++i) {
+ rtl::Reference< ChildAccess > child(
+ getSubChild(aHierarchicalPropertyNames[i]));
+ if (!child.is()) {
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr getHierarchicalPropertyValues inappropriate"
+ " hierarchical property name")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+ }
+ vals[i] = child->asValue();
+ }
+ return vals;
+}
+
+css::beans::Property Access::getPropertyByHierarchicalName(
+ rtl::OUString const & aHierarchicalName)
+ throw (css::beans::UnknownPropertyException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ rtl::Reference< ChildAccess > child(getSubChild(aHierarchicalName));
+ if (!child.is()) {
+ throw css::beans::UnknownPropertyException(
+ aHierarchicalName, static_cast< cppu::OWeakObject * >(this));
+ }
+ return child->asProperty();
+}
+
+sal_Bool Access::hasPropertyByHierarchicalName(
+ rtl::OUString const & aHierarchicalName)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_GROUP));
+ osl::MutexGuard g(lock);
+ return getSubChild(aHierarchicalName).is();
+}
+
+void Access::replaceByName(
+ rtl::OUString const & aName, css::uno::Any const & aElement)
+ throw (
+ css::lang::IllegalArgumentException,
+ css::container::NoSuchElementException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_UPDATE));
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ rtl::Reference< ChildAccess > child(getChild(aName));
+ if (!child.is()) {
+ throw css::container::NoSuchElementException(
+ aName, static_cast< cppu::OWeakObject * >(this));
+ }
+ child->checkFinalized();
+ Modifications localMods;
+ switch (getNode()->kind()) {
+ case Node::KIND_LOCALIZED_PROPERTY:
+ case Node::KIND_GROUP:
+ child->setProperty(aElement, &localMods);
+ break;
+ case Node::KIND_SET:
+ {
+ rtl::Reference< ChildAccess > freeAcc(
+ getFreeSetMember(aElement));
+ rtl::Reference< RootAccess > root(getRootAccess());
+ localMods.add(child->getRelativePath());
+ child->unbind(); // must not throw
+ freeAcc->bind(root, this, aName); // must not throw
+ markChildAsModified(freeAcc); //TODO: must not throw
+ }
+ break;
+ default:
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ getNotificationRoot()->initBroadcaster(localMods.getRoot(), &bc);
+ }
+ bc.send();
+}
+
+void Access::insertByName(
+ rtl::OUString const & aName, css::uno::Any const & aElement)
+ throw (
+ css::lang::IllegalArgumentException,
+ css::container::ElementExistException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_EXTENSIBLE|IS_UPDATE));
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ checkFinalized();
+ if (getChild(aName).is()) {
+ throw css::container::ElementExistException(
+ aName, static_cast< cppu::OWeakObject * >(this));
+ }
+ Modifications localMods;
+ switch (getNode()->kind()) {
+ case Node::KIND_LOCALIZED_PROPERTY:
+ insertLocalizedValueChild(aName, aElement, &localMods);
+ break;
+ case Node::KIND_GROUP:
+ {
+ checkValue(aElement, TYPE_ANY, true);
+ rtl::Reference< ChildAccess > child(
+ new ChildAccess(
+ components_, getRootAccess(), this, aName,
+ new PropertyNode(
+ Data::NO_LAYER, TYPE_ANY, true, aElement, true)));
+ markChildAsModified(child);
+ localMods.add(child->getRelativePath());
+ }
+ break;
+ case Node::KIND_SET:
+ {
+ rtl::Reference< ChildAccess > freeAcc(
+ getFreeSetMember(aElement));
+ freeAcc->bind(getRootAccess(), this, aName); // must not throw
+ markChildAsModified(freeAcc); //TODO: must not throw
+ localMods.add(freeAcc->getRelativePath());
+ }
+ break;
+ default:
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ getNotificationRoot()->initBroadcaster(localMods.getRoot(), &bc);
+ }
+ bc.send();
+}
+
+void Access::removeByName(rtl::OUString const & aName)
+ throw (
+ css::container::NoSuchElementException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_EXTENSIBLE|IS_UPDATE));
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ rtl::Reference< ChildAccess > child(getChild(aName));
+ if (!child.is() || child->isFinalized() ||
+ child->getNode()->getMandatory() != Data::NO_LAYER)
+ {
+ throw css::container::NoSuchElementException(
+ aName, static_cast< cppu::OWeakObject * >(this));
+ }
+ if (getNode()->kind() == Node::KIND_GROUP) {
+ rtl::Reference< Node > p(child->getNode());
+ if (p->kind() != Node::KIND_PROPERTY ||
+ !dynamic_cast< PropertyNode * >(p.get())->isExtension())
+ {
+ throw css::container::NoSuchElementException(
+ aName, static_cast< cppu::OWeakObject * >(this));
+ }
+ }
+ Modifications localMods;
+ localMods.add(child->getRelativePath());
+ // unbind() modifies the parent chain that markChildAsModified() walks,
+ // so order is important:
+ markChildAsModified(child); //TODO: must not throw
+ child->unbind();
+ getNotificationRoot()->initBroadcaster(localMods.getRoot(), &bc);
+ }
+ bc.send();
+}
+
+css::uno::Reference< css::uno::XInterface > Access::createInstance()
+ throw (css::uno::Exception, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_SET|IS_UPDATE));
+ rtl::OUString tmplName(
+ dynamic_cast< SetNode * >(getNode().get())->getDefaultTemplateName());
+ rtl::Reference< Node > tmpl(
+ components_.getTemplate(Data::NO_LAYER, tmplName));
+ if (!tmpl.is()) {
+ throw css::uno::Exception(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("unknown template ")) +
+ tmplName),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ rtl::Reference< Node > node(tmpl->clone());
+ node->setLayer(Data::NO_LAYER);
+ return static_cast< cppu::OWeakObject * >(
+ new ChildAccess(components_, getRootAccess(), node));
+}
+
+css::uno::Reference< css::uno::XInterface > Access::createInstanceWithArguments(
+ css::uno::Sequence< css::uno::Any > const & aArguments)
+ throw (css::uno::Exception, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_SET|IS_UPDATE));
+ if (aArguments.getLength() != 0) {
+ throw css::uno::Exception(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configuration SimpleSetUpdate createInstanceWithArguments"
+ " must not specify any arguments")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ return createInstance();
+}
+
+rtl::Reference< ChildAccess > Access::getModifiedChild(
+ ModifiedChildren::iterator const & childIterator)
+{
+ return (childIterator->second.child->getParentAccess() == this &&
+ (childIterator->second.child->getNameInternal() ==
+ childIterator->first))
+ ? childIterator->second.child : rtl::Reference< ChildAccess >();
+}
+
+rtl::Reference< ChildAccess > Access::getUnmodifiedChild(
+ rtl::OUString const & name)
+{
+ OSL_ASSERT(modifiedChildren_.find(name) == modifiedChildren_.end());
+ rtl::Reference< Node > node(getNode()->getMember(name));
+ if (!node.is()) {
+ return rtl::Reference< ChildAccess >();
+ }
+ WeakChildMap::iterator i(cachedChildren_.find(name));
+ if (i != cachedChildren_.end()) {
+ rtl::Reference< ChildAccess > child;
+ if (i->second->acquireCounting() > 1) {
+ child.set(i->second); // must not throw
+ }
+ i->second->releaseNondeleting();
+ if (child.is()) {
+ child->setNode(node);
+ return child;
+ }
+ }
+ rtl::Reference< ChildAccess > child(
+ new ChildAccess(components_, getRootAccess(), this, name, node));
+ cachedChildren_[name] = child.get();
+ return child;
+}
+
+rtl::Reference< ChildAccess > Access::getSubChild(rtl::OUString const & path) {
+ rtl::OUString name;
+ bool setElement;
+ rtl::OUString templateName;
+ sal_Int32 i = Data::parseSegment(
+ path, 0, &name, &setElement, &templateName);
+ if (i == -1 || (i != path.getLength() && path[i] != '/')) {
+ return rtl::Reference< ChildAccess >();
+ }
+ rtl::Reference< ChildAccess > child(getChild(name));
+ if (!child.is()) {
+ return rtl::Reference< ChildAccess >();
+ }
+ if (setElement) {
+ rtl::Reference< Node > p(getNode());
+ switch (p->kind()) {
+ case Node::KIND_LOCALIZED_PROPERTY:
+ if (!Components::allLocales(getRootAccess()->getLocale()) ||
+ templateName.getLength() != 0)
+ {
+ return rtl::Reference< ChildAccess >();
+ }
+ break;
+ case Node::KIND_SET:
+ if (templateName.getLength() != 0 &&
+ !dynamic_cast< SetNode * >(p.get())->isValidTemplate(
+ templateName))
+ {
+ return rtl::Reference< ChildAccess >();
+ }
+ break;
+ default:
+ return rtl::Reference< ChildAccess >();
+ }
+ }
+ // For backwards compatibility, ignore a final slash after non-value nodes:
+ return child->isValue()
+ ? (i == path.getLength() ? child : rtl::Reference< ChildAccess >())
+ : (i >= path.getLength() - 1
+ ? child : child->getSubChild(path.copy(i + 1)));
+}
+
+bool Access::setChildProperty(
+ rtl::OUString const & name, css::uno::Any const & value,
+ Modifications * localModifications)
+{
+ OSL_ASSERT(localModifications != 0);
+ rtl::Reference< ChildAccess > child(getChild(name));
+ if (!child.is()) {
+ return false;
+ }
+ child->checkFinalized();
+ child->setProperty(value, localModifications);
+ return true;
+}
+
+css::beans::Property Access::asProperty() {
+ css::uno::Type type;
+ bool nillable;
+ bool removable;
+ rtl::Reference< Node > p(getNode());
+ switch (p->kind()) {
+ case Node::KIND_PROPERTY:
+ {
+ PropertyNode * prop = dynamic_cast< PropertyNode * >(p.get());
+ type = mapType(prop->getType());
+ nillable = prop->isNillable();
+ removable = prop->isExtension();
+ }
+ break;
+ case Node::KIND_LOCALIZED_PROPERTY:
+ {
+ LocalizedPropertyNode * locprop =
+ dynamic_cast< LocalizedPropertyNode *>(p.get());
+ if (Components::allLocales(getRootAccess()->getLocale())) {
+ type = cppu::UnoType< css::uno::XInterface >::get();
+ //TODO: correct?
+ removable = false;
+ } else {
+ type = mapType(locprop->getType());
+ removable = false; //TODO ???
+ }
+ nillable = locprop->isNillable();
+ }
+ break;
+ case Node::KIND_LOCALIZED_VALUE:
+ {
+ LocalizedPropertyNode * locprop =
+ dynamic_cast< LocalizedPropertyNode * >(getParentNode().get());
+ type = mapType(locprop->getType());
+ nillable = locprop->isNillable();
+ removable = false; //TODO ???
+ }
+ break;
+ default:
+ type = cppu::UnoType< css::uno::XInterface >::get(); //TODO: correct?
+ nillable = false;
+ removable = getParentNode()->kind() == Node::KIND_SET;
+ break;
+ }
+ return css::beans::Property(
+ getNameInternal(), -1, type,
+ (css::beans::PropertyAttribute::BOUND | //TODO: correct for group/set?
+ css::beans::PropertyAttribute::CONSTRAINED |
+ (nillable ? css::beans::PropertyAttribute::MAYBEVOID : 0) |
+ (getRootAccess()->isUpdate()
+ ? (removable ? css::beans::PropertyAttribute::REMOVEABLE : 0)
+ : css::beans::PropertyAttribute::READONLY))); //TODO: MAYBEDEFAULT
+}
+
+void Access::checkFinalized() {
+ if (isFinalized()) {
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr modification of finalized item")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+ }
+}
+
+void Access::checkKnownProperty(rtl::OUString const & descriptor) {
+ if (descriptor.getLength() == 0) {
+ return;
+ }
+ rtl::Reference< ChildAccess > child(getChild(descriptor));
+ if (child.is()) {
+ switch (child->getNode()->kind()) {
+ case Node::KIND_PROPERTY:
+ return;
+ case Node::KIND_LOCALIZED_PROPERTY:
+ if (!Components::allLocales(getRootAccess()->getLocale())) {
+ return;
+ }
+ break;
+ case Node::KIND_LOCALIZED_VALUE:
+ if (Components::allLocales(getRootAccess()->getLocale())) {
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ throw css::beans::UnknownPropertyException(
+ descriptor, static_cast< cppu::OWeakObject * >(this));
+}
+
+rtl::Reference< ChildAccess > Access::getFreeSetMember(
+ css::uno::Any const & value)
+{
+ rtl::Reference< ChildAccess > freeAcc;
+ css::uno::Reference< css::lang::XUnoTunnel > tunnel;
+ value >>= tunnel;
+ if (tunnel.is()) {
+ freeAcc.set(
+ reinterpret_cast< ChildAccess * >(
+ tunnel->getSomething(ChildAccess::getTunnelId())));
+ }
+ if (!freeAcc.is() || freeAcc->getParentAccess().is() ||
+ (freeAcc->isInTransaction() &&
+ freeAcc->getRootAccess() != getRootAccess()))
+ {
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr inappropriate set element")),
+ static_cast< cppu::OWeakObject * >(this), 1);
+ }
+ OSL_ASSERT(dynamic_cast< SetNode * >(getNode().get()) != 0);
+ if (!dynamic_cast< SetNode * >(getNode().get())->isValidTemplate(
+ freeAcc->getNode()->getTemplateName()))
+ {
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr inappropriate set element")),
+ static_cast< cppu::OWeakObject * >(this), 1);
+ }
+ return freeAcc;
+}
+
+rtl::Reference< Access > Access::getNotificationRoot() {
+ for (rtl::Reference< Access > p(this);;) {
+ rtl::Reference< Access > parent(p->getParentAccess());
+ if (!parent.is()) {
+ return p;
+ }
+ p = parent;
+ }
+}
+
+#if OSL_DEBUG_LEVEL > 0
+bool Access::thisIs(int what) {
+ osl::MutexGuard g(lock);
+ rtl::Reference< Node > p(getNode());
+ Node::Kind k(p->kind());
+ return k != Node::KIND_PROPERTY && k != Node::KIND_LOCALIZED_VALUE &&
+ ((what & IS_GROUP) == 0 || k == Node::KIND_GROUP) &&
+ ((what & IS_SET) == 0 || k == Node::KIND_SET) &&
+ ((what & IS_EXTENSIBLE) == 0 || k != Node::KIND_GROUP ||
+ dynamic_cast< GroupNode * >(p.get())->isExtensible()) &&
+ ((what & IS_GROUP_MEMBER) == 0 ||
+ getParentNode()->kind() == Node::KIND_GROUP) ||
+ ((what & IS_SET_MEMBER) == 0 ||
+ getParentNode()->kind() == Node::KIND_SET) ||
+ ((what & IS_UPDATE) == 0 || getRootAccess()->isUpdate());
+}
+#endif
+
+}
diff --git a/configmgr2/source/access.hxx b/configmgr2/source/access.hxx
new file mode 100644
index 000000000000..70e9e5302290
--- /dev/null
+++ b/configmgr2/source/access.hxx
@@ -0,0 +1,584 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_ACCESS_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_ACCESS_HXX
+
+#include "sal/config.h"
+
+#include <map>
+#include <set>
+#include <vector>
+
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/beans/PropertyVetoException.hpp"
+#include "com/sun/star/beans/UnknownPropertyException.hpp"
+#include "com/sun/star/beans/XExactName.hpp"
+#include "com/sun/star/beans/XHierarchicalPropertySet.hpp"
+#include "com/sun/star/beans/XHierarchicalPropertySetInfo.hpp"
+#include "com/sun/star/beans/XMultiHierarchicalPropertySet.hpp"
+#include "com/sun/star/beans/XMultiPropertySet.hpp"
+#include "com/sun/star/beans/XProperty.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+#include "com/sun/star/beans/XPropertySetInfo.hpp"
+#include "com/sun/star/container/ElementExistException.hpp"
+#include "com/sun/star/container/NoSuchElementException.hpp"
+#include "com/sun/star/container/XContainer.hpp"
+#include "com/sun/star/container/XHierarchicalName.hpp"
+#include "com/sun/star/container/XHierarchicalNameAccess.hpp"
+#include "com/sun/star/container/XNameContainer.hpp"
+#include "com/sun/star/container/XNamed.hpp"
+#include "com/sun/star/lang/IllegalArgumentException.hpp"
+#include "com/sun/star/lang/NoSupportException.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/lang/XComponent.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/XTypeProvider.hpp"
+#include "com/sun/star/lang/XSingleServiceFactory.hpp"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "cppuhelper/weak.hxx"
+#include "osl/interlck.h"
+#include "rtl/ref.hxx"
+#include "sal/types.h"
+
+#include "modifications.hxx"
+#include "path.hxx"
+#include "type.hxx"
+
+namespace com { namespace sun { namespace star {
+ namespace beans {
+ class XHierarchicalPropertySetInfo;
+ class XPropertiesChangeListener;
+ class XPropertyChangeListener;
+ class XVetoableChangeListener;
+ struct Property;
+ }
+ namespace container { class XContainerListener; }
+ namespace lang { class XEventListener; }
+ namespace uno {
+ class Any;
+ class Type;
+ class XInterface;
+ }
+ namespace util { struct ElementChange; }
+} } }
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class Broadcaster;
+class Change;
+class ChildAccess;
+class Components;
+class Node;
+class RootAccess;
+
+class Access:
+ public cppu::OWeakObject, public com::sun::star::lang::XTypeProvider,
+ public com::sun::star::lang::XServiceInfo,
+ public com::sun::star::lang::XComponent,
+ public com::sun::star::container::XHierarchicalNameAccess,
+ public com::sun::star::container::XContainer,
+ public com::sun::star::beans::XExactName,
+ public com::sun::star::beans::XPropertySetInfo,
+ public com::sun::star::container::XHierarchicalName,
+ public com::sun::star::container::XNamed,
+ public com::sun::star::beans::XProperty,
+ public com::sun::star::beans::XPropertySet,
+ public com::sun::star::beans::XMultiPropertySet,
+ public com::sun::star::beans::XHierarchicalPropertySet,
+ public com::sun::star::beans::XMultiHierarchicalPropertySet,
+ public com::sun::star::beans::XHierarchicalPropertySetInfo,
+ public com::sun::star::container::XNameContainer,
+ public com::sun::star::lang::XSingleServiceFactory,
+ private boost::noncopyable
+{
+public:
+ oslInterlockedCount acquireCounting();
+
+ void releaseNondeleting();
+
+ bool isValue();
+
+ void markChildAsModified(rtl::Reference< ChildAccess > const & child);
+
+ void releaseChild(rtl::OUString const & name);
+
+ virtual Path getAbsolutePath() = 0;
+
+ virtual Path getRelativePath() = 0;
+
+ virtual rtl::OUString getRelativePathRepresentation() = 0;
+
+ virtual rtl::Reference< Node > getNode() = 0;
+
+ virtual bool isFinalized() = 0;
+
+ virtual void initBroadcaster(
+ Modifications::Node const & modifications, Broadcaster * broadcaster);
+
+ using OWeakObject::acquire;
+ using OWeakObject::release;
+
+protected:
+ Access(Components & components);
+
+ virtual ~Access();
+
+ virtual rtl::OUString getNameInternal() = 0;
+
+ virtual rtl::Reference< RootAccess > getRootAccess() = 0;
+
+ virtual rtl::Reference< Access > getParentAccess() = 0;
+
+ virtual void addTypes(std::vector< com::sun::star::uno::Type > * types)
+ const = 0;
+
+ virtual void addSupportedServiceNames(
+ std::vector< rtl::OUString > * services) = 0;
+
+ virtual void initDisposeBroadcaster(Broadcaster * broadcaster);
+
+ virtual void clearListeners() throw ();
+
+ virtual com::sun::star::uno::Any SAL_CALL queryInterface(
+ com::sun::star::uno::Type const & aType)
+ throw (com::sun::star::uno::RuntimeException);
+
+ Components & getComponents() const;
+
+ void checkLocalizedPropertyAccess();
+
+ rtl::Reference< Node > getParentNode();
+
+ rtl::Reference< ChildAccess > getChild(rtl::OUString const & name);
+
+ std::vector< rtl::Reference< ChildAccess > > getAllChildren();
+
+ void checkValue(
+ com::sun::star::uno::Any const & value, Type type, bool nillable);
+
+ void insertLocalizedValueChild(
+ rtl::OUString const & name, com::sun::star::uno::Any const & value,
+ Modifications * localModifications);
+
+ void reportChildChanges(
+ std::vector< com::sun::star::util::ElementChange > * changes);
+
+ void commitChildChanges(bool valid, Modifications * globalModifications);
+
+ void initBroadcasterAndChanges(
+ Modifications::Node const & modifications, Broadcaster * broadcaster,
+ std::vector< com::sun::star::util::ElementChange > * changes);
+
+ bool isDisposed() const;
+
+private:
+ struct ModifiedChild {
+ rtl::Reference< ChildAccess > child;
+ bool directlyModified;
+
+ ModifiedChild();
+
+ ModifiedChild(
+ rtl::Reference< ChildAccess > const & theChild,
+ bool theDirectlyModified);
+ };
+
+ typedef std::map< rtl::OUString, ModifiedChild > ModifiedChildren;
+
+ virtual com::sun::star::uno::Sequence< com::sun::star::uno::Type > SAL_CALL
+ getTypes() throw (com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL
+ getImplementationId() throw (com::sun::star::uno::RuntimeException);
+
+ virtual rtl::OUString SAL_CALL getImplementationName()
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
+ getSupportedServiceNames() throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL dispose()
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL addEventListener(
+ com::sun::star::uno::Reference< com::sun::star::lang::XEventListener >
+ const & xListener)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL removeEventListener(
+ com::sun::star::uno::Reference< com::sun::star::lang::XEventListener >
+ const & aListener)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Type SAL_CALL getElementType()
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL hasElements()
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Any SAL_CALL getByName(
+ rtl::OUString const & aName)
+ throw (
+ com::sun::star::container::NoSuchElementException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
+ getElementNames() throw (com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL hasByName(rtl::OUString const & aName)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Any SAL_CALL getByHierarchicalName(
+ rtl::OUString const & aName)
+ throw (
+ com::sun::star::container::NoSuchElementException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL hasByHierarchicalName(rtl::OUString const & aName)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL addContainerListener(
+ com::sun::star::uno::Reference<
+ com::sun::star::container::XContainerListener > const & xListener)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL removeContainerListener(
+ com::sun::star::uno::Reference<
+ com::sun::star::container::XContainerListener > const & xListener)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual rtl::OUString SAL_CALL getExactName(
+ rtl::OUString const & aApproximateName)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Sequence< com::sun::star::beans::Property >
+ SAL_CALL getProperties() throw (com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::beans::Property SAL_CALL getPropertyByName(
+ rtl::OUString const & aName)
+ throw (
+ com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL hasPropertyByName(rtl::OUString const & Name)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual rtl::OUString SAL_CALL getHierarchicalName()
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual rtl::OUString SAL_CALL composeHierarchicalName(
+ rtl::OUString const & aRelativeName)
+ throw (
+ com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::lang::NoSupportException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual rtl::OUString SAL_CALL getName()
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL setName(rtl::OUString const & aName)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::beans::Property SAL_CALL getAsProperty()
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual
+ com::sun::star::uno::Reference< com::sun::star::beans::XPropertySetInfo >
+ SAL_CALL getPropertySetInfo() throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL setPropertyValue(
+ rtl::OUString const & aPropertyName,
+ com::sun::star::uno::Any const & aValue)
+ throw (
+ com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::beans::PropertyVetoException,
+ com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Any SAL_CALL getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL addPropertyChangeListener(
+ rtl::OUString const & aPropertyName,
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertyChangeListener > const & xListener)
+ throw (
+ com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL removePropertyChangeListener(
+ rtl::OUString const & aPropertyName,
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertyChangeListener > const & aListener)
+ throw (
+ com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL addVetoableChangeListener(
+ rtl::OUString const & PropertyName,
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XVetoableChangeListener > const & aListener)
+ throw (
+ com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL removeVetoableChangeListener(
+ rtl::OUString const & PropertyName,
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XVetoableChangeListener > const & aListener)
+ throw (
+ com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL setPropertyValues(
+ com::sun::star::uno::Sequence< rtl::OUString > const & aPropertyNames,
+ com::sun::star::uno::Sequence< com::sun::star::uno::Any > const &
+ aValues)
+ throw (
+ com::sun::star::beans::PropertyVetoException,
+ com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Sequence< com::sun::star::uno::Any > SAL_CALL
+ getPropertyValues(
+ com::sun::star::uno::Sequence< rtl::OUString > const & aPropertyNames)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL addPropertiesChangeListener(
+ com::sun::star::uno::Sequence< rtl::OUString > const & aPropertyNames,
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertiesChangeListener > const &
+ xListener)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL removePropertiesChangeListener(
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertiesChangeListener > const &
+ xListener)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL firePropertiesChangeEvent(
+ com::sun::star::uno::Sequence< rtl::OUString > const & aPropertyNames,
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertiesChangeListener > const &
+ xListener)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XHierarchicalPropertySetInfo > SAL_CALL
+ getHierarchicalPropertySetInfo()
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL setHierarchicalPropertyValue(
+ rtl::OUString const & aHierarchicalPropertyName,
+ com::sun::star::uno::Any const & aValue)
+ throw (
+ com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::beans::PropertyVetoException,
+ com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Any SAL_CALL getHierarchicalPropertyValue(
+ rtl::OUString const & aHierarchicalPropertyName)
+ throw (
+ com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL setHierarchicalPropertyValues(
+ com::sun::star::uno::Sequence< rtl::OUString > const &
+ aHierarchicalPropertyNames,
+ com::sun::star::uno::Sequence< com::sun::star::uno::Any > const &
+ Values)
+ throw (
+ com::sun::star::beans::PropertyVetoException,
+ com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Sequence< com::sun::star::uno::Any > SAL_CALL
+ getHierarchicalPropertyValues(
+ com::sun::star::uno::Sequence< rtl::OUString > const &
+ aHierarchicalPropertyNames)
+ throw (
+ com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::beans::Property SAL_CALL
+ getPropertyByHierarchicalName(rtl::OUString const & aHierarchicalName)
+ throw (
+ com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL hasPropertyByHierarchicalName(
+ rtl::OUString const & aHierarchicalName)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL replaceByName(
+ rtl::OUString const & aName, com::sun::star::uno::Any const & aElement)
+ throw (
+ com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::container::NoSuchElementException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL insertByName(
+ rtl::OUString const & aName, com::sun::star::uno::Any const & aElement)
+ throw (
+ com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::container::ElementExistException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL removeByName(rtl::OUString const & aName)
+ throw (
+ com::sun::star::container::NoSuchElementException,
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
+ SAL_CALL createInstance()
+ throw (
+ com::sun::star::uno::Exception,
+ com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
+ SAL_CALL createInstanceWithArguments(
+ com::sun::star::uno::Sequence< com::sun::star::uno::Any > const &
+ aArguments)
+ throw (
+ com::sun::star::uno::Exception,
+ com::sun::star::uno::RuntimeException);
+
+ rtl::Reference< ChildAccess > getModifiedChild(
+ ModifiedChildren::iterator const & childIterator);
+
+ rtl::Reference< ChildAccess > getUnmodifiedChild(
+ rtl::OUString const & name);
+
+ rtl::Reference< ChildAccess > getSubChild(rtl::OUString const & path);
+
+ bool setChildProperty(
+ rtl::OUString const & name, com::sun::star::uno::Any const & value,
+ Modifications * localModifications);
+
+ com::sun::star::beans::Property asProperty();
+
+ void checkFinalized();
+
+ void checkKnownProperty(rtl::OUString const & descriptor);
+
+ rtl::Reference< ChildAccess > getFreeSetMember(
+ com::sun::star::uno::Any const & value);
+
+ rtl::Reference< Access > getNotificationRoot();
+
+ typedef std::map< rtl::OUString, ChildAccess * > WeakChildMap;
+
+ typedef
+ std::multiset<
+ com::sun::star::uno::Reference<
+ com::sun::star::lang::XEventListener > >
+ DisposeListeners;
+
+ typedef
+ std::multiset<
+ com::sun::star::uno::Reference<
+ com::sun::star::container::XContainerListener > >
+ ContainerListeners;
+
+ typedef
+ std::multiset<
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertyChangeListener > >
+ PropertyChangeListenersElement;
+
+ typedef std::map< rtl::OUString, PropertyChangeListenersElement >
+ PropertyChangeListeners;
+
+ typedef
+ std::multiset<
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XVetoableChangeListener > >
+ VetoableChangeListenersElement;
+
+ typedef std::map< rtl::OUString, VetoableChangeListenersElement >
+ VetoableChangeListeners;
+
+ typedef
+ std::multiset<
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertiesChangeListener > >
+ PropertiesChangeListeners;
+
+ Components & components_;
+ ModifiedChildren modifiedChildren_;
+ WeakChildMap cachedChildren_;
+ DisposeListeners disposeListeners_;
+ ContainerListeners containerListeners_;
+ PropertyChangeListeners propertyChangeListeners_;
+ VetoableChangeListeners vetoableChangeListeners_;
+ PropertiesChangeListeners propertiesChangeListeners_;
+ bool disposed_;
+
+#if OSL_DEBUG_LEVEL > 0
+protected:
+ enum {
+ IS_ANY = 0, IS_GROUP = 0x01, IS_SET = 0x02, IS_EXTENSIBLE = 0x04,
+ IS_GROUP_MEMBER = 0x08, IS_SET_MEMBER = 0x10, IS_UPDATE = 0x20 };
+ bool thisIs(int what);
+#endif
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/broadcaster.cxx b/configmgr2/source/broadcaster.cxx
new file mode 100644
index 000000000000..c9e41636985a
--- /dev/null
+++ b/configmgr2/source/broadcaster.cxx
@@ -0,0 +1,239 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "com/sun/star/beans/XPropertiesChangeListener.hpp"
+#include "com/sun/star/beans/XPropertyChangeListener.hpp"
+#include "com/sun/star/container/XContainerListener.hpp"
+#include "com/sun/star/lang/DisposedException.hpp"
+#include "com/sun/star/lang/XEventListener.hpp"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "com/sun/star/util/XChangesListener.hpp"
+#include "osl/diagnose.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "broadcaster.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+void Broadcaster::addDisposeNotification(
+ css::uno::Reference< css::lang::XEventListener > const & listener,
+ css::lang::EventObject const & event)
+{
+ disposeNotifications_.push_back(DisposeNotification(listener, event));
+}
+
+void Broadcaster::addContainerElementReplacedNotification(
+ css::uno::Reference< css::container::XContainerListener > const & listener,
+ css::container::ContainerEvent const & event)
+{
+ containerElementReplacedNotifications_.push_back(
+ ContainerNotification(listener, event));
+}
+
+void Broadcaster::addContainerElementInsertedNotification(
+ css::uno::Reference< css::container::XContainerListener > const & listener,
+ css::container::ContainerEvent const & event)
+{
+ containerElementInsertedNotifications_.push_back(
+ ContainerNotification(listener, event));
+}
+
+void Broadcaster::addContainerElementRemovedNotification(
+ css::uno::Reference< css::container::XContainerListener > const & listener,
+ css::container::ContainerEvent const & event)
+{
+ containerElementRemovedNotifications_.push_back(
+ ContainerNotification(listener, event));
+}
+
+void Broadcaster::addPropertyChangeNotification(
+ css::uno::Reference< css::beans::XPropertyChangeListener > const & listener,
+ css::beans::PropertyChangeEvent const & event)
+{
+ propertyChangeNotifications_.push_back(
+ PropertyChangeNotification(listener, event));
+}
+
+void Broadcaster::addPropertiesChangeNotification(
+ css::uno::Reference< css::beans::XPropertiesChangeListener > const &
+ listener,
+ css::uno::Sequence< css::beans::PropertyChangeEvent > const & event)
+{
+ propertiesChangeNotifications_.push_back(
+ PropertiesChangeNotification(listener, event));
+}
+
+void Broadcaster::addChangesNotification(
+ css::uno::Reference< css::util::XChangesListener > const & listener,
+ css::util::ChangesEvent const & event)
+{
+ changesNotifications_.push_back(ChangesNotification(listener, event));
+}
+
+void Broadcaster::send() {
+ bool exception = false;
+ for (DisposeNotifications::iterator i(disposeNotifications_.begin());
+ i != disposeNotifications_.end(); ++i) {
+ try {
+ i->listener->disposing(i->event);
+ } catch (css::lang::DisposedException &) {
+ } catch (css::uno::Exception &) {
+ exception = true;
+ }
+ }
+ for (ContainerNotifications::iterator i(
+ containerElementInsertedNotifications_.begin());
+ i != containerElementInsertedNotifications_.end(); ++i)
+ {
+ try {
+ i->listener->elementInserted(i->event);
+ } catch (css::lang::DisposedException &) {
+ } catch (css::uno::Exception &) {
+ exception = true;
+ }
+ }
+ for (ContainerNotifications::iterator i(
+ containerElementRemovedNotifications_.begin());
+ i != containerElementRemovedNotifications_.end(); ++i)
+ {
+ try {
+ i->listener->elementRemoved(i->event);
+ } catch (css::lang::DisposedException &) {
+ } catch (css::uno::Exception &) {
+ exception = true;
+ }
+ }
+ for (ContainerNotifications::iterator i(
+ containerElementReplacedNotifications_.begin());
+ i != containerElementReplacedNotifications_.end(); ++i)
+ {
+ try {
+ i->listener->elementReplaced(i->event);
+ } catch (css::lang::DisposedException &) {
+ } catch (css::uno::Exception &) {
+ exception = true;
+ }
+ }
+ for (PropertyChangeNotifications::iterator i(
+ propertyChangeNotifications_.begin());
+ i != propertyChangeNotifications_.end(); ++i)
+ {
+ try {
+ i->listener->propertyChange(i->event);
+ } catch (css::lang::DisposedException &) {
+ } catch (css::uno::Exception &) {
+ exception = true;
+ }
+ }
+ for (PropertiesChangeNotifications::iterator i(
+ propertiesChangeNotifications_.begin());
+ i != propertiesChangeNotifications_.end(); ++i)
+ {
+ try {
+ i->listener->propertiesChange(i->event);
+ } catch (css::lang::DisposedException &) {
+ } catch (css::uno::Exception &) {
+ exception = true;
+ }
+ }
+ for (ChangesNotifications::iterator i(changesNotifications_.begin());
+ i != changesNotifications_.end(); ++i) {
+ try {
+ i->listener->changesOccurred(i->event);
+ } catch (css::lang::DisposedException &) {
+ } catch (css::uno::Exception &) {
+ exception = true;
+ }
+ }
+ if (exception) { //TODO
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr exceptions during listener notification")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+}
+
+Broadcaster::DisposeNotification::DisposeNotification(
+ css::uno::Reference< css::lang::XEventListener > const & theListener,
+ css::lang::EventObject const & theEvent):
+ listener(theListener), event(theEvent)
+{
+ OSL_ASSERT(theListener.is());
+}
+
+Broadcaster::ContainerNotification::ContainerNotification(
+ css::uno::Reference< css::container::XContainerListener > const &
+ theListener,
+ css::container::ContainerEvent const & theEvent):
+ listener(theListener), event(theEvent)
+{
+ OSL_ASSERT(theListener.is());
+}
+
+Broadcaster::PropertyChangeNotification::PropertyChangeNotification(
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &
+ theListener,
+ css::beans::PropertyChangeEvent const & theEvent):
+ listener(theListener), event(theEvent)
+{
+ OSL_ASSERT(theListener.is());
+}
+
+Broadcaster::PropertiesChangeNotification::PropertiesChangeNotification(
+ css::uno::Reference< css::beans::XPropertiesChangeListener > const &
+ theListener,
+ css::uno::Sequence< css::beans::PropertyChangeEvent > const & theEvent):
+ listener(theListener), event(theEvent)
+{
+ OSL_ASSERT(theListener.is());
+}
+
+Broadcaster::ChangesNotification::ChangesNotification(
+ css::uno::Reference< css::util::XChangesListener > const & theListener,
+ css::util::ChangesEvent const & theEvent):
+ listener(theListener), event(theEvent)
+{
+ OSL_ASSERT(theListener.is());
+}
+
+}
diff --git a/configmgr2/source/broadcaster.hxx b/configmgr2/source/broadcaster.hxx
new file mode 100644
index 000000000000..88f8d908972a
--- /dev/null
+++ b/configmgr2/source/broadcaster.hxx
@@ -0,0 +1,183 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_BROADCASTER_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_BROADCASTER_HXX
+
+#include "sal/config.h"
+
+#include <vector>
+
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/beans/PropertyChangeEvent.hpp"
+#include "com/sun/star/container/ContainerEvent.hpp"
+#include "com/sun/star/lang/EventObject.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/util/ChangesEvent.hpp"
+
+namespace com { namespace sun { namespace star {
+ namespace beans {
+ class XPropertiesChangeListener;
+ class XPropertyChangeListener;
+ }
+ namespace container { class XContainerListener; }
+ namespace lang { class XEventListener; }
+ namespace util { class XChangesListener; }
+} } }
+
+namespace configmgr {
+
+class Access;
+
+class Broadcaster: private boost::noncopyable {
+public:
+ void addDisposeNotification(
+ com::sun::star::uno::Reference< com::sun::star::lang::XEventListener >
+ const & listener,
+ com::sun::star::lang::EventObject const & event);
+
+ void addContainerElementInsertedNotification(
+ com::sun::star::uno::Reference<
+ com::sun::star::container::XContainerListener > const & listener,
+ com::sun::star::container::ContainerEvent const & event);
+
+ void addContainerElementRemovedNotification(
+ com::sun::star::uno::Reference<
+ com::sun::star::container::XContainerListener > const & listener,
+ com::sun::star::container::ContainerEvent const & event);
+
+ void addContainerElementReplacedNotification(
+ com::sun::star::uno::Reference<
+ com::sun::star::container::XContainerListener > const & listener,
+ com::sun::star::container::ContainerEvent const & event);
+
+ void addPropertyChangeNotification(
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertyChangeListener > const & listener,
+ com::sun::star::beans::PropertyChangeEvent const & event);
+
+ void addPropertiesChangeNotification(
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertiesChangeListener > const & listener,
+ com::sun::star::uno::Sequence<
+ com::sun::star::beans::PropertyChangeEvent > const & event);
+
+ void addChangesNotification(
+ com::sun::star::uno::Reference< com::sun::star::util::XChangesListener >
+ const & listener,
+ com::sun::star::util::ChangesEvent const & event);
+
+ void send();
+
+private:
+ struct DisposeNotification {
+ com::sun::star::uno::Reference< com::sun::star::lang::XEventListener >
+ listener;
+ com::sun::star::lang::EventObject event;
+
+ DisposeNotification(
+ com::sun::star::uno::Reference<
+ com::sun::star::lang::XEventListener > const & theListener,
+ com::sun::star::lang::EventObject const & theEvent);
+ };
+
+ struct ContainerNotification {
+ com::sun::star::uno::Reference<
+ com::sun::star::container::XContainerListener > listener;
+ com::sun::star::container::ContainerEvent event;
+
+ ContainerNotification(
+ com::sun::star::uno::Reference<
+ com::sun::star::container::XContainerListener > const &
+ theListener,
+ com::sun::star::container::ContainerEvent const & theEvent);
+ };
+
+ struct PropertyChangeNotification {
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertyChangeListener > listener;
+ com::sun::star::beans::PropertyChangeEvent event;
+
+ PropertyChangeNotification(
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertyChangeListener > const &
+ theListener,
+ com::sun::star::beans::PropertyChangeEvent const & theEvent);
+ };
+
+ struct PropertiesChangeNotification {
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertiesChangeListener > listener;
+ com::sun::star::uno::Sequence<
+ com::sun::star::beans::PropertyChangeEvent > event;
+
+ PropertiesChangeNotification(
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertiesChangeListener > const &
+ theListener,
+ com::sun::star::uno::Sequence<
+ com::sun::star::beans::PropertyChangeEvent > const & theEvent);
+ };
+
+ struct ChangesNotification {
+ com::sun::star::uno::Reference< com::sun::star::util::XChangesListener >
+ listener;
+ com::sun::star::util::ChangesEvent event;
+
+ ChangesNotification(
+ com::sun::star::uno::Reference<
+ com::sun::star::util::XChangesListener > const & theListener,
+ com::sun::star::util::ChangesEvent const & theEvent);
+ };
+
+ typedef std::vector< DisposeNotification > DisposeNotifications;
+
+ typedef std::vector< ContainerNotification > ContainerNotifications;
+
+ typedef std::vector< PropertyChangeNotification >
+ PropertyChangeNotifications;
+
+ typedef std::vector< PropertiesChangeNotification >
+ PropertiesChangeNotifications;
+
+ typedef std::vector< ChangesNotification > ChangesNotifications;
+
+ DisposeNotifications disposeNotifications_;
+ ContainerNotifications containerElementInsertedNotifications_;
+ ContainerNotifications containerElementRemovedNotifications_;
+ ContainerNotifications containerElementReplacedNotifications_;
+ PropertyChangeNotifications propertyChangeNotifications_;
+ PropertiesChangeNotifications propertiesChangeNotifications_;
+ ChangesNotifications changesNotifications_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/childaccess.cxx b/configmgr2/source/childaccess.cxx
new file mode 100644
index 000000000000..d5a8904679fb
--- /dev/null
+++ b/configmgr2/source/childaccess.cxx
@@ -0,0 +1,383 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <vector>
+
+#include "com/sun/star/container/XChild.hpp"
+#include "com/sun/star/lang/NoSupportException.hpp"
+#include "com/sun/star/lang/XUnoTunnel.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/Type.hxx"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "cppu/unotype.hxx"
+#include "cppuhelper/queryinterface.hxx"
+#include "cppuhelper/weak.hxx"
+#include "osl/diagnose.h"
+#include "osl/mutex.hxx"
+#include "rtl/ref.hxx"
+#include "rtl/string.h"
+#include "rtl/ustrbuf.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "rtl/uuid.h"
+#include "sal/types.h"
+
+#include "access.hxx"
+#include "childaccess.hxx"
+#include "components.hxx"
+#include "data.hxx"
+#include "groupnode.hxx"
+#include "localizedpropertynode.hxx"
+#include "localizedvaluenode.hxx"
+#include "lock.hxx"
+#include "modifications.hxx"
+#include "node.hxx"
+#include "path.hxx"
+#include "propertynode.hxx"
+#include "rootaccess.hxx"
+#include "setnode.hxx"
+#include "type.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+css::uno::Sequence< sal_Int8 > ChildAccess::getTunnelId() {
+ static css::uno::Sequence< sal_Int8 > id;
+ if (id.getLength() == 0) {
+ css::uno::Sequence< sal_Int8 > uuid(16);
+ rtl_createUuid(
+ reinterpret_cast< sal_uInt8 * >(uuid.getArray()), 0, false);
+ id = uuid;
+ }
+ return id;
+}
+
+ChildAccess::ChildAccess(
+ Components & components, rtl::Reference< RootAccess > const & root,
+ rtl::Reference< Access > const & parent, rtl::OUString const & name,
+ rtl::Reference< Node > const & node):
+ Access(components), root_(root), parent_(parent), name_(name), node_(node),
+ inTransaction_(false)
+{
+ OSL_ASSERT(root.is() && parent.is() && node.is());
+}
+
+ChildAccess::ChildAccess(
+ Components & components, rtl::Reference< RootAccess > const & root,
+ rtl::Reference< Node > const & node):
+ Access(components), root_(root), node_(node), inTransaction_(false)
+{
+ OSL_ASSERT(root.is() && node.is());
+}
+
+Path ChildAccess::getAbsolutePath() {
+ OSL_ASSERT(getParentAccess().is());
+ Path path(getParentAccess()->getAbsolutePath());
+ path.push_back(name_);
+ return path;
+}
+
+Path ChildAccess::getRelativePath() {
+ Path path;
+ rtl::Reference< Access > parent(getParentAccess());
+ if (parent.is()) {
+ path = parent->getRelativePath();
+ }
+ path.push_back(name_);
+ return path;
+}
+
+rtl::OUString ChildAccess::getRelativePathRepresentation() {
+ rtl::OUStringBuffer path;
+ rtl::Reference< Access > parent(getParentAccess());
+ if (parent.is()) {
+ path.append(parent->getRelativePathRepresentation());
+ if (path.getLength() != 0) {
+ path.append(sal_Unicode('/'));
+ }
+ }
+ path.append(Data::createSegment(node_->getTemplateName(), name_));
+ return path.makeStringAndClear();
+}
+
+rtl::Reference< Node > ChildAccess::getNode() {
+ return node_;
+}
+
+bool ChildAccess::isFinalized() {
+ return node_->getFinalized() != Data::NO_LAYER ||
+ (parent_.is() && parent_->isFinalized());
+}
+
+rtl::OUString ChildAccess::getNameInternal() {
+ return name_;
+}
+
+rtl::Reference< RootAccess > ChildAccess::getRootAccess() {
+ return root_;
+}
+
+rtl::Reference< Access > ChildAccess::getParentAccess() {
+ return parent_;
+}
+
+void ChildAccess::acquire() throw () {
+ Access::acquire();
+}
+
+void ChildAccess::release() throw () {
+ Access::release();
+}
+
+css::uno::Reference< css::uno::XInterface > ChildAccess::getParent()
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ return static_cast< cppu::OWeakObject * >(parent_.get());
+}
+
+void ChildAccess::setParent(css::uno::Reference< css::uno::XInterface > const &)
+ throw (css::lang::NoSupportException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ throw css::lang::NoSupportException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("setParent")),
+ static_cast< cppu::OWeakObject * >(this));
+}
+
+sal_Int64 ChildAccess::getSomething(
+ css::uno::Sequence< sal_Int8 > const & aIdentifier)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ return aIdentifier == getTunnelId()
+ ? reinterpret_cast< sal_Int64 >(this) : 0;
+}
+
+void ChildAccess::bind(
+ rtl::Reference< RootAccess > const & root,
+ rtl::Reference< Access > const & parent, rtl::OUString const & name)
+ throw ()
+{
+ OSL_ASSERT(
+ !parent_.is() && root.is() && parent.is() && name.getLength() != 0);
+ root_ = root;
+ parent_ = parent;
+ name_ = name;
+}
+
+void ChildAccess::unbind() throw () {
+ OSL_ASSERT(parent_.is());
+ parent_->releaseChild(name_);
+ parent_.clear();
+ inTransaction_ = true;
+}
+
+void ChildAccess::committed() {
+ inTransaction_ = false;
+}
+
+void ChildAccess::setNode(rtl::Reference< Node > const & node) {
+ node_ = node;
+}
+
+void ChildAccess::setProperty(
+ css::uno::Any const & value, Modifications * localModifications)
+{
+ OSL_ASSERT(localModifications != 0);
+ Type type = TYPE_ERROR;
+ bool nillable = false;
+ switch (node_->kind()) {
+ case Node::KIND_PROPERTY:
+ {
+ PropertyNode * prop = dynamic_cast< PropertyNode * >(node_.get());
+ type = prop->getType();
+ nillable = prop->isNillable();
+ }
+ break;
+ case Node::KIND_LOCALIZED_PROPERTY:
+ {
+ rtl::OUString locale(getRootAccess()->getLocale());
+ if (!Components::allLocales(locale)) {
+ rtl::Reference< ChildAccess > child(getChild(locale));
+ if (child.is()) {
+ child->setProperty(value, localModifications);
+ } else {
+ insertLocalizedValueChild(
+ locale, value, localModifications);
+ }
+ return;
+ }
+ }
+ break;
+ case Node::KIND_LOCALIZED_VALUE:
+ {
+ LocalizedPropertyNode * locprop =
+ dynamic_cast< LocalizedPropertyNode * >(getParentNode().get());
+ type = locprop->getType();
+ nillable = locprop->isNillable();
+ }
+ break;
+ default:
+ break;
+ }
+ checkValue(value, type, nillable);
+ getParentAccess()->markChildAsModified(this);
+ changedValue_.reset(new css::uno::Any(value));
+ localModifications->add(getRelativePath());
+}
+
+css::uno::Any ChildAccess::asValue() {
+ if (changedValue_.get() != 0) {
+ return *changedValue_;
+ }
+ switch (node_->kind()) {
+ case Node::KIND_PROPERTY:
+ return dynamic_cast< PropertyNode * >(node_.get())->getValue(
+ getComponents());
+ case Node::KIND_LOCALIZED_PROPERTY:
+ {
+ rtl::OUString locale(getRootAccess()->getLocale());
+ if (!Components::allLocales(locale)) {
+ rtl::Reference< ChildAccess > child(getChild(locale));
+ if (!child.is()) {
+ //TODO: find best match
+ child = getChild(rtl::OUString());
+ if (!child.is()) {
+ child = getChild(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("en-US")));
+ if (!child.is()) {
+ std::vector< rtl::Reference< ChildAccess > > all(
+ getAllChildren());
+ if (all.empty()) {
+ return css::uno::Any();
+ }
+ child = all.front();
+ }
+ }
+ }
+ return child->asValue();
+ }
+ }
+ break;
+ case Node::KIND_LOCALIZED_VALUE:
+ return dynamic_cast< LocalizedValueNode * >(node_.get())->getValue();
+ default:
+ break;
+ }
+ return css::uno::makeAny(
+ css::uno::Reference< css::uno::XInterface >(
+ static_cast< cppu::OWeakObject * >(this)));
+}
+
+void ChildAccess::commitChanges(bool valid, Modifications * globalModifications)
+{
+ OSL_ASSERT(globalModifications != 0);
+ commitChildChanges(valid, globalModifications);
+ if (valid && changedValue_.get() != 0) {
+ Path path(getAbsolutePath());
+ getComponents().addModification(path);
+ globalModifications->add(path);
+ switch (node_->kind()) {
+ case Node::KIND_PROPERTY:
+ dynamic_cast< PropertyNode * >(node_.get())->setValue(
+ Data::NO_LAYER, *changedValue_);
+ break;
+ case Node::KIND_LOCALIZED_VALUE:
+ dynamic_cast< LocalizedValueNode * >(node_.get())->setValue(
+ Data::NO_LAYER, *changedValue_);
+ break;
+ default:
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ }
+ changedValue_.reset();
+}
+
+ChildAccess::~ChildAccess() {
+ osl::MutexGuard g(lock);
+ if (parent_.is()) {
+ parent_->releaseChild(name_);
+ }
+}
+
+void ChildAccess::addTypes(std::vector< css::uno::Type > * types) const {
+ OSL_ASSERT(types != 0);
+ types->push_back(cppu::UnoType< css::container::XChild >::get());
+ types->push_back(cppu::UnoType< css::lang::XUnoTunnel >::get());
+}
+
+void ChildAccess::addSupportedServiceNames(
+ std::vector< rtl::OUString > * services)
+{
+ OSL_ASSERT(services != 0);
+ services->push_back(
+ getParentNode()->kind() == Node::KIND_GROUP
+ ? rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.GroupElement"))
+ : rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.SetElement")));
+}
+
+css::uno::Any ChildAccess::queryInterface(css::uno::Type const & aType)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ css::uno::Any res(Access::queryInterface(aType));
+ return res.hasValue()
+ ? res
+ : cppu::queryInterface(
+ aType, static_cast< css::container::XChild * >(this),
+ static_cast< css::lang::XUnoTunnel * >(this));
+}
+
+}
diff --git a/configmgr2/source/childaccess.hxx b/configmgr2/source/childaccess.hxx
new file mode 100644
index 000000000000..cb6703a28d14
--- /dev/null
+++ b/configmgr2/source/childaccess.hxx
@@ -0,0 +1,159 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_CHILDACCESS_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_CHILDACCESS_HXX
+
+#include "sal/config.h"
+
+#include <memory>
+#include <vector>
+
+#include "com/sun/star/container/XChild.hpp"
+#include "com/sun/star/lang/NoSupportException.hpp"
+#include "com/sun/star/lang/XUnoTunnel.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "rtl/ref.hxx"
+#include "sal/types.h"
+
+#include "access.hxx"
+#include "path.hxx"
+
+namespace com { namespace sun { namespace star { namespace uno {
+ class Any;
+ class Type;
+ class XInterface;
+} } } }
+
+namespace configmgr {
+
+class Components;
+class Modifications;
+class Node;
+class RootAccess;
+
+class ChildAccess:
+ public Access, public com::sun::star::container::XChild,
+ public com::sun::star::lang::XUnoTunnel
+{
+public:
+ static com::sun::star::uno::Sequence< sal_Int8 > getTunnelId();
+
+ ChildAccess(
+ Components & components, rtl::Reference< RootAccess > const & root,
+ rtl::Reference< Access > const & parent, rtl::OUString const & name,
+ rtl::Reference< Node > const & node);
+
+ ChildAccess(
+ Components & components, rtl::Reference< RootAccess > const & root,
+ rtl::Reference< Node > const & node);
+
+ virtual Path getAbsolutePath();
+
+ virtual Path getRelativePath();
+
+ virtual rtl::OUString getRelativePathRepresentation();
+
+ virtual rtl::Reference< Node > getNode();
+
+ virtual bool isFinalized();
+
+ virtual rtl::OUString getNameInternal();
+
+ virtual rtl::Reference< RootAccess > getRootAccess();
+
+ virtual rtl::Reference< Access > getParentAccess();
+
+ virtual void SAL_CALL acquire() throw ();
+
+ virtual void SAL_CALL release() throw ();
+
+ virtual com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
+ SAL_CALL getParent()
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL setParent(
+ com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
+ const &)
+ throw (
+ com::sun::star::lang::NoSupportException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual sal_Int64 SAL_CALL getSomething(
+ com::sun::star::uno::Sequence< sal_Int8 > const & aIdentifier)
+ throw (com::sun::star::uno::RuntimeException);
+
+ void bind(
+ rtl::Reference< RootAccess > const & root,
+ rtl::Reference< Access > const & parent, rtl::OUString const & name)
+ throw ();
+
+ void unbind() throw ();
+
+ bool isInTransaction() const { return inTransaction_; }
+
+ void committed();
+
+ void setNode(rtl::Reference< Node > const & node);
+
+ void setProperty(
+ com::sun::star::uno::Any const & value,
+ Modifications * localModifications);
+
+ com::sun::star::uno::Any asValue();
+
+ void commitChanges(bool valid, Modifications * globalModifications);
+
+private:
+ virtual ~ChildAccess();
+
+ virtual void addTypes(
+ std::vector< com::sun::star::uno::Type > * types) const;
+
+ virtual void addSupportedServiceNames(
+ std::vector< rtl::OUString > * services);
+
+ virtual com::sun::star::uno::Any SAL_CALL queryInterface(
+ com::sun::star::uno::Type const & aType)
+ throw (com::sun::star::uno::RuntimeException);
+
+ rtl::Reference< RootAccess > root_;
+ rtl::Reference< Access > parent_; // null iff free node
+ rtl::OUString name_;
+ rtl::Reference< Node > node_;
+ std::auto_ptr< com::sun::star::uno::Any > changedValue_;
+ bool inTransaction_;
+ // to determine if a free node can be inserted underneath some root
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/components.cxx b/configmgr2/source/components.cxx
new file mode 100644
index 000000000000..7b287bafb01c
--- /dev/null
+++ b/configmgr2/source/components.cxx
@@ -0,0 +1,644 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <algorithm>
+#include <list>
+
+#include "com/sun/star/beans/Optional.hpp"
+#include "com/sun/star/beans/UnknownPropertyException.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+#include "com/sun/star/container/NoSuchElementException.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/lang/XMultiComponentFactory.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "osl/diagnose.h"
+#include "osl/file.hxx"
+#include "rtl/bootstrap.hxx"
+#include "rtl/ref.hxx"
+#include "rtl/string.h"
+#include "rtl/textenc.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "components.hxx"
+#include "data.hxx"
+#include "modifications.hxx"
+#include "node.hxx"
+#include "parsemanager.hxx"
+#include "rootaccess.hxx"
+#include "writemodfile.hxx"
+#include "xcdparser.hxx"
+#include "xcuparser.hxx"
+#include "xcsparser.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+struct UnresolvedListItem {
+ rtl::OUString name;
+ rtl::Reference< ParseManager > manager;
+
+ UnresolvedListItem(
+ rtl::OUString const & theName,
+ rtl::Reference< ParseManager > theManager):
+ name(theName), manager(theManager) {}
+};
+
+typedef std::list< UnresolvedListItem > UnresolvedList;
+
+void parseXcsFile(rtl::OUString const & url, int layer, Data * data)
+ SAL_THROW((
+ css::container::NoSuchElementException, css::uno::RuntimeException))
+{
+ OSL_VERIFY(
+ rtl::Reference< ParseManager >(
+ new ParseManager(url, new XcsParser(layer, data)))->parse());
+}
+
+void parseXcuFile(rtl::OUString const & url, int layer, Data * data)
+ SAL_THROW((
+ css::container::NoSuchElementException, css::uno::RuntimeException))
+{
+ OSL_VERIFY(
+ rtl::Reference< ParseManager >(
+ new ParseManager(url, new XcuParser(layer, data)))->parse());
+}
+
+rtl::OUString expand(rtl::OUString const & str) {
+ rtl::OUString s(str);
+ rtl::Bootstrap::expandMacros(s); //TODO: detect failure
+ return s;
+}
+
+static bool singletonCreated = false;
+static Components * singleton; // leaks
+
+}
+
+void Components::initSingleton(
+ css::uno::Reference< css::uno::XComponentContext > const & context)
+{
+ OSL_ASSERT(context.is());
+ if (!singletonCreated) {
+ singletonCreated = true;
+ singleton = new Components(context);
+ }
+}
+
+Components & Components::getSingleton() {
+ OSL_ASSERT(singletonCreated);
+ if (singleton == 0) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "configmgr no Components singleton")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ return *singleton;
+}
+
+bool Components::allLocales(rtl::OUString const & locale) {
+ return locale.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("*"));
+}
+
+rtl::Reference< Node > Components::resolvePathRepresentation(
+ rtl::OUString const & pathRepresentation, Path * path,
+ int * finalizedLayer) const
+{
+ return data_.resolvePathRepresentation(
+ pathRepresentation, path, finalizedLayer);
+}
+
+rtl::Reference< Node > Components::getTemplate(
+ int layer, rtl::OUString const & fullName) const
+{
+ return data_.getTemplate(layer, fullName);
+}
+
+void Components::addRootAccess(rtl::Reference< RootAccess > const & access) {
+ roots_.insert(access.get());
+}
+
+void Components::removeRootAccess(RootAccess * access) {
+ roots_.erase(access);
+}
+
+void Components::initGlobalBroadcaster(
+ Modifications const & modifications,
+ rtl::Reference< RootAccess > const & exclude, Broadcaster * broadcaster)
+{
+ //TODO: Iterate only over roots w/ listeners:
+ for (WeakRootSet::iterator i(roots_.begin()); i != roots_.end(); ++i) {
+ rtl::Reference< RootAccess > root;
+ if ((*i)->acquireCounting() > 1) {
+ root.set(*i); // must not throw
+ }
+ (*i)->releaseNondeleting();
+ if (root.is()) {
+ if (root != exclude) {
+ Path path(root->getAbsolutePath());
+ Modifications::Node const * mods = &modifications.getRoot();
+ for (Path::iterator j(path.begin()); j != path.end(); ++j) {
+ Modifications::Node::Children::const_iterator k(
+ mods->children.find(*j));
+ if (k == mods->children.end()) {
+ mods = 0;
+ break;
+ }
+ mods = &k->second;
+ }
+ //TODO: If the complete tree of which root is a part is deleted,
+ // or replaced, mods will be null, but some of the listeners
+ // from within root should probably fire nonetheless:
+ if (mods != 0) {
+ root->initBroadcaster(*mods, broadcaster);
+ }
+ }
+ }
+ }
+}
+
+void Components::addModification(Path const & path) {
+ data_.modifications.add(path);
+}
+
+void Components::writeModifications() {
+ writeModFile(*this, getModificationFileUrl(), data_);
+}
+
+void Components::insertXcsFile(int layer, rtl::OUString const & fileUri) {
+ try {
+ parseXcsFile(fileUri, layer, &data_);
+ } catch (css::container::NoSuchElementException & e) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("insertXcsFile does not exist: ")) +
+ e.Message),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+}
+
+void Components::insertXcuFile(int layer, rtl::OUString const & fileUri) {
+ try {
+ parseXcuFile(fileUri, layer + 1, &data_);
+ } catch (css::container::NoSuchElementException & e) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("insertXcuFile does not exist: ")) +
+ e.Message),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+}
+
+css::beans::Optional< css::uno::Any > Components::getExternalValue(
+ rtl::OUString const & descriptor)
+{
+ sal_Int32 i = descriptor.indexOf(' ');
+ if (i <= 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("bad external value descriptor ")) +
+ descriptor),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ //TODO: Do not make calls with mutex locked:
+ rtl::OUString name(descriptor.copy(0, i));
+ ExternalServices::iterator j(externalServices_.find(name));
+ if (j == externalServices_.end()) {
+ css::uno::Reference< css::uno::XInterface > service;
+ try {
+ service = css::uno::Reference< css::lang::XMultiComponentFactory >(
+ context_->getServiceManager(), css::uno::UNO_SET_THROW)->
+ createInstanceWithContext(name, context_);
+ } catch (css::uno::RuntimeException &) {
+ // Assuming these exceptions are real errors:
+ throw;
+ } catch (css::uno::Exception & e) {
+ // Assuming these exceptions indicate that the service is not
+ // installed:
+ OSL_TRACE(
+ "createInstance(%s) failed with %s",
+ rtl::OUStringToOString(name, RTL_TEXTENCODING_UTF8).getStr(),
+ rtl::OUStringToOString(
+ e.Message, RTL_TEXTENCODING_UTF8).getStr());
+ }
+ css::uno::Reference< css::beans::XPropertySet > propset;
+ if (service.is()) {
+ propset = css::uno::Reference< css::beans::XPropertySet >(
+ service, css::uno::UNO_QUERY_THROW);
+ }
+ j = externalServices_.insert(
+ ExternalServices::value_type(name, propset)).first;
+ }
+ css::beans::Optional< css::uno::Any > value;
+ if (j->second.is()) {
+ try {
+ if (!(j->second->getPropertyValue(descriptor.copy(i + 1)) >>=
+ value))
+ {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "cannot obtain external value through ")) +
+ descriptor),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ } catch (css::beans::UnknownPropertyException & e) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "unknwon external value descriptor ID: ")) +
+ e.Message),
+ css::uno::Reference< css::uno::XInterface >());
+ } catch (css::lang::WrappedTargetException & e) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "cannot obtain external value: ")) +
+ e.Message),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+ return value;
+}
+
+Components::Components(
+ css::uno::Reference< css::uno::XComponentContext > const & context):
+ context_(context)
+{
+ OSL_ASSERT(context.is());
+ parseXcsXcuLayer(
+ 0,
+ expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("$OOO_BASE_DIR/share/registry"))));
+ parseModuleLayer(
+ 2,
+ expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "$OOO_BASE_DIR/share/registry/modules"))));
+ parseResLayer(
+ 3,
+ expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("$OOO_BASE_DIR/share/registry"))));
+ parseXcsXcuLayer(
+ 4,
+ expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "$BRAND_BASE_DIR/share/registry"))));
+ parseModuleLayer(
+ 6,
+ expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "$BRAND_BASE_DIR/share/registry/modules"))));
+ parseXcsXcuLayer( //TODO: migrate
+ 7,
+ expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("uno")
+ ":UNO_SHARED_PACKAGES_CACHE}/registry/"
+ "com.sun.star.comp.deployment.configuration."
+ "PackageRegistryBackend/registry"))));
+ parseXcsXcuIniLayer(
+ 9,
+ expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("uno")
+ ":UNO_SHARED_PACKAGES_CACHE}/registry/"
+ "com.sun.star.comp.deployment.configuration."
+ "PackageRegistryBackend/configmgrrc"))));
+ parseXcsXcuLayer( //TODO: migrate
+ 11,
+ expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("uno")
+ ":UNO_USER_PACKAGES_CACHE}/registry/"
+ "com.sun.star.comp.deployment.configuration."
+ "PackageRegistryBackend/registry"))));
+ parseXcsXcuIniLayer(
+ 13,
+ expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("uno")
+ ":UNO_USER_PACKAGES_CACHE}/registry/"
+ "com.sun.star.comp.deployment.configuration."
+ "PackageRegistryBackend/configmgrrc"))));
+ // reading the old user xcs/xcu layer ("${$BRAND_BASE_DIR/program/" +
+ // SAL_CONFIGFILE("bootstrap") + ":UserInstallation}/user/registry") would
+ // potentially fail, anyway, as xcu files in that layer used the xsi
+ // namespace prefix without declaring a corresponding namespace binding (see
+ // issue 77174)
+ 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:
+ OSL_TRACE(
+ "configmgr error reading user modification layer: %s",
+ rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8).getStr());
+ }
+}
+
+Components::~Components() {}
+
+void Components::parseFiles(
+ int layer, rtl::OUString const & extension,
+ void (* parseFile)(rtl::OUString const &, int, Data *),
+ rtl::OUString const & url, bool recursive)
+{
+ osl::Directory dir(url);
+ switch (dir.open()) {
+ case osl::FileBase::E_None:
+ break;
+ case osl::FileBase::E_NOENT:
+ if (!recursive) {
+ return;
+ }
+ // fall through
+ default:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("cannot open directory ")) +
+ url),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ for (;;) {
+ osl::DirectoryItem i;
+ osl::FileBase::RC rc = dir.getNextItem(i, SAL_MAX_UINT32);
+ if (rc == osl::FileBase::E_NOENT) {
+ break;
+ }
+ if (rc != osl::FileBase::E_None) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("cannot iterate directory ")) +
+ url),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ osl::FileStatus stat(
+ FileStatusMask_Type | FileStatusMask_FileName |
+ FileStatusMask_FileURL);
+ if (i.getFileStatus(stat) != osl::FileBase::E_None) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("cannot stat in directory ")) +
+ url),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ if (stat.getFileType() == osl::FileStatus::Directory) { //TODO: symlinks
+ parseFiles(layer, extension, parseFile, stat.getFileURL(), true);
+ } else {
+ rtl::OUString file(stat.getFileName());
+ if (file.getLength() >= extension.getLength() &&
+ file.match(extension, file.getLength() - extension.getLength()))
+ {
+ try {
+ (*parseFile)(stat.getFileURL(), layer, &data_);
+ } catch (css::container::NoSuchElementException & e) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "stat'ed file does not exist: ")) +
+ e.Message),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+ }
+ }
+}
+
+void Components::parseFileList(
+ int layer, void (* parseFile)(rtl::OUString const &, int, Data *),
+ 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_);
+ } catch (css::container::NoSuchElementException & e) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "stat'ed file does not exist: ")) +
+ e.Message),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+ if (i == -1) {
+ break;
+ }
+ }
+}
+
+void Components::parseXcdFiles(int layer, rtl::OUString const & url) {
+ osl::Directory dir(url);
+ switch (dir.open()) {
+ case osl::FileBase::E_None:
+ break;
+ case osl::FileBase::E_NOENT:
+ return;
+ default:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("cannot open directory ")) +
+ url),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ UnresolvedList unres;
+ XcdParser::Dependencies deps;
+ for (;;) {
+ osl::DirectoryItem i;
+ osl::FileBase::RC rc = dir.getNextItem(i, SAL_MAX_UINT32);
+ if (rc == osl::FileBase::E_NOENT) {
+ break;
+ }
+ if (rc != osl::FileBase::E_None) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("cannot iterate directory ")) +
+ url),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ osl::FileStatus stat(
+ FileStatusMask_Type | FileStatusMask_FileName |
+ FileStatusMask_FileURL);
+ if (i.getFileStatus(stat) != osl::FileBase::E_None) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("cannot stat in directory ")) +
+ url),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ if (stat.getFileType() != osl::FileStatus::Directory) { //TODO: symlinks
+ rtl::OUString file(stat.getFileName());
+ if (file.getLength() >= RTL_CONSTASCII_LENGTH(".xcd") &&
+ file.matchAsciiL(
+ RTL_CONSTASCII_STRINGPARAM(".xcd"),
+ file.getLength() - RTL_CONSTASCII_LENGTH(".xcd")))
+ {
+ rtl::OUString name(
+ file.copy(
+ 0, file.getLength() - RTL_CONSTASCII_LENGTH(".xcd")));
+ rtl::Reference< ParseManager > manager;
+ try {
+ manager = new ParseManager(
+ stat.getFileURL(), new XcdParser(layer, deps, &data_));
+ } catch (css::container::NoSuchElementException & e) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "stat'ed file does not exist: ")) +
+ e.Message),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ if (manager->parse()) {
+ deps.insert(name);
+ } else {
+ unres.push_back(UnresolvedListItem(name, manager));
+ }
+ }
+ }
+ }
+ while (!unres.empty()) {
+ bool resolved = false;
+ for (UnresolvedList::iterator i(unres.begin()); i != unres.end();) {
+ if (i->manager->parse()) {
+ deps.insert(i->name);
+ unres.erase(i++);
+ resolved = true;
+ } else {
+ ++i;
+ }
+ }
+ if (!resolved) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "xcd: unresolved dependencies in ")) +
+ url),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+}
+
+void Components::parseXcsXcuLayer(int layer, rtl::OUString const & url) {
+ parseXcdFiles(layer, url);
+ parseFiles(
+ layer, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".xcs")),
+ &parseXcsFile,
+ url + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/schema")), false);
+ parseFiles(
+ layer + 1, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".xcu")),
+ &parseXcuFile,
+ url + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/data")), false);
+}
+
+void Components::parseXcsXcuIniLayer(int layer, rtl::OUString const & url) {
+ //TODO: rtl::Bootstrap::getFrom "first trie[s] to retrieve the value via the
+ // global function"
+ rtl::Bootstrap ini(url);
+ rtl::OUString urls;
+ if (ini.getFrom(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SCHEMA")), urls))
+ {
+ parseFileList(layer, &parseXcsFile, urls, ini);
+ }
+ if (ini.getFrom(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DATA")), urls))
+ {
+ parseFileList(layer + 1, &parseXcuFile, urls, ini);
+ }
+}
+
+void Components::parseModuleLayer(int layer, rtl::OUString const & url) {
+ parseFiles(
+ layer, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".xcu")),
+ &parseXcuFile, url, false);
+}
+
+void Components::parseResLayer(int layer, rtl::OUString const & url) {
+ rtl::OUString resUrl(
+ url + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/res")));
+ parseXcdFiles(layer, resUrl);
+ parseFiles(
+ layer, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".xcu")),
+ &parseXcuFile, resUrl, false);
+}
+
+rtl::OUString Components::getModificationFileUrl() const {
+ return expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "${$BRAND_BASE_DIR/program/" SAL_CONFIGFILE("bootstrap")
+ ":UserInstallation}/user/registrymodifications.xcu")));
+}
+
+void Components::parseModificationLayer() {
+ try {
+ parseXcuFile(getModificationFileUrl(), Data::NO_LAYER, &data_);
+ } catch (css::container::NoSuchElementException &) {
+ OSL_TRACE(
+ "configmgr user registrymodifications.xcu does not (yet) exist");
+ // Migrate old user layer data (can be removed once migration is no
+ // longer relevant; also see hack for xsi namespace in XmlReader
+ // constructor):
+ parseFiles(
+ Data::NO_LAYER, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".xcu")),
+ &parseXcuFile,
+ expand(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "${$BRAND_BASE_DIR/program/" SAL_CONFIGFILE("bootstrap")
+ ":UserInstallation}/user/registry/data"))),
+ false);
+ }
+}
+
+}
diff --git a/configmgr2/source/components.hxx b/configmgr2/source/components.hxx
new file mode 100644
index 000000000000..d9730dafe978
--- /dev/null
+++ b/configmgr2/source/components.hxx
@@ -0,0 +1,151 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_COMPONENTS_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_COMPONENTS_HXX
+
+#include "sal/config.h"
+
+#include <map>
+#include <set>
+
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/beans/Optional.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "rtl/ref.hxx"
+
+#include "data.hxx"
+#include "path.hxx"
+
+namespace com { namespace sun { namespace star {
+ namespace beans { class XPropertySet; }
+ namespace uno {
+ class Any;
+ class XComponentContext;
+ }
+} } }
+namespace rtl {
+ class Bootstrap;
+ class OUString;
+}
+
+namespace configmgr {
+
+class Broadcaster;
+class Modifications;
+class Node;
+class RootAccess;
+
+class Components: private boost::noncopyable {
+public:
+ static void initSingleton(
+ com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
+ const & context);
+
+ static Components & getSingleton();
+
+ static bool allLocales(rtl::OUString const & locale);
+
+ rtl::Reference< Node > resolvePathRepresentation(
+ rtl::OUString const & pathRepresentation, Path * path,
+ int * finalizedLayer) const;
+
+ rtl::Reference< Node > getTemplate(
+ int layer, rtl::OUString const & fullName) const;
+
+ void addRootAccess(rtl::Reference< RootAccess > const & access);
+
+ void removeRootAccess(RootAccess * access);
+
+ void initGlobalBroadcaster(
+ Modifications const & modifications,
+ rtl::Reference< RootAccess > const & exclude,
+ Broadcaster * broadcaster);
+
+ void addModification(Path const & path);
+
+ void writeModifications();
+
+ void insertXcsFile(int layer, rtl::OUString const & fileUri);
+
+ void insertXcuFile(int layer, rtl::OUString const & fileUri);
+
+ com::sun::star::beans::Optional< com::sun::star::uno::Any >
+ getExternalValue(rtl::OUString const & descriptor);
+
+private:
+ Components(
+ com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
+ const & context);
+
+ ~Components();
+
+ void parseFiles(
+ int layer, rtl::OUString const & extension,
+ void (* parseFile)(rtl::OUString const &, int, Data *),
+ rtl::OUString const & url, bool recursive);
+
+ void parseFileList(
+ int layer,
+ void (* parseFile)(rtl::OUString const &, int, Data *),
+ rtl::OUString const & urls, rtl::Bootstrap const & ini);
+
+ void parseXcdFiles(int layer, rtl::OUString const & url);
+
+ void parseXcsXcuLayer(int layer, rtl::OUString const & url);
+
+ void parseXcsXcuIniLayer(int layer, rtl::OUString const & url);
+
+ void parseModuleLayer(int layer, rtl::OUString const & url);
+
+ void parseResLayer(int layer, rtl::OUString const & url);
+
+ rtl::OUString getModificationFileUrl() const;
+
+ void parseModificationLayer();
+
+ typedef std::set< RootAccess * > WeakRootSet;
+
+ typedef
+ std::map<
+ rtl::OUString,
+ com::sun::star::uno::Reference<
+ com::sun::star::beans::XPropertySet > >
+ ExternalServices;
+
+ com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
+ context_;
+ Data data_;
+ WeakRootSet roots_;
+ ExternalServices externalServices_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/configurationprovider.cxx b/configmgr2/source/configurationprovider.cxx
new file mode 100644
index 000000000000..72d42154c66e
--- /dev/null
+++ b/configmgr2/source/configurationprovider.cxx
@@ -0,0 +1,521 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <vector>
+
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/beans/NamedValue.hpp"
+#include "com/sun/star/beans/PropertyValue.hpp"
+#include "com/sun/star/lang/EventObject.hpp"
+#include "com/sun/star/lang/Locale.hpp"
+#include "com/sun/star/lang/XLocalizable.hpp"
+#include "com/sun/star/lang/XMultiServiceFactory.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/XSingleComponentFactory.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/DeploymentException.hpp"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "com/sun/star/util/XFlushListener.hpp"
+#include "com/sun/star/util/XFlushable.hpp"
+#include "com/sun/star/util/XRefreshListener.hpp"
+#include "com/sun/star/util/XRefreshable.hpp"
+#include "comphelper/locale.hxx"
+#include "cppu/unotype.hxx"
+#include "cppuhelper/compbase5.hxx"
+#include "cppuhelper/factory.hxx"
+#include "cppuhelper/implbase1.hxx"
+#include "cppuhelper/interfacecontainer.hxx"
+#include "cppuhelper/weak.hxx"
+#include "osl/diagnose.h"
+#include "osl/mutex.hxx"
+#include "sal/types.h"
+#include "rtl/ref.hxx"
+#include "rtl/unload.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "components.hxx"
+#include "configurationprovider.hxx"
+#include "lock.hxx"
+#include "rootaccess.hxx"
+
+namespace configmgr { namespace configuration_provider {
+
+namespace {
+
+namespace css = com::sun::star;
+
+char const accessServiceName[] =
+ "com.sun.star.configuration.ConfigurationAccess";
+char const updateAccessServiceName[] =
+ "com.sun.star.configuration.ConfigurationUpdateAccess";
+
+void badNodePath() {
+ throw css::uno::Exception(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationProvider expects a"
+ " single, non-empty, string nodepath argument")),
+ 0);
+}
+
+typedef
+ cppu::WeakComponentImplHelper5<
+ css::lang::XServiceInfo, css::lang::XMultiServiceFactory,
+ css::util::XRefreshable, css::util::XFlushable,
+ css::lang::XLocalizable >
+ ServiceBase;
+
+class Service:
+ private osl::Mutex, public ServiceBase, private boost::noncopyable
+{
+public:
+ Service(
+ css::uno::Reference< css::uno::XComponentContext > const context,
+ rtl::OUString const & locale):
+ ServiceBase(*static_cast< osl::Mutex * >(this)), context_(context),
+ locale_(locale)
+ {
+ OSL_ASSERT(context.is());
+ }
+
+private:
+ virtual ~Service() {}
+
+ virtual rtl::OUString SAL_CALL getImplementationName()
+ throw (css::uno::RuntimeException)
+ { return configuration_provider::getImplementationName(); }
+
+ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName)
+ throw (css::uno::RuntimeException)
+ { return ServiceName == getSupportedServiceNames()[0]; } //TODO
+
+ virtual css::uno::Sequence< rtl::OUString > SAL_CALL
+ getSupportedServiceNames() throw (css::uno::RuntimeException)
+ { return configuration_provider::getSupportedServiceNames(); }
+ //TODO: DefaultProvider?
+
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance(
+ rtl::OUString const & aServiceSpecifier)
+ throw (css::uno::Exception, css::uno::RuntimeException);
+
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
+ createInstanceWithArguments(
+ rtl::OUString const & ServiceSpecifier,
+ css::uno::Sequence< css::uno::Any > const & Arguments)
+ throw (css::uno::Exception, css::uno::RuntimeException);
+
+ virtual css::uno::Sequence< rtl::OUString > SAL_CALL
+ getAvailableServiceNames() throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL refresh() throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL addRefreshListener(
+ css::uno::Reference< css::util::XRefreshListener > const & l)
+ throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL removeRefreshListener(
+ css::uno::Reference< css::util::XRefreshListener > const & l)
+ throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL flush() throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL addFlushListener(
+ css::uno::Reference< css::util::XFlushListener > const & l)
+ throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL removeFlushListener(
+ css::uno::Reference< css::util::XFlushListener > const & l)
+ throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL setLocale(css::lang::Locale const & eLocale)
+ throw (css::uno::RuntimeException);
+
+ virtual css::lang::Locale SAL_CALL getLocale()
+ throw (css::uno::RuntimeException);
+
+ css::uno::Reference< css::uno::XComponentContext > context_;
+ rtl::OUString locale_;
+};
+
+css::uno::Reference< css::uno::XInterface > Service::createInstance(
+ rtl::OUString const & aServiceSpecifier)
+ throw (css::uno::Exception, css::uno::RuntimeException)
+{
+ return createInstanceWithArguments(
+ aServiceSpecifier, css::uno::Sequence< css::uno::Any >());
+}
+
+css::uno::Reference< css::uno::XInterface >
+Service::createInstanceWithArguments(
+ rtl::OUString const & ServiceSpecifier,
+ css::uno::Sequence< css::uno::Any > const & Arguments)
+ throw (css::uno::Exception, css::uno::RuntimeException)
+{
+ rtl::OUString nodepath;
+ rtl::OUString locale;
+ for (sal_Int32 i = 0; i < Arguments.getLength(); ++i) {
+ css::beans::NamedValue v1;
+ css::beans::PropertyValue v2;
+ rtl::OUString name;
+ css::uno::Any value;
+ if (Arguments[i] >>= v1) {
+ name = v1.Name;
+ value = v1.Value;
+ } else if (Arguments[i] >>= v2) {
+ name = v2.Name;
+ value = v2.Value;
+ } else if (Arguments.getLength() == 1 && (Arguments[i] >>= nodepath)) {
+ // For backwards compatibility, allow a single string argument that
+ // denotes nodepath.
+ if (nodepath.getLength() == 0) {
+ badNodePath();
+ }
+ break;
+ } else {
+ throw css::uno::Exception(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationProvider"
+ " expects NamedValue or PropertyValue arguments")),
+ 0);
+ }
+ // For backwards compatibility, allow "nodepath" and "Locale" in any
+ // case:
+ if (name.equalsIgnoreAsciiCaseAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("nodepath")))
+ {
+ if (nodepath.getLength() != 0 || !(value >>= nodepath) ||
+ nodepath.getLength() == 0)
+ {
+ badNodePath();
+ }
+ } else if (name.equalsIgnoreAsciiCaseAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("locale")))
+ {
+ if (locale.getLength() != 0 || !(value >>= locale) ||
+ locale.getLength() == 0)
+ {
+ throw css::uno::Exception(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationProvider"
+ " expects at most one, non-empty, string Locale"
+ " argument")),
+ 0);
+ }
+ }
+ }
+ if (nodepath.getLength() == 0) {
+ badNodePath();
+ }
+ // For backwards compatibility, allow a notepath that misses the leading
+ // slash:
+ if (nodepath[0] != '/') {
+ nodepath = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) + nodepath;
+ }
+ if (locale.getLength() == 0) {
+ //TODO: should the Access use the dynamically changing locale_ instead?
+ locale = locale_;
+ if (locale.getLength() == 0) {
+ locale = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("en"));//TODO
+ }
+ }
+ bool update;
+ if (ServiceSpecifier.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM(accessServiceName)))
+ {
+ update = false;
+ } else if (ServiceSpecifier.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM(updateAccessServiceName)))
+ {
+ update = true;
+ } else {
+ throw css::uno::Exception(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationProvider does not"
+ " support service ")) +
+ ServiceSpecifier),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ osl::MutexGuard guard(lock);
+ Components::initSingleton(context_);
+ Components & components = Components::getSingleton();
+ rtl::Reference< RootAccess > root(
+ new RootAccess(components, nodepath, locale, update));
+ if (root->isValue()) {
+ throw css::uno::Exception(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationProvider: there is"
+ " a leaf value at nodepath ")) +
+ nodepath),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ components.addRootAccess(root);
+ return static_cast< cppu::OWeakObject * >(root.get());
+}
+
+css::uno::Sequence< rtl::OUString > Service::getAvailableServiceNames()
+ throw (css::uno::RuntimeException)
+{
+ css::uno::Sequence< rtl::OUString > names(2);
+ names[0] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(accessServiceName));
+ names[1] = rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(updateAccessServiceName));
+ return names;
+}
+
+void Service::refresh() throw (css::uno::RuntimeException) {
+ //TODO
+ cppu::OInterfaceContainerHelper * cont = rBHelper.getContainer(
+ cppu::UnoType< css::util::XRefreshListener >::get());
+ if (cont != 0) {
+ css::lang::EventObject ev(static_cast< cppu::OWeakObject * >(this));
+ cont->notifyEach(&css::util::XRefreshListener::refreshed, ev);
+ }
+}
+
+void Service::addRefreshListener(
+ css::uno::Reference< css::util::XRefreshListener > const & l)
+ throw (css::uno::RuntimeException)
+{
+ rBHelper.addListener(
+ cppu::UnoType< css::util::XRefreshListener >::get(), l);
+}
+
+void Service::removeRefreshListener(
+ css::uno::Reference< css::util::XRefreshListener > const & l)
+ throw (css::uno::RuntimeException)
+{
+ rBHelper.removeListener(
+ cppu::UnoType< css::util::XRefreshListener >::get(), l);
+}
+
+void Service::flush() throw (css::uno::RuntimeException) {
+ //TODO
+ cppu::OInterfaceContainerHelper * cont = rBHelper.getContainer(
+ cppu::UnoType< css::util::XFlushListener >::get());
+ if (cont != 0) {
+ css::lang::EventObject ev(static_cast< cppu::OWeakObject * >(this));
+ cont->notifyEach(&css::util::XFlushListener::flushed, ev);
+ }
+}
+
+void Service::addFlushListener(
+ css::uno::Reference< css::util::XFlushListener > const & l)
+ throw (css::uno::RuntimeException)
+{
+ rBHelper.addListener(cppu::UnoType< css::util::XFlushListener >::get(), l);
+}
+
+void Service::removeFlushListener(
+ css::uno::Reference< css::util::XFlushListener > const & l)
+ throw (css::uno::RuntimeException)
+{
+ rBHelper.removeListener(
+ cppu::UnoType< css::util::XFlushListener >::get(), l);
+}
+
+void Service::setLocale(css::lang::Locale const & eLocale)
+ throw (css::uno::RuntimeException)
+{
+ osl::MutexGuard guard(lock);
+ locale_ = comphelper::Locale(
+ eLocale.Language, eLocale.Country, eLocale.Variant).toISO();
+}
+
+css::lang::Locale Service::getLocale() throw (css::uno::RuntimeException) {
+ osl::MutexGuard guard(lock);
+ css::lang::Locale loc;
+ if (locale_.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("*"))) {
+ loc.Language = locale_;
+ } else if (locale_.getLength() != 0) {
+ try {
+ comphelper::Locale l(locale_);
+ loc.Language = l.getLanguage();
+ loc.Country = l.getCountry();
+ loc.Variant = l.getVariant();
+ } catch (comphelper::Locale::MalFormedLocaleException & e) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("MalformedLocaleException: ")) +
+ e.Message),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ }
+ return loc;
+}
+
+class Factory:
+ public cppu::WeakImplHelper1< css::lang::XSingleComponentFactory >,
+ private boost::noncopyable
+{
+public:
+ Factory() {}
+
+private:
+ virtual ~Factory() {}
+
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
+ createInstanceWithContext(
+ css::uno::Reference< css::uno::XComponentContext > const & Context)
+ throw (css::uno::Exception, css::uno::RuntimeException);
+
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
+ createInstanceWithArgumentsAndContext(
+ css::uno::Sequence< css::uno::Any > const & Arguments,
+ css::uno::Reference< css::uno::XComponentContext > const & Context)
+ throw (css::uno::Exception, css::uno::RuntimeException);
+};
+
+css::uno::Reference< css::uno::XInterface > Factory::createInstanceWithContext(
+ css::uno::Reference< css::uno::XComponentContext > const & Context)
+ throw (css::uno::Exception, css::uno::RuntimeException)
+{
+ return createInstanceWithArgumentsAndContext(
+ css::uno::Sequence< css::uno::Any >(), Context);
+}
+
+css::uno::Reference< css::uno::XInterface >
+Factory::createInstanceWithArgumentsAndContext(
+ css::uno::Sequence< css::uno::Any > const & Arguments,
+ css::uno::Reference< css::uno::XComponentContext > const & Context)
+ throw (css::uno::Exception, css::uno::RuntimeException)
+{
+ if (Arguments.getLength() == 0) {
+ css::uno::Reference< css::uno::XInterface > instance;
+ if (!(Context->getValueByName(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/singletons/"
+ "com.sun.star.configuration.theDefaultProvider")))
+ >>= instance) ||
+ !instance.is())
+ {
+ throw css::uno::DeploymentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "component context fails to supply singleton"
+ " com.sun.star.configuration.theDefaultProvider")),
+ Context);
+ }
+ return instance;
+ } else {
+ rtl::OUString locale;
+ for (sal_Int32 i = 0; i < Arguments.getLength(); ++i) {
+ css::beans::NamedValue v1;
+ css::beans::PropertyValue v2;
+ rtl::OUString name;
+ css::uno::Any value;
+ if (Arguments[i] >>= v1) {
+ name = v1.Name;
+ value = v1.Value;
+ } else if (Arguments[i] >>= v2) {
+ name = v2.Name;
+ value = v2.Value;
+ } else {
+ throw css::uno::Exception(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationProvider"
+ " factory expects NamedValue or PropertyValue"
+ " arguments")),
+ 0);
+ }
+ // For backwards compatibility, allow "Locale" in any case:
+ if (name.equalsIgnoreAsciiCaseAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("locale")))
+ {
+ if (locale.getLength() != 0 || !(value >>= locale) ||
+ locale.getLength() == 0)
+ {
+ throw css::uno::Exception(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration."
+ "ConfigurationProvider factory expects at most"
+ " one, non-empty, string Locale argument")),
+ 0);
+ }
+ } else {
+ //TODO
+ throw css::uno::Exception(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationProvider"
+ " factory: unknown argument ")) + name,
+ 0);
+ }
+ }
+ return static_cast< cppu::OWeakObject * >(new Service(Context, locale));
+ }
+}
+
+}
+
+css::uno::Reference< css::uno::XInterface > createDefault(
+ css::uno::Reference< css::uno::XComponentContext > const & context)
+{
+ return static_cast< cppu::OWeakObject * >(
+ new Service(context, rtl::OUString()));
+}
+
+rtl::OUString getImplementationName() {
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.comp.configuration.ConfigurationProvider"));
+}
+
+css::uno::Sequence< rtl::OUString > getSupportedServiceNames() {
+ rtl::OUString name(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationProvider"));
+ return css::uno::Sequence< rtl::OUString >(&name, 1);
+}
+
+css::uno::Reference< css::lang::XSingleComponentFactory >
+createFactory(
+ cppu::ComponentFactoryFunc, rtl::OUString const &,
+ css::uno::Sequence< rtl::OUString > const &, rtl_ModuleCount *)
+ SAL_THROW(())
+{
+ return new Factory;
+}
+
+} }
diff --git a/configmgr2/source/configurationprovider.hxx b/configmgr2/source/configurationprovider.hxx
new file mode 100644
index 000000000000..ee8dd3bb9036
--- /dev/null
+++ b/configmgr2/source/configurationprovider.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_CONFIGURATIONPROVIDER_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_CONFIGURATIONPROVIDER_HXX
+
+#include "sal/config.h"
+
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "cppuhelper/factory.hxx"
+#include "rtl/unload.h"
+#include "sal/types.h"
+
+namespace com { namespace sun { namespace star {
+ namespace lang { class XSingleComponentFactory; }
+ namespace uno {
+ class XComponentContext;
+ class XInterface;
+ }
+} } }
+namespace rtl { class OUString; }
+
+namespace configmgr { namespace configuration_provider {
+
+com::sun::star::uno::Reference< com::sun::star::uno::XInterface > createDefault(
+ com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
+ const & context);
+
+rtl::OUString SAL_CALL getImplementationName();
+
+com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
+getSupportedServiceNames();
+
+com::sun::star::uno::Reference< com::sun::star::lang::XSingleComponentFactory >
+SAL_CALL createFactory(
+ cppu::ComponentFactoryFunc, rtl::OUString const &,
+ com::sun::star::uno::Sequence< rtl::OUString > const &, rtl_ModuleCount *)
+ SAL_THROW(());
+
+} }
+
+#endif
diff --git a/configmgr2/source/data.cxx b/configmgr2/source/data.cxx
new file mode 100644
index 000000000000..e783abb7e25c
--- /dev/null
+++ b/configmgr2/source/data.cxx
@@ -0,0 +1,320 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <algorithm>
+
+#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/ref.hxx"
+#include "rtl/string.h"
+#include "rtl/ustrbuf.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "data.hxx"
+#include "groupnode.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "setnode.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+bool decode(
+ rtl::OUString const & encoded, sal_Int32 begin, sal_Int32 end,
+ rtl::OUString * decoded)
+{
+ OSL_ASSERT(
+ begin >= 0 && begin <= end && end <= encoded.getLength() &&
+ decoded != 0);
+ rtl::OUStringBuffer buf;
+ while (begin != end) {
+ sal_Unicode c = encoded[begin++];
+ if (c == '&') {
+ if (encoded.matchAsciiL(RTL_CONSTASCII_STRINGPARAM("amp;"), begin))
+ {
+ buf.append(sal_Unicode('&'));
+ begin += RTL_CONSTASCII_LENGTH("amp;");
+ } else if (encoded.matchAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("quot;"), begin))
+ {
+ buf.append(sal_Unicode('"'));
+ begin += RTL_CONSTASCII_LENGTH("quot;");
+ } else if (encoded.matchAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("apos;"), begin))
+ {
+ buf.append(sal_Unicode('\''));
+ begin += RTL_CONSTASCII_LENGTH("apos;");
+ } else {
+ return false;
+ }
+ OSL_ASSERT(begin <= end);
+ } else {
+ buf.append(c);
+ }
+ }
+ *decoded = buf.makeStringAndClear();
+ return true;
+}
+
+}
+
+rtl::OUString Data::createSegment(
+ rtl::OUString const & templateName, rtl::OUString const & name)
+{
+ if (templateName.getLength() == 0) {
+ return name;
+ }
+ rtl::OUStringBuffer buf(templateName);
+ //TODO: verify template name contains no bad chars?
+ buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("['"));
+ for (sal_Int32 i = 0; i < name.getLength(); ++i) {
+ sal_Unicode c = name[i];
+ switch (c) {
+ case '&':
+ buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("&amp;"));
+ break;
+ case '"':
+ buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("&quot;"));
+ break;
+ case '\'':
+ buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("&apos;"));
+ break;
+ default:
+ buf.append(c);
+ break;
+ }
+ }
+ buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("']"));
+ return buf.makeStringAndClear();
+}
+
+sal_Int32 Data::parseSegment(
+ rtl::OUString const & path, sal_Int32 index, rtl::OUString * name,
+ bool * setElement, rtl::OUString * templateName)
+{
+ OSL_ASSERT(
+ index >= 0 && index <= path.getLength() && name != 0 &&
+ setElement != 0);
+ sal_Int32 i = index;
+ while (i < path.getLength() && path[i] != '/' && path[i] != '[') {
+ ++i;
+ }
+ if (i == path.getLength() || path[i] == '/') {
+ *name = path.copy(index, i - index);
+ *setElement = false;
+ return i;
+ }
+ if (templateName != 0) {
+ if (i - index == 1 && path[index] == '*') {
+ *templateName = rtl::OUString();
+ } else {
+ *templateName = path.copy(index, i - index);
+ }
+ }
+ if (++i == path.getLength()) {
+ return -1;
+ }
+ sal_Unicode del = path[i++];
+ if (del != '\'' && del != '"') {
+ return -1;
+ }
+ sal_Int32 j = path.indexOf(del, i);
+ if (j == -1 || j + 1 == path.getLength() || path[j + 1] != ']' ||
+ !decode(path, i, j, name))
+ {
+ return -1;
+ }
+ *setElement = true;
+ return j + 2;
+}
+
+rtl::OUString Data::fullTemplateName(
+ rtl::OUString const & component, rtl::OUString const & name)
+{
+ if (component.indexOf(':') != -1 || name.indexOf(':') != -1) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "bad component/name pair containing colon ")) +
+ component + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) +
+ name),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::OUStringBuffer buf(component);
+ buf.append(sal_Unicode(':'));
+ buf.append(name);
+ return buf.makeStringAndClear();
+}
+
+bool Data::equalTemplateNames(
+ rtl::OUString const & shortName, rtl::OUString const & longName)
+{
+ if (shortName.indexOf(':') == -1) {
+ sal_Int32 i = longName.indexOf(':') + 1;
+ OSL_ASSERT(i > 0);
+ return
+ rtl_ustr_compare_WithLength(
+ shortName.getStr(), shortName.getLength(),
+ longName.getStr() + i, longName.getLength() - i) ==
+ 0;
+ } else {
+ return shortName == longName;
+ }
+}
+
+rtl::Reference< Node > Data::findNode(
+ int layer, NodeMap const & map, rtl::OUString const & name)
+{
+ NodeMap::const_iterator i(map.find(name));
+ return i == map.end() || i->second->getLayer() > layer
+ ? rtl::Reference< Node >() : i->second;
+}
+
+rtl::Reference< Node > Data::resolvePathRepresentation(
+ rtl::OUString const & pathRepresentation, Path * path, int * finalizedLayer)
+ const
+{
+ if (pathRepresentation.getLength() == 0 || pathRepresentation[0] != '/') {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad path ")) +
+ pathRepresentation),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::OUString seg;
+ bool setElement;
+ sal_Int32 n = parseSegment(pathRepresentation, 1, &seg, &setElement, 0);
+ if (n == -1 || setElement)
+ {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad path ")) +
+ pathRepresentation),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ NodeMap::const_iterator i(components.find(seg));
+ if (path != 0) {
+ path->clear();
+ }
+ rtl::Reference< Node > parent;
+ int finalized = NO_LAYER;
+ for (rtl::Reference< Node > p(i == components.end() ? 0 : i->second);;) {
+ if (!p.is()) {
+ return p;
+ }
+ if (path != 0) {
+ path->push_back(seg);
+ }
+ finalized = std::min(finalized, p->getFinalized());
+ if (n != pathRepresentation.getLength() &&
+ pathRepresentation[n++] != '/')
+ {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad path ")) +
+ pathRepresentation),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ // for backwards compatibility, ignore a final slash
+ if (n == pathRepresentation.getLength()) {
+ if (finalizedLayer != 0) {
+ *finalizedLayer = finalized;
+ }
+ return p;
+ }
+ parent = p;
+ rtl::OUString templateName;
+ n = parseSegment(
+ pathRepresentation, n, &seg, &setElement, &templateName);
+ if (n == -1) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad path ")) +
+ pathRepresentation),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ // For backwards compatibility, allow set members to be accessed with
+ // simple path segments, like group members:
+ p = p->getMember(seg);
+ if (setElement) {
+ switch (parent->kind()) {
+ case Node::KIND_LOCALIZED_PROPERTY:
+ if (templateName.getLength() != 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("bad path ")) +
+ pathRepresentation),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ break;
+ case Node::KIND_SET:
+ if (templateName.getLength() != 0 &&
+ !dynamic_cast< SetNode * >(parent.get())->isValidTemplate(
+ templateName))
+ {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("bad path ")) +
+ pathRepresentation),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ break;
+ default:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad path ")) +
+ pathRepresentation),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ if (templateName.getLength() != 0 && p != 0) {
+ OSL_ASSERT(p->getTemplateName().getLength() != 0);
+ if (!equalTemplateNames(templateName, p->getTemplateName())) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("bad path ")) +
+ pathRepresentation),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+ }
+ }
+}
+
+rtl::Reference< Node > Data::getTemplate(
+ int layer, rtl::OUString const & fullName) const
+{
+ return findNode(layer, templates, fullName);
+}
+
+}
diff --git a/configmgr2/source/data.hxx b/configmgr2/source/data.hxx
new file mode 100644
index 000000000000..7f36b2cf27af
--- /dev/null
+++ b/configmgr2/source/data.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_DATA_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_DATA_HXX
+
+#include "sal/config.h"
+
+#include <climits>
+#include <vector>
+
+#include "boost/noncopyable.hpp"
+#include "rtl/ref.hxx"
+#include "sal/types.h"
+
+#include "modifications.hxx"
+#include "nodemap.hxx"
+#include "path.hxx"
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class Node;
+
+struct Data: private boost::noncopyable {
+ enum { NO_LAYER = INT_MAX };
+
+ NodeMap templates;
+
+ NodeMap components;
+
+ Modifications modifications;
+
+ static rtl::OUString createSegment(
+ rtl::OUString const & templateName, rtl::OUString const & name);
+
+ static sal_Int32 parseSegment(
+ rtl::OUString const & path, sal_Int32 index, rtl::OUString * name,
+ bool * setElement, rtl::OUString * templateName);
+
+ static rtl::OUString fullTemplateName(
+ rtl::OUString const & component, rtl::OUString const & name);
+
+ //TODO: better rules under which circumstances a short template name matches
+ static bool equalTemplateNames(
+ rtl::OUString const & shortName, rtl::OUString const & longName);
+
+ static rtl::Reference< Node > findNode(
+ int layer, NodeMap const & map, rtl::OUString const & name);
+
+ rtl::Reference< Node > resolvePathRepresentation(
+ rtl::OUString const & pathRepresentation, Path * path,
+ int * finalizedLayer) const;
+
+ rtl::Reference< Node > getTemplate(
+ int layer, rtl::OUString const & fullName) const;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/defaultprovider.cxx b/configmgr2/source/defaultprovider.cxx
new file mode 100644
index 000000000000..e968bf6ce8ca
--- /dev/null
+++ b/configmgr2/source/defaultprovider.cxx
@@ -0,0 +1,133 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/lang/XSingleComponentFactory.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "cppuhelper/factory.hxx"
+#include "cppuhelper/implbase1.hxx"
+#include "cppuhelper/weak.hxx"
+#include "sal/types.h"
+#include "rtl/unload.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "configurationprovider.hxx"
+#include "lock.hxx"
+
+namespace configmgr { namespace default_provider {
+
+namespace {
+
+namespace css = com::sun::star;
+
+class Factory:
+ public cppu::WeakImplHelper1< css::lang::XSingleComponentFactory >,
+ private boost::noncopyable
+{
+public:
+ Factory() {}
+
+private:
+ virtual ~Factory() {}
+
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
+ createInstanceWithContext(
+ css::uno::Reference< css::uno::XComponentContext > const & Context)
+ throw (css::uno::Exception, css::uno::RuntimeException);
+
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
+ createInstanceWithArgumentsAndContext(
+ css::uno::Sequence< css::uno::Any > const & Arguments,
+ css::uno::Reference< css::uno::XComponentContext > const & Context)
+ throw (css::uno::Exception, css::uno::RuntimeException);
+};
+
+css::uno::Reference< css::uno::XInterface > Factory::createInstanceWithContext(
+ css::uno::Reference< css::uno::XComponentContext > const & Context)
+ throw (css::uno::Exception, css::uno::RuntimeException)
+{
+ return createInstanceWithArgumentsAndContext(
+ css::uno::Sequence< css::uno::Any >(), Context);
+}
+
+css::uno::Reference< css::uno::XInterface >
+Factory::createInstanceWithArgumentsAndContext(
+ css::uno::Sequence< css::uno::Any > const & Arguments,
+ css::uno::Reference< css::uno::XComponentContext > const & Context)
+ throw (css::uno::Exception, css::uno::RuntimeException)
+{
+ if (Arguments.getLength() != 0) {
+ throw css::uno::Exception(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.DefaultProvider must be"
+ " instantiated without arguments")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ osl::MutexGuard guard(lock);
+ static css::uno::Reference< css::uno::XInterface > singleton(
+ configuration_provider::createDefault(Context));
+ return singleton;
+}
+
+}
+
+rtl::OUString getImplementationName() {
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.comp.configuration.DefaultProvider"));
+}
+
+css::uno::Sequence< rtl::OUString > getSupportedServiceNames() {
+ rtl::OUString name(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.DefaultProvider"));
+ return css::uno::Sequence< rtl::OUString >(&name, 1);
+}
+
+css::uno::Reference< css::lang::XSingleComponentFactory >
+SAL_CALL createFactory(
+ cppu::ComponentFactoryFunc, rtl::OUString const &,
+ css::uno::Sequence< rtl::OUString > const &, rtl_ModuleCount *)
+ SAL_THROW(())
+{
+ return new Factory;
+}
+
+} }
diff --git a/configmgr2/source/defaultprovider.hxx b/configmgr2/source/defaultprovider.hxx
new file mode 100644
index 000000000000..56f0b8757995
--- /dev/null
+++ b/configmgr2/source/defaultprovider.hxx
@@ -0,0 +1,61 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_DEFAULTPROVIDER_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_DEFAULTPROVIDER_HXX
+
+#include "sal/config.h"
+
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "cppuhelper/factory.hxx"
+#include "rtl/unload.h"
+#include "sal/types.h"
+
+namespace com { namespace sun { namespace star { namespace lang {
+ class XSingleComponentFactory;
+} } } }
+namespace rtl { class OUString; }
+
+namespace configmgr { namespace default_provider {
+
+rtl::OUString SAL_CALL getImplementationName();
+
+com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
+getSupportedServiceNames();
+
+com::sun::star::uno::Reference< com::sun::star::lang::XSingleComponentFactory >
+SAL_CALL createFactory(
+ cppu::ComponentFactoryFunc, rtl::OUString const &,
+ com::sun::star::uno::Sequence< rtl::OUString > const &, rtl_ModuleCount *)
+ SAL_THROW(());
+
+} }
+
+#endif
diff --git a/configmgr2/source/groupnode.cxx b/configmgr2/source/groupnode.cxx
new file mode 100644
index 000000000000..1248f284c35e
--- /dev/null
+++ b/configmgr2/source/groupnode.cxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "rtl/ref.hxx"
+#include "rtl/ustring.hxx"
+
+#include "data.hxx"
+#include "groupnode.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+
+namespace configmgr {
+
+GroupNode::GroupNode(
+ int layer, bool extensible, rtl::OUString const & templateName):
+ Node(layer), extensible_(extensible), templateName_(templateName),
+ mandatory_(Data::NO_LAYER)
+{}
+
+rtl::Reference< Node > GroupNode::clone() const {
+ return new GroupNode(*this);
+}
+
+NodeMap & GroupNode::getMembers() {
+ return members_;
+}
+
+rtl::OUString GroupNode::getTemplateName() const {
+ return templateName_;
+}
+
+void GroupNode::setMandatory(int layer) {
+ mandatory_ = layer;
+}
+
+int GroupNode::getMandatory() const {
+ return mandatory_;
+}
+
+bool GroupNode::isExtensible() const {
+ return extensible_;
+}
+
+GroupNode::GroupNode(GroupNode const & other):
+ Node(other), extensible_(other.extensible_),
+ templateName_(other.templateName_), mandatory_(other.mandatory_)
+{
+ cloneNodeMap(other.members_, &members_);
+}
+
+GroupNode::~GroupNode() {}
+
+Node::Kind GroupNode::kind() const {
+ return KIND_GROUP;
+}
+
+void GroupNode::clear() {
+ members_.clear();
+}
+
+}
diff --git a/configmgr2/source/groupnode.hxx b/configmgr2/source/groupnode.hxx
new file mode 100644
index 000000000000..21dd569464cc
--- /dev/null
+++ b/configmgr2/source/groupnode.hxx
@@ -0,0 +1,77 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_GROUPNODE_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_GROUPNODE_HXX
+
+#include "sal/config.h"
+
+#include "rtl/ref.hxx"
+#include "rtl/ustring.hxx"
+
+#include "node.hxx"
+#include "nodemap.hxx"
+
+namespace configmgr {
+
+class GroupNode: public Node {
+public:
+ GroupNode(int layer, bool extensible, rtl::OUString const & templateName);
+
+ virtual rtl::Reference< Node > clone() const;
+
+ virtual NodeMap & getMembers();
+
+ virtual rtl::OUString getTemplateName() const;
+
+ virtual void setMandatory(int layer);
+
+ virtual int getMandatory() const;
+
+ bool isExtensible() const;
+
+private:
+ GroupNode(GroupNode const & other);
+
+ virtual ~GroupNode();
+
+ virtual Kind kind() const;
+
+ virtual void clear();
+
+ bool extensible_;
+ NodeMap members_;
+ rtl::OUString templateName_;
+ // non-empty iff this node is a template, free node, or set member
+ int mandatory_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/localizedpropertynode.cxx b/configmgr2/source/localizedpropertynode.cxx
new file mode 100644
index 000000000000..185974e6d1fa
--- /dev/null
+++ b/configmgr2/source/localizedpropertynode.cxx
@@ -0,0 +1,89 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "com/sun/star/uno/Any.hxx"
+#include "rtl/ref.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "localizedpropertynode.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "type.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+LocalizedPropertyNode::LocalizedPropertyNode(
+ int layer, Type type, bool nillable):
+ Node(layer), type_(type), nillable_(nillable)
+{}
+
+rtl::Reference< Node > LocalizedPropertyNode::clone() const {
+ return new LocalizedPropertyNode(*this);
+}
+
+NodeMap & LocalizedPropertyNode::getMembers() {
+ return members_;
+}
+
+Type LocalizedPropertyNode::getType() const {
+ return type_;
+}
+
+bool LocalizedPropertyNode::isNillable() const {
+ return nillable_;
+}
+
+LocalizedPropertyNode::LocalizedPropertyNode(
+ LocalizedPropertyNode const & other):
+ Node(other), type_(other.type_), nillable_(other.nillable_)
+{
+ cloneNodeMap(other.members_, &members_);
+}
+
+LocalizedPropertyNode::~LocalizedPropertyNode() {}
+
+Node::Kind LocalizedPropertyNode::kind() const {
+ return KIND_LOCALIZED_PROPERTY;
+}
+
+void LocalizedPropertyNode::clear() {
+ members_.clear();
+}
+
+}
diff --git a/configmgr2/source/localizedpropertynode.hxx b/configmgr2/source/localizedpropertynode.hxx
new file mode 100644
index 000000000000..4ac4fea36447
--- /dev/null
+++ b/configmgr2/source/localizedpropertynode.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_LOCALIZEDPROPERTYNODE_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_LOCALIZEDPROPERTYNODE_HXX
+
+#include "sal/config.h"
+
+#include "rtl/ref.hxx"
+
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "type.hxx"
+
+namespace com { namespace sun { namespace star { namespace uno {
+ class Any;
+} } } }
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class LocalizedPropertyNode: public Node {
+public:
+ LocalizedPropertyNode(int layer, Type type, bool nillable);
+
+ virtual rtl::Reference< Node > clone() const;
+
+ virtual NodeMap & getMembers();
+
+ Type getType() const;
+
+ bool isNillable() const;
+
+private:
+ LocalizedPropertyNode(LocalizedPropertyNode const & other);
+
+ virtual ~LocalizedPropertyNode();
+
+ virtual Kind kind() const;
+
+ virtual void clear();
+
+ Type type_;
+ bool nillable_;
+ NodeMap members_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/localizedvaluenode.cxx b/configmgr2/source/localizedvaluenode.cxx
new file mode 100644
index 000000000000..bce3c2ceb2ea
--- /dev/null
+++ b/configmgr2/source/localizedvaluenode.cxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "com/sun/star/uno/Any.hxx"
+#include "rtl/ref.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "localizedvaluenode.hxx"
+#include "node.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+LocalizedValueNode::LocalizedValueNode(int layer, css::uno::Any const & value):
+ Node(layer), value_(value)
+{}
+
+rtl::Reference< Node > LocalizedValueNode::clone() const {
+ return new LocalizedValueNode(*this);
+}
+
+rtl::OUString LocalizedValueNode::getTemplateName() const {
+ return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("*"));
+}
+
+css::uno::Any LocalizedValueNode::getValue() const {
+ return value_;
+}
+
+void LocalizedValueNode::setValue(int layer, css::uno::Any const & value) {
+ setLayer(layer);
+ value_ = value;
+}
+
+LocalizedValueNode::LocalizedValueNode(LocalizedValueNode const & other):
+ Node(other), value_(other.value_)
+{}
+
+LocalizedValueNode::~LocalizedValueNode() {}
+
+Node::Kind LocalizedValueNode::kind() const {
+ return KIND_LOCALIZED_VALUE;
+}
+
+}
diff --git a/configmgr2/source/localizedvaluenode.hxx b/configmgr2/source/localizedvaluenode.hxx
new file mode 100644
index 000000000000..dc36a2ffe2e5
--- /dev/null
+++ b/configmgr2/source/localizedvaluenode.hxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_LOCALIZEDVALUENODE_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_LOCALIZEDVALUENODE_HXX
+
+#include "sal/config.h"
+
+#include "com/sun/star/uno/Any.hxx"
+#include "rtl/ref.hxx"
+
+#include "node.hxx"
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class LocalizedValueNode: public Node {
+public:
+ LocalizedValueNode(int layer, com::sun::star::uno::Any const & value);
+
+ virtual rtl::Reference< Node > clone() const;
+
+ virtual rtl::OUString getTemplateName() const;
+
+ com::sun::star::uno::Any getValue() const;
+
+ void setValue(int layer, com::sun::star::uno::Any const & value);
+
+private:
+ LocalizedValueNode(LocalizedValueNode const & other);
+
+ virtual ~LocalizedValueNode();
+
+ virtual Kind kind() const;
+
+ com::sun::star::uno::Any value_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/lock.cxx b/configmgr2/source/lock.cxx
new file mode 100644
index 000000000000..d90aebdde766
--- /dev/null
+++ b/configmgr2/source/lock.cxx
@@ -0,0 +1,41 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "osl/mutex.hxx"
+
+#include "lock.hxx"
+
+namespace configmgr {
+
+osl::Mutex lock;
+
+}
diff --git a/configmgr2/source/lock.hxx b/configmgr2/source/lock.hxx
new file mode 100644
index 000000000000..99c796c94d02
--- /dev/null
+++ b/configmgr2/source/lock.hxx
@@ -0,0 +1,43 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_LOCK_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_LOCK_HXX
+
+#include "sal/config.h"
+
+#include "osl/mutex.hxx"
+
+namespace configmgr {
+
+extern osl::Mutex lock;
+
+}
+
+#endif
diff --git a/configmgr2/source/makefile.mk b/configmgr2/source/makefile.mk
new file mode 100644
index 000000000000..38a412394028
--- /dev/null
+++ b/configmgr2/source/makefile.mk
@@ -0,0 +1,84 @@
+#*************************************************************************
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2009 by Sun Microsystems, Inc.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# $RCSfile: makefile,v $
+#
+# $Revision: 1.4 $
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#***********************************************************************/
+
+PRJ = ..
+PRJNAME = configmgr
+TARGET = configmgr
+
+ENABLE_EXCEPTIONS = TRUE
+VISIBILITY_HIDDEN = TRUE
+
+.INCLUDE: settings.mk
+
+CDEFS += -DOOO_DLLIMPLEMENTATION_CONFIGMGR
+
+SLOFILES = \
+ $(SLO)/access.obj \
+ $(SLO)/broadcaster.obj \
+ $(SLO)/childaccess.obj \
+ $(SLO)/components.obj \
+ $(SLO)/configurationprovider.obj \
+ $(SLO)/data.obj \
+ $(SLO)/defaultprovider.obj \
+ $(SLO)/groupnode.obj \
+ $(SLO)/localizedpropertynode.obj \
+ $(SLO)/localizedvaluenode.obj \
+ $(SLO)/lock.obj \
+ $(SLO)/modifications.obj \
+ $(SLO)/node.obj \
+ $(SLO)/nodemap.obj \
+ $(SLO)/pad.obj \
+ $(SLO)/parsemanager.obj \
+ $(SLO)/propertynode.obj \
+ $(SLO)/rootaccess.obj \
+ $(SLO)/services.obj \
+ $(SLO)/setnode.obj \
+ $(SLO)/type.obj \
+ $(SLO)/update.obj \
+ $(SLO)/valueparser.obj \
+ $(SLO)/writemodfile.obj \
+ $(SLO)/xcdparser.obj \
+ $(SLO)/xcuparser.obj \
+ $(SLO)/xcsparser.obj \
+ $(SLO)/xmldata.obj \
+ $(SLO)/xmlreader.obj
+
+SHL1IMPLIB = i$(SHL1TARGET)
+SHL1OBJS = $(SLOFILES)
+SHL1STDLIBS = \
+ $(COMPHELPERLIB) \
+ $(CPPUHELPERLIB) \
+ $(CPPULIB) \
+ $(SALHELPERLIB) \
+ $(SALLIB)
+SHL1TARGET = configmgr
+SHL1USE_EXPORTS = name
+DEF1NAME = $(SHL1TARGET)
+
+.INCLUDE: target.mk
diff --git a/configmgr2/source/modifications.cxx b/configmgr2/source/modifications.cxx
new file mode 100644
index 000000000000..b518c982fa89
--- /dev/null
+++ b/configmgr2/source/modifications.cxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "rtl/ustring.hxx"
+
+#include "modifications.hxx"
+#include "path.hxx"
+
+namespace configmgr {
+
+Modifications::Modifications() {}
+
+Modifications::~Modifications() {}
+
+void Modifications::add(Path const & path) {
+ Node * p = &root_;
+ bool wasPresent = false;
+ for (Path::const_iterator i(path.begin()); i != path.end(); ++i) {
+ Node::Children::iterator j(p->children.find(*i));
+ if (j == p->children.end()) {
+ if (wasPresent && p->children.empty()) {
+ return;
+ }
+ j = p->children.insert(Node::Children::value_type(*i, Node())).
+ first;
+ wasPresent = false;
+ } else {
+ wasPresent = true;
+ }
+ p = &j->second;
+ }
+ p->children.clear();
+}
+
+Modifications::Node const & Modifications::getRoot() const {
+ return root_;
+}
+
+}
diff --git a/configmgr2/source/modifications.hxx b/configmgr2/source/modifications.hxx
new file mode 100644
index 000000000000..75295ce5c194
--- /dev/null
+++ b/configmgr2/source/modifications.hxx
@@ -0,0 +1,67 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_MODIFICATIONS_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_MODIFICATIONS_HXX
+
+#include "sal/config.h"
+
+#include <map>
+
+#include "boost/noncopyable.hpp"
+
+#include "path.hxx"
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class Modifications: private boost::noncopyable {
+public:
+ struct Node {
+ typedef std::map< rtl::OUString, Node > Children;
+
+ Children children;
+ };
+
+ Modifications();
+
+ ~Modifications();
+
+ void add(Path const & path);
+
+ Node const & getRoot() const;
+
+private:
+ Node root_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/node.cxx b/configmgr2/source/node.cxx
new file mode 100644
index 000000000000..4e077e62ddb3
--- /dev/null
+++ b/configmgr2/source/node.cxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#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/ref.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "data.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+NodeMap & Node::getMembers() {
+ OSL_ASSERT(false);
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("this cannot happen")),
+ css::uno::Reference< css::uno::XInterface >());
+}
+
+rtl::OUString Node::getTemplateName() const {
+ return rtl::OUString();
+}
+
+void Node::setMandatory(int layer) {
+ (void) layer; // avoid warnings
+ OSL_ASSERT(layer == Data::NO_LAYER);
+}
+
+int Node::getMandatory() const {
+ return Data::NO_LAYER;
+}
+
+void Node::setLayer(int layer) {
+ OSL_ASSERT(layer >= layer_);
+ layer_ = layer;
+}
+
+int Node::getLayer() const {
+ return layer_;
+}
+
+void Node::setFinalized(int layer) {
+ finalized_ = layer;
+}
+
+int Node::getFinalized() const {
+ return finalized_;
+}
+
+rtl::Reference< Node > Node::getMember(rtl::OUString const & name) {
+ NodeMap & members = getMembers();
+ NodeMap::iterator i(members.find(name));
+ return i == members.end() ? rtl::Reference< Node >() : i->second;
+}
+
+Node::Node(int layer): layer_(layer), finalized_(Data::NO_LAYER) {}
+
+Node::Node(const Node & other):
+ SimpleReferenceObject(), layer_(other.layer_), finalized_(other.finalized_)
+{}
+
+Node::~Node() {}
+
+void Node::clear() {}
+
+rtl::Reference< Node > Node::findMember(rtl::OUString const &) {
+ return rtl::Reference< Node >();
+}
+
+}
diff --git a/configmgr2/source/node.hxx b/configmgr2/source/node.hxx
new file mode 100644
index 000000000000..d11bc2e26d5a
--- /dev/null
+++ b/configmgr2/source/node.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_NODE_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_NODE_HXX
+
+#include "sal/config.h"
+
+#include "rtl/ref.hxx"
+#include "rtl/ustring.hxx"
+#include "salhelper/simplereferenceobject.hxx"
+
+#include "nodemap.hxx"
+
+namespace configmgr {
+
+class Node: public salhelper::SimpleReferenceObject {
+public:
+ enum Kind {
+ KIND_PROPERTY, KIND_LOCALIZED_PROPERTY, KIND_LOCALIZED_VALUE,
+ KIND_GROUP, KIND_SET };
+
+ virtual Kind kind() const = 0;
+
+ virtual rtl::Reference< Node > clone() const = 0;
+
+ virtual NodeMap & getMembers();
+
+ virtual rtl::OUString getTemplateName() const;
+
+ virtual void setMandatory(int layer);
+
+ virtual int getMandatory() const;
+
+ void setLayer(int layer);
+
+ int getLayer() const;
+
+ void setFinalized(int layer);
+
+ int getFinalized() const;
+
+ rtl::Reference< Node > getMember(rtl::OUString const & name);
+
+protected:
+ explicit Node(int layer);
+
+ Node(const Node & other);
+
+ virtual ~Node();
+
+ virtual void clear();
+
+ virtual rtl::Reference< Node > findMember(rtl::OUString const & name);
+
+ int layer_;
+ int finalized_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/nodemap.cxx b/configmgr2/source/nodemap.cxx
new file mode 100644
index 000000000000..ba4e25833eac
--- /dev/null
+++ b/configmgr2/source/nodemap.cxx
@@ -0,0 +1,52 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <algorithm>
+
+#include "osl/diagnose.h"
+#include "rtl/ustring.hxx"
+
+#include "node.hxx"
+#include "nodemap.hxx"
+
+namespace configmgr {
+
+void cloneNodeMap(NodeMap const & source, NodeMap * target) {
+ OSL_ASSERT(target != 0 && target->empty());
+ NodeMap clone(source);
+ for (NodeMap::iterator i(clone.begin()); i != clone.end(); ++i) {
+ i->second = i->second->clone();
+ }
+ std::swap(clone, *target);
+}
+
+}
diff --git a/configmgr2/source/nodemap.hxx b/configmgr2/source/nodemap.hxx
new file mode 100644
index 000000000000..4a10e0ce6cf6
--- /dev/null
+++ b/configmgr2/source/nodemap.hxx
@@ -0,0 +1,51 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_NODEMAP_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_NODEMAP_HXX
+
+#include "sal/config.h"
+
+#include <map>
+
+#include "rtl/ref.hxx"
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class Node;
+
+typedef std::map< rtl::OUString, rtl::Reference< Node > > NodeMap;
+
+void cloneNodeMap(NodeMap const & source, NodeMap * target);
+
+}
+
+#endif
diff --git a/configmgr2/source/pad.cxx b/configmgr2/source/pad.cxx
new file mode 100644
index 000000000000..b2b639f0dd7c
--- /dev/null
+++ b/configmgr2/source/pad.cxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "osl/diagnose.h"
+#include "rtl/string.h"
+#include "sal/types.h"
+
+#include "pad.hxx"
+#include "span.hxx"
+
+namespace configmgr {
+
+void Pad::add(char const * begin, sal_Int32 length) {
+ OSL_ASSERT(
+ begin != 0 && length >= 0 && !(span_.is() && buffer_.getLength() != 0));
+ if (length != 0) {
+ if (span_.is()) {
+ buffer_.append(span_.begin, span_.length);
+ span_.clear();
+ }
+ if (buffer_.getLength() == 0) {
+ span_ = Span(begin, length);
+ } else {
+ buffer_.append(begin, length);
+ }
+ }
+}
+
+void Pad::clear() {
+ OSL_ASSERT(!(span_.is() && buffer_.getLength() != 0));
+ span_.clear();
+ buffer_.setLength(0);
+}
+
+bool Pad::is() const {
+ OSL_ASSERT(!(span_.is() && buffer_.getLength() != 0));
+ return span_.is() || buffer_.getLength() != 0;
+}
+
+Span Pad::get() const {
+ OSL_ASSERT(!(span_.is() && buffer_.getLength() != 0));
+ if (span_.is()) {
+ return span_;
+ } else if (buffer_.getLength() == 0) {
+ return Span(RTL_CONSTASCII_STRINGPARAM(""));
+ } else {
+ return Span(buffer_.getStr(), buffer_.getLength());
+ }
+}
+
+}
diff --git a/configmgr2/source/pad.hxx b/configmgr2/source/pad.hxx
new file mode 100644
index 000000000000..2d0ff6bfecc0
--- /dev/null
+++ b/configmgr2/source/pad.hxx
@@ -0,0 +1,59 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_PAD_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_PAD_HXX
+
+#include "sal/config.h"
+
+#include "rtl/strbuf.hxx"
+#include "sal/types.h"
+
+#include "span.hxx"
+
+namespace configmgr {
+
+class Pad {
+public:
+ void add(char const * begin, sal_Int32 length);
+
+ void clear();
+
+ bool is() const;
+
+ Span get() const;
+
+private:
+ Span span_;
+ rtl::OStringBuffer buffer_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/parsemanager.cxx b/configmgr2/source/parsemanager.cxx
new file mode 100644
index 000000000000..ba23a856e65f
--- /dev/null
+++ b/configmgr2/source/parsemanager.cxx
@@ -0,0 +1,87 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "com/sun/star/container/NoSuchElementException.hpp"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "osl/diagnose.h"
+#include "sal/types.h"
+
+#include "parsemanager.hxx"
+#include "parser.hxx"
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+ParseManager::ParseManager(
+ rtl::OUString const & url, rtl::Reference< Parser > const & parser)
+ SAL_THROW((
+ css::container::NoSuchElementException, css::uno::RuntimeException)):
+ reader_(url), parser_(parser)
+{
+ OSL_ASSERT(parser.is());
+}
+
+bool ParseManager::parse() {
+ for (;;) {
+ switch (itemData_.is()
+ ? XmlReader::RESULT_BEGIN
+ : reader_.nextItem(
+ parser_->getTextMode(), &itemData_, &itemNamespace_))
+ {
+ case XmlReader::RESULT_BEGIN:
+ if (!parser_->startElement(reader_, itemNamespace_, itemData_))
+ {
+ return false;
+ }
+ break;
+ case XmlReader::RESULT_END:
+ parser_->endElement(reader_);
+ break;
+ case XmlReader::RESULT_TEXT:
+ parser_->characters(itemData_);
+ break;
+ case XmlReader::RESULT_DONE:
+ return true;
+ }
+ itemData_.clear();
+ }
+}
+
+ParseManager::~ParseManager() {}
+
+}
diff --git a/configmgr2/source/parsemanager.hxx b/configmgr2/source/parsemanager.hxx
new file mode 100644
index 000000000000..028d6cc04c26
--- /dev/null
+++ b/configmgr2/source/parsemanager.hxx
@@ -0,0 +1,71 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_PARSEMANAGER_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_PARSEMANAGER_HXX
+
+#include "sal/config.h"
+
+#include "com/sun/star/container/NoSuchElementException.hpp"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "rtl/ref.hxx"
+#include "sal/types.h"
+#include "salhelper/simplereferenceobject.hxx"
+
+#include "span.hxx"
+#include "xmlreader.hxx"
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class Parser;
+
+class ParseManager: public salhelper::SimpleReferenceObject {
+public:
+ ParseManager(
+ rtl::OUString const & url, rtl::Reference< Parser > const & parser)
+ SAL_THROW((
+ com::sun::star::container::NoSuchElementException,
+ com::sun::star::uno::RuntimeException));
+
+ bool parse();
+
+private:
+ virtual ~ParseManager();
+
+ XmlReader reader_;
+ rtl::Reference< Parser > parser_;
+ Span itemData_;
+ XmlReader::Namespace itemNamespace_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/parser.hxx b/configmgr2/source/parser.hxx
new file mode 100644
index 000000000000..c80e3dfc2731
--- /dev/null
+++ b/configmgr2/source/parser.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_PARSER_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_PARSER_HXX
+
+#include "sal/config.h"
+
+#include <memory>
+
+#include "salhelper/simplereferenceobject.hxx"
+
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+struct Span;
+
+class Parser: public salhelper::SimpleReferenceObject {
+public:
+ virtual XmlReader::Text getTextMode() = 0;
+
+ virtual bool startElement(
+ XmlReader & reader, XmlReader::Namespace ns, Span const & name) = 0;
+
+ virtual void endElement(XmlReader const & reader) = 0;
+
+ virtual void characters(Span const & text) = 0;
+
+protected:
+ Parser() {}
+
+ virtual ~Parser() {}
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/path.hxx b/configmgr2/source/path.hxx
new file mode 100644
index 000000000000..34b08b915e1a
--- /dev/null
+++ b/configmgr2/source/path.hxx
@@ -0,0 +1,45 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_PATH_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_PATH_HXX
+
+#include "sal/config.h"
+
+#include <vector>
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+typedef std::vector< rtl::OUString > Path;
+
+}
+
+#endif
diff --git a/configmgr2/source/propertynode.cxx b/configmgr2/source/propertynode.cxx
new file mode 100644
index 000000000000..b1035bd0b4ee
--- /dev/null
+++ b/configmgr2/source/propertynode.cxx
@@ -0,0 +1,112 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "com/sun/star/beans/Optional.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "osl/diagnose.h"
+#include "rtl/ref.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "components.hxx"
+#include "node.hxx"
+#include "propertynode.hxx"
+#include "type.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+PropertyNode::PropertyNode(
+ int layer, Type type, bool nillable, css::uno::Any const & value,
+ bool extension):
+ Node(layer), type_(type), nillable_(nillable), value_(value),
+ extension_(extension)
+{}
+
+rtl::Reference< Node > PropertyNode::clone() const {
+ return new PropertyNode(*this);
+}
+
+Type PropertyNode::getType() const {
+ return type_;
+}
+
+bool PropertyNode::isNillable() const {
+ return nillable_;
+}
+
+css::uno::Any PropertyNode::getValue(Components & components) {
+ if (externalDescriptor_.getLength() != 0) {
+ css::beans::Optional< css::uno::Any > val(
+ components.getExternalValue(externalDescriptor_));
+ if (val.IsPresent) {
+ value_ = val.Value; //TODO: check value type
+ }
+ externalDescriptor_ = rtl::OUString(); // must not throw
+ }
+ return value_;
+}
+
+void PropertyNode::setValue(int layer, css::uno::Any const & value) {
+ setLayer(layer);
+ value_ = value;
+ externalDescriptor_ = rtl::OUString();
+}
+
+void PropertyNode::setExternal(int layer, rtl::OUString const & descriptor) {
+ OSL_ASSERT(descriptor.getLength() != 0);
+ setLayer(layer);
+ externalDescriptor_ = descriptor;
+}
+
+bool PropertyNode::isExtension() const {
+ return extension_;
+}
+
+PropertyNode::PropertyNode(PropertyNode const & other):
+ Node(other), type_(other.type_), nillable_(other.nillable_),
+ value_(other.value_), externalDescriptor_(other.externalDescriptor_),
+ extension_(other.extension_)
+{}
+
+PropertyNode::~PropertyNode() {}
+
+Node::Kind PropertyNode::kind() const {
+ return KIND_PROPERTY;
+}
+
+}
diff --git a/configmgr2/source/propertynode.hxx b/configmgr2/source/propertynode.hxx
new file mode 100644
index 000000000000..75e514ac8533
--- /dev/null
+++ b/configmgr2/source/propertynode.hxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_PROPERTYNODE_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_PROPERTYNODE_HXX
+
+#include "sal/config.h"
+
+#include "com/sun/star/uno/Any.hxx"
+#include "rtl/ref.hxx"
+
+#include "node.hxx"
+#include "type.hxx"
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class Components;
+
+class PropertyNode: public Node {
+public:
+ PropertyNode(
+ int layer, Type type, bool nillable,
+ com::sun::star::uno::Any const & value, bool extension);
+
+ virtual rtl::Reference< Node > clone() const;
+
+ Type getType() const;
+
+ bool isNillable() const;
+
+ com::sun::star::uno::Any getValue(Components & components);
+
+ void setValue(int layer, com::sun::star::uno::Any const & value);
+
+ void setExternal(int layer, rtl::OUString const & descriptor);
+
+ bool isExtension() const;
+
+private:
+ PropertyNode(PropertyNode const & other);
+
+ virtual ~PropertyNode();
+
+ virtual Kind kind() const;
+
+ Type type_;
+ bool nillable_;
+ com::sun::star::uno::Any value_;
+ rtl::OUString externalDescriptor_;
+ bool extension_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/rootaccess.cxx b/configmgr2/source/rootaccess.cxx
new file mode 100644
index 000000000000..ed0742dcf06f
--- /dev/null
+++ b/configmgr2/source/rootaccess.cxx
@@ -0,0 +1,316 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <vector>
+
+#include "com/sun/star/lang/DisposedException.hpp"
+#include "com/sun/star/lang/EventObject.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Type.hxx"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "com/sun/star/util/ChangesEvent.hpp"
+#include "com/sun/star/util/ChangesSet.hpp"
+#include "com/sun/star/util/ElementChange.hpp"
+#include "com/sun/star/util/XChangesBatch.hpp"
+#include "com/sun/star/util/XChangesListener.hpp"
+#include "com/sun/star/util/XChangesNotifier.hpp"
+#include "comphelper/sequenceasvector.hxx"
+#include "cppu/unotype.hxx"
+#include "cppuhelper/queryinterface.hxx"
+#include "cppuhelper/weak.hxx"
+#include "osl/diagnose.h"
+#include "osl/mutex.hxx"
+#include "rtl/ref.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "broadcaster.hxx"
+#include "childaccess.hxx"
+#include "components.hxx"
+#include "data.hxx"
+#include "lock.hxx"
+#include "modifications.hxx"
+#include "node.hxx"
+#include "path.hxx"
+#include "rootaccess.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+RootAccess::RootAccess(
+ Components & components, rtl::OUString const & pathRepresentation,
+ rtl::OUString const & locale, bool update):
+ Access(components), pathRepresentation_(pathRepresentation),
+ locale_(locale), update_(update)
+{}
+
+Path RootAccess::getAbsolutePath() {
+ getNode();
+ return path_;
+}
+
+void RootAccess::initBroadcaster(
+ Modifications::Node const & modifications, Broadcaster * broadcaster)
+{
+ OSL_ASSERT(broadcaster != 0);
+ comphelper::SequenceAsVector< css::util::ElementChange > changes;
+ initBroadcasterAndChanges(
+ modifications, broadcaster, changesListeners_.empty() ? 0 : &changes);
+ if (!changes.empty()) {
+ css::util::ChangesSet set(changes.getAsConstList());
+ for (ChangesListeners::iterator i(changesListeners_.begin());
+ i != changesListeners_.end(); ++i)
+ {
+ broadcaster->addChangesNotification(
+ *i,
+ css::util::ChangesEvent(
+ static_cast< cppu::OWeakObject * >(this),
+ css::uno::makeAny(pathRepresentation_), set));
+ }
+ }
+}
+
+void RootAccess::acquire() throw () {
+ Access::acquire();
+}
+
+void RootAccess::release() throw () {
+ Access::release();
+}
+
+rtl::OUString RootAccess::getLocale() const {
+ return locale_;
+}
+
+bool RootAccess::isUpdate() const {
+ return update_;
+}
+
+RootAccess::~RootAccess() {
+ osl::MutexGuard g(lock);
+ getComponents().removeRootAccess(this);
+}
+
+Path RootAccess::getRelativePath() {
+ return Path();
+}
+
+rtl::OUString RootAccess::getRelativePathRepresentation() {
+ return rtl::OUString();
+}
+
+rtl::Reference< Node > RootAccess::getNode() {
+ if (!node_.is()) {
+ int finalizedLayer;
+ node_ = getComponents().resolvePathRepresentation(
+ pathRepresentation_, &path_, &finalizedLayer);
+ if (!node_.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("cannot find ")) +
+ pathRepresentation_),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ OSL_ASSERT(!path_.empty());
+ name_ = path_.back();
+ finalized_ = finalizedLayer != Data::NO_LAYER;
+ }
+ return node_;
+}
+
+bool RootAccess::isFinalized() {
+ getNode();
+ return finalized_;
+}
+
+rtl::OUString RootAccess::getNameInternal() {
+ getNode();
+ return name_;
+}
+
+rtl::Reference< RootAccess > RootAccess::getRootAccess() {
+ return this;
+}
+
+rtl::Reference< Access > RootAccess::getParentAccess() {
+ return rtl::Reference< Access >();
+}
+
+void RootAccess::addTypes(std::vector< css::uno::Type > * types) const {
+ OSL_ASSERT(types != 0);
+ types->push_back(cppu::UnoType< css::util::XChangesNotifier >::get());
+ types->push_back(cppu::UnoType< css::util::XChangesBatch >::get());
+}
+
+void RootAccess::addSupportedServiceNames(
+ std::vector< rtl::OUString > * services)
+{
+ OSL_ASSERT(services != 0);
+ services->push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.AccessRootElement")));
+ if (update_) {
+ services->push_back(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.UpdateRootElement")));
+ }
+}
+
+void RootAccess::initDisposeBroadcaster(Broadcaster * broadcaster) {
+ OSL_ASSERT(broadcaster != 0);
+ for (ChangesListeners::iterator i(changesListeners_.begin());
+ i != changesListeners_.end(); ++i)
+ {
+ broadcaster->addDisposeNotification(
+ i->get(),
+ css::lang::EventObject(static_cast< cppu::OWeakObject * >(this)));
+ }
+ Access::initDisposeBroadcaster(broadcaster);
+}
+
+void RootAccess::clearListeners() throw() {
+ changesListeners_.clear();
+ Access::clearListeners();
+}
+
+css::uno::Any RootAccess::queryInterface(css::uno::Type const & aType)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ css::uno::Any res(Access::queryInterface(aType));
+ if (res.hasValue()) {
+ return res;
+ }
+ res = cppu::queryInterface(
+ aType, static_cast< css::util::XChangesNotifier * >(this));
+ if (res.hasValue()) {
+ return res;
+ }
+ if (!res.hasValue() && update_) {
+ res = cppu::queryInterface(
+ aType, static_cast< css::util::XChangesBatch * >(this));
+ }
+ return res;
+}
+
+void RootAccess::addChangesListener(
+ css::uno::Reference< css::util::XChangesListener > const & aListener)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ {
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ if (!aListener.is()) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("null listener")),
+ static_cast< cppu::OWeakObject * >(this));
+ }
+ if (!isDisposed()) {
+ changesListeners_.insert(aListener);
+ return;
+ }
+ }
+ try {
+ aListener->disposing(
+ css::lang::EventObject(static_cast< cppu::OWeakObject * >(this)));
+ } catch (css::lang::DisposedException &) {}
+}
+
+void RootAccess::removeChangesListener(
+ css::uno::Reference< css::util::XChangesListener > const & aListener)
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_ANY));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ ChangesListeners::iterator i(changesListeners_.find(aListener));
+ if (i != changesListeners_.end()) {
+ changesListeners_.erase(i);
+ }
+}
+
+void RootAccess::commitChanges()
+ throw (css::lang::WrappedTargetException, css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_UPDATE));
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ int finalizedLayer;
+ Modifications globalMods;
+ commitChildChanges(
+ ((getComponents().resolvePathRepresentation(
+ pathRepresentation_, 0, &finalizedLayer)
+ == node_) &&
+ finalizedLayer == Data::NO_LAYER),
+ &globalMods);
+ getComponents().writeModifications();
+ getComponents().initGlobalBroadcaster(globalMods, this, &bc);
+ }
+ bc.send();
+}
+
+sal_Bool RootAccess::hasPendingChanges() throw (css::uno::RuntimeException) {
+ OSL_ASSERT(thisIs(IS_UPDATE));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ //TODO: Optimize:
+ std::vector< css::util::ElementChange > changes;
+ reportChildChanges(&changes);
+ return !changes.empty();
+}
+
+css::util::ChangesSet RootAccess::getPendingChanges()
+ throw (css::uno::RuntimeException)
+{
+ OSL_ASSERT(thisIs(IS_UPDATE));
+ osl::MutexGuard g(lock);
+ checkLocalizedPropertyAccess();
+ comphelper::SequenceAsVector< css::util::ElementChange > changes;
+ reportChildChanges(&changes);
+ return changes.getAsConstList();
+}
+
+}
diff --git a/configmgr2/source/rootaccess.hxx b/configmgr2/source/rootaccess.hxx
new file mode 100644
index 000000000000..e8d0999a19fa
--- /dev/null
+++ b/configmgr2/source/rootaccess.hxx
@@ -0,0 +1,157 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_ROOTACCESS_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_ROOTACCESS_HXX
+
+#include "sal/config.h"
+
+#include <set>
+#include <vector>
+
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/util/ChangesSet.hpp"
+#include "com/sun/star/util/XChangesBatch.hpp"
+#include "com/sun/star/util/XChangesNotifier.hpp"
+#include "rtl/ref.hxx"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "access.hxx"
+#include "modifications.hxx"
+#include "path.hxx"
+
+namespace com { namespace sun { namespace star {
+ namespace uno {
+ class Any;
+ class Type;
+ }
+ namespace util { class XChangesListener; }
+} } }
+
+namespace configmgr {
+
+class Broadcaster;
+class Components;
+class Node;
+
+class RootAccess:
+ public Access, public com::sun::star::util::XChangesNotifier,
+ public com::sun::star::util::XChangesBatch
+{
+public:
+ RootAccess(
+ Components & components, rtl::OUString const & pathRepresenation,
+ rtl::OUString const & locale, bool update);
+
+ virtual Path getAbsolutePath();
+
+ virtual void initBroadcaster(
+ Modifications::Node const & modifications, Broadcaster * broadcaster);
+
+ virtual void SAL_CALL acquire() throw ();
+
+ virtual void SAL_CALL release() throw ();
+
+ rtl::OUString getLocale() const;
+
+ bool isUpdate() const;
+
+private:
+ virtual ~RootAccess();
+
+ virtual Path getRelativePath();
+
+ virtual rtl::OUString getRelativePathRepresentation();
+
+ virtual rtl::Reference< Node > getNode();
+
+ virtual bool isFinalized();
+
+ virtual rtl::OUString getNameInternal();
+
+ virtual rtl::Reference< RootAccess > getRootAccess();
+
+ virtual rtl::Reference< Access > getParentAccess();
+
+ virtual void addTypes(std::vector< com::sun::star::uno::Type > * types)
+ const;
+
+ virtual void addSupportedServiceNames(
+ std::vector< rtl::OUString > * services);
+
+ virtual void initDisposeBroadcaster(Broadcaster * broadcaster);
+
+ virtual void clearListeners() throw ();
+
+ virtual com::sun::star::uno::Any SAL_CALL queryInterface(
+ com::sun::star::uno::Type const & aType)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL addChangesListener(
+ com::sun::star::uno::Reference< com::sun::star::util::XChangesListener >
+ const & aListener)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL removeChangesListener(
+ com::sun::star::uno::Reference< com::sun::star::util::XChangesListener >
+ const & aListener)
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual void SAL_CALL commitChanges()
+ throw (
+ com::sun::star::lang::WrappedTargetException,
+ com::sun::star::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL hasPendingChanges()
+ throw (com::sun::star::uno::RuntimeException);
+
+ virtual com::sun::star::util::ChangesSet SAL_CALL getPendingChanges()
+ throw (com::sun::star::uno::RuntimeException);
+
+ typedef
+ std::multiset<
+ com::sun::star::uno::Reference<
+ com::sun::star::util::XChangesListener > >
+ ChangesListeners;
+
+ rtl::OUString pathRepresentation_;
+ rtl::OUString locale_;
+ bool update_;
+ Path path_;
+ rtl::Reference< Node > node_;
+ rtl::OUString name_;
+ bool finalized_;
+ ChangesListeners changesListeners_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/services.cxx b/configmgr2/source/services.cxx
new file mode 100644
index 000000000000..d25d84290d41
--- /dev/null
+++ b/configmgr2/source/services.cxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "com/sun/star/registry/XRegistryKey.hpp"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "cppuhelper/implementationentry.hxx"
+#include "osl/diagnose.h"
+#include "uno/lbnames.h"
+#include "rtl/textenc.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "configurationprovider.hxx"
+#include "defaultprovider.hxx"
+
+namespace {
+
+namespace css = com::sun::star;
+
+css::uno::Reference< css::uno::XInterface > SAL_CALL dummy(
+ css::uno::Reference< css::uno::XComponentContext > const &)
+ SAL_THROW((css::uno::Exception))
+{
+ OSL_ASSERT(false);
+ return css::uno::Reference< css::uno::XInterface >();
+}
+
+static cppu::ImplementationEntry const services[] = {
+ { &dummy, &configmgr::configuration_provider::getImplementationName,
+ &configmgr::configuration_provider::getSupportedServiceNames,
+ &configmgr::configuration_provider::createFactory, 0, 0 },
+ { &dummy, &configmgr::default_provider::getImplementationName,
+ &configmgr::default_provider::getSupportedServiceNames,
+ &configmgr::default_provider::createFactory, 0, 0 },
+ { 0, 0, 0, 0, 0, 0 }
+};
+
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
+ char const * pImplName, void * pServiceManager, void * pRegistryKey)
+{
+ return cppu::component_getFactoryHelper(
+ pImplName, pServiceManager, pRegistryKey, services);
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL
+component_getImplementationEnvironment(
+ char const ** ppEnvTypeName, uno_Environment **)
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo(
+ void * pServiceManager, void * pRegistryKey)
+{
+ if (!component_writeInfoHelper(pServiceManager, pRegistryKey, services)) {
+ return false;
+ }
+ try {
+ css::uno::Reference< css::registry::XRegistryKey >(
+ (css::uno::Reference< css::registry::XRegistryKey >(
+ static_cast< css::registry::XRegistryKey * >(pRegistryKey))->
+ createKey(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/com.sun.star.comp.configuration.DefaultProvider/UNO/"
+ "SINGLETONS/"
+ "com.sun.star.configuration.theDefaultProvider")))),
+ css::uno::UNO_SET_THROW)->
+ setStringValue(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.DefaultProvider")));
+ } catch (css::uno::Exception & e) {
+ (void) e;
+ OSL_TRACE(
+ "configmgr component_writeInfo exception: %s",
+ rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8).getStr());
+ return false;
+ }
+ return true;
+}
diff --git a/configmgr2/source/setnode.cxx b/configmgr2/source/setnode.cxx
new file mode 100644
index 000000000000..2f5de9628e1d
--- /dev/null
+++ b/configmgr2/source/setnode.cxx
@@ -0,0 +1,128 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <algorithm>
+#include <functional>
+#include <vector>
+
+#include "rtl/ref.hxx"
+#include "rtl/ustring.hxx"
+
+#include "data.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "setnode.hxx"
+
+namespace configmgr {
+
+namespace {
+
+// Work around some compilers' failure to accept
+// std::binder1st(std::ptr_fun(&Data::equalTemplateNames), ...):
+class EqualTemplateNames:
+ public std::unary_function< rtl::OUString const &, bool >
+{
+public:
+ inline explicit EqualTemplateNames(rtl::OUString const & shortName):
+ shortName_(shortName) {}
+
+ inline bool operator ()(rtl::OUString const & longName) const
+ { return Data::equalTemplateNames(shortName_, longName); }
+
+private:
+ rtl::OUString const & shortName_;
+};
+
+}
+
+SetNode::SetNode(
+ int layer, rtl::OUString const & defaultTemplateName,
+ rtl::OUString const & templateName):
+ Node(layer), defaultTemplateName_(defaultTemplateName),
+ templateName_(templateName), mandatory_(Data::NO_LAYER)
+{}
+
+rtl::Reference< Node > SetNode::clone() const {
+ return new SetNode(*this);
+}
+
+NodeMap & SetNode::getMembers() {
+ return members_;
+}
+
+rtl::OUString SetNode::getTemplateName() const {
+ return templateName_;
+}
+
+void SetNode::setMandatory(int layer) {
+ mandatory_ = layer;
+}
+
+int SetNode::getMandatory() const {
+ return mandatory_;
+}
+
+rtl::OUString const & SetNode::getDefaultTemplateName() const {
+ return defaultTemplateName_;
+}
+
+std::vector< rtl::OUString > & SetNode::getAdditionalTemplateNames() {
+ return additionalTemplateNames_;
+}
+
+bool SetNode::isValidTemplate(rtl::OUString const & templateName) const {
+ return Data::equalTemplateNames(templateName, defaultTemplateName_) ||
+ (std::find_if(
+ additionalTemplateNames_.begin(),
+ additionalTemplateNames_.end(), EqualTemplateNames(templateName)) !=
+ additionalTemplateNames_.end());
+}
+
+SetNode::SetNode(SetNode const & other):
+ Node(other), defaultTemplateName_(other.defaultTemplateName_),
+ additionalTemplateNames_(other.additionalTemplateNames_),
+ templateName_(other.templateName_), mandatory_(other.mandatory_)
+{
+ cloneNodeMap(other.members_, &members_);
+}
+
+SetNode::~SetNode() {}
+
+Node::Kind SetNode::kind() const {
+ return KIND_SET;
+}
+
+void SetNode::clear() {
+ members_.clear();
+}
+
+}
diff --git a/configmgr2/source/setnode.hxx b/configmgr2/source/setnode.hxx
new file mode 100644
index 000000000000..1aeb19d965b8
--- /dev/null
+++ b/configmgr2/source/setnode.hxx
@@ -0,0 +1,86 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_SETNODE_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_SETNODE_HXX
+
+#include "sal/config.h"
+
+#include <vector>
+
+#include "rtl/ref.hxx"
+#include "rtl/ustring.hxx"
+
+#include "node.hxx"
+#include "nodemap.hxx"
+
+namespace configmgr {
+
+class SetNode: public Node {
+public:
+ SetNode(
+ int layer, rtl::OUString const & defaultTemplateName,
+ rtl::OUString const & templateName);
+
+ virtual rtl::Reference< Node > clone() const;
+
+ virtual NodeMap & getMembers();
+
+ virtual rtl::OUString getTemplateName() const;
+
+ virtual void setMandatory(int layer);
+
+ virtual int getMandatory() const;
+
+ rtl::OUString const & getDefaultTemplateName() const;
+
+ std::vector< rtl::OUString > & getAdditionalTemplateNames();
+
+ bool isValidTemplate(rtl::OUString const & templateName) const;
+
+private:
+ SetNode(SetNode const & other);
+
+ virtual ~SetNode();
+
+ virtual Kind kind() const;
+
+ virtual void clear();
+
+ rtl::OUString defaultTemplateName_;
+ std::vector< rtl::OUString > additionalTemplateNames_;
+ NodeMap members_;
+ rtl::OUString templateName_;
+ // non-empty iff this node is a template, free node, or set member
+ int mandatory_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/span.hxx b/configmgr2/source/span.hxx
new file mode 100644
index 000000000000..09aa23beb74e
--- /dev/null
+++ b/configmgr2/source/span.hxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_SPAN_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_SPAN_HXX
+
+#include "sal/config.h"
+
+#include "rtl/string.h"
+#include "sal/types.h"
+
+namespace configmgr {
+
+struct Span {
+ char const * begin;
+ sal_Int32 length;
+
+ inline Span(): begin(0), length(0) {}
+ // init length to avoid compiler warnings
+
+ inline Span(char const * theBegin, sal_Int32 theLength):
+ begin(theBegin), length(theLength) {}
+
+ inline void clear() throw() { begin = 0; }
+
+ inline bool is() const { return begin != 0; }
+
+ inline bool equals(Span const & text) const {
+ return rtl_str_compare_WithLength(
+ begin, length, text.begin, text.length) == 0;
+ }
+
+ inline bool equals(char const * textBegin, sal_Int32 textLength) const {
+ return equals(Span(textBegin, textLength));
+ }
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/type.cxx b/configmgr2/source/type.cxx
new file mode 100644
index 000000000000..ccd9b7f18362
--- /dev/null
+++ b/configmgr2/source/type.cxx
@@ -0,0 +1,186 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/Type.hxx"
+#include "com/sun/star/uno/TypeClass.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "cppu/unotype.hxx"
+#include "osl/diagnose.h"
+#include "rtl/string.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "type.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+bool isListType(Type type) {
+ return type >= TYPE_BOOLEAN_LIST;
+}
+
+Type elementType(Type type) {
+ switch (type) {
+ case TYPE_BOOLEAN_LIST:
+ return TYPE_BOOLEAN;
+ case TYPE_SHORT_LIST:
+ return TYPE_SHORT;
+ case TYPE_INT_LIST:
+ return TYPE_INT;
+ case TYPE_LONG_LIST:
+ return TYPE_LONG;
+ case TYPE_DOUBLE_LIST:
+ return TYPE_DOUBLE;
+ case TYPE_STRING_LIST:
+ return TYPE_STRING;
+ case TYPE_HEXBINARY_LIST:
+ return TYPE_HEXBINARY;
+ default:
+ OSL_ASSERT(false);
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("this cannot happen")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+}
+
+css::uno::Type mapType(Type type) {
+ switch (type) {
+ default: // TYPE_ERROR //TODO: can happen?
+ return cppu::UnoType< cppu::UnoVoidType >::get();
+ case TYPE_NIL: //TODO: can happen?
+ return cppu::UnoType< cppu::UnoVoidType >::get();
+ case TYPE_ANY: //TODO: can happen?
+ return cppu::UnoType< css::uno::Any >::get();
+ case TYPE_BOOLEAN:
+ return cppu::UnoType< sal_Bool >::get();
+ case TYPE_SHORT:
+ return cppu::UnoType< sal_Int16 >::get();
+ case TYPE_INT:
+ return cppu::UnoType< sal_Int32 >::get();
+ case TYPE_LONG:
+ return cppu::UnoType< sal_Int64 >::get();
+ case TYPE_DOUBLE:
+ return cppu::UnoType< double >::get();
+ case TYPE_STRING:
+ return cppu::UnoType< rtl::OUString >::get();
+ case TYPE_HEXBINARY:
+ return cppu::UnoType< css::uno::Sequence< sal_Int8 > >::get();
+ case TYPE_BOOLEAN_LIST:
+ return cppu::UnoType< css::uno::Sequence< sal_Bool > >::get();
+ case TYPE_SHORT_LIST:
+ return cppu::UnoType< css::uno::Sequence< sal_Int16 > >::get();
+ case TYPE_INT_LIST:
+ return cppu::UnoType< css::uno::Sequence< sal_Int32 > >::get();
+ case TYPE_LONG_LIST:
+ return cppu::UnoType< css::uno::Sequence< sal_Int64 > >::get();
+ case TYPE_DOUBLE_LIST:
+ return cppu::UnoType< css::uno::Sequence< double > >::get();
+ case TYPE_STRING_LIST:
+ return cppu::UnoType< css::uno::Sequence< rtl::OUString > >::get();
+ case TYPE_HEXBINARY_LIST:
+ return cppu::UnoType<
+ css::uno::Sequence< css::uno::Sequence< sal_Int8 > > >::get();
+ }
+}
+
+Type mapType(css::uno::Any const & value) {
+ switch (value.getValueType().getTypeClass()) {
+ case css::uno::TypeClass_BOOLEAN:
+ return TYPE_BOOLEAN;
+ case css::uno::TypeClass_BYTE:
+ return TYPE_SHORT;
+ case css::uno::TypeClass_SHORT:
+ return TYPE_SHORT;
+ case css::uno::TypeClass_UNSIGNED_SHORT:
+ return value.has< sal_Int16 >() ? TYPE_SHORT : TYPE_INT;
+ case css::uno::TypeClass_LONG:
+ return TYPE_INT;
+ case css::uno::TypeClass_UNSIGNED_LONG:
+ return value.has< sal_Int32 >() ? TYPE_INT : TYPE_LONG;
+ case css::uno::TypeClass_HYPER:
+ return TYPE_LONG;
+ case css::uno::TypeClass_UNSIGNED_HYPER:
+ return value.has< sal_Int64 >() ? TYPE_LONG : TYPE_ERROR;
+ case css::uno::TypeClass_FLOAT:
+ case css::uno::TypeClass_DOUBLE:
+ return TYPE_DOUBLE;
+ case css::uno::TypeClass_STRING:
+ return TYPE_STRING;
+ case css::uno::TypeClass_SEQUENCE: //TODO
+ {
+ rtl::OUString name(value.getValueType().getTypeName());
+ if (name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("[]byte"))) {
+ return TYPE_HEXBINARY;
+ } else if (name.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("[]boolean")))
+ {
+ return TYPE_BOOLEAN_LIST;
+ } else if (name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("[]short")))
+ {
+ return TYPE_SHORT_LIST;
+ } else if (name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("[]long")))
+ {
+ return TYPE_INT_LIST;
+ } else if (name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("[]hyper")))
+ {
+ return TYPE_LONG_LIST;
+ } else if (name.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("[]double")))
+ {
+ return TYPE_DOUBLE_LIST;
+ } else if (name.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("[]string")))
+ {
+ return TYPE_STRING_LIST;
+ } else if (name.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("[][]byte")))
+ {
+ return TYPE_HEXBINARY_LIST;
+ }
+ }
+ // fall through
+ default:
+ return TYPE_ERROR;
+ }
+}
+
+}
diff --git a/configmgr2/source/type.hxx b/configmgr2/source/type.hxx
new file mode 100644
index 000000000000..46a16747dbc4
--- /dev/null
+++ b/configmgr2/source/type.hxx
@@ -0,0 +1,58 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_TYPE_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_TYPE_HXX
+
+#include "sal/config.h"
+
+namespace com { namespace sun { namespace star { namespace uno {
+ class Any;
+ class Type;
+} } } }
+
+namespace configmgr {
+
+enum Type {
+ TYPE_ERROR, TYPE_NIL, TYPE_ANY, TYPE_BOOLEAN, TYPE_SHORT, TYPE_INT,
+ TYPE_LONG, TYPE_DOUBLE, TYPE_STRING, TYPE_HEXBINARY, TYPE_BOOLEAN_LIST,
+ TYPE_SHORT_LIST, TYPE_INT_LIST, TYPE_LONG_LIST, TYPE_DOUBLE_LIST,
+ TYPE_STRING_LIST, TYPE_HEXBINARY_LIST };
+
+bool isListType(Type type);
+
+Type elementType(Type type);
+
+com::sun::star::uno::Type mapType(Type type);
+
+Type mapType(com::sun::star::uno::Any const & value);
+
+}
+
+#endif
diff --git a/configmgr2/source/update.cxx b/configmgr2/source/update.cxx
new file mode 100644
index 000000000000..6ed052f87f04
--- /dev/null
+++ b/configmgr2/source/update.cxx
@@ -0,0 +1,56 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "configmgr/update.hxx"
+#include "osl/mutex.hxx"
+#include "rtl/ustring.hxx"
+
+#include "components.hxx"
+#include "lock.hxx"
+
+namespace configmgr {
+
+namespace update {
+
+void insertXcsFile(int layer, rtl::OUString const & fileUri) {
+ osl::MutexGuard g(lock);
+ Components::getSingleton().insertXcsFile(layer, fileUri);
+}
+
+void insertXcuFile(int layer, rtl::OUString const & fileUri) {
+ osl::MutexGuard g(lock);
+ Components::getSingleton().insertXcuFile(layer, fileUri);
+}
+
+}
+
+}
diff --git a/configmgr2/source/valueparser.cxx b/configmgr2/source/valueparser.cxx
new file mode 100644
index 000000000000..061aeca7a4ac
--- /dev/null
+++ b/configmgr2/source/valueparser.cxx
@@ -0,0 +1,451 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "comphelper/sequenceasvector.hxx"
+#include "osl/diagnose.h"
+#include "rtl/string.h"
+#include "rtl/string.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "localizedvaluenode.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "propertynode.hxx"
+#include "span.hxx"
+#include "type.hxx"
+#include "valueparser.hxx"
+#include "xmldata.hxx"
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+bool parseHexDigit(char c, int * value) {
+ OSL_ASSERT(value != 0);
+ if (c >= '0' && c <= '9') {
+ *value = c - '0';
+ return true;
+ }
+ if (c >= 'A' && c <= 'F') {
+ *value = c - 'A' + 10;
+ return true;
+ }
+ if (c >= 'a' && c <= 'f') {
+ *value = c - 'a' + 10;
+ return true;
+ }
+ return false;
+}
+
+bool parseValue(Span const & text, sal_Bool * value) {
+ OSL_ASSERT(text.is() && value != 0);
+ if (text.equals(RTL_CONSTASCII_STRINGPARAM("true")) ||
+ text.equals(RTL_CONSTASCII_STRINGPARAM("1")))
+ {
+ *value = true;
+ return true;
+ }
+ if (text.equals(RTL_CONSTASCII_STRINGPARAM("false")) ||
+ text.equals(RTL_CONSTASCII_STRINGPARAM("0")))
+ {
+ *value = false;
+ return true;
+ }
+ return false;
+}
+
+bool parseValue(Span const & text, sal_Int16 * value) {
+ OSL_ASSERT(text.is() && value != 0);
+ sal_Int32 n = rtl::OString(text.begin, text.length).toInt32();
+ //TODO: check valid lexical representation
+ if (n >= SAL_MIN_INT16 && n <= SAL_MAX_INT16) {
+ *value = static_cast< sal_Int16 >(n);
+ return true;
+ }
+ return false;
+}
+
+bool parseValue(Span const & text, sal_Int32 * value) {
+ OSL_ASSERT(text.is() && value != 0);
+ *value = rtl::OString(text.begin, text.length).toInt32();
+ //TODO: check valid lexical representation
+ return true;
+}
+
+bool parseValue(Span const & text, sal_Int64 * value) {
+ OSL_ASSERT(text.is() && value != 0);
+ *value = rtl::OString(text.begin, text.length).toInt64();
+ //TODO: check valid lexical representation
+ return true;
+}
+
+bool parseValue(Span const & text, double * value) {
+ OSL_ASSERT(text.is() && value != 0);
+ *value = rtl::OString(text.begin, text.length).toDouble();
+ //TODO: check valid lexical representation
+ return true;
+}
+
+bool parseValue(Span const & text, rtl::OUString * value) {
+ OSL_ASSERT(text.is() && value != 0);
+ *value = xmldata::convertFromUtf8(text);
+ return true;
+}
+
+bool parseValue(Span const & text, css::uno::Sequence< sal_Int8 > * value) {
+ OSL_ASSERT(text.is() && value != 0);
+ if ((text.length & 1) != 0) {
+ return false;
+ }
+ comphelper::SequenceAsVector< sal_Int8 > seq;
+ for (sal_Int32 i = 0; i != text.length;) {
+ int n1;
+ int n2;
+ if (!parseHexDigit(text.begin[i++], &n1) ||
+ !parseHexDigit(text.begin[i++], &n2))
+ {
+ return false;
+ }
+ seq.push_back(static_cast< sal_Int8 >((n1 << 4) | n2));
+ }
+ *value = seq.getAsConstList();
+ return true;
+}
+
+template< typename T > css::uno::Any parseSingleValue(Span const & text) {
+ T val;
+ if (!parseValue(text, &val)) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("invalid value")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ return css::uno::makeAny(val);
+}
+
+template< typename T > css::uno::Any parseListValue(
+ Span const & separator, Span const & text)
+{
+ comphelper::SequenceAsVector< T > seq;
+ Span sep;
+ if (separator.is()) {
+ sep = separator;
+ } else {
+ sep = Span(RTL_CONSTASCII_STRINGPARAM(" "));
+ }
+ if (text.length != 0) {
+ for (Span t(text);;) {
+ sal_Int32 i = rtl_str_indexOfStr_WithLength(
+ t.begin, t.length, sep.begin, sep.length);
+ T val;
+ if (!parseValue(Span(t.begin, i == -1 ? t.length : i), &val)) {
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("invalid value")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ seq.push_back(val);
+ if (i < 0) {
+ break;
+ }
+ t.begin += i + sep.length;
+ t.length -= i + sep.length;
+ }
+ }
+ return css::uno::makeAny(seq.getAsConstList());
+}
+
+css::uno::Any parseValue(Span const & separator, Span const & text, Type type) {
+ switch (type) {
+ case TYPE_ANY:
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("invalid value of type any")),
+ css::uno::Reference< css::uno::XInterface >());
+ case TYPE_BOOLEAN:
+ return parseSingleValue< sal_Bool >(text);
+ case TYPE_SHORT:
+ return parseSingleValue< sal_Int16 >(text);
+ case TYPE_INT:
+ return parseSingleValue< sal_Int32 >(text);
+ case TYPE_LONG:
+ return parseSingleValue< sal_Int64 >(text);
+ case TYPE_DOUBLE:
+ return parseSingleValue< double >(text);
+ case TYPE_STRING:
+ return parseSingleValue< rtl::OUString >(text);
+ case TYPE_HEXBINARY:
+ return parseSingleValue< css::uno::Sequence< sal_Int8 > >(text);
+ case TYPE_BOOLEAN_LIST:
+ return parseListValue< sal_Bool >(separator, text);
+ case TYPE_SHORT_LIST:
+ return parseListValue< sal_Int16 >(separator, text);
+ case TYPE_INT_LIST:
+ return parseListValue< sal_Int32 >(separator, text);
+ case TYPE_LONG_LIST:
+ return parseListValue< sal_Int64 >(separator, text);
+ case TYPE_DOUBLE_LIST:
+ return parseListValue< double >(separator, text);
+ case TYPE_STRING_LIST:
+ return parseListValue< rtl::OUString >(separator, text);
+ case TYPE_HEXBINARY_LIST:
+ return parseListValue< css::uno::Sequence< sal_Int8 > >(
+ separator, text);
+ default:
+ OSL_ASSERT(false);
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("this cannot happen")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+}
+
+}
+
+ValueParser::ValueParser(int layer): layer_(layer) {}
+
+ValueParser::~ValueParser() {}
+
+XmlReader::Text ValueParser::getTextMode() const {
+ if (node_.is()) {
+ switch (state_) {
+ case STATE_TEXT:
+ case STATE_IT:
+ return
+ (type_ == TYPE_STRING || type_ == TYPE_STRING_LIST ||
+ separator_.is())
+ ? XmlReader::TEXT_RAW : XmlReader::TEXT_NORMALIZED;
+ default:
+ break;
+ }
+ }
+ return XmlReader::TEXT_NONE;
+}
+
+bool ValueParser::startElement(
+ XmlReader & reader, XmlReader::Namespace ns, Span const & name)
+{
+ if (!node_.is()) {
+ return false;
+ }
+ switch (state_) {
+ case STATE_TEXT:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("it")) &&
+ isListType(type_) && !separator_.is())
+ {
+ checkEmptyPad(reader);
+ state_ = STATE_IT;
+ return true;
+ }
+ // fall through
+ case STATE_IT:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("unicode")) &&
+ (type_ == TYPE_STRING || type_ == TYPE_STRING_LIST))
+ {
+ sal_Int32 scalar = -1;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("scalar")))
+ {
+ if (!parseValue(reader.getAttributeValue(true), &scalar)) {
+ scalar = -1;
+ }
+ break;
+ }
+ }
+ if (scalar >= 0 && scalar < 0x20 && scalar != 0x09 &&
+ scalar != 0x0A && scalar != 0x0D)
+ {
+ char c = static_cast< char >(scalar);
+ pad_.add(&c, 1);
+ } else if (scalar == 0xFFFE) {
+ pad_.add(RTL_CONSTASCII_STRINGPARAM("\xEF\xBF\xBE"));
+ } else if (scalar == 0xFFFF) {
+ pad_.add(RTL_CONSTASCII_STRINGPARAM("\xEF\xBF\xBF"));
+ } else {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "bad unicode scalar attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ state_ = State(state_ + 1);
+ return true;
+ }
+ break;
+ default:
+ break;
+ }
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad member <")) +
+ xmldata::convertFromUtf8(name) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) + reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+}
+
+bool ValueParser::endElement(XmlReader const & reader) {
+ if (!node_.is()) {
+ return false;
+ }
+ switch (state_) {
+ case STATE_TEXT:
+ {
+ css::uno::Any value;
+ if (items_.empty()) {
+ value = parseValue(separator_, pad_.get(), type_);
+ pad_.clear();
+ } else {
+ checkEmptyPad(reader);
+ switch (type_) {
+ case TYPE_BOOLEAN_LIST:
+ value = convertItems< sal_Bool >();
+ break;
+ case TYPE_SHORT_LIST:
+ value = convertItems< sal_Int16 >();
+ break;
+ case TYPE_INT_LIST:
+ value = convertItems< sal_Int32 >();
+ break;
+ case TYPE_LONG_LIST:
+ value = convertItems< sal_Int64 >();
+ break;
+ case TYPE_DOUBLE_LIST:
+ value = convertItems< double >();
+ break;
+ case TYPE_STRING_LIST:
+ value = convertItems< rtl::OUString >();
+ break;
+ case TYPE_HEXBINARY_LIST:
+ value = convertItems< css::uno::Sequence< sal_Int8 > >();
+ break;
+ default:
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ items_.clear();
+ }
+ switch (node_->kind()) {
+ case Node::KIND_PROPERTY:
+ dynamic_cast< PropertyNode * >(node_.get())->setValue(
+ layer_, value);
+ break;
+ case Node::KIND_LOCALIZED_PROPERTY:
+ {
+ NodeMap::iterator i(
+ node_->getMembers().find(localizedName_));
+ if (i == node_->getMembers().end()) {
+ node_->getMembers().insert(
+ NodeMap::value_type(
+ localizedName_,
+ new LocalizedValueNode(layer_, value)));
+ } else {
+ dynamic_cast< LocalizedValueNode * >(i->second.get())->
+ setValue(layer_, value);
+ }
+ }
+ break;
+ default:
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ separator_.clear();
+ node_.clear();
+ }
+ break;
+ case STATE_TEXT_UNICODE:
+ case STATE_IT_UNICODE:
+ state_ = State(state_ - 1);
+ break;
+ case STATE_IT:
+ items_.push_back(parseValue(Span(), pad_.get(), elementType(type_)));
+ pad_.clear();
+ state_ = STATE_TEXT;
+ break;
+ }
+ return true;
+}
+
+void ValueParser::characters(Span const & text) {
+ if (node_.is()) {
+ OSL_ASSERT(state_ == STATE_TEXT || state_ == STATE_IT);
+ pad_.add(text.begin, text.length);
+ }
+}
+
+void ValueParser::start(
+ rtl::Reference< Node > const & node, rtl::OUString const & localizedName)
+{
+ OSL_ASSERT(node.is() && !node_.is());
+ node_ = node;
+ localizedName_ = localizedName;
+ state_ = STATE_TEXT;
+}
+
+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) {
+ OSL_VERIFY(items_[i] >>= seq[i]);
+ }
+ return css::uno::makeAny(seq);
+}
+
+}
diff --git a/configmgr2/source/valueparser.hxx b/configmgr2/source/valueparser.hxx
new file mode 100644
index 000000000000..6153966f54ca
--- /dev/null
+++ b/configmgr2/source/valueparser.hxx
@@ -0,0 +1,95 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_VALUEPARSER_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_VALUEPARSER_HXX
+
+#include "sal/config.h"
+
+#include <vector>
+
+#include "boost/noncopyable.hpp"
+#include "rtl/ref.hxx"
+#include "rtl/ustring.hxx"
+
+#include "pad.hxx"
+#include "span.hxx"
+#include "type.hxx"
+#include "xmlreader.hxx"
+
+namespace com { namespace sun { namespace star { namespace uno {
+ class Any;
+} } } }
+
+namespace configmgr {
+
+class Node;
+
+class ValueParser: private boost::noncopyable {
+public:
+ ValueParser(int layer);
+
+ ~ValueParser();
+
+ XmlReader::Text getTextMode() const;
+
+ bool startElement(
+ XmlReader & reader, XmlReader::Namespace ns, Span const & name);
+
+ bool endElement(XmlReader const & reader);
+
+ void characters(Span const & text);
+
+ void start(
+ rtl::Reference< Node > const & property,
+ rtl::OUString const & localizedName = rtl::OUString());
+
+ int getLayer() const;
+
+ Type type_;
+ Span 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 };
+
+ int layer_;
+ rtl::Reference< Node > node_;
+ rtl::OUString localizedName_;
+ State state_;
+ Pad pad_;
+ std::vector< com::sun::star::uno::Any > items_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/writemodfile.cxx b/configmgr2/source/writemodfile.cxx
new file mode 100644
index 000000000000..baca6f747c68
--- /dev/null
+++ b/configmgr2/source/writemodfile.cxx
@@ -0,0 +1,611 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "osl/diagnose.h"
+#include "osl/file.h"
+#include "osl/file.hxx"
+#include "rtl/string.h"
+#include "rtl/string.hxx"
+#include "rtl/textcvt.h"
+#include "rtl/textenc.h"
+#include "rtl/ustrbuf.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "data.hxx"
+#include "groupnode.hxx"
+#include "localizedpropertynode.hxx"
+#include "localizedvaluenode.hxx"
+#include "modifications.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "propertynode.hxx"
+#include "span.hxx"
+#include "type.hxx"
+#include "writemodfile.hxx"
+
+namespace configmgr {
+
+class Components;
+
+namespace {
+
+namespace css = com::sun::star;
+
+rtl::OString convertToUtf8(
+ rtl::OUString const & text, sal_Int32 offset, sal_Int32 length)
+{
+ OSL_ASSERT(
+ offset <= text.getLength() && text.getLength() - offset >= length);
+ rtl::OString s;
+ if (!rtl_convertUStringToString(
+ &s.pData, text.pData->buffer + offset, length,
+ RTL_TEXTENCODING_UTF8,
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR |
+ RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)))
+ {
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("cannot convert to UTF-8")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ return s;
+}
+
+struct TempFile: public boost::noncopyable {
+ rtl::OUString url;
+ oslFileHandle handle;
+ bool closed;
+
+ TempFile(): handle(0), closed(false) {}
+
+ ~TempFile();
+};
+
+TempFile::~TempFile() {
+ if (handle != 0) {
+ if (!closed) {
+ oslFileError e = osl_closeFile(handle);
+ if (e != osl_File_E_None) {
+ OSL_TRACE(
+ "osl_closeFile failed with %ld", static_cast< long >(e));
+ }
+ }
+ osl::FileBase::RC e = osl::File::remove(url);
+ if (e != osl::FileBase::E_None) {
+ OSL_TRACE("osl_removeFile failed with %ld", static_cast< long >(e));
+ }
+ }
+}
+
+void writeData(oslFileHandle handle, char const * begin, sal_Int32 length) {
+ OSL_ASSERT(length >= 0);
+ sal_uInt64 n;
+ if ((osl_writeFile(handle, begin, static_cast< sal_uInt32 >(length), &n) !=
+ osl_File_E_None) ||
+ n != static_cast< sal_uInt32 >(length))
+ {
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("write failure")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+}
+
+void writeData(oslFileHandle handle, rtl::OString const & text) {
+ writeData(handle, text.getStr(), text.getLength());
+}
+
+void writeAttributeValue(oslFileHandle handle, rtl::OUString const & value) {
+ sal_Int32 i = 0;
+ sal_Int32 j = i;
+ for (; j < value.getLength(); ++j) {
+ OSL_ASSERT(
+ value[j] == 0x0009 || value[j] == 0x000A || value[j] == 0x000D ||
+ (value[j] >= 0x0020 && value[j] != 0xFFFE && value[j] != 0xFFFF));
+ switch(value[j]) {
+ case '\x09':
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("&#9;"));
+ i = j + 1;
+ break;
+ case '\x0A':
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("&#xA;"));
+ i = j + 1;
+ break;
+ case '\x0D':
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("&#xD;"));
+ i = j + 1;
+ break;
+ case '"':
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("&quot;"));
+ i = j + 1;
+ break;
+ case '&':
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("&amp;"));
+ i = j + 1;
+ break;
+ case '<':
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("&lt;"));
+ i = j + 1;
+ break;
+ default:
+ break;
+ }
+ }
+ writeData(handle, convertToUtf8(value, i, j - i));
+}
+
+void writeValueContent(oslFileHandle handle, sal_Bool value) {
+ if (value) {
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("true"));
+ } else {
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("false"));
+ }
+}
+
+void writeValueContent(oslFileHandle handle, sal_Int16 value) {
+ writeData(handle, rtl::OString::valueOf(static_cast< sal_Int32 >(value)));
+}
+
+void writeValueContent(oslFileHandle handle, sal_Int32 value) {
+ writeData(handle, rtl::OString::valueOf(value));
+}
+
+void writeValueContent(oslFileHandle handle, sal_Int64 value) {
+ writeData(handle, rtl::OString::valueOf(value));
+}
+
+void writeValueContent(oslFileHandle handle, double value) {
+ writeData(handle, rtl::OString::valueOf(value));
+}
+
+void writeValueContent(oslFileHandle handle, rtl::OUString const & value) {
+ sal_Int32 i = 0;
+ sal_Int32 j = i;
+ for (; j < value.getLength(); ++j) {
+ sal_Unicode c = value[j];
+ if ((c < 0x0020 && c != 0x0009 && c != 0x000A && c != 0x000D) ||
+ c == 0xFFFE || c == 0xFFFF)
+ {
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(
+ handle, RTL_CONSTASCII_STRINGPARAM("<unicode oor:scalar=\""));
+ writeData(
+ handle, rtl::OString::valueOf(static_cast< sal_Int32 >(c)));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("\"/>"));
+ i = j + 1;
+ } else if (c == '\x0D') {
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("&#xD;"));
+ i = j + 1;
+ } else if (c == '&') {
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("&amp;"));
+ i = j + 1;
+ } else if (c == '<') {
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("&lt;"));
+ i = j + 1;
+ } else if (c == '>') {
+ // "MUST, for compatibility, be escaped [...] when it appears in the
+ // string ']]>'":
+ writeData(handle, convertToUtf8(value, i, j - i));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("&gt;"));
+ i = j + 1;
+ }
+ }
+ writeData(handle, convertToUtf8(value, i, j - i));
+}
+
+void writeValueContent(
+ oslFileHandle handle, css::uno::Sequence< sal_Int8 > const & value)
+{
+ for (sal_Int32 i = 0; i < value.getLength(); ++i) {
+ static char const hexDigit[16] = {
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C',
+ 'D', 'E', 'F' };
+ writeData(handle, hexDigit + ((value[i] >> 4) & 0xF), 1);
+ writeData(handle, hexDigit + (value[i] & 0xF), 1);
+ }
+}
+
+template< typename T > void writeSingleValue(
+ oslFileHandle handle, css::uno::Any const & value)
+{
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM(">"));
+ T val = T();
+ value >>= val;
+ writeValueContent(handle, val);
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("</value>"));
+}
+
+template< typename T > void writeListValue(
+ oslFileHandle handle, css::uno::Any const & value)
+{
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM(">"));
+ css::uno::Sequence< T > val;
+ value >>= val;
+ for (sal_Int32 i = 0; i < val.getLength(); ++i) {
+ if (i != 0) {
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM(" "));
+ }
+ writeValueContent(handle, val[i]);
+ }
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("</value>"));
+}
+
+template< typename T > void writeItemListValue(
+ oslFileHandle handle, css::uno::Any const & value)
+{
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM(">"));
+ css::uno::Sequence< T > val;
+ value >>= val;
+ for (sal_Int32 i = 0; i < val.getLength(); ++i) {
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("<it>"));
+ writeValueContent(handle, val[i]);
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("</it>"));
+ }
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("</value>"));
+}
+
+void writeValue(oslFileHandle handle, Type type, css::uno::Any const & value) {
+ switch (type) {
+ case TYPE_NIL:
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM(" xsi:nil=\"true\"/>"));
+ break;
+ case TYPE_BOOLEAN:
+ writeSingleValue< sal_Bool >(handle, value);
+ break;
+ case TYPE_SHORT:
+ writeSingleValue< sal_Int16 >(handle, value);
+ break;
+ case TYPE_INT:
+ writeSingleValue< sal_Int32 >(handle, value);
+ break;
+ case TYPE_LONG:
+ writeSingleValue< sal_Int64 >(handle, value);
+ break;
+ case TYPE_DOUBLE:
+ writeSingleValue< double >(handle, value);
+ break;
+ case TYPE_STRING:
+ writeSingleValue< rtl::OUString >(handle, value);
+ break;
+ case TYPE_HEXBINARY:
+ writeSingleValue< css::uno::Sequence< sal_Int8 > >(handle, value);
+ break;
+ case TYPE_BOOLEAN_LIST:
+ writeListValue< sal_Bool >(handle, value);
+ break;
+ case TYPE_SHORT_LIST:
+ writeListValue< sal_Int16 >(handle, value);
+ break;
+ case TYPE_INT_LIST:
+ writeListValue< sal_Int32 >(handle, value);
+ break;
+ case TYPE_LONG_LIST:
+ writeListValue< sal_Int64 >(handle, value);
+ break;
+ case TYPE_DOUBLE_LIST:
+ writeListValue< double >(handle, value);
+ break;
+ case TYPE_STRING_LIST:
+ writeItemListValue< rtl::OUString >(handle, value);
+ break;
+ case TYPE_HEXBINARY_LIST:
+ writeItemListValue< css::uno::Sequence< sal_Int8 > >(handle, value);
+ break;
+ default: // TYPE_ERROR, TYPE_ANY
+ OSL_ASSERT(false); // this cannot happen
+ }
+}
+
+void writeNode(
+ Components & components, oslFileHandle handle,
+ rtl::Reference< Node > const & parent, rtl::OUString const & name,
+ rtl::Reference< Node > const & node)
+{
+ static Span const typeNames[] = {
+ Span(), Span(), Span(), // TYPE_ERROR, TYPE_NIL, TYPE_ANY
+ Span(RTL_CONSTASCII_STRINGPARAM("xs:boolean")),
+ Span(RTL_CONSTASCII_STRINGPARAM("xs:short")),
+ Span(RTL_CONSTASCII_STRINGPARAM("xs:int")),
+ Span(RTL_CONSTASCII_STRINGPARAM("xs:long")),
+ Span(RTL_CONSTASCII_STRINGPARAM("xs:double")),
+ Span(RTL_CONSTASCII_STRINGPARAM("xs:string")),
+ Span(RTL_CONSTASCII_STRINGPARAM("xs:hexBinary")),
+ Span(RTL_CONSTASCII_STRINGPARAM("oor:boolean-list")),
+ Span(RTL_CONSTASCII_STRINGPARAM("oor:short-list")),
+ Span(RTL_CONSTASCII_STRINGPARAM("oor:int-list")),
+ Span(RTL_CONSTASCII_STRINGPARAM("oor:long-list")),
+ Span(RTL_CONSTASCII_STRINGPARAM("oor:double-list")),
+ Span(RTL_CONSTASCII_STRINGPARAM("oor:string-list")),
+ Span(RTL_CONSTASCII_STRINGPARAM("oor:hexBinary-list")) };
+ switch (node->kind()) {
+ case Node::KIND_PROPERTY:
+ {
+ PropertyNode * prop = dynamic_cast< PropertyNode * >(node.get());
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("<prop oor:name=\""));
+ writeAttributeValue(handle, name);
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("\" oor:op=\"fuse\""));
+ Type type = prop->getType();
+ if (type == TYPE_ANY) {
+ type = mapType(prop->getValue(components));
+ if (type != TYPE_ERROR) { //TODO
+ writeData(
+ handle, RTL_CONSTASCII_STRINGPARAM(" oor:type=\""));
+ writeData(
+ handle, typeNames[type].begin, typeNames[type].length);
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("\""));
+ }
+ }
+ writeData(handle, "><value");
+ writeValue(handle, type, prop->getValue(components));
+ writeData(handle, "</prop>");
+ }
+ break;
+ case Node::KIND_LOCALIZED_PROPERTY:
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("<prop oor:name=\""));
+ writeAttributeValue(handle, name);
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("\" oor:op=\"fuse\">"));
+ for (NodeMap::iterator i(node->getMembers().begin());
+ i != node->getMembers().end(); ++i)
+ {
+ writeNode(components, handle, node, i->first, i->second);
+ }
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("</prop>"));
+ break;
+ case Node::KIND_LOCALIZED_VALUE:
+ {
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("<value"));
+ if (name.getLength() != 0) {
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM(" xml:lang=\""));
+ writeAttributeValue(handle, name);
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("\""));
+ }
+ Type type = dynamic_cast< LocalizedPropertyNode * >(parent.get())->
+ getType();
+ css::uno::Any value(
+ dynamic_cast< LocalizedValueNode * >(node.get())->getValue());
+ if (type == TYPE_ANY) {
+ type = mapType(value);
+ if (type != TYPE_ERROR) { // TODO
+ writeData(
+ handle, RTL_CONSTASCII_STRINGPARAM(" oor:type=\""));
+ writeData(
+ handle, typeNames[type].begin, typeNames[type].length);
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("\""));
+ }
+ }
+ writeValue(handle, type, value);
+ }
+ break;
+ case Node::KIND_GROUP:
+ case Node::KIND_SET:
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("<node oor:name=\""));
+ writeAttributeValue(handle, name);
+ if (node->getTemplateName().getLength() != 0) { // set member
+ writeData(
+ handle, RTL_CONSTASCII_STRINGPARAM("\" oor:op=\"replace"));
+ }
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("\">"));
+ for (NodeMap::iterator i(node->getMembers().begin());
+ i != node->getMembers().end(); ++i)
+ {
+ writeNode(components, handle, node, i->first, i->second);
+ }
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("</node>"));
+ break;
+ }
+}
+
+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,
+ Modifications::Node const & modifications)
+{
+ // It is never necessary to write oor:finalized or oor:mandatory attributes,
+ // as they cannot be set via the UNO API.
+ if (modifications.children.empty()) {
+ OSL_ASSERT(parent.is());
+ // components themselves have no parent but must have children
+ 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"));
+ if (nodeName.getLength() != 0) {
+ writeData(
+ handle, RTL_CONSTASCII_STRINGPARAM(" xml:lang=\""));
+ writeAttributeValue(handle, nodeName);
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("\""));
+ }
+ writeData(
+ handle,
+ RTL_CONSTASCII_STRINGPARAM(
+ " oor:op=\"remove\"/></prop></item>"));
+ 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=\""));
+ writeAttributeValue(handle, nodeName);
+ writeData(
+ handle,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\" oor:op=\"remove\"/></item>"));
+ 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=\""));
+ writeAttributeValue(handle, nodeName);
+ writeData(
+ handle,
+ RTL_CONSTASCII_STRINGPARAM(
+ "\" oor:op=\"remove\"/></item>"));
+ break;
+ default:
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ }
+ } 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());
+ for (Modifications::Node::Children::const_iterator i(
+ modifications.children.begin());
+ i != modifications.children.end(); ++i)
+ {
+ writeModifications(
+ components, handle, parentPathRep, nodeName, node, i->first,
+ node->getMember(i->first), i->second);
+ }
+ }
+}
+
+}
+
+void writeModFile(
+ Components & components, rtl::OUString const & url, Data const & data)
+{
+ sal_Int32 i = url.lastIndexOf('/');
+ OSL_ASSERT(i != -1);
+ rtl::OUString dir(url.copy(0, i));
+ switch (osl::Directory::createPath(dir)) {
+ case osl::FileBase::E_None:
+ case osl::FileBase::E_EXIST:
+ break;
+ default:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("cannot create directory ")) +
+ dir),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ TempFile tmp;
+ if (osl::FileBase::createTempFile(&dir, &tmp.handle, &tmp.url) !=
+ osl::FileBase::E_None)
+ {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "cannot create temporary file in ")) +
+ dir),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ writeData(
+ tmp.handle,
+ RTL_CONSTASCII_STRINGPARAM(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><oor:items"
+ " xmlns:oor=\"http://openoffice.org/2001/registry\""
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema\""
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"));
+ //TODO: Do not write back information about those removed items that did not
+ // come from the .xcs/.xcu files, anyway (but had been added dynamically
+ // instead):
+ for (Modifications::Node::Children::const_iterator j(
+ data.modifications.getRoot().children.begin());
+ 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),
+ j->second);
+ }
+ writeData(tmp.handle, RTL_CONSTASCII_STRINGPARAM("</oor:items>"));
+ oslFileError e = osl_closeFile(tmp.handle);
+ tmp.closed = true;
+ if (e != osl_File_E_None) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("cannot close ")) +
+ tmp.url),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ if (osl::File::move(tmp.url, url) != osl::FileBase::E_None) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("cannot move ")) +
+ tmp.url),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ tmp.handle = 0;
+}
+
+}
diff --git a/configmgr2/source/writemodfile.hxx b/configmgr2/source/writemodfile.hxx
new file mode 100644
index 000000000000..d1dfe4b2ecb8
--- /dev/null
+++ b/configmgr2/source/writemodfile.hxx
@@ -0,0 +1,47 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_WRITEMODFILE_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_WRITEMODFILE_HXX
+
+#include "sal/config.h"
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class Components;
+struct Data;
+
+void writeModFile(
+ Components & components, rtl::OUString const & url, Data const & data);
+
+}
+
+#endif
diff --git a/configmgr2/source/xcdparser.cxx b/configmgr2/source/xcdparser.cxx
new file mode 100644
index 000000000000..1acd81b2cbac
--- /dev/null
+++ b/configmgr2/source/xcdparser.cxx
@@ -0,0 +1,185 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <cstddef>
+
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "osl/diagnose.hxx"
+#include "rtl/string.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "span.hxx"
+#include "xcdparser.hxx"
+#include "xcsparser.hxx"
+#include "xcuparser.hxx"
+#include "xmldata.hxx"
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+XcdParser::XcdParser(int layer, Dependencies const & dependencies, Data * data):
+ layer_(layer), dependencies_(dependencies), data_(data), state_(STATE_START)
+{}
+
+XcdParser::~XcdParser() {}
+
+XmlReader::Text XcdParser::getTextMode() {
+ return nestedParser_.is()
+ ? nestedParser_->getTextMode() : XmlReader::TEXT_NONE;
+}
+
+bool XcdParser::startElement(
+ XmlReader & reader, XmlReader::Namespace ns, Span const & name)
+{
+ if (nestedParser_.is()) {
+ OSL_ASSERT(nesting_ != LONG_MAX);
+ ++nesting_;
+ return nestedParser_->startElement(reader, ns, name);
+ }
+ switch (state_) {
+ case STATE_START:
+ if (ns == XmlReader::NAMESPACE_OOR &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("data")))
+ {
+ state_ = STATE_DEPENDENCIES;
+ return true;
+ }
+ break;
+ case STATE_DEPENDENCIES:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("dependency")))
+ {
+ if (dependency_.getLength() == 0) {
+ Span attrFile;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_NONE && //TODO: _OOR
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("file")))
+ {
+ attrFile = reader.getAttributeValue(false);
+ }
+ }
+ if (!attrFile.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "no dependency file attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ dependency_ = xmldata::convertFromUtf8(attrFile);
+ if (dependency_.getLength() == 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "bad dependency file attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+ if (dependencies_.find(dependency_) == dependencies_.end()) {
+ return false;
+ }
+ state_ = STATE_DEPENDENCY;
+ dependency_ = rtl::OUString();
+ return true;
+ }
+ state_ = STATE_COMPONENTS;
+ // fall through
+ case STATE_COMPONENTS:
+ if (ns == XmlReader::NAMESPACE_OOR &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("component-schema")))
+ {
+ nestedParser_ = new XcsParser(layer_, data_);
+ nesting_ = 1;
+ return nestedParser_->startElement(reader, ns, name);
+ }
+ if (ns == XmlReader::NAMESPACE_OOR &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("component-data")))
+ {
+ nestedParser_ = new XcuParser(layer_ + 1, data_);
+ nesting_ = 1;
+ return nestedParser_->startElement(reader, ns, name);
+ }
+ break;
+ default: // STATE_DEPENDENCY
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad member <")) +
+ xmldata::convertFromUtf8(name) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) + reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+}
+
+void XcdParser::endElement(XmlReader const & reader) {
+ if (nestedParser_.is()) {
+ nestedParser_->endElement(reader);
+ if (--nesting_ == 0) {
+ nestedParser_.clear();
+ }
+ } else {
+ switch (state_) {
+ case STATE_DEPENDENCY:
+ state_ = STATE_DEPENDENCIES;
+ break;
+ case STATE_DEPENDENCIES:
+ case STATE_COMPONENTS:
+ break;
+ default:
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ }
+}
+
+void XcdParser::characters(Span const & text) {
+ if (nestedParser_.is()) {
+ nestedParser_->characters(text);
+ }
+}
+
+}
diff --git a/configmgr2/source/xcdparser.hxx b/configmgr2/source/xcdparser.hxx
new file mode 100644
index 000000000000..7183f64f2387
--- /dev/null
+++ b/configmgr2/source/xcdparser.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_XCDPARSER_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_XCDPARSER_HXX
+
+#include "sal/config.h"
+
+#include <set>
+
+#include "rtl/ref.hxx"
+#include "rtl/ustring.hxx"
+
+#include "parser.hxx"
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+struct Data;
+struct Span;
+
+class XcdParser: public Parser {
+public:
+ typedef std::set< rtl::OUString > Dependencies;
+
+ XcdParser(int layer, Dependencies const & dependencies, Data * data);
+
+private:
+ virtual ~XcdParser();
+
+ virtual XmlReader::Text getTextMode();
+
+ virtual bool startElement(
+ XmlReader & reader, XmlReader::Namespace ns, Span const & name);
+
+ virtual void endElement(XmlReader const & reader);
+
+ virtual void characters(Span const & text);
+
+ enum State {
+ STATE_START, STATE_DEPENDENCIES, STATE_DEPENDENCY, STATE_COMPONENTS };
+
+ int layer_;
+ Dependencies const & dependencies_;
+ Data * data_;
+ State state_;
+ rtl::OUString dependency_;
+ rtl::Reference< Parser > nestedParser_;
+ long nesting_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/xcsparser.cxx b/configmgr2/source/xcsparser.cxx
new file mode 100644
index 000000000000..898853061993
--- /dev/null
+++ b/configmgr2/source/xcsparser.cxx
@@ -0,0 +1,559 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <cstddef>
+
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "osl/diagnose.h"
+#include "rtl/ref.hxx"
+#include "rtl/strbuf.hxx"
+#include "rtl/string.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "data.hxx"
+#include "localizedpropertynode.hxx"
+#include "groupnode.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "propertynode.hxx"
+#include "setnode.hxx"
+#include "span.hxx"
+#include "xcsparser.hxx"
+#include "xmldata.hxx"
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+XcsParser::XcsParser(int layer, Data * data):
+ valueParser_(layer), data_(data), state_(STATE_START)
+{}
+
+XcsParser::~XcsParser() {}
+
+XmlReader::Text XcsParser::getTextMode() {
+ return valueParser_.getTextMode();
+}
+
+bool XcsParser::startElement(
+ XmlReader & reader, XmlReader::Namespace ns, Span const & name)
+{
+ if (valueParser_.startElement(reader, ns, name)) {
+ return true;
+ }
+ if (state_ == STATE_START) {
+ if (ns == XmlReader::NAMESPACE_OOR &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("component-schema"))) {
+ handleComponentSchema(reader);
+ state_ = STATE_COMPONENT_SCHEMA;
+ ignoring_ = 0;
+ return true;
+ }
+ } else {
+ //TODO: ignoring component-schema import, component-schema uses, and
+ // prop constraints; accepting all four at illegal places (and with
+ // illegal content):
+ if (ignoring_ > 0 ||
+ (ns == XmlReader::NAMESPACE_NONE &&
+ (name.equals(RTL_CONSTASCII_STRINGPARAM("info")) ||
+ name.equals(RTL_CONSTASCII_STRINGPARAM("import")) ||
+ name.equals(RTL_CONSTASCII_STRINGPARAM("uses")) ||
+ name.equals(RTL_CONSTASCII_STRINGPARAM("constraints")))))
+ {
+ OSL_ASSERT(ignoring_ < LONG_MAX);
+ ++ignoring_;
+ return true;
+ }
+ switch (state_) {
+ case STATE_COMPONENT_SCHEMA:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("templates")))
+ {
+ state_ = STATE_TEMPLATES;
+ return true;
+ }
+ // fall through
+ case STATE_TEMPLATES_DONE:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("component")))
+ {
+ state_ = STATE_COMPONENT;
+ OSL_ASSERT(elements_.empty());
+ elements_.push(
+ Element(
+ new GroupNode(
+ valueParser_.getLayer(), false, rtl::OUString()),
+ componentName_));
+ return true;
+ }
+ break;
+ case STATE_TEMPLATES:
+ if (elements_.empty()) {
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("group")))
+ {
+ handleGroup(reader, true);
+ return true;
+ }
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("set")))
+ {
+ handleSet(reader, true);
+ return true;
+ }
+ break;
+ }
+ // fall through
+ case STATE_COMPONENT:
+ OSL_ASSERT(!elements_.empty());
+ switch (elements_.top().node->kind()) {
+ case Node::KIND_PROPERTY:
+ case Node::KIND_LOCALIZED_PROPERTY:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("value")))
+ {
+ handlePropValue(reader, elements_.top().node);
+ return true;
+ }
+ break;
+ case Node::KIND_GROUP:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("prop")))
+ {
+ handleProp(reader);
+ return true;
+ }
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("node-ref")))
+ {
+ handleNodeRef(reader);
+ return true;
+ }
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("group")))
+ {
+ handleGroup(reader, false);
+ return true;
+ }
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("set")))
+ {
+ handleSet(reader, false);
+ return true;
+ }
+ break;
+ case Node::KIND_SET:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("item")))
+ {
+ handleSetItem(
+ reader,
+ dynamic_cast< SetNode * >(elements_.top().node.get()));
+ return true;
+ }
+ break;
+ default: // Node::KIND_LOCALIZED_VALUE
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ break;
+ case STATE_COMPONENT_DONE:
+ break;
+ default: // STATE_START
+ OSL_ASSERT(false); // this cannot happen
+ break;
+ }
+ }
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad member <")) +
+ xmldata::convertFromUtf8(name) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) + reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+}
+
+void XcsParser::endElement(XmlReader const & reader) {
+ if (valueParser_.endElement(reader)) {
+ return;
+ }
+ if (ignoring_ > 0) {
+ --ignoring_;
+ } else if (!elements_.empty()) {
+ Element top(elements_.top());
+ elements_.pop();
+ if (top.node.is()) {
+ NodeMap * map;
+ if (elements_.empty()) {
+ switch (state_) {
+ case STATE_TEMPLATES:
+ map = &data_->templates;
+ break;
+ case STATE_COMPONENT:
+ map = &data_->components;
+ state_ = STATE_COMPONENT_DONE;
+ break;
+ default:
+ OSL_ASSERT(false);
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ 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) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("duplicate ")) +
+ top.name +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+ } else {
+ switch (state_) {
+ case STATE_COMPONENT_SCHEMA:
+ case STATE_TEMPLATES_DONE:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("no component element in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ case STATE_TEMPLATES:
+ state_ = STATE_TEMPLATES_DONE;
+ break;
+ case STATE_COMPONENT_DONE:
+ break;
+ default:
+ OSL_ASSERT(false); // this cannot happen
+ }
+ }
+}
+
+void XcsParser::characters(Span const & text) {
+ valueParser_.characters(text);
+}
+
+void XcsParser::handleComponentSchema(XmlReader & reader) {
+ //TODO: oor:version, xml:lang attributes
+ Span attrPackage;
+ Span attrName;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("package")))
+ {
+ attrPackage = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
+ {
+ attrName = reader.getAttributeValue(false);
+ }
+ }
+ if (!attrPackage.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "no component-schema package attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ if (!attrName.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "no component-schema name attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::OStringBuffer buf;
+ buf.append(attrPackage.begin, attrPackage.length);
+ buf.append('.');
+ buf.append(attrName.begin, attrName.length);
+ componentName_ = xmldata::convertFromUtf8(
+ Span(buf.getStr(), buf.getLength()));
+}
+
+void XcsParser::handleNodeRef(XmlReader & reader) {
+ Span attrName;
+ Span attrComponent;
+ Span attrNodeType;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
+ {
+ attrName = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("component")))
+ {
+ attrComponent = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("node-type")))
+ {
+ attrNodeType = reader.getAttributeValue(false);
+ }
+ }
+ if (!attrName.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("no node-ref name attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::Reference< Node > tmpl(
+ data_->getTemplate(
+ valueParser_.getLayer(),
+ xmldata::parseTemplateReference(
+ attrComponent, attrNodeType, componentName_, 0)));
+ if (!tmpl.is()) {
+ //TODO: this can erroneously happen as long as import/uses attributes
+ // are not correctly processed
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("unknown node-ref ")) +
+ xmldata::convertFromUtf8(attrName) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::Reference< Node > node(tmpl->clone());
+ node->setLayer(valueParser_.getLayer());
+ elements_.push(Element(node, xmldata::convertFromUtf8(attrName)));
+}
+
+void XcsParser::handleProp(XmlReader & reader) {
+ Span attrName;
+ Span attrType;
+ Span attrLocalized;
+ Span attrNillable;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
+ {
+ attrName = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("type")))
+ {
+ attrType = reader.getAttributeValue(true);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("localized")))
+ {
+ attrLocalized = reader.getAttributeValue(true);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("nillable")))
+ {
+ attrNillable = reader.getAttributeValue(true);
+ }
+ }
+ if (!attrName.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("no prop name attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ valueParser_.type_ = xmldata::parseType(reader, attrType);
+ if (valueParser_.type_ == TYPE_ERROR) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("no prop type attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ bool localized = xmldata::parseBoolean(attrLocalized, false);
+ bool nillable = xmldata::parseBoolean(attrNillable, true);
+ elements_.push(
+ Element(
+ (localized
+ ? rtl::Reference< Node >(
+ new LocalizedPropertyNode(
+ valueParser_.getLayer(), valueParser_.type_, nillable))
+ : rtl::Reference< Node >(
+ new PropertyNode(
+ valueParser_.getLayer(), valueParser_.type_, nillable,
+ css::uno::Any(), false))),
+ xmldata::convertFromUtf8(attrName)));
+}
+
+void XcsParser::handlePropValue(
+ XmlReader & reader, rtl::Reference< Node > const & property)
+{
+ Span attrSeparator;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("separator")))
+ {
+ attrSeparator = reader.getAttributeValue(false);
+ }
+ }
+ valueParser_.separator_ = attrSeparator;
+ valueParser_.start(property);
+}
+
+void XcsParser::handleGroup(XmlReader & reader, bool isTemplate) {
+ Span attrName;
+ Span attrExtensible;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
+ {
+ attrName = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("extensible")))
+ {
+ attrExtensible = reader.getAttributeValue(true);
+ }
+ }
+ if (!attrName.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("no group name attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::OUString name(xmldata::convertFromUtf8(attrName));
+ if (isTemplate) {
+ name = Data::fullTemplateName(componentName_, name);
+ }
+ elements_.push(
+ Element(
+ new GroupNode(
+ valueParser_.getLayer(),
+ xmldata::parseBoolean(attrExtensible, false),
+ isTemplate ? name : rtl::OUString()),
+ name));
+}
+
+void XcsParser::handleSet(XmlReader & reader, bool isTemplate) {
+ Span attrName;
+ Span attrComponent;
+ Span attrNodeType;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
+ {
+ attrName = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("component")))
+ {
+ attrComponent = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("node-type")))
+ {
+ attrNodeType = reader.getAttributeValue(false);
+ }
+ }
+ if (!attrName.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("no set name attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::OUString name(xmldata::convertFromUtf8(attrName));
+ if (isTemplate) {
+ name = Data::fullTemplateName(componentName_, name);
+ }
+ elements_.push(
+ Element(
+ new SetNode(
+ valueParser_.getLayer(),
+ xmldata::parseTemplateReference(
+ attrComponent, attrNodeType, componentName_, 0),
+ isTemplate ? name : rtl::OUString()),
+ name));
+}
+
+void XcsParser::handleSetItem(XmlReader & reader, SetNode * set) {
+ Span attrComponent;
+ Span attrNodeType;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("component")))
+ {
+ attrComponent = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("node-type")))
+ {
+ attrNodeType = reader.getAttributeValue(false);
+ }
+ }
+ set->getAdditionalTemplateNames().push_back(
+ xmldata::parseTemplateReference(
+ attrComponent, attrNodeType, componentName_, 0));
+ elements_.push(Element(rtl::Reference< Node >(), rtl::OUString()));
+}
+
+}
diff --git a/configmgr2/source/xcsparser.hxx b/configmgr2/source/xcsparser.hxx
new file mode 100644
index 000000000000..739441c471a4
--- /dev/null
+++ b/configmgr2/source/xcsparser.hxx
@@ -0,0 +1,108 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_XCSPARSER_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_XCSPARSER_HXX
+
+#include "sal/config.h"
+
+#include <stack>
+
+#include "rtl/ref.hxx"
+#include "rtl/ustring.hxx"
+
+#include "node.hxx"
+#include "parser.hxx"
+#include "valueparser.hxx"
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+class SetNode;
+struct Data;
+struct Span;
+
+class XcsParser: public Parser {
+public:
+ XcsParser(int layer, Data * data);
+
+private:
+ virtual ~XcsParser();
+
+ virtual XmlReader::Text getTextMode();
+
+ virtual bool startElement(
+ XmlReader & reader, XmlReader::Namespace ns, Span const & name);
+
+ virtual void endElement(XmlReader const & reader);
+
+ virtual void characters(Span const & text);
+
+ void handleComponentSchema(XmlReader & reader);
+
+ void handleNodeRef(XmlReader & reader);
+
+ void handleProp(XmlReader & reader);
+
+ void handlePropValue(
+ XmlReader & reader, rtl::Reference< Node > const & property);
+
+ void handleGroup(XmlReader & reader, bool isTemplate);
+
+ void handleSet(XmlReader & reader, bool isTemplate);
+
+ void handleSetItem(XmlReader & reader, SetNode * set);
+
+ enum State {
+ STATE_START, STATE_COMPONENT_SCHEMA, STATE_TEMPLATES,
+ STATE_TEMPLATES_DONE, STATE_COMPONENT, STATE_COMPONENT_DONE };
+
+ struct Element {
+ rtl::Reference< Node > node;
+ rtl::OUString name;
+
+ inline Element(
+ rtl::Reference< Node > const & theNode,
+ rtl::OUString const & theName):
+ node(theNode), name(theName) {}
+ };
+
+ typedef std::stack< Element > ElementStack;
+
+ ValueParser valueParser_;
+ Data * data_;
+ rtl::OUString componentName_;
+ State state_;
+ long ignoring_;
+ ElementStack elements_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/xcuparser.cxx b/configmgr2/source/xcuparser.cxx
new file mode 100644
index 000000000000..068ebe0e5268
--- /dev/null
+++ b/configmgr2/source/xcuparser.cxx
@@ -0,0 +1,1030 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <algorithm>
+
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "osl/diagnose.h"
+#include "rtl/ref.hxx"
+#include "rtl/strbuf.hxx"
+#include "rtl/string.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+
+#include "data.hxx"
+#include "localizedpropertynode.hxx"
+#include "localizedvaluenode.hxx"
+#include "groupnode.hxx"
+#include "modifications.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "path.hxx"
+#include "propertynode.hxx"
+#include "setnode.hxx"
+#include "span.hxx"
+#include "xcuparser.hxx"
+#include "xmldata.hxx"
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+XcuParser::XcuParser(int layer, Data * data): valueParser_(layer), data_(data)
+{}
+
+XcuParser::~XcuParser() {}
+
+XmlReader::Text XcuParser::getTextMode() {
+ return valueParser_.getTextMode();
+}
+
+bool XcuParser::startElement(
+ XmlReader & reader, XmlReader::Namespace ns, Span const & name)
+{
+ if (valueParser_.startElement(reader, ns, name)) {
+ return true;
+ }
+ if (state_.empty()) {
+ if (ns == XmlReader::NAMESPACE_OOR &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("component-data")))
+ {
+ handleComponentData(reader);
+ } else if (ns == XmlReader::NAMESPACE_OOR &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("items")))
+ {
+ state_.push(State(rtl::Reference< Node >(), false));
+ } else {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("bad root element <")) +
+ xmldata::convertFromUtf8(name) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ } else if (state_.top().ignore) {
+ state_.push(state_.top());
+ } else if (!state_.top().node.is()) {
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("item")))
+ {
+ handleItem(reader);
+ } else {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("bad items node member <")) +
+ xmldata::convertFromUtf8(name) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ } else {
+ switch (state_.top().node->kind()) {
+ case Node::KIND_PROPERTY:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("value")))
+ {
+ handlePropValue(
+ reader,
+ dynamic_cast< PropertyNode * >(state_.top().node.get()));
+ } else {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "bad property node member <")) +
+ xmldata::convertFromUtf8(name) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ break;
+ case Node::KIND_LOCALIZED_PROPERTY:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("value")))
+ {
+ handleLocpropValue(
+ reader,
+ dynamic_cast< LocalizedPropertyNode * >(
+ state_.top().node.get()));
+ } else {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "bad localized property node member <")) +
+ xmldata::convertFromUtf8(name) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ break;
+ case Node::KIND_LOCALIZED_VALUE:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad member <")) +
+ xmldata::convertFromUtf8(name) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ case Node::KIND_GROUP:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("prop")))
+ {
+ handleGroupProp(
+ reader,
+ dynamic_cast< GroupNode * >(state_.top().node.get()));
+ } else if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("node")))
+ {
+ handleGroupNode(reader, state_.top().node);
+ } else {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "bad group node member <")) +
+ xmldata::convertFromUtf8(name) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ break;
+ case Node::KIND_SET:
+ if (ns == XmlReader::NAMESPACE_NONE &&
+ name.equals(RTL_CONSTASCII_STRINGPARAM("node")))
+ {
+ handleSetNode(
+ reader, dynamic_cast< SetNode * >(state_.top().node.get()));
+ } else {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("bad set node member <")) +
+ xmldata::convertFromUtf8(name) +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("> in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ break;
+ }
+ }
+ return true;
+}
+
+void XcuParser::endElement(XmlReader const & reader) {
+ if (valueParser_.endElement(reader)) {
+ return;
+ }
+ OSL_ASSERT(!state_.empty());
+ bool ignore = state_.top().ignore;
+ rtl::Reference< Node > insert;
+ rtl::OUString name;
+ if (state_.top().insert) {
+ insert = state_.top().node;
+ OSL_ASSERT(insert.is());
+ name = state_.top().name;
+ }
+ state_.pop();
+ if (insert.is()) {
+ OSL_ASSERT(!state_.empty() && state_.top().node.is());
+ state_.top().node->getMembers()[name] = insert;
+ }
+ if (!ignore && !modificationPath_.empty()) {
+ modificationPath_.pop_back();
+ // </item> will pop less than <item> pushed, but that is harmless,
+ // as the next <item> will reset modificationPath_
+ }
+}
+
+void XcuParser::characters(Span const & text) {
+ valueParser_.characters(text);
+}
+
+XcuParser::Operation XcuParser::parseOperation(
+ Span const & text, Operation defaultOperation)
+{
+ if (!text.is()) {
+ return defaultOperation;
+ } else if (text.equals(RTL_CONSTASCII_STRINGPARAM("modify"))) {
+ return OPERATION_MODIFY;
+ } else if (text.equals(RTL_CONSTASCII_STRINGPARAM("replace"))) {
+ return OPERATION_REPLACE;
+ } else if (text.equals(RTL_CONSTASCII_STRINGPARAM("fuse"))) {
+ return OPERATION_FUSE;
+ } else if (text.equals(RTL_CONSTASCII_STRINGPARAM("remove"))) {
+ return OPERATION_REMOVE;
+ } else {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("invalid op ")) +
+ xmldata::convertFromUtf8(text)),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+}
+
+void XcuParser::handleComponentData(XmlReader & reader) {
+ Span attrPackage;
+ Span attrName;
+ Span attrOp;
+ Span attrFinalized;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("package")))
+ {
+ attrPackage = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
+ {
+ attrName = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("op")))
+ {
+ attrOp = reader.getAttributeValue(true);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("finalized")))
+ {
+ attrFinalized = reader.getAttributeValue(true);
+ }
+ }
+ if (!attrPackage.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "no component-data package attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ if (!attrName.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "no component-data name attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::OStringBuffer buf;
+ buf.append(attrPackage.begin, attrPackage.length);
+ buf.append('.');
+ buf.append(attrName.begin, attrName.length);
+ componentName_ = xmldata::convertFromUtf8(
+ Span(buf.getStr(), buf.getLength()));
+ rtl::Reference< Node > node(
+ Data::findNode(
+ 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 >());
+ }
+ switch (parseOperation(attrOp, OPERATION_MODIFY)) {
+ case OPERATION_MODIFY:
+ case OPERATION_FUSE:
+ break;
+ default:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "invalid operation on root node in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ int finalizedLayer = std::min(
+ (xmldata::parseBoolean(attrFinalized, false)
+ ? valueParser_.getLayer() : Data::NO_LAYER),
+ node->getFinalized());
+ node->setFinalized(finalizedLayer);
+ state_.push(State(node, finalizedLayer < valueParser_.getLayer()));
+ if (valueParser_.getLayer() == Data::NO_LAYER) {
+ OSL_ASSERT(modificationPath_.empty());
+ modificationPath_.push_back(componentName_);
+ }
+}
+
+void XcuParser::handleItem(XmlReader & reader) {
+ Span attrPath;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("path")))
+ {
+ attrPath = reader.getAttributeValue(false);
+ }
+ }
+ if (!attrPath.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("missing path attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ int finalizedLayer;
+ rtl::Reference< Node > node(
+ data_->resolvePathRepresentation(
+ xmldata::convertFromUtf8(attrPath), &modificationPath_,
+ &finalizedLayer));
+ if (!node.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("nonexisting path attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ OSL_ASSERT(!modificationPath_.empty());
+ componentName_ = modificationPath_.front();
+ if (valueParser_.getLayer() != Data::NO_LAYER) {
+ modificationPath_.clear();
+ }
+ state_.push(State(node, finalizedLayer < valueParser_.getLayer()));
+}
+
+void XcuParser::handlePropValue(XmlReader & reader, PropertyNode * prop) {
+ Span attrNil;
+ Span attrSeparator;
+ Span attrExternal;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_XSI &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("nil")))
+ {
+ attrNil = reader.getAttributeValue(true);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("separator")))
+ {
+ attrSeparator = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("external")))
+ {
+ attrExternal = reader.getAttributeValue(true);
+ }
+ }
+ if (xmldata::parseBoolean(attrNil, false)) {
+ if (!prop->isNillable()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "xsi:nil attribute for non-nillable prop in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ if (attrExternal.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "xsi:nil and oor:external attributes for prop in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ prop->setValue(valueParser_.getLayer(), css::uno::Any());
+ state_.push(State());
+ } else if (attrExternal.is()) {
+ rtl::OUString external(xmldata::convertFromUtf8(attrExternal));
+ if (external.getLength() == 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "bad oor:external attribute value in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ prop->setExternal(valueParser_.getLayer(), external);
+ state_.push(State());
+ } else {
+ valueParser_.separator_ = attrSeparator;
+ valueParser_.start(prop);
+ }
+}
+
+void XcuParser::handleLocpropValue(
+ XmlReader & reader, LocalizedPropertyNode * locprop)
+{
+ Span attrLang;
+ Span attrNil;
+ Span attrSeparator;
+ Span attrOp;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_XML &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("lang")))
+ {
+ attrLang = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_XSI &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("nil")))
+ {
+ attrNil = reader.getAttributeValue(true);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("separator")))
+ {
+ attrSeparator = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("op")))
+ {
+ attrOp = reader.getAttributeValue(true);
+ }
+ }
+ rtl::OUString name;
+ if (attrLang.is()) {
+ name = xmldata::convertFromUtf8(attrLang);
+ }
+ NodeMap::iterator i(locprop->getMembers().find(name));
+ if (i != locprop->getMembers().end() &&
+ i->second->getLayer() > valueParser_.getLayer())
+ {
+ state_.push(State()); // ignored
+ return;
+ }
+ bool nil = xmldata::parseBoolean(attrNil, false);
+ if (nil && !locprop->isNillable()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "xsi:nil attribute for non-nillable prop in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ switch (parseOperation(attrOp, OPERATION_FUSE)) {
+ case OPERATION_FUSE:
+ 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());
+ } else {
+ valueParser_.separator_ = attrSeparator;
+ valueParser_.start(locprop, name);
+ }
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ data_->modifications.add(modificationPath_);
+ modificationPath_.pop_back();
+ }
+ break;
+ case OPERATION_REMOVE:
+ //TODO: only allow if parent.op == OPERATION_FUSE
+ //TODO: disallow removing when e.g. lang=""?
+ if (i != locprop->getMembers().end()) {
+ locprop->getMembers().erase(i);
+ }
+ state_.push(State());
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ data_->modifications.add(modificationPath_);
+ modificationPath_.pop_back();
+ }
+ break;
+ default:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "bad op attribute for value element in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+}
+
+void XcuParser::handleGroupProp(XmlReader & reader, GroupNode * group) {
+ Span attrName;
+ Span attrType;
+ Span attrOp;
+ Span attrFinalized;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
+ {
+ attrName = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("type")))
+ {
+ attrType = reader.getAttributeValue(true);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("op")))
+ {
+ attrOp = reader.getAttributeValue(true);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("finalized")))
+ {
+ attrFinalized = reader.getAttributeValue(true);
+ }
+ }
+ if (!attrName.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("no prop name attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::OUString name(xmldata::convertFromUtf8(attrName));
+ Type type = xmldata::parseType(reader, attrType);
+ if (type == TYPE_ANY) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "invalid prop type attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ Operation op = parseOperation(attrOp, OPERATION_MODIFY);
+ bool finalized = xmldata::parseBoolean(attrFinalized, false);
+ NodeMap::iterator i(group->getMembers().find(name));
+ if (i == group->getMembers().end()) {
+ handleUnknownGroupProp(reader, group, name, type, op, finalized);
+ } else {
+ switch (i->second->kind()) {
+ case Node::KIND_PROPERTY:
+ handlePlainGroupProp(reader, group, i, name, type, op, finalized);
+ break;
+ case Node::KIND_LOCALIZED_PROPERTY:
+ handleLocalizedGroupProp(
+ reader,
+ dynamic_cast< LocalizedPropertyNode * >(i->second.get()), name,
+ type, op, finalized);
+ break;
+ default:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("inappropriate prop ")) +
+ name + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+}
+
+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_MODIFY:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "invalid modify of extension prop ")) +
+ name +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ case OPERATION_REPLACE:
+ case OPERATION_FUSE:
+ {
+ if (type == TYPE_ERROR) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "missing type attribute for prop ")) +
+ name + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ valueParser_.type_ = type;
+ rtl::Reference< Node > prop(
+ new PropertyNode(
+ valueParser_.getLayer(), TYPE_ANY, true, css::uno::Any(),
+ true));
+ if (finalized) {
+ prop->setFinalized(valueParser_.getLayer());
+ }
+ state_.push(State(prop, name, state_.top().locked));
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ data_->modifications.add(modificationPath_);
+ }
+ }
+ break;
+ case OPERATION_REMOVE:
+ // ignore unknown (presumably extension) properties
+ state_.push(State());
+ break;
+ }
+}
+
+void XcuParser::handlePlainGroupProp(
+ XmlReader const & reader, GroupNode * group,
+ NodeMap::iterator const & propertyIndex, rtl::OUString const & name,
+ Type type, Operation operation, bool finalized)
+{
+ PropertyNode * property = dynamic_cast< PropertyNode * >(
+ propertyIndex->second.get());
+ if (property->getLayer() > valueParser_.getLayer()) {
+ state_.push(State()); // ignored
+ return;
+ }
+ int finalizedLayer = std::min(
+ finalized ? valueParser_.getLayer() : Data::NO_LAYER,
+ property->getFinalized());
+ property->setFinalized(finalizedLayer);
+ if (type != TYPE_ERROR && property->getType() != TYPE_ANY &&
+ type != property->getType())
+ {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("invalid type for prop ")) +
+ name + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ valueParser_.type_ = type == TYPE_ERROR ? property->getType() : type;
+ switch (operation) {
+ case OPERATION_MODIFY:
+ case OPERATION_REPLACE:
+ case OPERATION_FUSE:
+ state_.push(
+ State(
+ property,
+ (state_.top().locked ||
+ finalizedLayer < valueParser_.getLayer())));
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ data_->modifications.add(modificationPath_);
+ }
+ break;
+ case OPERATION_REMOVE:
+ if (!property->isExtension()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "invalid remove of non-extension prop ")) +
+ name + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ group->getMembers().erase(propertyIndex);
+ state_.push(State()); // ignore children
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ data_->modifications.add(modificationPath_);
+ modificationPath_.pop_back();
+ }
+ break;
+ }
+}
+
+void XcuParser::handleLocalizedGroupProp(
+ XmlReader const & reader, LocalizedPropertyNode * property,
+ rtl::OUString const & name, Type type, Operation operation, bool finalized)
+{
+ if (property->getLayer() > valueParser_.getLayer()) {
+ state_.push(State()); // ignored
+ return;
+ }
+ int finalizedLayer = std::min(
+ finalized ? valueParser_.getLayer() : Data::NO_LAYER,
+ property->getFinalized());
+ property->setFinalized(finalizedLayer);
+ if (type != TYPE_ERROR && property->getType() != TYPE_ANY &&
+ type != property->getType())
+ {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("invalid type for prop ")) +
+ name + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ valueParser_.type_ = type == TYPE_ERROR ? property->getType() : type;
+ switch (operation) {
+ case OPERATION_MODIFY:
+ case OPERATION_FUSE:
+ state_.push(
+ State(
+ property,
+ (state_.top().locked ||
+ finalizedLayer < valueParser_.getLayer())));
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ }
+ break;
+ case OPERATION_REPLACE:
+ {
+ rtl::Reference< Node > replacement(
+ new LocalizedPropertyNode(
+ valueParser_.getLayer(), property->getType(),
+ property->isNillable()));
+ replacement->setFinalized(property->getFinalized());
+ state_.push(
+ State(
+ replacement, name,
+ (state_.top().locked ||
+ finalizedLayer < valueParser_.getLayer())));
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ data_->modifications.add(modificationPath_);
+ }
+ }
+ break;
+ case OPERATION_REMOVE:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "invalid remove of non-extension prop ")) +
+ name + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+}
+
+void XcuParser::handleGroupNode(
+ XmlReader & reader, rtl::Reference< Node > const & group)
+{
+ Span attrName;
+ Span attrOp;
+ Span attrFinalized;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
+ {
+ attrName = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("op")))
+ {
+ attrOp = reader.getAttributeValue(true);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("finalized")))
+ {
+ attrFinalized = reader.getAttributeValue(true);
+ }
+ }
+ if (!attrName.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("no node name attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::OUString name(xmldata::convertFromUtf8(attrName));
+ 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 >());
+ }
+ Operation op(parseOperation(attrOp, OPERATION_MODIFY));
+ if (op != OPERATION_MODIFY && op != OPERATION_FUSE) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "invalid operation on group node in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ int finalizedLayer = std::min(
+ (xmldata::parseBoolean(attrFinalized, false)
+ ? valueParser_.getLayer() : Data::NO_LAYER),
+ child->getFinalized());
+ child->setFinalized(finalizedLayer);
+ state_.push(
+ State(
+ child,
+ state_.top().locked || finalizedLayer < valueParser_.getLayer()));
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ }
+}
+
+void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
+ Span attrName;
+ Span attrComponent;
+ Span attrNodeType;
+ Span attrOp;
+ Span attrFinalized;
+ Span attrMandatory;
+ for (;;) {
+ XmlReader::Namespace attrNs;
+ Span attrLn;
+ if (!reader.nextAttribute(&attrNs, &attrLn)) {
+ break;
+ }
+ if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("name")))
+ {
+ attrName = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("component")))
+ {
+ attrComponent = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("node-type")))
+ {
+ attrNodeType = reader.getAttributeValue(false);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("op")))
+ {
+ attrOp = reader.getAttributeValue(true);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("finalized")))
+ {
+ attrFinalized = reader.getAttributeValue(true);
+ } else if (attrNs == XmlReader::NAMESPACE_OOR &&
+ attrLn.equals(RTL_CONSTASCII_STRINGPARAM("mandatory")))
+ {
+ attrMandatory = reader.getAttributeValue(true);
+ }
+ }
+ if (!attrName.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("no node name attribute in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::OUString name(xmldata::convertFromUtf8(attrName));
+ rtl::OUString templateName(
+ xmldata::parseTemplateReference(
+ attrComponent, attrNodeType, componentName_,
+ &set->getDefaultTemplateName()));
+ if (!set->isValidTemplate(templateName)) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("set member node ")) +
+ name +
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(" references invalid template ")) +
+ templateName + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ rtl::Reference< Node > tmpl(
+ data_->getTemplate(valueParser_.getLayer(), templateName));
+ if (!tmpl.is()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("set member node ")) +
+ name +
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ " references undefined template ")) +
+ templateName + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ Operation op(parseOperation(attrOp, OPERATION_MODIFY));
+ int finalizedLayer = xmldata::parseBoolean(attrFinalized, false)
+ ? valueParser_.getLayer() : Data::NO_LAYER;
+ int mandatoryLayer = xmldata::parseBoolean(attrMandatory, false)
+ ? valueParser_.getLayer() : Data::NO_LAYER;
+ NodeMap::iterator i(set->getMembers().find(name));
+ if (i != set->getMembers().end()) {
+ finalizedLayer = std::min(finalizedLayer, i->second->getFinalized());
+ i->second->setFinalized(finalizedLayer);
+ mandatoryLayer = std::min(mandatoryLayer, i->second->getMandatory());
+ i->second->setMandatory(mandatoryLayer);
+ if (i->second->getLayer() > valueParser_.getLayer()) {
+ state_.push(State()); // ignored
+ return;
+ }
+ }
+ switch (op) {
+ case OPERATION_MODIFY:
+ if (i == set->getMembers().end()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "invalid modify of unknown set member node ")) +
+ name + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
+ reader.getUrl()),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ state_.push(
+ State(
+ i->second,
+ (state_.top().locked ||
+ finalizedLayer < valueParser_.getLayer())));
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ }
+ break;
+ case OPERATION_REPLACE:
+ if (state_.top().locked || finalizedLayer < valueParser_.getLayer()) {
+ state_.push(State()); // 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 (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ data_->modifications.add(modificationPath_);
+ }
+ }
+ break;
+ case OPERATION_FUSE:
+ if (i == set->getMembers().end()) {
+ if (state_.top().locked || finalizedLayer < valueParser_.getLayer())
+ {
+ state_.push(State()); // 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 (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ data_->modifications.add(modificationPath_);
+ }
+ }
+ } else {
+ state_.push(
+ State(
+ i->second,
+ (state_.top().locked ||
+ finalizedLayer < valueParser_.getLayer())));
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ }
+ }
+ break;
+ case OPERATION_REMOVE:
+ // Ignore removal of unknown members, members finalized in a lower
+ // layer, and members made mandatory in this or a lower layer:
+ if (i != set->getMembers().end() && !state_.top().locked &&
+ finalizedLayer >= valueParser_.getLayer() &&
+ mandatoryLayer > valueParser_.getLayer())
+ {
+ set->getMembers().erase(i);
+ }
+ state_.push(State());
+ if (!modificationPath_.empty()) {
+ modificationPath_.push_back(name);
+ data_->modifications.add(modificationPath_);
+ modificationPath_.pop_back();
+ }
+ break;
+ }
+}
+
+}
diff --git a/configmgr2/source/xcuparser.hxx b/configmgr2/source/xcuparser.hxx
new file mode 100644
index 000000000000..23ceb6cdb3d6
--- /dev/null
+++ b/configmgr2/source/xcuparser.hxx
@@ -0,0 +1,143 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_XCUPARSER_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_XCUPARSER_HXX
+
+#include "sal/config.h"
+
+#include <stack>
+
+#include "rtl/ref.hxx"
+#include "rtl/ustring.hxx"
+
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "parser.hxx"
+#include "path.hxx"
+#include "type.hxx"
+#include "valueparser.hxx"
+#include "xmldata.hxx"
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+class GroupNode;
+class LocalizedPropertyNode;
+class PropertyNode;
+class SetNode;
+struct Data;
+struct Span;
+
+class XcuParser: public Parser {
+public:
+ XcuParser(int layer, Data * data);
+
+private:
+ virtual ~XcuParser();
+
+ virtual XmlReader::Text getTextMode();
+
+ virtual bool startElement(
+ XmlReader & reader, XmlReader::Namespace ns, Span const & name);
+
+ virtual void endElement(XmlReader const & reader);
+
+ virtual void characters(Span const & span);
+
+ enum Operation {
+ OPERATION_MODIFY, OPERATION_REPLACE, OPERATION_FUSE, OPERATION_REMOVE };
+
+ static Operation parseOperation(
+ Span const & text, Operation defaultOperation);
+
+ void handleComponentData(XmlReader & reader);
+
+ void handleItem(XmlReader & reader);
+
+ void handlePropValue(XmlReader & reader, PropertyNode * prop);
+
+ void handleLocpropValue(
+ XmlReader & reader, LocalizedPropertyNode * locprop);
+
+ void handleGroupProp(XmlReader & reader, GroupNode * group);
+
+ void handleUnknownGroupProp(
+ XmlReader const & reader, GroupNode * group, rtl::OUString const & name,
+ Type type, Operation operation, bool finalized);
+
+ void handlePlainGroupProp(
+ XmlReader const & reader, GroupNode * group,
+ NodeMap::iterator const & propertyIndex, rtl::OUString const & name,
+ Type type, Operation operation, bool finalized);
+
+ void handleLocalizedGroupProp(
+ XmlReader const & reader, LocalizedPropertyNode * property,
+ rtl::OUString const & name, Type type, Operation operation,
+ bool finalized);
+
+ void handleGroupNode(
+ XmlReader & reader, rtl::Reference< Node > const & group);
+
+ void handleSetNode(XmlReader & reader, SetNode * set);
+
+ 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;
+
+ inline State(): ignore(true), insert(false), locked(false) {}
+
+ inline State(rtl::Reference< Node > const & theNode, bool theLocked):
+ node(theNode), ignore(false), insert(false), locked(theLocked)
+ {}
+
+ inline State(
+ rtl::Reference< Node > const & theNode,
+ rtl::OUString const & theName, bool theLocked):
+ node(theNode), name(theName), ignore(false), insert(true),
+ locked(theLocked)
+ {}
+ };
+
+ typedef std::stack< State > StateStack;
+
+ ValueParser valueParser_;
+ Data * data_;
+ rtl::OUString componentName_;
+ StateStack state_;
+ Path modificationPath_;
+ rtl::OUString path_;
+};
+
+}
+
+#endif
diff --git a/configmgr2/source/xmldata.cxx b/configmgr2/source/xmldata.cxx
new file mode 100644
index 000000000000..151627725aaf
--- /dev/null
+++ b/configmgr2/source/xmldata.cxx
@@ -0,0 +1,213 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <climits>
+#include <stack>
+
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "osl/diagnose.h"
+#include "osl/file.hxx"
+#include "rtl/ref.hxx"
+#include "rtl/strbuf.hxx"
+#include "rtl/string.h"
+#include "rtl/textcvt.h"
+#include "rtl/textenc.h"
+#include "rtl/ustrbuf.hxx"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "data.hxx"
+#include "groupnode.hxx"
+#include "localizedpropertynode.hxx"
+#include "localizedvaluenode.hxx"
+#include "node.hxx"
+#include "nodemap.hxx"
+#include "parsemanager.hxx"
+#include "parser.hxx"
+#include "propertynode.hxx"
+#include "setnode.hxx"
+#include "span.hxx"
+#include "type.hxx"
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+namespace xmldata {
+
+namespace {
+
+namespace css = com::sun::star;
+
+}
+
+rtl::OUString convertFromUtf8(Span const & text) {
+ OSL_ASSERT(text.is());
+ rtl_uString * s = 0;
+ if (!rtl_convertStringToUString(
+ &s, text.begin, text.length, RTL_TEXTENCODING_UTF8,
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)))
+ {
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("cannot convert from UTF-8")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ return rtl::OUString(s, SAL_NO_ACQUIRE);
+}
+
+Type parseType(XmlReader const & reader, Span const & text) {
+ if (!text.is()) {
+ return TYPE_ERROR;
+ }
+ sal_Int32 i = rtl_str_indexOfChar_WithLength(text.begin, text.length, ':');
+ if (i >= 0) {
+ switch (reader.getNamespace(Span(text.begin, i))) {
+ case XmlReader::NAMESPACE_OOR:
+ if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("any")))
+ {
+ return TYPE_ANY;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("boolean-list")))
+ {
+ return TYPE_BOOLEAN_LIST;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("short-list")))
+ {
+ return TYPE_SHORT_LIST;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("int-list")))
+ {
+ return TYPE_INT_LIST;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("long-list")))
+ {
+ return TYPE_LONG_LIST;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("double-list")))
+ {
+ return TYPE_DOUBLE_LIST;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("string-list")))
+ {
+ return TYPE_STRING_LIST;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("hexBinary-list")))
+ {
+ return TYPE_HEXBINARY_LIST;
+ }
+ break;
+ case XmlReader::NAMESPACE_XS:
+ if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("boolean")))
+ {
+ return TYPE_BOOLEAN;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("short")))
+ {
+ return TYPE_SHORT;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("int")))
+ {
+ return TYPE_INT;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("long")))
+ {
+ return TYPE_LONG;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("double")))
+ {
+ return TYPE_DOUBLE;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("string")))
+ {
+ return TYPE_STRING;
+ } else if (Span(text.begin + i + 1, text.length - (i + 1)).equals(
+ RTL_CONSTASCII_STRINGPARAM("hexBinary")))
+ {
+ return TYPE_HEXBINARY;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("invalid type ")) +
+ convertFromUtf8(text)),
+ css::uno::Reference< css::uno::XInterface >());
+}
+
+bool parseBoolean(Span const & text, bool deflt) {
+ if (!text.is()) {
+ return deflt;
+ }
+ if (text.equals(RTL_CONSTASCII_STRINGPARAM("true"))) {
+ return true;
+ }
+ if (text.equals(RTL_CONSTASCII_STRINGPARAM("false"))) {
+ return false;
+ }
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("invalid boolean ")) +
+ convertFromUtf8(text)),
+ css::uno::Reference< css::uno::XInterface >());
+}
+
+rtl::OUString parseTemplateReference(
+ Span const & component, Span const & nodeType,
+ rtl::OUString const & componentName,
+ rtl::OUString const * defaultTemplateName)
+{
+ if (!nodeType.is()) {
+ if (defaultTemplateName != 0) {
+ return *defaultTemplateName;
+ }
+ throw css::uno::RuntimeException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("missing node-type attribute")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ return Data::fullTemplateName(
+ component.is() ? convertFromUtf8(component) : componentName,
+ convertFromUtf8(nodeType));
+}
+
+}
+
+}
diff --git a/configmgr2/source/xmldata.hxx b/configmgr2/source/xmldata.hxx
new file mode 100644
index 000000000000..862a4e0de194
--- /dev/null
+++ b/configmgr2/source/xmldata.hxx
@@ -0,0 +1,61 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_XMLDATA_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_XMLDATA_HXX
+
+#include "sal/config.h"
+
+#include "type.hxx"
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class XmlReader;
+struct Span;
+
+namespace xmldata {
+
+rtl::OUString convertFromUtf8(Span const & text);
+
+Type parseType(XmlReader const & reader, Span const & text);
+
+bool parseBoolean(Span const & text, bool deflt);
+
+rtl::OUString parseTemplateReference(
+ Span const & component, Span const & nodeType,
+ rtl::OUString const & componentName,
+ rtl::OUString const * defaultTemplateName);
+
+}
+
+}
+
+#endif
diff --git a/configmgr2/source/xmlreader.cxx b/configmgr2/source/xmlreader.cxx
new file mode 100644
index 000000000000..2bac273610fb
--- /dev/null
+++ b/configmgr2/source/xmlreader.cxx
@@ -0,0 +1,1056 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <cstddef>
+
+#include "com/sun/star/container/NoSuchElementException.hpp"
+#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 "osl/file.h"
+#include "rtl/string.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "pad.hxx"
+#include "span.hxx"
+#include "xmlreader.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+bool isSpace(char c) {
+ switch (c) {
+ case '\x09':
+ case '\x0A':
+ case '\x0D':
+ case ' ':
+ return true;
+ default:
+ return false;
+ }
+}
+
+}
+
+XmlReader::XmlReader(rtl::OUString const & fileUrl)
+ SAL_THROW((
+ css::container::NoSuchElementException, css::uno::RuntimeException)):
+ fileUrl_(fileUrl)
+{
+ switch (osl_openFile(fileUrl_.pData, &fileHandle_, osl_File_OpenFlag_Read))
+ {
+ case osl_File_E_None:
+ break;
+ case osl_File_E_NOENT:
+ throw css::container::NoSuchElementException(
+ fileUrl_, css::uno::Reference< css::uno::XInterface >());
+ default:
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("cannot open ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ oslFileError e = osl_getFileSize(fileHandle_, &fileSize_);
+ if (e == osl_File_E_None) {
+ e = osl_mapFile(
+ fileHandle_, &fileAddress_, fileSize_, 0,
+ osl_File_MapFlag_WillNeed);
+ }
+ if (e != osl_File_E_None) {
+ e = osl_closeFile(fileHandle_);
+ if (e != osl_File_E_None) {
+ OSL_TRACE("osl_closeFile failed with %ld", static_cast< long >(e));
+ }
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("cannot mmap ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ namespaces_.push_back(
+ NamespaceData(Span(RTL_CONSTASCII_STRINGPARAM("xml")), NAMESPACE_XML));
+ namespaces_.push_back(
+ NamespaceData(Span(RTL_CONSTASCII_STRINGPARAM("xsi")), NAMESPACE_XSI));
+ // old user layer .xcu files used the xsi namespace prefix without
+ // declaring a corresponding namespace binding, see issue 77174; reading
+ // those files during migration would fail without this hack that can be
+ // removed once migration is no longer relevant (see
+ // Components::parseModificationLayer)
+ pos_ = static_cast< char * >(fileAddress_);
+ end_ = pos_ + fileSize_;
+ state_ = STATE_CONTENT;
+}
+
+XmlReader::~XmlReader() {
+ oslFileError e = osl_unmapFile(fileAddress_, fileSize_);
+ if (e != osl_File_E_None) {
+ OSL_TRACE("osl_unmapFile failed with %ld", static_cast< long >(e));
+ }
+ e = osl_closeFile(fileHandle_);
+ if (e != osl_File_E_None) {
+ OSL_TRACE("osl_closeFile failed with %ld", static_cast< long >(e));
+ }
+}
+
+XmlReader::Result XmlReader::nextItem(
+ Text reportText, Span * data, Namespace * ns)
+{
+ switch (state_) {
+ case STATE_CONTENT:
+ switch (reportText) {
+ case TEXT_NONE:
+ return handleSkippedText(data, ns);
+ case TEXT_RAW:
+ return handleRawText(data);
+ case TEXT_NORMALIZED:
+ return handleNormalizedText(data);
+ }
+ case STATE_START_TAG:
+ return handleStartTag(ns, data);
+ case STATE_END_TAG:
+ return handleEndTag();
+ case STATE_EMPTY_ELEMENT_TAG:
+ handleElementEnd();
+ return RESULT_END;
+ default: // STATE_DONE
+ return RESULT_DONE;
+ }
+}
+
+bool XmlReader::nextAttribute(Namespace * ns, Span * localName) {
+ OSL_ASSERT(ns != 0 && localName != 0);
+ if (firstAttribute_) {
+ currentAttribute_ = attributes_.begin();
+ firstAttribute_ = false;
+ } else {
+ ++currentAttribute_;
+ }
+ if (currentAttribute_ == attributes_.end()) {
+ return false;
+ }
+ if (currentAttribute_->nameColon == 0) {
+ *ns = NAMESPACE_NONE;
+ *localName = Span(
+ currentAttribute_->nameBegin,
+ currentAttribute_->nameEnd - currentAttribute_->nameBegin);
+ } else {
+ *ns = getNamespace(
+ Span(
+ currentAttribute_->nameBegin,
+ currentAttribute_->nameColon - currentAttribute_->nameBegin));
+ *localName = Span(
+ currentAttribute_->nameColon + 1,
+ currentAttribute_->nameEnd - (currentAttribute_->nameColon + 1));
+ }
+ return true;
+}
+
+Span XmlReader::getAttributeValue(bool fullyNormalize) {
+ return handleAttributeValue(
+ currentAttribute_->valueBegin, currentAttribute_->valueEnd,
+ fullyNormalize);
+}
+
+XmlReader::Namespace XmlReader::getNamespace(Span const & prefix) const {
+ for (NamespaceList::const_reverse_iterator i(namespaces_.rbegin());
+ i != namespaces_.rend(); ++i)
+ {
+ if (prefix.equals(i->prefix)) {
+ return i->ns;
+ }
+ }
+ return NAMESPACE_OTHER;
+}
+
+rtl::OUString XmlReader::getUrl() const {
+ return fileUrl_;
+}
+
+void XmlReader::normalizeLineEnds(Span const & text) {
+ char const * p = text.begin;
+ sal_Int32 n = text.length;
+ for (;;) {
+ sal_Int32 i = rtl_str_indexOfChar_WithLength(p, n, '\x0D');
+ if (i < 0) {
+ break;
+ }
+ pad_.add(p, i);
+ p += i + 1;
+ n -= i + 1;
+ if (n == 0 || *p != '\x0A') {
+ pad_.add(RTL_CONSTASCII_STRINGPARAM("\x0A"));
+ }
+ }
+ pad_.add(p, n);
+}
+
+void XmlReader::skipSpace() {
+ while (isSpace(peek())) {
+ ++pos_;
+ }
+}
+
+bool XmlReader::skipComment() {
+ if (rtl_str_shortenedCompare_WithLength(
+ pos_, end_ - pos_, RTL_CONSTASCII_STRINGPARAM("--"),
+ RTL_CONSTASCII_LENGTH("--")) !=
+ 0)
+ {
+ return false;
+ }
+ pos_ += RTL_CONSTASCII_LENGTH("--");
+ sal_Int32 i = rtl_str_indexOfStr_WithLength(
+ pos_, end_ - pos_, RTL_CONSTASCII_STRINGPARAM("--"));
+ if (i < 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "premature end (within comment) of ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ pos_ += i + RTL_CONSTASCII_LENGTH("--");
+ if (read() != '>') {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "illegal \"--\" within comment in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ return true;
+}
+
+void XmlReader::skipProcessingInstruction() {
+ sal_Int32 i = rtl_str_indexOfStr_WithLength(
+ pos_, end_ - pos_, RTL_CONSTASCII_STRINGPARAM("?>"));
+ if (i < 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad '<?' in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ pos_ += i + RTL_CONSTASCII_LENGTH("?>");
+}
+
+void XmlReader::skipDocumentTypeDeclaration() {
+ // Neither is it checked that the doctypedecl is at the correct position in
+ // the document, nor that it is well-formed:
+ for (;;) {
+ char c = read();
+ switch (c) {
+ case '\0': // i.e., EOF
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "premature end (within DTD) of ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ case '"':
+ case '\'':
+ {
+ sal_Int32 i = rtl_str_indexOfChar_WithLength(
+ pos_, end_ - pos_, c);
+ if (i < 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "premature end (within DTD) of ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ pos_ += i + 1;
+ }
+ break;
+ case '>':
+ return;
+ case '[':
+ for (;;) {
+ c = read();
+ switch (c) {
+ case '\0': // i.e., EOF
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "premature end (within DTD) of ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ case '"':
+ case '\'':
+ {
+ sal_Int32 i = rtl_str_indexOfChar_WithLength(
+ pos_, end_ - pos_, c);
+ if (i < 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "premature end (within DTD) of ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ pos_ += i + 1;
+ }
+ break;
+ case '<':
+ switch (read()) {
+ case '\0': // i.e., EOF
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "premature end (within DTD) of ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ case '!':
+ skipComment();
+ break;
+ case '?':
+ skipProcessingInstruction();
+ break;
+ default:
+ break;
+ }
+ break;
+ case ']':
+ skipSpace();
+ if (read() != '>') {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "missing \">\" of DTD in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ return;
+ default:
+ break;
+ }
+ }
+ default:
+ break;
+ }
+ }
+}
+
+Span XmlReader::scanCdataSection() {
+ if (rtl_str_shortenedCompare_WithLength(
+ pos_, end_ - pos_, RTL_CONSTASCII_STRINGPARAM("[CDATA["),
+ RTL_CONSTASCII_LENGTH("[CDATA[")) !=
+ 0)
+ {
+ return Span();
+ }
+ pos_ += RTL_CONSTASCII_LENGTH("[CDATA[");
+ char const * begin = pos_;
+ sal_Int32 i = rtl_str_indexOfStr_WithLength(
+ pos_, end_ - pos_, RTL_CONSTASCII_STRINGPARAM("]]>"));
+ if (i < 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "premature end (within CDATA section) of ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ pos_ += i + RTL_CONSTASCII_LENGTH("]]>");
+ return Span(begin, i);
+}
+
+bool XmlReader::scanName(char const ** nameColon) {
+ OSL_ASSERT(nameColon != 0 && *nameColon == 0);
+ for (char const * begin = pos_;; ++pos_) {
+ switch (peek()) {
+ case '\0': // i.e., EOF
+ case '\x09':
+ case '\x0A':
+ case '\x0D':
+ case ' ':
+ case '/':
+ case '=':
+ case '>':
+ return pos_ != begin;
+ case ':':
+ *nameColon = pos_;
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+XmlReader::Namespace XmlReader::scanNamespaceIri(
+ char const * begin, char const * end)
+{
+ OSL_ASSERT(begin != 0 && begin <= end);
+ Span iri(handleAttributeValue(begin, end, false));
+ struct Iri {
+ char const * begin;
+ sal_Int32 length;
+ XmlReader::Namespace ns;
+ };
+ static Iri const iris[] = {
+ { RTL_CONSTASCII_STRINGPARAM("http://openoffice.org/2001/registry"),
+ XmlReader::NAMESPACE_OOR },
+ { RTL_CONSTASCII_STRINGPARAM("http://www.w3.org/2001/XMLSchema"),
+ XmlReader::NAMESPACE_XS },
+ { RTL_CONSTASCII_STRINGPARAM(
+ "http://www.w3.org/2001/XMLSchema-instance"),
+ XmlReader::NAMESPACE_XSI },
+ { RTL_CONSTASCII_STRINGPARAM("http://www.w3.org/XML/1998/namespace"),
+ XmlReader::NAMESPACE_XML } };
+ for (std::size_t i = 0; i < sizeof iris / sizeof iris[0]; ++i) {
+ if (rtl_str_compare_WithLength(
+ iri.begin, iri.length, iris[i].begin, iris[i].length) ==
+ 0)
+ {
+ return iris[i].ns;
+ }
+ }
+ return XmlReader::NAMESPACE_OTHER;
+}
+
+char const * XmlReader::handleReference(char const * position, char const * end)
+{
+ OSL_ASSERT(position != 0 && *position == '&' && position < end);
+ ++position;
+ if (*position == '#') {
+ ++position;
+ sal_Int32 val = 0;
+ char const * p;
+ if (*position == 'x') {
+ ++position;
+ p = position;
+ for (;; ++position) {
+ char c = *position;
+ if (c >= '0' && c <= '9') {
+ val = 16 * val + (c - '0');
+ } else if (c >= 'A' && c <= 'F') {
+ val = 16 * val + (c - 'A') + 10;
+ } else if (c >= 'a' && c <= 'f') {
+ val = 16 * val + (c - 'a') + 10;
+ } else {
+ break;
+ }
+ if (val > 0x10FFFF) { // avoid overflow
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "'&#x...' too large in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+ } else {
+ p = position;
+ for (;; ++position) {
+ char c = *position;
+ if (c >= '0' && c <= '9') {
+ val = 10 * val + (c - '0');
+ } else {
+ break;
+ }
+ if (val > 0x10FFFF) { // avoid overflow
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "'&#...' too large in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+ }
+ if (position == p || *position++ != ';') {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("'&#...' missing ';' in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ OSL_ASSERT(val >= 0 && val <= 0x10FFFF);
+ if ((val < 0x20 && val != 0x9 && val != 0xA && val != 0xD) ||
+ (val >= 0xD800 && val <= 0xDFFF) || val == 0xFFFE || val == 0xFFFF)
+ {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "character reference denoting invalid character in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ char buf[4];
+ sal_Int32 len;
+ if (val < 0x80) {
+ buf[0] = static_cast< char >(val);
+ len = 1;
+ } else if (val < 0x800) {
+ buf[0] = static_cast< char >((val >> 6) | 0xC0);
+ buf[1] = static_cast< char >((val & 0x3F) | 0x80);
+ len = 2;
+ } else if (val < 0x10000) {
+ buf[0] = static_cast< char >((val >> 12) | 0xE0);
+ buf[1] = static_cast< char >(((val >> 6) & 0x3F) | 0x80);
+ buf[2] = static_cast< char >((val & 0x3F) | 0x80);
+ len = 3;
+ } else {
+ buf[0] = static_cast< char >((val >> 18) | 0xF0);
+ buf[1] = static_cast< char >(((val >> 12) & 0x3F) | 0x80);
+ buf[2] = static_cast< char >(((val >> 6) & 0x3F) | 0x80);
+ buf[3] = static_cast< char >((val & 0x3F) | 0x80);
+ len = 4;
+ }
+ pad_.add(buf, len);
+ return position;
+ } else {
+ struct EntityRef {
+ char const * inBegin;
+ sal_Int32 inLength;
+ char const * outBegin;
+ sal_Int32 outLength;
+ };
+ static EntityRef const refs[] = {
+ { RTL_CONSTASCII_STRINGPARAM("amp;"),
+ RTL_CONSTASCII_STRINGPARAM("&") },
+ { RTL_CONSTASCII_STRINGPARAM("lt;"),
+ RTL_CONSTASCII_STRINGPARAM("<") },
+ { RTL_CONSTASCII_STRINGPARAM("gt;"),
+ RTL_CONSTASCII_STRINGPARAM(">") },
+ { RTL_CONSTASCII_STRINGPARAM("apos;"),
+ RTL_CONSTASCII_STRINGPARAM("'") },
+ { RTL_CONSTASCII_STRINGPARAM("quot;"),
+ RTL_CONSTASCII_STRINGPARAM("\"") } };
+ for (std::size_t i = 0; i < sizeof refs / sizeof refs[0]; ++i) {
+ if (rtl_str_shortenedCompare_WithLength(
+ position, end - position, refs[i].inBegin, refs[i].inLength,
+ refs[i].inLength) ==
+ 0)
+ {
+ position += refs[i].inLength;
+ pad_.add(refs[i].outBegin, refs[i].outLength);
+ return position;
+ }
+ }
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("unknown entity reference in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+}
+
+Span XmlReader::handleAttributeValue(
+ char const * begin, char const * end, bool fullyNormalize)
+{
+ pad_.clear();
+ if (fullyNormalize) {
+ while (begin != end && isSpace(*begin)) {
+ ++begin;
+ }
+ while (end != begin && isSpace(end[-1])) {
+ --end;
+ }
+ char const * p = begin;
+ enum Space { SPACE_NONE, SPACE_SPAN, SPACE_BREAK };
+ // a single true space character can go into the current span,
+ // everything else breaks the span
+ Space space = SPACE_NONE;
+ while (p != end) {
+ switch (*p) {
+ case '\x09':
+ case '\x0A':
+ case '\x0D':
+ switch (space) {
+ case SPACE_NONE:
+ pad_.add(begin, p - begin);
+ pad_.add(RTL_CONSTASCII_STRINGPARAM(" "));
+ space = SPACE_BREAK;
+ break;
+ case SPACE_SPAN:
+ pad_.add(begin, p - begin);
+ space = SPACE_BREAK;
+ break;
+ case SPACE_BREAK:
+ break;
+ }
+ begin = ++p;
+ break;
+ case ' ':
+ switch (space) {
+ case SPACE_NONE:
+ ++p;
+ space = SPACE_SPAN;
+ break;
+ case SPACE_SPAN:
+ pad_.add(begin, p - begin);
+ begin = ++p;
+ space = SPACE_BREAK;
+ break;
+ case SPACE_BREAK:
+ begin = ++p;
+ break;
+ }
+ break;
+ case '&':
+ pad_.add(begin, p - begin);
+ p = handleReference(p, end);
+ begin = p;
+ space = SPACE_NONE;
+ break;
+ default:
+ ++p;
+ space = SPACE_NONE;
+ break;
+ }
+ }
+ pad_.add(begin, p - begin);
+ } else {
+ char const * p = begin;
+ while (p != end) {
+ switch (*p) {
+ case '\x09':
+ case '\x0A':
+ pad_.add(begin, p - begin);
+ begin = ++p;
+ pad_.add(RTL_CONSTASCII_STRINGPARAM(" "));
+ break;
+ case '\x0D':
+ pad_.add(begin, p - begin);
+ ++p;
+ if (peek() == '\x0A') {
+ ++p;
+ }
+ begin = p;
+ pad_.add(RTL_CONSTASCII_STRINGPARAM(" "));
+ break;
+ case '&':
+ pad_.add(begin, p - begin);
+ p = handleReference(p, end);
+ begin = p;
+ break;
+ default:
+ ++p;
+ break;
+ }
+ }
+ pad_.add(begin, p - begin);
+ }
+ return pad_.get();
+}
+
+XmlReader::Result XmlReader::handleStartTag(Namespace * ns, Span * localName) {
+ OSL_ASSERT(ns != 0 && localName);
+ char const * nameBegin = pos_;
+ char const * nameColon = 0;
+ if (!scanName(&nameColon)) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad tag name in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ char const * nameEnd = pos_;
+ NamespaceList::size_type inheritedNamespaces = namespaces_.size();
+ bool hasDefaultNs = false;
+ Namespace defaultNs = NAMESPACE_NONE;
+ attributes_.clear();
+ for (;;) {
+ char const * p = pos_;
+ skipSpace();
+ if (peek() == '/' || peek() == '>') {
+ break;
+ }
+ if (pos_ == p) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "missing whitespace before attribute in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ char const * attrNameBegin = pos_;
+ char const * attrNameColon = 0;
+ if (!scanName(&attrNameColon)) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("bad attribute name in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ char const * attrNameEnd = pos_;
+ skipSpace();
+ if (read() != '=') {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("missing '=' in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ skipSpace();
+ char del = read();
+ if (del != '\'' && del != '"') {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("bad attribute value in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ char const * valueBegin = pos_;
+ sal_Int32 i = rtl_str_indexOfChar_WithLength(pos_, end_ - pos_, del);
+ if (i < 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "unterminated attribute value in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ char const * valueEnd = pos_ + i;
+ pos_ += i + 1;
+ if (attrNameColon == 0 &&
+ Span(attrNameBegin, attrNameEnd - attrNameBegin).equals(
+ RTL_CONSTASCII_STRINGPARAM("xmlns")))
+ {
+ hasDefaultNs = true;
+ defaultNs = scanNamespaceIri(valueBegin, valueEnd);
+ } else if (attrNameColon != 0 &&
+ Span(attrNameBegin, attrNameColon - attrNameBegin).equals(
+ RTL_CONSTASCII_STRINGPARAM("xmlns")))
+ {
+ namespaces_.push_back(
+ NamespaceData(
+ Span(attrNameColon + 1, attrNameEnd - (attrNameColon + 1)),
+ scanNamespaceIri(valueBegin, valueEnd)));
+ } else {
+ attributes_.push_back(
+ AttributeData(
+ attrNameBegin, attrNameEnd, attrNameColon, valueBegin,
+ valueEnd));
+ }
+ }
+ if (!hasDefaultNs && !elements_.empty()) {
+ defaultNs = elements_.top().defaultNamespace;
+ }
+ firstAttribute_ = true;
+ if (peek() == '/') {
+ state_ = STATE_EMPTY_ELEMENT_TAG;
+ ++pos_;
+ } else {
+ state_ = STATE_CONTENT;
+ }
+ if (peek() != '>') {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("missing '>' in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ ++pos_;
+ elements_.push(
+ ElementData(
+ Span(nameBegin, nameEnd - nameBegin), inheritedNamespaces,
+ defaultNs));
+ if (nameColon == 0) {
+ *ns = defaultNs;
+ *localName = Span(nameBegin, nameEnd - nameBegin);
+ } else {
+ *ns = getNamespace(Span(nameBegin, nameColon - nameBegin));
+ *localName = Span(nameColon + 1, nameEnd - (nameColon + 1));
+ }
+ return RESULT_BEGIN;
+}
+
+XmlReader::Result XmlReader::handleEndTag() {
+ if (elements_.empty()) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("spurious end tag in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ char const * nameBegin = pos_;
+ char const * nameColon = 0;
+ if (!scanName(&nameColon) ||
+ !elements_.top().name.equals(nameBegin, pos_ - nameBegin))
+ {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("tag mismatch in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ handleElementEnd();
+ skipSpace();
+ if (peek() != '>') {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("missing '>' in ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ ++pos_;
+ return RESULT_END;
+}
+
+void XmlReader::handleElementEnd() {
+ OSL_ASSERT(!elements_.empty());
+ namespaces_.resize(elements_.top().inheritedNamespaces);
+ elements_.pop();
+ state_ = elements_.empty() ? STATE_DONE : STATE_CONTENT;
+}
+
+XmlReader::Result XmlReader::handleSkippedText(Span * data, Namespace * ns) {
+ for (;;) {
+ sal_Int32 i = rtl_str_indexOfChar_WithLength(pos_, end_ - pos_, '<');
+ if (i < 0) {
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("premature end of ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ pos_ += i + 1;
+ switch (peek()) {
+ case '!':
+ ++pos_;
+ if (!skipComment() && !scanCdataSection().is()) {
+ skipDocumentTypeDeclaration();
+ }
+ break;
+ case '/':
+ ++pos_;
+ return handleEndTag();
+ case '?':
+ ++pos_;
+ skipProcessingInstruction();
+ break;
+ default:
+ return handleStartTag(ns, data);
+ }
+ }
+}
+
+XmlReader::Result XmlReader::handleRawText(Span * text) {
+ pad_.clear();
+ for (char const * begin = pos_;;) {
+ switch (peek()) {
+ case '\0': // i.e., EOF
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("premature end of ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ case '\x0D':
+ pad_.add(begin, pos_ - begin);
+ ++pos_;
+ if (peek() != '\x0A') {
+ pad_.add(RTL_CONSTASCII_STRINGPARAM("\x0A"));
+ }
+ begin = pos_;
+ break;
+ case '&':
+ pad_.add(begin, pos_ - begin);
+ pos_ = handleReference(pos_, end_);
+ begin = pos_;
+ break;
+ case '<':
+ pad_.add(begin, pos_ - begin);
+ ++pos_;
+ switch (peek()) {
+ case '!':
+ ++pos_;
+ if (!skipComment()) {
+ Span cdata(scanCdataSection());
+ if (cdata.is()) {
+ normalizeLineEnds(cdata);
+ } else {
+ skipDocumentTypeDeclaration();
+ }
+ }
+ begin = pos_;
+ break;
+ case '/':
+ *text = pad_.get();
+ ++pos_;
+ state_ = STATE_END_TAG;
+ return RESULT_TEXT;
+ case '?':
+ ++pos_;
+ skipProcessingInstruction();
+ begin = pos_;
+ break;
+ default:
+ *text = pad_.get();
+ state_ = STATE_START_TAG;
+ return RESULT_TEXT;
+ }
+ break;
+ default:
+ ++pos_;
+ break;
+ }
+ }
+}
+
+XmlReader::Result XmlReader::handleNormalizedText(Span * text) {
+ pad_.clear();
+ char const * flowBegin = pos_;
+ char const * flowEnd = pos_;
+ enum Space { SPACE_START, SPACE_NONE, SPACE_SPAN, SPACE_BREAK };
+ // a single true space character can go into the current flow,
+ // everything else breaks the flow
+ Space space = SPACE_START;
+ for (;;) {
+ switch (peek()) {
+ case '\0': // i.e., EOF
+ throw css::uno::RuntimeException(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("premature end of ")) +
+ fileUrl_),
+ css::uno::Reference< css::uno::XInterface >());
+ case '\x09':
+ case '\x0A':
+ case '\x0D':
+ switch (space) {
+ case SPACE_START:
+ case SPACE_BREAK:
+ break;
+ case SPACE_NONE:
+ case SPACE_SPAN:
+ space = SPACE_BREAK;
+ break;
+ }
+ ++pos_;
+ break;
+ case ' ':
+ switch (space) {
+ case SPACE_START:
+ case SPACE_BREAK:
+ break;
+ case SPACE_NONE:
+ space = SPACE_SPAN;
+ break;
+ case SPACE_SPAN:
+ space = SPACE_BREAK;
+ break;
+ }
+ ++pos_;
+ break;
+ case '&':
+ switch (space) {
+ case SPACE_START:
+ break;
+ case SPACE_NONE:
+ case SPACE_SPAN:
+ pad_.add(flowBegin, pos_ - flowBegin);
+ break;
+ case SPACE_BREAK:
+ pad_.add(flowBegin, flowEnd - flowBegin);
+ pad_.add(RTL_CONSTASCII_STRINGPARAM(" "));
+ break;
+ }
+ pos_ = handleReference(pos_, end_);
+ flowBegin = pos_;
+ flowEnd = pos_;
+ space = SPACE_NONE;
+ break;
+ case '<':
+ ++pos_;
+ switch (peek()) {
+ case '!':
+ ++pos_;
+ if (skipComment()) {
+ space = SPACE_BREAK;
+ } else {
+ Span cdata(scanCdataSection());
+ if (cdata.is()) {
+ // CDATA is not normalized (similar to character
+ // references; it keeps the code simple), but it might
+ // arguably be better to normalize it:
+ switch (space) {
+ case SPACE_START:
+ break;
+ case SPACE_NONE:
+ case SPACE_SPAN:
+ pad_.add(flowBegin, pos_ - flowBegin);
+ break;
+ case SPACE_BREAK:
+ pad_.add(flowBegin, flowEnd - flowBegin);
+ pad_.add(RTL_CONSTASCII_STRINGPARAM(" "));
+ break;
+ }
+ normalizeLineEnds(cdata);
+ flowBegin = pos_;
+ flowEnd = pos_;
+ space = SPACE_NONE;
+ } else {
+ skipDocumentTypeDeclaration();
+ }
+ }
+ break;
+ case '/':
+ ++pos_;
+ pad_.add(flowBegin, flowEnd - flowBegin);
+ *text = pad_.get();
+ state_ = STATE_END_TAG;
+ return RESULT_TEXT;
+ case '?':
+ ++pos_;
+ skipProcessingInstruction();
+ space = SPACE_BREAK;
+ break;
+ default:
+ pad_.add(flowBegin, flowEnd - flowBegin);
+ *text = pad_.get();
+ state_ = STATE_START_TAG;
+ return RESULT_TEXT;
+ }
+ break;
+ default:
+ switch (space) {
+ case SPACE_START:
+ flowBegin = pos_;
+ break;
+ case SPACE_NONE:
+ case SPACE_SPAN:
+ break;
+ case SPACE_BREAK:
+ pad_.add(flowBegin, flowEnd - flowBegin);
+ pad_.add(RTL_CONSTASCII_STRINGPARAM(" "));
+ flowBegin = pos_;
+ break;
+ }
+ flowEnd = ++pos_;
+ space = SPACE_NONE;
+ break;
+ }
+ }
+}
+
+}
diff --git a/configmgr2/source/xmlreader.hxx b/configmgr2/source/xmlreader.hxx
new file mode 100644
index 000000000000..25b5e8d95d3d
--- /dev/null
+++ b/configmgr2/source/xmlreader.hxx
@@ -0,0 +1,186 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_XMLREADER_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_XMLREADER_HXX
+
+#include "sal/config.h"
+
+#include <stack>
+#include <vector>
+
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/container/NoSuchElementException.hpp"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "osl/file.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "pad.hxx"
+#include "span.hxx"
+
+namespace configmgr {
+
+class XmlReader: private boost::noncopyable {
+public:
+ explicit XmlReader(rtl::OUString const & fileUrl)
+ SAL_THROW((
+ com::sun::star::container::NoSuchElementException,
+ com::sun::star::uno::RuntimeException));
+
+ ~XmlReader();
+
+ enum Namespace {
+ NAMESPACE_NONE, NAMESPACE_XML, NAMESPACE_OOR, NAMESPACE_XS,
+ NAMESPACE_XSI, NAMESPACE_OTHER };
+
+ enum Text { TEXT_NONE, TEXT_RAW, TEXT_NORMALIZED };
+
+ enum Result { RESULT_BEGIN, RESULT_END, RESULT_TEXT, RESULT_DONE };
+
+ // RESULT_BEGIN: data = localName, ns = ns
+ // RESULT_END: data, ns unused
+ // RESULT_TEXT: data = text, ns unused
+ Result nextItem(Text reportText, Span * data, Namespace * ns);
+
+ bool nextAttribute(Namespace * ns, Span * localName);
+
+ Span getAttributeValue(bool fullyNormalize);
+
+ Namespace getNamespace(Span const & prefix) const;
+
+ rtl::OUString getUrl() const;
+
+private:
+ inline char read() { return pos_ == end_ ? '\0' : *pos_++; }
+
+ inline char peek() { return pos_ == end_ ? '\0' : *pos_; }
+
+ void normalizeLineEnds(Span const & text);
+
+ void skipSpace();
+
+ bool skipComment();
+
+ void skipProcessingInstruction();
+
+ void skipDocumentTypeDeclaration();
+
+ Span scanCdataSection();
+
+ bool scanName(char const ** nameColon);
+
+ Namespace scanNamespaceIri(char const * begin, char const * end);
+
+ char const * handleReference(char const * position, char const * end);
+
+ Span handleAttributeValue(
+ char const * begin, char const * end, bool fullyNormalize);
+
+ Result handleStartTag(Namespace * ns, Span * localName);
+
+ Result handleEndTag();
+
+ void handleElementEnd();
+
+ Result handleSkippedText(Span * data, Namespace * ns);
+
+ Result handleRawText(Span * text);
+
+ Result handleNormalizedText(Span * text);
+
+ struct NamespaceData {
+ Span prefix;
+ Namespace ns;
+
+ NamespaceData() {}
+
+ NamespaceData(Span const & thePrefix, Namespace theNs):
+ prefix(thePrefix), ns(theNs) {}
+ };
+
+ typedef std::vector< NamespaceData > NamespaceList;
+
+ struct ElementData {
+ Span name;
+ NamespaceList::size_type inheritedNamespaces;
+ Namespace defaultNamespace;
+
+ ElementData(
+ Span const & theName,
+ NamespaceList::size_type theInheritedNamespaces,
+ Namespace theDefaultNamespace):
+ name(theName), inheritedNamespaces(theInheritedNamespaces),
+ defaultNamespace(theDefaultNamespace)
+ {}
+ };
+
+ typedef std::stack< ElementData > ElementStack;
+
+ struct AttributeData {
+ char const * nameBegin;
+ char const * nameEnd;
+ char const * nameColon;
+ char const * valueBegin;
+ char const * valueEnd;
+
+ AttributeData(
+ char const * theNameBegin, char const * theNameEnd,
+ char const * theNameColon, char const * theValueBegin,
+ char const * theValueEnd):
+ nameBegin(theNameBegin), nameEnd(theNameEnd),
+ nameColon(theNameColon), valueBegin(theValueBegin),
+ valueEnd(theValueEnd)
+ {}
+ };
+
+ typedef std::vector< AttributeData > Attributes;
+
+ enum State {
+ STATE_CONTENT, STATE_START_TAG, STATE_END_TAG, STATE_EMPTY_ELEMENT_TAG,
+ STATE_DONE };
+
+ rtl::OUString fileUrl_;
+ oslFileHandle fileHandle_;
+ sal_uInt64 fileSize_;
+ void * fileAddress_;
+ NamespaceList namespaces_;
+ ElementStack elements_;
+ char const * pos_;
+ char const * end_;
+ State state_;
+ Attributes attributes_;
+ Attributes::iterator currentAttribute_;
+ bool firstAttribute_;
+ Pad pad_;
+};
+
+}
+
+#endif
diff --git a/connectivity/prj/build.lst b/connectivity/prj/build.lst
index 20cb27644e29..bbb0446bca31 100644
--- a/connectivity/prj/build.lst
+++ b/connectivity/prj/build.lst
@@ -28,5 +28,5 @@ cn connectivity\source\parse nmake - all cn_parse cn_
cn connectivity\source\simpledbt nmake - all cn_simpledbt cn_cmtools cn_inc NULL
cn connectivity\source\dbtools nmake - all cn_dbtools cn_simpledbt cn_cmtools cn_parse cn_res cn_sdbcx cn_inc cn_res NULL
cn connectivity\qa\connectivity\tools nmake - all cn_qa_tools cn_inc NULL
-cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_adabas cn_flat cn_dbase cn_hsqldb NULL
+cn connectivity\util nmake - all cn_util cn_ado cn_mozab cn_kab cn_macab cn_evoab2 cn_calc cn_odbc cn_mysql cn_jdbc cn_adabas cn_flat cn_dbase cn_hsqldb NULL
diff --git a/connectivity/util/langfilter.xsl b/connectivity/util/langfilter.xsl
deleted file mode 100755
index 76cfcff20ac6..000000000000
--- a/connectivity/util/langfilter.xsl
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version='1.0' encoding="UTF-8"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:oor="http://openoffice.org/2001/registry">
-<xsl:output method="xml" indent="yes" omit-xml-declaration="no" version="1.0" encoding="UTF-8"/>
-<xsl:param name="lang"/>
-<xsl:template match="*">
- <xsl:if test="count(.//*[@xml:lang=$lang])&gt;0">
- <xsl:copy>
- <xsl:apply-templates select="*|@*"/>
- </xsl:copy>
- </xsl:if>
-</xsl:template>
-
-<xsl:template match="@*">
- <xsl:copy>
- <xsl:apply-templates select="*|@*"/>
- </xsl:copy>
-</xsl:template>
-
-<xsl:template match="value">
- <xsl:if test="@xml:lang=$lang">
- <xsl:copy>
- <xsl:apply-templates select="@*|text()"/>
- </xsl:copy>
- </xsl:if>
-</xsl:template>
-
-<xsl:template match="text()">
- <xsl:if test="../@xml:lang=$lang">
- <xsl:copy>
- <xsl:apply-templates select="@*|text()"/>
- </xsl:copy>
- </xsl:if>
-</xsl:template>
-
-
-</xsl:stylesheet>
-
diff --git a/connectivity/util/makefile.mk b/connectivity/util/makefile.mk
index 805aa0110f6f..cbe44ab6d446 100755
--- a/connectivity/util/makefile.mk
+++ b/connectivity/util/makefile.mk
@@ -1,14 +1,13 @@
#*************************************************************************
-#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2008 by Sun Microsystems, Inc.
+#
+# Copyright 2009 by Sun Microsystems, Inc.
#
# OpenOffice.org - a multi-platform office productivity suite
#
-# $RCSfile: makefile.mk,v $
+# $RCSfile: makefile,v $
#
-# $Revision: 1.22 $
+# $Revision: 1.4 $
#
# This file is part of OpenOffice.org.
#
@@ -26,55 +25,40 @@
# version 3 along with OpenOffice.org. If not, see
# <http://www.openoffice.org/license.html>
# for a copy of the LGPLv3 License.
-#
-#*************************************************************************
+#***********************************************************************/
-PRJ = ..
-TARGET = connectivity
+PRJ = ..
PRJNAME = connectivity
+TARGET = connectivity
-# -----------------------------------------------------------------------------
-# include global settings
-# -----------------------------------------------------------------------------
+.INCLUDE : settings.mk
+.INCLUDE : target.mk
-.INCLUDE : settings.mk
+# For any given platform, for each driver .xcu (in $(MY_XCUS)) built on that
+# platform (in $(MISC)/registry/data/org/openoffice/Office/DataAccess) there are
+# corresponding language-specific .xcu files (in
+# $(MISC)/registry/res/%/org/openoffice/Office/DataAccess). For each language,
+# all language-specific .xcu files for that language are assembled into
+# $(BIN)$/fcfg_drivers_%.zip. To meet the requirements of dmake percent rules,
+# the first item from $(MY_XCUS) is arbitrarily taken to be the main
+# prerequisite while all the items from $(MY_XCUS) are made into indirect
+# prerequisites (harmlessly doubling the first item).
-DIR_FILTERCFGOUT := $(MISC)$/drivers
-DIR_LANGPACK := $(DIR_FILTERCFGOUT)
-.IF "$(WITH_LANG)"!=""
-DIR_LANG_SOURCE := $(MISC)$/merge
-.ELSE
-DIR_LANG_SOURCE := $(MISC)$/registry$/data
-.ENDIF
-DRIVER_MERGE_XCU := $(shell -@$(FIND) $(DIR_LANG_SOURCE)$/org$/openoffice$/Office$/DataAccess -name "*.xcu")
-
-REALFILTERPACKAGES_FILTERS_UI_LANGPACKS = \
- $(foreach,i,$(alllangiso) $(foreach,j,$(DRIVER_MERGE_XCU) $(DIR_LANGPACK)$/$i$/org$/openoffice$/Office$/DataAccess$/$(j:f)))
-
-.INCLUDE: target.mk
+MY_XCUS := \
+ $(shell cd $(MISC)/registry/data/org/openoffice/Office/DataAccess && \
+ ls *.xcu)
-PACKLANG := $(XSLTPROC) --nonet
-PACKLANG_IN :=
-PACKLANG_PARAM := --stringparam
-PACKLANG_XSL :=
-
-$(REALFILTERPACKAGES_FILTERS_UI_LANGPACKS) :
- @echo ===================================================================
- @echo Building language package for driver $(@:b:s/Filter_//)
- @echo ===================================================================
- +-$(MKDIRHIER) $(@:d)
- $(PACKLANG) $(PACKLANG_PARAM) lang $(@:d:d:d:d:d:d:d:d:d:d:b) $(PACKLANG_XSL) langfilter.xsl $(PACKLANG_IN) $(DIR_LANG_SOURCE)$/org$/openoffice$/Office$/DataAccess$/$(@:f) > $@
+.IF "$(MY_XCUS)" != ""
-$(MISC)$/$(TARGET)_delzip :
- -$(RM) $(BIN)$/fcfg_drivers_{$(alllangiso)}.zip
+ALLTAR : $(BIN)/fcfg_drivers_{$(alllangiso)}.zip
-$(BIN)$/fcfg_drivers_{$(alllangiso)}.zip : $(REALFILTERPACKAGES_FILTERS_UI_LANGPACKS)
- cd $(DIR_FILTERCFGOUT)$/$(@:b:s/fcfg_drivers_//) && zip -ru ..$/..$/..$/bin$/fcfg_drivers_$(@:b:s/fcfg_drivers_//).zip org/*
-.IF "$(USE_SHELL)"!="4nt"
- $(PERL) -w $(SOLARENV)$/bin$/cleanzip.pl $@
-.ENDIF # "$(USE_SHELL)"!="4nt"
+$(BIN)/fcfg_drivers_{$(alllangiso)}.zip : \
+ $(MISC)/registry/res/$$(@:b:s/fcfg_drivers_//)/org/openoffice/Office/DataAccess/{$(MY_XCUS)}
-ALLTAR: \
- $(MISC)$/$(TARGET)_delzip \
- $(BIN)$/fcfg_drivers_{$(alllangiso)}.zip
+$(BIN)/fcfg_drivers_%.zip : \
+ $(MISC)/registry/res/%/org/openoffice/Office/DataAccess/$(MY_XCUS:1)
+ zip -j $@ \
+ $(foreach,i,$(MY_XCUS) \
+ $(MISC)/registry/res/$*/org/openoffice/Office/DataAccess/$i)
+.ENDIF
diff --git a/desktop/prj/build.lst b/desktop/prj/build.lst
index ce2ed07f57e4..704fa0391cb7 100644
--- a/desktop/prj/build.lst
+++ b/desktop/prj/build.lst
@@ -1,4 +1,4 @@
-dt desktop : l10n sfx2 stoc uui BERKELEYDB:berkeleydb sysui SO:sysui_so BOOST:boost svx xmlhelp sal unoil officecfg NULL
+dt desktop : l10n sfx2 stoc uui BERKELEYDB:berkeleydb sysui SO:sysui_so BOOST:boost svx xmlhelp sal unoil officecfg configmgr2 NULL
dt desktop usr1 - all dt_mkout NULL
dt desktop\inc nmake - all dt_inc NULL
dt desktop\prj get - all dt_prj NULL
diff --git a/desktop/source/app/userinstall.cxx b/desktop/source/app/userinstall.cxx
index 920da5613382..2fd4c180a361 100644
--- a/desktop/source/app/userinstall.cxx
+++ b/desktop/source/app/userinstall.cxx
@@ -246,7 +246,7 @@ namespace desktop {
return UserInstall::E_InvalidBaseinstall;
// create the user directory
- FileBase::RC rc = Directory::create(aUserPath);
+ FileBase::RC rc = Directory::createPath(aUserPath);
if ((rc != FileBase::E_None) && (rc != FileBase::E_EXIST)) return UserInstall::E_Creation;
// copy data from shared data directory of base installation
diff --git a/desktop/source/deployment/makefile.mk b/desktop/source/deployment/makefile.mk
index 8ee3efd34f63..c664ff409b6d 100644
--- a/desktop/source/deployment/makefile.mk
+++ b/desktop/source/deployment/makefile.mk
@@ -83,7 +83,8 @@ SHL1STDLIBS = \
$(XMLSCRIPTLIB) \
$(SVLLIB) \
$(DEPLOYMENTMISCLIB) \
- $(HELPLINKERLIB)
+ $(HELPLINKERLIB) \
+ $(CONFIGMGRLIB)
SHL1DEPN =
SHL1IMPLIB = i$(TARGET)
diff --git a/desktop/source/deployment/registry/configuration/dp_configuration.cxx b/desktop/source/deployment/registry/configuration/dp_configuration.cxx
index b24000d43dbb..787d32adcdc8 100644
--- a/desktop/source/deployment/registry/configuration/dp_configuration.cxx
+++ b/desktop/source/deployment/registry/configuration/dp_configuration.cxx
@@ -31,6 +31,9 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_desktop.hxx"
+//TODO: Large parts of this file were copied from dp_component.cxx; those parts
+// should be consolidated.
+
#include "dp_configuration.hrc"
#include "dp_backend.h"
#include "dp_persmap.h"
@@ -41,16 +44,18 @@
#include "rtl/uri.hxx"
#include "rtl/memory.h"
#include "osl/file.hxx"
+#include "cppuhelper/exc_hlp.hxx"
#include "ucbhelper/content.hxx"
#include "comphelper/anytostring.hxx"
#include "comphelper/servicedecl.hxx"
+#include "configmgr/update.hxx"
#include "xmlscript/xml_helper.hxx"
#include "svtools/inettype.hxx"
#include "com/sun/star/ucb/NameClash.hpp"
#include "com/sun/star/io/XActiveDataSink.hpp"
#include "com/sun/star/lang/WrappedTargetRuntimeException.hpp"
#include "com/sun/star/util/XRefreshable.hpp"
-#include "com/sun/star/configuration/backend/XLayerImporter.hpp"
+#include <list>
#include <memory>
@@ -65,6 +70,8 @@ namespace backend {
namespace configuration {
namespace {
+typedef ::std::list<OUString> t_stringlist;
+
//==============================================================================
class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
{
@@ -98,27 +105,36 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
};
friend class PackageImpl;
- Reference< ::com::sun::star::configuration::backend::XLayerImporter >
- m_xMergeImporter;
- OUString m_configLayer;
+ t_stringlist m_xcs_files;
+ t_stringlist m_xcu_files;
+ t_stringlist & getFiles( bool xcs ) {
+ return xcs ? m_xcs_files : m_xcu_files;
+ }
+
+ bool m_configmgrrc_inited;
+ bool m_configmgrrc_modified;
// PackageRegistryBackend
virtual Reference<deployment::XPackage> bindPackage_(
OUString const & url, OUString const & mediaType,
Reference<XCommandEnvironment> const & xCmdEnv );
- void xcu_merge_in( OUString const & url,
- Reference< XCommandEnvironment > const & xCmdEnv );
- void xcs_merge_in( OUString const & url,
- Reference< XCommandEnvironment > const & xCmdEnv );
- ::std::auto_ptr<PersistentMap> m_registeredPackages;
- OUString const & getConfigLayer();
- Reference<util::XRefreshable> m_defaultProvider;
+ virtual void SAL_CALL disposing();
const Reference<deployment::XPackageTypeInfo> m_xConfDataTypeInfo;
const Reference<deployment::XPackageTypeInfo> m_xConfSchemaTypeInfo;
Sequence< Reference<deployment::XPackageTypeInfo> > m_typeInfos;
+ void configmgrrc_verify_init(
+ Reference<XCommandEnvironment> const & xCmdEnv );
+ void configmgrrc_flush( Reference<XCommandEnvironment> const & xCmdEnv );
+
+ bool addToConfigmgrRc( bool isSchema, OUString const & url,
+ Reference<XCommandEnvironment> const & xCmdEnv );
+ bool removeFromConfigmgrRc( bool isSchema, OUString const & url,
+ Reference<XCommandEnvironment> const & xCmdEnv );
+ bool hasInConfigmgrRc( bool isSchema, OUString const & url );
+
public:
BackendImpl( Sequence<Any> const & args,
Reference<XComponentContext> const & xComponentContext );
@@ -126,17 +142,36 @@ public:
// XPackageRegistry
virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL
getSupportedPackageTypes() throw (RuntimeException);
+
+ using PackageRegistryBackend::disposing;
};
//______________________________________________________________________________
+void BackendImpl::disposing()
+{
+ try {
+ configmgrrc_flush( Reference<XCommandEnvironment>() );
+
+ PackageRegistryBackend::disposing();
+ }
+ catch (RuntimeException &) {
+ throw;
+ }
+ catch (Exception &) {
+ Any exc( ::cppu::getCaughtException() );
+ throw lang::WrappedTargetRuntimeException(
+ OUSTR("caught unexpected exception while disposing..."),
+ static_cast<OWeakObject *>(this), exc );
+ }
+}
+
+//______________________________________________________________________________
BackendImpl::BackendImpl(
Sequence<Any> const & args,
Reference<XComponentContext> const & xComponentContext )
: PackageRegistryBackend( args, xComponentContext ),
- m_defaultProvider( xComponentContext->getValueByName(
- OUSTR("/singletons/com.sun.star."
- "configuration.theDefaultProvider") ),
- UNO_QUERY ),
+ m_configmgrrc_inited( false ),
+ m_configmgrrc_modified( false ),
m_xConfDataTypeInfo( new Package::TypeInfo(
OUSTR("application/"
"vnd.sun.star.configuration-data"),
@@ -154,19 +189,13 @@ BackendImpl::BackendImpl(
m_typeInfos[ 0 ] = m_xConfDataTypeInfo;
m_typeInfos[ 1 ] = m_xConfSchemaTypeInfo;
- OSL_ASSERT( m_defaultProvider.is() );
+ const Reference<XCommandEnvironment> xCmdEnv;
if (transientMode()) {
- m_registeredPackages.reset( new PersistentMap );
+ //TODO
}
else {
- m_registeredPackages.reset(
- new PersistentMap(
- makeURL( getCachePath(), OUSTR("registered_packages.db") ),
- m_readOnly ) );
- if (! m_readOnly)
- create_folder( 0, getConfigLayer(),
- Reference<XCommandEnvironment>() );
+ configmgrrc_verify_init( xCmdEnv );
}
}
@@ -239,103 +268,244 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
static_cast<sal_Int16>(-1) );
}
+//##############################################################################
+
//______________________________________________________________________________
-OUString const & BackendImpl::getConfigLayer()
+void BackendImpl::configmgrrc_verify_init(
+ Reference<XCommandEnvironment> const & xCmdEnv )
{
- if (m_configLayer.getLength() == 0)
+ if (transientMode())
+ return;
+ const ::osl::MutexGuard guard( getMutex() );
+ if (! m_configmgrrc_inited)
{
- OUString path(
- makeURL( expandUnoRcUrl( getCachePath() ), OUSTR("registry") ) );
- ::osl::FileBase::RC rc = ::osl::File::getAbsoluteFileURL(
- OUString(), path, m_configLayer );
- if (rc != ::osl::FileBase::E_None)
- throw RuntimeException(
- OUSTR("making file URL absolute failed: ") + path,
- static_cast<OWeakObject *>(this) );
+ // common rc:
+ ::ucbhelper::Content ucb_content;
+ if (create_ucb_content(
+ &ucb_content,
+ makeURL( getCachePath(), OUSTR("configmgrrc") ),
+ xCmdEnv, false /* no throw */ ))
+ {
+ OUString line;
+ if (readLine( &line, OUSTR("SCHEMA="), ucb_content,
+ RTL_TEXTENCODING_UTF8 ))
+ {
+ sal_Int32 index = sizeof ("SCHEMA=") - 1;
+ do {
+ OUString token( line.getToken( 0, ' ', index ).trim() );
+ if (token.getLength() > 0) {
+ // cleanup, check if existing:
+ if (create_ucb_content(
+ 0, expandUnoRcTerm(token), xCmdEnv,
+ false /* no throw */ )) {
+ m_xcs_files.push_back( token );
+ }
+ else
+ OSL_ENSURE(
+ 0, "### invalid SCHEMA entry!" );
+ }
+ }
+ while (index >= 0);
+ }
+ if (readLine( &line, OUSTR("DATA="), ucb_content,
+ RTL_TEXTENCODING_UTF8 )) {
+ sal_Int32 index = sizeof ("DATA=") - 1;
+ do {
+ OUString token( line.getToken( 0, ' ', index ).trim() );
+ if (token.getLength() > 0) {
+ if (token[ 0 ] == '?')
+ token = token.copy( 1 );
+ // cleanup, check if existing:
+ if (create_ucb_content(
+ 0, expandUnoRcTerm(token),
+ xCmdEnv, false /* no throw */ )) {
+ m_xcu_files.push_back( token );
+ }
+ else
+ OSL_ENSURE( 0, "### invalid DATA entry!" );
+ }
+ }
+ while (index >= 0);
+ }
+ }
+ m_configmgrrc_modified = false;
+ m_configmgrrc_inited = true;
}
- return m_configLayer;
}
-//==============================================================================
-class SchemaFileRoot : public ::dp_misc::XmlRootElement
+//______________________________________________________________________________
+void BackendImpl::configmgrrc_flush(
+ Reference<XCommandEnvironment> const & xCmdEnv )
{
-public:
- OUString m_name;
- OUString m_package;
-
- inline SchemaFileRoot()
- : XmlRootElement( OUSTR("http://openoffice.org/2001/registry"),
- OUSTR("component-schema") )
- {}
-
- // XRoot
- virtual Reference< xml::input::XElement > SAL_CALL startRootElement(
- sal_Int32 uid, OUString const & localname,
- Reference< xml::input::XAttributes > const & xAttributes )
- throw (xml::sax::SAXException, RuntimeException);
-};
+ if (transientMode())
+ return;
+ if (!m_configmgrrc_inited || !m_configmgrrc_modified)
+ return;
+
+ ::rtl::OStringBuffer buf;
+ // UNO_USER_PACKAGES_CACHE, UNO_SHARED_PACKAGES_CACHE have to be resolved
+ // locally:
+ if (m_eContext == CONTEXT_USER) {
+ buf.append( RTL_CONSTASCII_STRINGPARAM(
+ "UNO_USER_PACKAGES_CACHE=$ORIGIN/../..") );
+ }
+ else if (m_eContext == CONTEXT_SHARED) {
+ buf.append( RTL_CONSTASCII_STRINGPARAM(
+ "UNO_SHARED_PACKAGES_CACHE=$ORIGIN/../..") );
+ }
+ else
+ OSL_ASSERT(0);
+ buf.append(LF);
+
+ if (! m_xcs_files.empty())
+ {
+ t_stringlist::const_iterator iPos( m_xcs_files.begin() );
+ t_stringlist::const_iterator const iEnd( m_xcs_files.end() );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("SCHEMA=") );
+ while (iPos != iEnd) {
+ // encoded ASCII file-urls:
+ const ::rtl::OString item(
+ ::rtl::OUStringToOString( *iPos, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( item );
+ ++iPos;
+ if (iPos != iEnd)
+ buf.append( ' ' );
+ }
+ buf.append(LF);
+ }
+ if (! m_xcu_files.empty())
+ {
+ t_stringlist::const_iterator iPos( m_xcu_files.begin() );
+ t_stringlist::const_iterator const iEnd( m_xcu_files.end() );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("DATA=") );
+ while (iPos != iEnd) {
+ // encoded ASCII file-urls:
+ const ::rtl::OString item(
+ ::rtl::OUStringToOString( *iPos, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( item );
+ ++iPos;
+ if (iPos != iEnd)
+ buf.append( ' ' );
+ }
+ buf.append(LF);
+ }
+
+ // write configmgrrc:
+ const Reference<io::XInputStream> xData(
+ ::xmlscript::createInputStream(
+ ::rtl::ByteSequence(
+ reinterpret_cast<sal_Int8 const *>(buf.getStr()),
+ buf.getLength() ) ) );
+ ::ucbhelper::Content ucb_content(
+ makeURL( getCachePath(), OUSTR("configmgrrc") ), xCmdEnv );
+ ucb_content.writeStream( xData, true /* replace existing */ );
+
+ m_configmgrrc_modified = false;
+}
+
+//------------------------------------------------------------------------------
+inline OUString makeRcTerm( OUString const & url )
+{
+ OSL_ASSERT( url.matchAsciiL( RTL_CONSTASCII_STRINGPARAM(
+ "vnd.sun.star.expand:") ) );
+ if (url.matchAsciiL( RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.expand:") )) {
+ // cut protocol:
+ OUString rcterm( url.copy( sizeof ("vnd.sun.star.expand:") - 1 ) );
+ // decode uric class chars:
+ rcterm = ::rtl::Uri::decode(
+ rcterm, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
+ return rcterm;
+ }
+ else
+ return url;
+}
//______________________________________________________________________________
-Reference< xml::input::XElement > SchemaFileRoot::startRootElement(
- sal_Int32 uid, OUString const & localname,
- Reference< xml::input::XAttributes > const & xAttributes )
- throw (xml::sax::SAXException, RuntimeException)
+bool BackendImpl::addToConfigmgrRc( bool isSchema, OUString const & url_,
+ Reference<XCommandEnvironment> const & xCmdEnv )
{
- // check root element:
- XmlRootElement::startRootElement( uid, localname, xAttributes );
-
- // "name" attribute
- m_name = xAttributes->getValueByUidName( getUid(), OUSTR("name") );
- if (m_name.getLength() == 0)
- throw xml::sax::SAXException(
- OUSTR("missing schema name attribute!"),
- static_cast< OWeakObject * >(this), Any() );
-
- // "package" attribute
- m_package = xAttributes->getValueByUidName( getUid(), OUSTR("package") );
- if (m_package.getLength() == 0)
- throw xml::sax::SAXException(
- OUSTR("missing schema package attribute!"),
- static_cast<OWeakObject *>(this), Any() );
-
- // don't go deeper...
- return Reference<xml::input::XElement>();
+ const OUString rcterm( makeRcTerm(url_) );
+ const ::osl::MutexGuard guard( getMutex() );
+ configmgrrc_verify_init( xCmdEnv );
+ t_stringlist & rSet = getFiles(isSchema);
+ if (::std::find( rSet.begin(), rSet.end(), rcterm ) == rSet.end()) {
+ rSet.push_front( rcterm ); // prepend to list, thus overriding
+ // write immediately:
+ m_configmgrrc_modified = true;
+ configmgrrc_flush( xCmdEnv );
+ return true;
+ }
+ else
+ return false;
}
//______________________________________________________________________________
-void BackendImpl::xcs_merge_in(
- OUString const & url,
+bool BackendImpl::removeFromConfigmgrRc(
+ bool isSchema, OUString const & url_,
Reference<XCommandEnvironment> const & xCmdEnv )
{
- // parse out schema package:
- SchemaFileRoot * root = new SchemaFileRoot;
- Reference<xml::input::XRoot> xRoot( root );
- ::ucbhelper::Content ucb_content( url, xCmdEnv );
- xml_parse( xRoot, ucb_content, getComponentContext() );
-
- OUString dest_folder(
- makeURL( getConfigLayer(), OUSTR("schema/") + ::rtl::Uri::encode(
- root->m_package, rtl_UriCharClassPchar,
- rtl_UriEncodeIgnoreEscapes,
- RTL_TEXTENCODING_UTF8 ).replace( '.', '/' ) ) );
- OUString title( root->m_name + OUSTR(".xcs") );
- OUString dest_url( makeURL( dest_folder, ::rtl::Uri::encode(
- title, rtl_UriCharClassPchar,
- rtl_UriEncodeIgnoreEscapes,
- RTL_TEXTENCODING_UTF8 ) ) );
- // assure dest folder is existing:
- ::ucbhelper::Content ucb_dest_folder;
- create_folder( &ucb_dest_folder, dest_folder, xCmdEnv );
- if (! ucb_dest_folder.transferContent(
- ::ucbhelper::Content( url, xCmdEnv ),
- ::ucbhelper::InsertOperation_COPY,
- title, NameClash::OVERWRITE ))
- throw RuntimeException(
- OUSTR("::ucb::Content::transferContent() failed!"), 0 );
+ const OUString rcterm( makeRcTerm(url_) );
+ const ::osl::MutexGuard guard( getMutex() );
+ configmgrrc_verify_init( xCmdEnv );
+ getFiles(isSchema).remove( rcterm );
+ if (!isSchema) { //TODO: see replaceOrigin()
+ getFiles(isSchema).remove(
+ rcterm + OUString(RTL_CONSTASCII_USTRINGPARAM(".mod")));
+ }
+ // write immediately:
+ m_configmgrrc_modified = true;
+ configmgrrc_flush( xCmdEnv );
+ return true;
+}
+
+//______________________________________________________________________________
+bool BackendImpl::hasInConfigmgrRc(
+ bool isSchema, OUString const & url_ )
+{
+ const OUString rcterm( makeRcTerm(url_) );
+ const ::osl::MutexGuard guard( getMutex() );
+ t_stringlist const & rSet = getFiles(isSchema);
+ return ::std::find( rSet.begin(), rSet.end(), rcterm ) != rSet.end()
+ || (!isSchema && //TODO: see replaceOrigin()
+ ::std::find(
+ rSet.begin(), rSet.end(),
+ rcterm + OUString(RTL_CONSTASCII_USTRINGPARAM(".mod"))) !=
+ rSet.end());
}
//##############################################################################
+// Package
+//______________________________________________________________________________
+BackendImpl * BackendImpl::PackageImpl::getMyBackend() const
+{
+ BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get());
+ if (NULL == pBackend)
+ {
+ //May throw a DisposedException
+ check();
+ //We should never get here...
+ throw RuntimeException(
+ OUSTR("Failed to get the BackendImpl"),
+ static_cast<OWeakObject*>(const_cast<PackageImpl *>(this)));
+ }
+ return pBackend;
+}
+
+beans::Optional< beans::Ambiguous<sal_Bool> >
+BackendImpl::PackageImpl::isRegistered_(
+ ::osl::ResettableMutexGuard &,
+ ::rtl::Reference<AbortChannel> const &,
+ Reference<XCommandEnvironment> const & )
+{
+ BackendImpl * that = getMyBackend();
+ return beans::Optional< beans::Ambiguous<sal_Bool> >(
+ true /* IsPresent */,
+ beans::Ambiguous<sal_Bool>(
+ that->hasInConfigmgrRc( m_isSchema, getURL() ),
+ false /* IsAmbiguous */ ) );
+}
+
//------------------------------------------------------------------------------
OUString encodeForXml( OUString const & text )
{
@@ -370,7 +540,7 @@ OUString encodeForXml( OUString const & text )
}
//______________________________________________________________________________
-void BackendImpl::xcu_merge_in(
+OUString replaceOrigin(
OUString const & url, Reference< XCommandEnvironment > const & xCmdEnv )
{
// looking for %origin%:
@@ -437,199 +607,50 @@ void BackendImpl::xcu_merge_in(
rtl_copyMemory( filtered.getArray() + write_pos, pAdd, nAdd );
write_pos += nAdd;
}
- if (use_filtered && write_pos < filtered.getLength())
+ if (!use_filtered)
+ return url;
+ if (write_pos < filtered.getLength())
filtered.realloc( write_pos );
-
- Reference<XComponentContext> const & xContext = getComponentContext();
- if (! m_xMergeImporter.is()) {
- m_xMergeImporter.set(
- xContext->getServiceManager()->createInstanceWithContext(
- OUSTR("com.sun.star.configuration.backend.MergeImporter"),
- xContext ), UNO_QUERY_THROW );
- }
-
- Reference< ::com::sun::star::configuration::backend::XLayer > xLayer(
- xContext->getServiceManager()->createInstanceWithContext(
- OUSTR("com.sun.star.configuration.backend.xml.LayerParser"),
- xContext ), UNO_QUERY_THROW );
-
- Reference< io::XActiveDataSink > xActiveDataSink( xLayer, UNO_QUERY_THROW );
- if (use_filtered)
- xActiveDataSink->setInputStream( ::xmlscript::createInputStream(
- filtered ) );
- else
- ucb_content.openStream( xActiveDataSink );
-
- if (transientMode())
- m_xMergeImporter->importLayer( xLayer );
- else
- m_xMergeImporter->importLayerForEntity( xLayer, getConfigLayer() );
-}
-
-//##############################################################################
-
-// Package
-//______________________________________________________________________________
-BackendImpl * BackendImpl::PackageImpl::getMyBackend() const
-{
- BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get());
- if (NULL == pBackend)
- {
- //May throw a DisposedException
- check();
- //We should never get here...
- throw RuntimeException(
- OUSTR("Failed to get the BackendImpl"),
- static_cast<OWeakObject*>(const_cast<PackageImpl *>(this)));
- }
- return pBackend;
-}
-
-beans::Optional< beans::Ambiguous<sal_Bool> >
-BackendImpl::PackageImpl::isRegistered_(
- ::osl::ResettableMutexGuard &,
- ::rtl::Reference<AbortChannel> const &,
- Reference<XCommandEnvironment> const & )
-{
- BackendImpl * that = getMyBackend();
- return beans::Optional< beans::Ambiguous<sal_Bool> >(
- true /* IsPresent */,
- beans::Ambiguous<sal_Bool>(
- that->m_registeredPackages->has(
- rtl::OUStringToOString( m_url, RTL_TEXTENCODING_UTF8 ) ),
- false /* IsAmbiguous */ ) );
+ rtl::OUString newUrl(url + OUString(RTL_CONSTASCII_USTRINGPARAM(".mod")));
+ //TODO: unique name
+ ucbhelper::Content(newUrl, xCmdEnv).writeStream(
+ xmlscript::createInputStream(filtered), true);
+ return newUrl;
}
//______________________________________________________________________________
void BackendImpl::PackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
- ::rtl::Reference<AbortChannel> const & abortChannel,
+ ::rtl::Reference<AbortChannel> const &,
Reference<XCommandEnvironment> const & xCmdEnv )
{
BackendImpl * that = getMyBackend();
+ OUString url( getURL() );
+
if (doRegisterPackage)
{
if (m_isSchema)
{
- OSL_ENSURE( ! that->transientMode(),
- "### schema cannot be deployed transiently!" );
- if (! that->transientMode()) {
- that->xcs_merge_in( m_url, xCmdEnv );
- that->m_registeredPackages->put(
- rtl::OUStringToOString( m_url, RTL_TEXTENCODING_UTF8),
- rtl::OString(
- RTL_CONSTASCII_STRINGPARAM(
- "vnd.sun.star.configuration-schema" ) ) );
- }
+ configmgr::update::insertXcsFile(
+ that->m_eContext == CONTEXT_SHARED ? 9 : 13, //TODO
+ expandUnoRcUrl(url));
}
else
{
- that->xcu_merge_in( m_url, xCmdEnv );
- that->m_registeredPackages->put(
- rtl::OUStringToOString( m_url, RTL_TEXTENCODING_UTF8 ),
- rtl::OString(
- RTL_CONSTASCII_STRINGPARAM(
- "vnd.sun.star.configuration-data" ) ) );
+ url = replaceOrigin(url, xCmdEnv);
+ configmgr::update::insertXcuFile(
+ that->m_eContext == CONTEXT_SHARED ? 9 : 13, //TODO
+ expandUnoRcUrl(url));
}
+
+ that->addToConfigmgrRc( m_isSchema, url, xCmdEnv );
}
else // revoke
{
- OSL_ASSERT(
- that->m_registeredPackages->has(
- rtl::OUStringToOString( m_url, RTL_TEXTENCODING_UTF8 ) ) );
- t_string2string_map entries( that->m_registeredPackages->getEntries() );
- t_string2string_map::const_iterator iPos( entries.begin() );
- t_string2string_map::const_iterator const iEnd( entries.end() );
-
- if (m_isSchema)
- {
- if (! that->transientMode())
- {
- ::ucbhelper::Content ucbSaveLayer(
- makeURL( that->getConfigLayer(), OUSTR("schema") ),
- xCmdEnv );
- ucbSaveLayer.setPropertyValue(
- StrTitle::get(), Any( OUSTR("schema.bak") ) );
- try {
- for ( ; iPos != iEnd; ++iPos )
- {
- checkAborted( abortChannel );
- if (iPos->second == "vnd.sun.star.configuration-schema")
- {
- OUString url(
- rtl::OStringToOUString(
- iPos->first, RTL_TEXTENCODING_UTF8 ) );
- if (!url.equals( m_url )) {
- that->xcs_merge_in( url, xCmdEnv );
- }
- }
- }
- }
- catch (RuntimeException &) {
- throw;
- }
- catch (Exception &) {
- ucbSaveLayer.setPropertyValue(
- StrTitle::get(), Any( OUSTR("schema") ) );
- throw;
- }
- that->m_registeredPackages->erase(
- rtl::OUStringToOString( m_url, RTL_TEXTENCODING_UTF8 ) );
- ucbSaveLayer.executeCommand(
- OUSTR("delete"), Any( true /* delete physically */ ) );
- }
- }
- else // data
- {
- if (! that->transientMode())
- {
- ::ucbhelper::Content ucbSaveLayer(
- makeURL( that->getConfigLayer(), OUSTR("data") ),
- xCmdEnv );
- ucbSaveLayer.setPropertyValue(
- StrTitle::get(), Any( OUSTR("data.bak") ) );
- try {
- for ( ; iPos != iEnd; ++iPos )
- {
- checkAborted( abortChannel );
- if (iPos->second == "vnd.sun.star.configuration-data") {
- OUString url(
- rtl::OStringToOUString(
- iPos->first, RTL_TEXTENCODING_UTF8 ) );
- if (!url.equals( m_url )) {
- that->xcu_merge_in( url, xCmdEnv );
- }
- }
- }
- }
- catch (RuntimeException &) {
- throw;
- }
- catch (Exception &) {
- ucbSaveLayer.setPropertyValue(
- StrTitle::get(), Any( OUSTR("data") ) );
- throw;
- }
- that->m_registeredPackages->erase(
- rtl::OUStringToOString( m_url, RTL_TEXTENCODING_UTF8 ) );
- ucbSaveLayer.executeCommand(
- OUSTR("delete"), Any( true /* delete physically */ ) );
- }
- }
- }
+ that->removeFromConfigmgrRc( m_isSchema, url, xCmdEnv );
- if (!m_isSchema && getMyBackend()->m_defaultProvider.is()) {
- // temp workaround for config bug:
- try {
- getMyBackend()->m_defaultProvider->refresh();
- }
- catch (lang::WrappedTargetRuntimeException & exc) {
- (void) exc;
- OSL_ENSURE( 0, ::rtl::OUStringToOString(
- ::comphelper::anyToString(exc.TargetException),
- RTL_TEXTENCODING_UTF8 ).getStr() );
- }
+ //TODO: revoking at runtime, possible, sensible?
}
}
diff --git a/desktop/source/pagein/makefile.mk b/desktop/source/pagein/makefile.mk
index 85cbb4d3c9fd..cb6a6226782e 100644
--- a/desktop/source/pagein/makefile.mk
+++ b/desktop/source/pagein/makefile.mk
@@ -119,7 +119,7 @@ $(MISC)$/$(TARGET)-common : makefile.mk
@-echo $(DLLPRE)package2$(DLLPOST) >> $@
@-echo $(DLLPRE)ucpfile1$(DLLPOST) >> $@
@-echo $(DLLPRE)ucb1$(DLLPOST) >> $@
- @-echo configmgr2$(UNODLLPOST) >> $@
+ @-echo $(DLLPRE)configmgr$(DLLPOST) >> $@
#
@-echo $(DLLPRE)dtransX11$(DFTDLLPOST) >> $@
@-echo $(DLLPRE)vclplug_gen$(DFTDLLPOST) >> $@
diff --git a/fpicker/source/office/OfficeFilePicker.cxx b/fpicker/source/office/OfficeFilePicker.cxx
index 0a8b5ca76974..7ea601e57828 100644
--- a/fpicker/source/office/OfficeFilePicker.cxx
+++ b/fpicker/source/office/OfficeFilePicker.cxx
@@ -984,8 +984,9 @@ void SAL_CALL SvtFilePicker::appendFilterGroup( const ::rtl::OUString& sGroupTit
// check the names
if ( FilterNameExists( aFilters ) )
- // TODO: a more precise exception message
- throw IllegalArgumentException();
+ throw IllegalArgumentException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("filter name exists")),
+ static_cast< OWeakObject * >(this), 1);
// ensure that we have a filter list
::rtl::OUString sInitialCurrentFilter;
diff --git a/linguistic/source/lngsvcmgr.cxx b/linguistic/source/lngsvcmgr.cxx
index 41d805fe9212..368f61b4eab1 100644
--- a/linguistic/source/lngsvcmgr.cxx
+++ b/linguistic/source/lngsvcmgr.cxx
@@ -640,15 +640,14 @@ void LngSvcMgr::Notify( const uno::Sequence< OUString > &rPropertyNames )
for (sal_Int32 i = 0; i < nLen; ++i)
{
// property names look like
- // "ServiceManager/ThesaurusList/cfg:any['de-CH']"
+ // "ServiceManager/ThesaurusList/de-CH"
const OUString &rName = pPropertyNames[i];
- sal_Int32 nKeyStart, nKeyEnd;
- nKeyStart = rName.indexOf( A2OU("['"), 0 );
- nKeyEnd = rName.indexOf( A2OU("']"), nKeyStart + 2);
+ sal_Int32 nKeyStart;
+ nKeyStart = rName.lastIndexOf( '/' );
OUString aKeyText;
- if (nKeyStart != -1 && nKeyEnd != -1)
- aKeyText = rName.copy( nKeyStart + 2, nKeyEnd - nKeyStart - 2);
+ if (nKeyStart != -1)
+ aKeyText = rName.copy( nKeyStart + 1 );
DBG_ASSERT( aKeyText.getLength() != 0, "unexpected key (lang::Locale) string" );
if (0 == rName.compareTo( aSpellCheckerList, aSpellCheckerList.getLength() ))
{
diff --git a/officecfg/prj/d.lst b/officecfg/prj/d.lst
index 66ba41abd60e..debb9659a9e7 100644
--- a/officecfg/prj/d.lst
+++ b/officecfg/prj/d.lst
@@ -27,10 +27,8 @@ mkdir: %_DEST%\xml%_EXT%\registry\data\org\openoffice\Office\OOoImprovement
mkdir: %_DEST%\xml%_EXT%\registry\data\org\openoffice\ucb
mkdir: %_DEST%\xml%_EXT%\registry\data\org\openoffice\TypeDetection
-..\registry\schema\oo-ldap-attr.map %_DEST%\xml%_EXT%\registry\schema\oo-ldap-attr.map
-..\registry\schema\oo-ad-ldap-attr.map %_DEST%\xml%_EXT%\registry\schema\oo-ad-ldap-attr.map
-
-..\%__SRC%\misc\registry\data\org\openoffice\*.xcu.sample %_DEST%\xml%_EXT%\registry\data\org\openoffice\*.xcu.sample
+..\registry\schema\oo-ldap.xcd.sample %_DEST%\xml%_EXT%\oo-ldap.xcd.sample
+..\registry\schema\oo-ad-ldap.xcd.sample %_DEST%\xml%_EXT%\oo-ad-ldap.xcd.sample
..\%__SRC%\misc\registry\data\org\openoffice\*.xcu %_DEST%\xml%_EXT%\registry\data\org\openoffice
..\%__SRC%\misc\registry\data\org\openoffice\Office\*.xcu %_DEST%\xml%_EXT%\registry\data\org\openoffice\Office
diff --git a/officecfg/registry/component-schema.dtd b/officecfg/registry/component-schema.dtd
index 7fb3f4a1e5cc..950e4f5088d3 100644
--- a/officecfg/registry/component-schema.dtd
+++ b/officecfg/registry/component-schema.dtd
@@ -1,127 +1,154 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+**********************************************************************-->
+
<!ELEMENT oor:component-schema (info?, import*, uses*, templates?, component)>
<!ATTLIST oor:component-schema
- oor:name NMTOKEN #REQUIRED
- oor:package NMTOKEN #REQUIRED
+ oor:package CDATA #REQUIRED
+ oor:name CDATA #REQUIRED
oor:version NMTOKEN #IMPLIED
xml:lang CDATA #IMPLIED
xmlns:oor CDATA #FIXED "http://openoffice.org/2001/registry"
- xmlns:xs CDATA #FIXED "http://www.w3.org/2001/XMLSchema"
- xmlns:xsi CDATA #FIXED "http://www.w3.org/2001/XMLSchema-instance"
->
+ xmlns:xs CDATA #FIXED "http://www.w3.org/2001/XMLSchema">
<!ELEMENT import EMPTY>
<!ATTLIST import
- oor:component CDATA #REQUIRED
->
+ oor:component CDATA #REQUIRED>
<!ELEMENT uses EMPTY>
<!ATTLIST uses
- oor:component CDATA #REQUIRED
->
+ oor:component CDATA #REQUIRED>
-<!ELEMENT templates (info?, (group | set)*)>
-<!ELEMENT component (info?, (node-ref | group | set)*)>
+<!ELEMENT templates (info?, (set | group)*)>
+<!ATTLIST templates>
<!ELEMENT info (deprecated?, author*, desc*, label*)>
+<!ATTLIST info>
<!ELEMENT deprecated (#PCDATA)>
+<!ATTLIST deprecated>
<!ELEMENT author (#PCDATA)>
+<!ATTLIST author>
<!ELEMENT desc (#PCDATA)>
<!ATTLIST desc
- xml:lang CDATA #IMPLIED
->
+ xml:lang CDATA #IMPLIED>
<!ELEMENT label (#PCDATA)>
<!ATTLIST label
- xml:lang CDATA #IMPLIED
->
+ xml:lang CDATA #IMPLIED>
-<!ELEMENT group (info?, (prop | node-ref | group | set)*)>
-<!ATTLIST group
- oor:name CDATA #REQUIRED
- oor:extensible (true | false) #IMPLIED
->
+<!ELEMENT component (info?, (set | group | prop | node-ref)*)>
+<!ATTLIST component>
<!ELEMENT set (info?, item*)>
<!ATTLIST set
oor:name CDATA #REQUIRED
- oor:node-type NMTOKEN #REQUIRED
- oor:component CDATA #IMPLIED
->
+ oor:node-type CDATA #REQUIRED
+ oor:component CDATA #IMPLIED>
-<!ELEMENT node-ref (info?)>
-<!ATTLIST node-ref
+<!ELEMENT item EMPTY>
+<!ATTLIST item
+ oor:node-type CDATA #REQUIRED
+ oor:component CDATA #IMPLIED>
+
+<!ELEMENT group (info?, (set | group | prop | node-ref)*)>
+<!ATTLIST group
oor:name CDATA #REQUIRED
- oor:node-type NMTOKEN #REQUIRED
- oor:component CDATA #IMPLIED
->
+ oor:extensible (false | true) #IMPLIED>
<!ELEMENT prop (info?, constraints?, value?)>
<!ATTLIST prop
oor:name CDATA #REQUIRED
- oor:type (xs:boolean | xs:short | xs:int | xs:long | xs:double | xs:string | xs:hexBinary | oor:any | oor:boolean-list | oor:short-list | oor:int-list | oor:long-list | oor:double-list | oor:string-list | oor:hexBinary-list) #REQUIRED
- oor:localized (true | false) #IMPLIED
- oor:nillable (true | false) #IMPLIED
->
-
-<!ELEMENT item EMPTY>
-<!ATTLIST item
- oor:node-type NMTOKEN #REQUIRED
- oor:component CDATA #IMPLIED
->
-
-<!ELEMENT value (#PCDATA)>
-<!ATTLIST value
- oor:separator CDATA #IMPLIED
->
-
-<!ELEMENT constraints (enumeration*, length?, minLength?, maxLength?, minInclusive?, maxInclusive?, minExclusive?, maxExclusive?, whiteSpace?)>
+ oor:localized (false | true) #IMPLIED
+ oor:type
+ (oor:any | xs:boolean | xs:short | xs:int | xs:long | xs:double |
+ xs:string | xs:hexBinary | oor:boolean-list | oor:short-list |
+ oor:int-list | oor:long-list | oor:double-list | oor:string-list |
+ oor:hexBinary-list)
+ #REQUIRED
+ oor:nillable (false | true) #IMPLIED>
+
+<!ELEMENT constraints
+ (enumeration*, length?, minLength?, maxLength?, minInclusive?,
+ maxInclusive?, minExclusive?, maxExclusive?, whiteSpace?)>
<!ELEMENT enumeration (info?)>
<!ATTLIST enumeration
- oor:value CDATA #REQUIRED
->
+ oor:value CDATA #REQUIRED>
<!ELEMENT length (info?)>
<!ATTLIST length
- oor:value CDATA #REQUIRED
->
+ oor:value CDATA #REQUIRED>
<!ELEMENT minLength (info?)>
<!ATTLIST minLength
- oor:value CDATA #REQUIRED
->
+ oor:value CDATA #REQUIRED>
<!ELEMENT maxLength (info?)>
<!ATTLIST maxLength
- oor:value CDATA #REQUIRED
->
+ oor:value CDATA #REQUIRED>
<!ELEMENT minInclusive (info?)>
<!ATTLIST minInclusive
- oor:value CDATA #REQUIRED
->
+ oor:value CDATA #REQUIRED>
<!ELEMENT maxInclusive (info?)>
<!ATTLIST maxInclusive
- oor:value CDATA #REQUIRED
->
+ oor:value CDATA #REQUIRED>
<!ELEMENT minExclusive (info?)>
<!ATTLIST minExclusive
- oor:value CDATA #REQUIRED
->
+ oor:value CDATA #REQUIRED>
<!ELEMENT maxExclusive (info?)>
<!ATTLIST maxExclusive
- oor:value CDATA #REQUIRED
->
+ oor:value CDATA #REQUIRED>
<!ELEMENT whiteSpace (info?)>
<!ATTLIST whiteSpace
- oor:value CDATA #REQUIRED
->
+ oor:value CDATA #REQUIRED>
+
+<!ELEMENT value (#PCDATA | it | unicode)*>
+<!ATTLIST value
+ oor:separator CDATA #IMPLIED>
+<!ELEMENT it (#PCDATA | unicode)*>
+<!ATTLIST it>
+
+<!ELEMENT unicode EMPTY>
+<!ATTLIST unicode
+ oor:scalar NMTOKEN #REQUIRED>
+
+<!ELEMENT node-ref (info?)>
+<!ATTLIST node-ref
+ oor:name CDATA #REQUIRED
+ oor:node-type CDATA #REQUIRED
+ oor:component CDATA #IMPLIED>
diff --git a/officecfg/registry/component-schema.xsd b/officecfg/registry/component-schema.xsd
deleted file mode 100644
index cc3c18a16c3d..000000000000
--- a/officecfg/registry/component-schema.xsd
+++ /dev/null
@@ -1,224 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XML Spy v4.3 U (http://www.xmlspy.com) by Dirk Grobler (OpenOffice) -->
-<xs:schema targetNamespace="http://openoffice.org/2001/registry" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="qualified">
- <xs:annotation>
- <xs:documentation>specifies the document format for OOo configuration component schemata.</xs:documentation>
- </xs:annotation>
- <xs:attribute name="extensible" type="xs:boolean" use="optional" default="false">
- <xs:annotation>
- <xs:documentation>determines, whether a node has an extensible list of attributes or fixed list of attributes.</xs:documentation>
- </xs:annotation>
-</xs:attribute>
-<xs:attribute name="localized" type="xs:boolean" use="optional" default="false">
- <xs:annotation>
- <xs:documentation>specifies, whether an attribute has or might have different values for different locales. </xs:documentation>
- </xs:annotation>
-</xs:attribute>
- <xs:attribute name="nillable" type="xs:boolean" use="optional" default="true">
- <xs:annotation>
- <xs:documentation>specifies, whether it is permissible to have a 'nil' i.e., missing, node content. The default for 'nillable' is 'true'.
-If a non-optional (nillable = 'false') has no default value (given in the component schema) it must be
-explicitly specified for each user.</xs:documentation>
- </xs:annotation>
-</xs:attribute>
- <xs:complexType name="prop">
- <xs:annotation>
- <xs:documentation>redefines the property type
- by adding documentation and type constraint elements.</xs:documentation>
- </xs:annotation>
- <xs:complexContent>
- <xs:extension base="oor:basic-prop">
- <xs:sequence>
- <xs:element name="info" type="oor:info" minOccurs="0"/>
- <xs:element name="constraints" minOccurs="0">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="enumeration" type="oor:constraint" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="length" type="oor:constraint" minOccurs="0"/>
- <xs:element name="minLength" type="oor:constraint" minOccurs="0"/>
- <xs:element name="maxLength" type="oor:constraint" minOccurs="0"/>
- <xs:element name="minInclusive" type="oor:constraint" minOccurs="0"/>
- <xs:element name="maxInclusive" type="oor:constraint" minOccurs="0"/>
- <xs:element name="minExclusive" type="oor:constraint" minOccurs="0"/>
- <xs:element name="maxExclusive" type="oor:constraint" minOccurs="0"/>
- <xs:element name="whiteSpace" type="oor:constraint" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- <xs:element name="value" type="oor:value" minOccurs="0"/>
- </xs:sequence>
- <xs:attribute ref="oor:localized"/>
- <xs:attribute ref="oor:nillable"/>
- <xs:attribute ref="oor:type" use="required"/>
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- <xs:complexType name="group">
- <xs:annotation>
- <xs:documentation>type definition for group nodes</xs:documentation>
- </xs:annotation>
- <xs:complexContent>
- <xs:extension base="oor:basic-node">
- <xs:sequence>
- <xs:element name="info" type="oor:info" minOccurs="0"/>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="prop" type="oor:prop" />
- <xs:element name="group" type="oor:group"/>
- <xs:element name="set" type="oor:set"/>
- <xs:element name="node-ref" type="oor:node-ref"/>
- </xs:choice>
- </xs:sequence>
- <xs:attribute ref="oor:extensible"/>
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- <xs:complexType name="set">
- <xs:annotation>
- <xs:documentation>type definition for set nodes</xs:documentation>
- </xs:annotation>
- <xs:complexContent>
- <xs:extension base="oor:basic-node">
- <xs:sequence>
- <xs:element name="info" type="oor:info" minOccurs="0"/>
- <xs:element name="item" minOccurs="0" maxOccurs="unbounded">
- <xs:complexType>
- <xs:attributeGroup ref="oor:node-type-info" />
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- <xs:attribute ref="oor:extensible"/>
- <xs:attributeGroup ref="oor:node-type-info" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- <xs:complexType name="node-ref">
- <xs:annotation>
- <xs:documentation>allows to define node references. A node references points to an existing templated definition. This definition will be expanded at runtime.</xs:documentation>
- </xs:annotation>
- <xs:sequence>
- <xs:element name="info" type="oor:info" minOccurs="0"/>
- </xs:sequence>
- <xs:attribute ref="oor:name" use="required"/>
- <xs:attributeGroup ref="oor:node-type-info" />
- </xs:complexType>
- <xs:complexType name="constraint">
- <xs:annotation>
- <xs:documentation>basic type for constraints, which can be applied for property elements.</xs:documentation>
- </xs:annotation>
- <xs:sequence>
- <xs:element name="info" type="oor:info" minOccurs="0"/>
- </xs:sequence>
- <xs:attribute name="value" type="xs:anySimpleType" use="required"/>
- </xs:complexType>
- <xs:complexType name="info">
- <xs:annotation>
- <xs:documentation>type for providing human readable information. Can be attached to any kind of component schema element.</xs:documentation>
- </xs:annotation>
- <xs:sequence>
- <xs:element name="deprecated" type="xs:string" minOccurs="0">
- <xs:annotation>
- <xs:documentation>identifies an entry as deprecated. Can be assiciated with an explanation e.g. since when the entry is deprecated.</xs:documentation>
- </xs:annotation>
- </xs:element>
- <xs:element name="author" type="xs:string" minOccurs="0" maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>author(s) of the configuration entry.</xs:documentation>
- </xs:annotation>
- </xs:element>
- <xs:element name="desc" minOccurs="0" maxOccurs="unbounded">
- <xs:complexType>
- <xs:annotation>
- <xs:documentation>provide a human
- readable documentation for a schema element.</xs:documentation>
- </xs:annotation>
- <xs:simpleContent>
- <xs:extension base="xs:string">
- <xs:attribute ref="xml:lang"/>
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
- </xs:element>
- <xs:element name="label" minOccurs="0" maxOccurs="unbounded">
- <xs:complexType>
- <xs:annotation>
- <xs:documentation>describes a title or label,
- which can be reused in a console.</xs:documentation>
- </xs:annotation>
- <xs:simpleContent>
- <xs:extension base="xs:string">
- <xs:attribute ref="xml:lang"/>
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- <xs:element name="component-schema">
- <xs:annotation>
- <xs:documentation>Root element, which encompasses the schema specification</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:sequence>
- <xs:element name="info" type="oor:info" minOccurs="0"/>
- <xs:element name="import" minOccurs="0" maxOccurs="unbounded">
- <xs:complexType>
- <xs:attribute ref="oor:component" use="required"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="uses" minOccurs="0" maxOccurs="unbounded">
- <xs:complexType>
- <xs:attribute ref="oor:component" use="required"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="templates" minOccurs="0">
- <xs:complexType>
- <xs:sequence>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="group" type="oor:group">
- <xs:unique name="groupMember">
- <xs:selector xpath="group|set|node-ref|prop"/>
- <xs:field xpath="@oor:name"/>
- </xs:unique>
- </xs:element>
- <xs:element name="set" type="oor:set"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:unique name="templatesMember">
- <xs:selector xpath="oor:group|oor:set"/>
- <xs:field xpath="@oor:name"/>
- </xs:unique>
- </xs:element>
- <xs:element name="component">
- <xs:complexType>
- <xs:sequence>
- <xs:choice minOccurs="1" maxOccurs="unbounded">
- <xs:element name="prop" type="oor:prop"/>
- <xs:element name="node-ref" type="oor:node-ref"/>
- <xs:element name="group" type="oor:group">
- <xs:unique name="groupMember1">
- <xs:selector xpath="oor:group|oor:set|oor:node-ref|oor:prop"/>
- <xs:field xpath="@oor:name"/>
- </xs:unique>
- </xs:element>
- <xs:element name="set" type="oor:set"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:unique name="schemaMember">
- <xs:selector xpath="oor:group|oor:set|oor:node-ref|oor:prop"/>
- <xs:field xpath="@oor:name"/>
- </xs:unique>
- </xs:element>
- </xs:sequence>
- <xs:attribute name="name" type="xs:NMTOKEN" use="required"/>
- <xs:attribute ref="oor:package"/>
- <xs:attribute name="version" type="xs:string" use="optional">
- <xs:annotation>
- <xs:documentation>identifies the version of the component. The version number is build of major.minor.micro</xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute ref="xml:lang" use="optional"/>
- </xs:complexType>
- </xs:element>
-</xs:schema>
diff --git a/officecfg/registry/component-types.xsd b/officecfg/registry/component-types.xsd
deleted file mode 100644
index 9b2f2371ce2f..000000000000
--- a/officecfg/registry/component-types.xsd
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema targetNamespace="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:oor="http://openoffice.org/2001/registry" elementFormDefault="unqualified" attributeFormDefault="qualified">
- <xs:annotation>
- <xs:documentation>provides a list of standard attribute and element definitions, reused in most parts of the different OOR document types</xs:documentation>
- </xs:annotation>
- <xs:import namespace="http://www.w3.org/XML/1998/namespace"
- schemaLocation="http://www.w3.org/2001/xml.xsd"/>
- <!--List of attributes known in OOR-->
- <xs:attribute name="name" type="xs:string" use="required">
- <xs:annotation>
- <xs:documentation>identifies a node or an attribute within a tree, must be unique for all siblings.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="package" type="xs:NMTOKEN" use="required">
- <xs:annotation>
- <xs:documentation>contains the name of the package.
- Package names are composed similar to java packages.
- Packages are used to structure component configuration data.
- An example of a package is 'org.openoffice',
- where 'org' and 'openoffice' each define a package.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="node-type" type="xs:NMTOKEN">
- <xs:annotation>
- <xs:documentation>identifies the template to use for the set or a node reference. </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="component" type="xs:string" use="optional">
- <xs:annotation>
- <xs:documentation>specifies the component, which contains a template definition</xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="separator" type="xs:string" default=" ">
- <xs:annotation>
- <xs:documentation>specifies a separator for list types. The default
- is a blank, which is sufficient for most basic types like xs:int or
- xs:boolean. Only in certain cases, when using a sting or a binary
- list, the separator might differ. For example, a list of string values like build of the items 'europe' and 'south america' needs a different separator, as the usage of the default separator would result in a list of three items.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="type" use="optional">
- <xs:annotation>
- <xs:documentation>specifies the list of known basic types and their list equivalents. Is only allowed for properties.</xs:documentation>
- </xs:annotation>
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:enumeration value="xs:boolean"/>
- <xs:enumeration value="xs:short"/>
- <xs:enumeration value="xs:int"/>
- <xs:enumeration value="xs:long"/>
- <xs:enumeration value="xs:double"/>
- <xs:enumeration value="xs:string"/>
- <xs:enumeration value="xs:hexBinary"/>
- <xs:enumeration value="oor:any"/>
- <xs:enumeration value="oor:boolean-list"/>
- <xs:enumeration value="oor:short-list"/>
- <xs:enumeration value="oor:int-list"/>
- <xs:enumeration value="oor:long-list"/>
- <xs:enumeration value="oor:double-list"/>
- <xs:enumeration value="oor:string-list"/>
- <xs:enumeration value="oor:hexBinary-list"/>
- </xs:restriction>
- </xs:simpleType>
- </xs:attribute>
- <xs:attributeGroup name="node-info">
- <xs:annotation>
- <xs:documentation>encompasses common attributes for nodes.</xs:documentation>
- </xs:annotation>
- <xs:attribute ref="oor:name" use="required"/>
- </xs:attributeGroup>
- <xs:attributeGroup name="node-type-info">
- <xs:annotation>
- <xs:documentation>encompasses attributes for referencing a node-type.</xs:documentation>
- </xs:annotation>
- <xs:attribute ref="oor:node-type" use="required"/>
- <xs:attribute ref="oor:component" use="optional"/>
- </xs:attributeGroup>
- <xs:attributeGroup name="prop-info">
- <xs:annotation>
- <xs:documentation>encompasses common attributes for properties.</xs:documentation>
- </xs:annotation>
- <xs:attribute ref="oor:name" use="required"/>
- </xs:attributeGroup>
- <!--List of list data types supported by OOR-->
- <xs:simpleType name="boolean-list">
- <xs:list itemType="xs:boolean"/>
- </xs:simpleType>
- <xs:simpleType name="short-list">
- <xs:list itemType="xs:short"/>
- </xs:simpleType>
- <xs:simpleType name="int-list">
- <xs:list itemType="xs:int"/>
- </xs:simpleType>
- <xs:simpleType name="long-list">
- <xs:list itemType="xs:long"/>
- </xs:simpleType>
- <xs:simpleType name="double-list">
- <xs:list itemType="xs:double"/>
- </xs:simpleType>
- <xs:simpleType name="string-list">
- <xs:restriction base="xs:string"/>
- </xs:simpleType>
- <xs:simpleType name="hexBinary-list">
- <xs:restriction base="xs:string"/>
- </xs:simpleType>
- <!--List of basic type definitions for all schema and instance elements known by OOR-->
- <xs:complexType name="basic-node">
- <xs:annotation>
- <xs:documentation>base class for all kinds of nodes (set | group)</xs:documentation>
- </xs:annotation>
- <xs:attributeGroup ref="oor:node-info"/>
- </xs:complexType>
- <xs:complexType name="basic-prop">
- <xs:annotation>
- <xs:documentation>type definition for node properties</xs:documentation>
- </xs:annotation>
- <xs:attributeGroup ref="oor:prop-info"/>
- </xs:complexType>
- <xs:complexType name="value">
- <xs:annotation>
- <xs:documentation>type definition for value nodes.</xs:documentation>
- </xs:annotation>
- <xs:simpleContent>
- <xs:extension base="oor:anyValue">
- <xs:attribute ref="oor:separator" use="optional"/>
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
- <xs:simpleType name="anyValue">
- <xs:annotation>
- <xs:documentation>defines the list of possible basic data-types for properties.</xs:documentation>
- </xs:annotation>
- <xs:union memberTypes="xs:boolean xs:short xs:int xs:long xs:double xs:string xs:hexBinary oor:boolean-list oor:short-list oor:int-list oor:long-list oor:double-list oor:string-list oor:hexBinary-list"/>
- </xs:simpleType>
-</xs:schema>
diff --git a/officecfg/registry/component-update.dtd b/officecfg/registry/component-update.dtd
index 10c4632a91de..6b44c2066dee 100644
--- a/officecfg/registry/component-update.dtd
+++ b/officecfg/registry/component-update.dtd
@@ -1,41 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+**********************************************************************-->
-<!ELEMENT oor:component-data ((prop|node)*)>
+<!ELEMENT oor:component-data ((node | prop)*)>
<!ATTLIST oor:component-data
- oor:name NMTOKEN #REQUIRED
- oor:package NMTOKEN #REQUIRED
- oor:finalized (true | false) #IMPLIED
- oor:op (modify | replace | fuse | remove | reset) #IMPLIED
- xmlns:oor CDATA #FIXED "http://openoffice.org/2001/registry"
- xmlns:install CDATA #FIXED "http://openoffice.org/2004/installation"
- xmlns:xs CDATA #FIXED "http://www.w3.org/2001/XMLSchema"
- xmlns:xsi CDATA #FIXED "http://www.w3.org/2001/XMLSchema-instance"
->
-
-<!ELEMENT node ((prop|node)*)>
+ oor:package CDATA #REQUIRED
+ oor:name CDATA #REQUIRED
+ oor:op (modify | replace | fuse | remove) #IMPLIED
+ oor:finalized (false | true) #IMPLIED
+ xmlns:oor CDATA #FIXED "http://openoffice.org/2001/registry"
+ xmlns:xs CDATA #FIXED "http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi CDATA #FIXED "http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:install CDATA #FIXED "http://openoffice.org/2004/installation">
+
+<!ELEMENT node ((node | prop)*)>
<!ATTLIST node
- oor:name CDATA #REQUIRED
- oor:component CDATA #IMPLIED
- oor:finalized (true | false) #IMPLIED
- oor:mandatory (true | false) #IMPLIED
- oor:op (modify | replace | fuse | remove | reset) #IMPLIED
- oor:node-type NMTOKEN #IMPLIED
- install:module NMTOKEN #IMPLIED
->
+ oor:name CDATA #REQUIRED
+ oor:op (modify | replace | fuse | remove) #IMPLIED
+ oor:finalized (true | false) #IMPLIED
+ oor:mandatory (true | false) #IMPLIED
+ oor:node-type CDATA #IMPLIED
+ oor:component CDATA #IMPLIED
+ install:module CDATA #IMPLIED>
<!ELEMENT prop (value*)>
<!ATTLIST prop
- oor:name CDATA #REQUIRED
- oor:op (modify | replace | fuse | remove | reset) #IMPLIED
- oor:finalized CDATA #IMPLIED
- oor:type (xs:boolean | xs:short | xs:int | xs:long | xs:double | xs:string | xs:hexBinary | oor:boolean-list | oor:short-list | oor:int-list | oor:long-list | oor:double-list | oor:string-list | oor:hexBinary-list) #IMPLIED
- install:module NMTOKEN #IMPLIED
->
-
-<!ELEMENT value (#PCDATA)>
+ oor:name CDATA #REQUIRED
+ oor:op (modify | replace | fuse | remove) #IMPLIED
+ oor:finalized (true | false) #IMPLIED
+ oor:type
+ (xs:boolean | xs:short | xs:int | xs:long | xs:double | xs:string |
+ xs:hexBinary | oor:boolean-list | oor:short-list | oor:int-list |
+ oor:long-list | oor:double-list | oor:string-list | oor:hexBinary-list)
+ #IMPLIED
+ install:module CDATA #IMPLIED>
+
+<!ELEMENT value (#PCDATA | it | unicode)*>
+ <!-- EMPTY if oor:op="remove", xsi:nil="true", or oor:external is used
+ #PCDATA if the property type is a non-list type other than xs:string
+ (#PCDATA | unicode)* if the property type is xs:string
+ #PCDATA or it* if the property type is a list type other than
+ oor:string-list
+ (#PCDATA | unicode)* or it* if the property type is
+ oor:string-list -->
<!ATTLIST value
- xsi:nil (true | false) #IMPLIED
- oor:separator CDATA #IMPLIED
- xml:lang CDATA #IMPLIED
- install:module NMTOKEN #IMPLIED
->
+ xml:lang CDATA #IMPLIED
+ oor:op (fuse | remove) #IMPLIED
+ xsi:nil (true | false) #IMPLIED
+ oor:separator CDATA #IMPLIED
+ oor:external CDATA #IMPLIED
+ install:module CDATA #IMPLIED>
+ <!-- xml:lang must only be used for localized properties; defaults to the
+ empty string
+ oor:op defaults to "fuse"; "remove" must only be used for localized
+ properties
+ xsi:nil defaults to "false"; "true" must only be used for nillable
+ properties
+ oor:separator must only be used if the property type is a list type
+ and the element content is #PCDATA or (#PCDATA | unicode)* (and not
+ EMPTY or it*)
+ oor:external must only be used for non-localized properties and must
+ not be used together with xsi:nil="true" -->
+
+<!ELEMENT it (#PCDATA | unicode)*>
+ <!-- #PCDATA if the property type is a list type other than
+ oor:string-list
+ (#PCDATA | unicode)* if the property type is oor:string-list -->
+<!ATTLIST it>
+
+<!ELEMENT unicode EMPTY>
+<!ATTLIST unicode
+ oor:scalar NMTOKEN #REQUIRED>
+ <!-- must syntactically match xs:integer and have a value in {0, ..., 8,
+ 11, 12, 14, ..., 31, 65534, 65535} -->
+
+<!-- oor:items is an alternative root element to oor:component-data (in plain
+ .xcu files only; not when nested in an .xcd file), used for the user-layer
+ registrymodifications.xcu: -->
+
+<!ELEMENT oor:items (item*)>
+<!ATTLIST oor:items>
+
+<!ELEMENT item ((prop | node)*)>
+<!ATTLIST item
+ oor:path CDATA #REQUIRED>
+ <!-- the absolute path representation of a set or group node -->
diff --git a/officecfg/registry/component-update.xsd b/officecfg/registry/component-update.xsd
deleted file mode 100644
index 5e0d0994739d..000000000000
--- a/officecfg/registry/component-update.xsd
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema targetNamespace="http://openoffice.org/2001/registry" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="qualified">
- <xs:annotation>
- <xs:documentation>defines the document format for configuration update documents.
- Updates are increments to default documents like a component schema and contain
- additional information for merging and access control</xs:documentation>
- </xs:annotation>
- <xs:redefine schemaLocation="component-types.xsd">
- <xs:complexType name="value">
- <xs:annotation>
- <xs:documentation>adds the xml:lang attribute for localized information. Only the update format is allowed to contain localized data.</xs:documentation>
- </xs:annotation>
- <xs:simpleContent>
- <xs:extension base="oor:value">
- <xs:attribute ref="xml:lang"/>
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
- </xs:redefine>
- <xs:complexType name="node">
- <xs:annotation>
- <xs:documentation>Identifies a node in the schema by it's name and position within the hierarchy. Overrides or adds information from the base layer. A node can be of type set or group.</xs:documentation>
- </xs:annotation>
- <xs:complexContent>
- <xs:extension base="oor:basic-node">
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="node" type="oor:node"/>
- <xs:element name="prop" type="oor:prop">
- <xs:unique name="uniqueLang">
- <xs:selector xpath="oor:value"/>
- <xs:field xpath="@xml:lang"/>
- </xs:unique>
- </xs:element>
- </xs:choice>
- <xs:attributeGroup ref="oor:update-info"/>
- <xs:attribute ref="oor:mandatory"/>
- <xs:attributeGroup ref="oor:node-type-info" use="optional"/>
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- <xs:complexType name="prop">
- <xs:annotation>
- <xs:documentation>adds operational info to a property, should only be applied for dynamic properties. Dynamic properties are not available in the component schema and are added or removed during runtime.</xs:documentation>
- </xs:annotation>
- <xs:complexContent>
- <xs:extension base="oor:basic-prop">
- <xs:sequence minOccurs="0" maxOccurs="unbounded">
- <xs:element name="value" type="oor:value" nillable="true"/>
- </xs:sequence>
- <xs:attributeGroup ref="oor:update-info"/>
- <xs:attribute ref="oor:type" use="optional"/>
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- <xs:attributeGroup name="update-info">
- <xs:attribute ref="oor:finalized"/>
- <xs:attribute ref="oor:readonly"/>
- <xs:attribute ref="oor:op"/>
- </xs:attributeGroup>
- <xs:attribute name="op" use="optional" default="modify">
- <xs:annotation>
- <xs:documentation>defines a list of possible operations, which are applied during merging of node fragments.</xs:documentation>
- </xs:annotation>
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:enumeration value="modify"/>
- <xs:enumeration value="replace"/>
- <xs:enumeration value="fuse"/>
- <xs:enumeration value="remove"/>
- <xs:enumeration value="reset"/>
- </xs:restriction>
- </xs:simpleType>
- </xs:attribute>
- <xs:attribute name="finalized" type="xs:boolean" use="optional" default="false">
- <xs:annotation>
- <xs:documentation>indicates that the content of a node and its descendant nodes are not allowed to be overwritten.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="mandatory" type="xs:boolean" default="false">
- <xs:annotation>
- <xs:documentation>specifies that a node MUST be present and can not be removed or replaced by a node during the merging process. </xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="readonly" type="xs:boolean" use="optional" default="false">
- <xs:annotation>
- <xs:documentation>determines, whether a node and its descendants are readonly or not. This is a computed attribute and can not be set by an application.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:element name="component-data">
- <xs:annotation>
- <xs:documentation>root element of the update document.</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:extension base="oor:basic-node">
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="node" type="oor:node"/>
- <xs:element name="prop" type="oor:prop">
- <xs:unique name="uniqueLang">
- <xs:selector xpath="oor:value"/>
- <xs:field xpath="@xml:lang"/>
- </xs:unique>
- </xs:element>
- </xs:choice>
- <xs:attributeGroup ref="oor:update-info"/>
- <xs:attribute ref="oor:package"/>
- </xs:extension>
- </xs:complexType>
- <xs:unique name="member">
- <xs:selector xpath="oor:node|oor:prop"/>
- <xs:field xpath="@oor:name"/>
- </xs:unique>
- </xs:element>
-</xs:schema>
diff --git a/officecfg/registry/data/org/openoffice/Inet.xcu b/officecfg/registry/data/org/openoffice/Inet.xcu
index bb3fa8e1a618..07afec58085c 100644
--- a/officecfg/registry/data/org/openoffice/Inet.xcu
+++ b/officecfg/registry/data/org/openoffice/Inet.xcu
@@ -29,10 +29,72 @@
*
************************************************************************ -->
<!DOCTYPE oor:component-data SYSTEM "../../../component-update.dtd">
-<oor:component-data oor:name="Inet" oor:package="org.openoffice" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<oor:component-data oor:name="Inet" oor:package="org.openoffice" xmlns:oor="http://openoffice.org/2001/registry" xmlns:install="http://openoffice.org/2004/installation" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<node oor:name="Settings">
+ <prop oor:name="ooInetNoProxy">
+ <value install:module="macosx" oor:external=
+ "com.sun.star.configuration.backend.MacOSXBackend ooInetNoProxy"/>
+ <value install:module="unixdesktop" oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend ooInetNoProxy"/>
+ <value install:module="wnt" oor:external=
+ "com.sun.star.configuration.backend.WinInetBackend ooInetNoProxy"/>
+ </prop>
<prop oor:name="ooInetProxyType">
<value>1</value>
+ <value install:module="macosx" oor:external=
+ "com.sun.star.configuration.backend.MacOSXBackend ooInetProxyType"/>
+ <value install:module="unixdesktop" oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend ooInetProxyType"/>
+ <value install:module="wnt" oor:external=
+ "com.sun.star.configuration.backend.WinInetBackend ooInetProxyType"/>
+ </prop>
+ <prop oor:name="ooInetFTPProxyName">
+ <value install:module="macosx" oor:external=
+ "com.sun.star.configuration.backend.MacOSXBackend ooInetFTPProxyName"/>
+ <value install:module="unixdesktop" oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend ooInetFTPProxyName"/>
+ <value install:module="wnt" oor:external=
+ "com.sun.star.configuration.backend.WinInetBackend ooInetFTPProxyName"/>
+ </prop>
+ <prop oor:name="ooInetFTPProxyPort">
+ <value install:module="macosx" oor:external=
+ "com.sun.star.configuration.backend.MacOSXBackend ooInetFTPProxyPort"/>
+ <value install:module="unixdesktop" oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend ooInetFTPProxyPort"/>
+ <value install:module="wnt" oor:external=
+ "com.sun.star.configuration.backend.WinInetBackend ooInetFTPProxyPort"/>
+ </prop>
+ <prop oor:name="ooInetHTTPProxyName">
+ <value install:module="macosx" oor:external=
+ "com.sun.star.configuration.backend.MacOSXBackend ooInetHTTPProxyName"/>
+ <value install:module="unixdesktop" oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend ooInetHTTPProxyName"/>
+ <value install:module="wnt" oor:external=
+ "com.sun.star.configuration.backend.WinInetBackend ooInetHTTPProxyName"/>
+ </prop>
+ <prop oor:name="ooInetHTTPProxyPort">
+ <value install:module="macosx" oor:external=
+ "com.sun.star.configuration.backend.MacOSXBackend ooInetHTTPProxyPort"/>
+ <value install:module="unixdesktop" oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend ooInetHTTPProxyPort"/>
+ <value install:module="wnt" oor:external=
+ "com.sun.star.configuration.backend.WinInetBackend ooInetHTTPProxyPort"/>
+ </prop>
+ <prop oor:name="ooInetHTTPSProxyName">
+ <value install:module="macosx" oor:external=
+ "com.sun.star.configuration.backend.MacOSXBackend ooInetHTTPSProxyName"/>
+ <value install:module="unixdesktop" oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend ooInetHTTPSProxyName"/>
+ <value install:module="wnt" oor:external=
+ "com.sun.star.configuration.backend.WinInetBackend ooInetHTTPSProxyName"/>
+ </prop>
+ <prop oor:name="ooInetHTTPSProxyPort">
+ <value install:module="macosx" oor:external=
+ "com.sun.star.configuration.backend.MacOSXBackend ooInetHTTPSProxyPort"/>
+ <value install:module="unixdesktop" oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend ooInetHTTPSProxyPort"/>
+ <value install:module="wnt" oor:external=
+ "com.sun.star.configuration.backend.WinInetBackend ooInetHTTPSProxyPort"/>
</prop>
</node>
<node oor:name="DefaultSearchEngine" install:module="defaultsearchengine">
diff --git a/officecfg/registry/data/org/openoffice/LDAP.xcu.sample b/officecfg/registry/data/org/openoffice/LDAP.xcu.sample
deleted file mode 100644
index b59cd7d5fe81..000000000000
--- a/officecfg/registry/data/org/openoffice/LDAP.xcu.sample
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--***********************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: LDAP.xcu.sample,v $
- * $Revision: 1.4 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************ -->
-<!-- This file is an example of an LDAP.xcu ldap configuration file.
-
- To use user data from LDAP in your installation, you need to provide a
- customized version of this file named 'LDAP.xcu'.
-
- To customize values in this file, please replace the data within
- <value>...</value> elements with the values for your organization.
-
- If a certain setting is not necessary for your installation, you may remove the
- entire 'prop' element, i.e. everything from '<prop oor:name="[SettingName]"' to
- the closing '</prop>'.
--->
-<oor:component-data oor:name="LDAP" oor:package="org.openoffice"
- xmlns:oor="http://openoffice.org/2001/registry"
- xmlns:xs="http://www.w3.org/2001/XMLSchema"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <node oor:name="UserDirectory">
- <node oor:name="ServerDefinition">
- <prop oor:name="Server" oor:type="xs:string">
- <value>ldapserver.mycorp.com</value>
- </prop>
- <prop oor:name="BaseDN" oor:type="xs:string">
- <value>dc=mycorp,dc=com</value>
- </prop>
- <prop oor:name="Port" oor:type="xs:int">
- <value>389</value>
- </prop>
- </node>
- <!-- The following settings should be omitted, if anonymous access is possible
- <prop oor:name="SearchUser" oor:type="xs:string"><value>MyUserLogin</value></prop>
- <prop oor:name="SearchPassword" oor:type="xs:string"><value>MyPassword</value></prop>
- -->
- <prop oor:name="UserObjectClass" oor:type="xs:string">
- <value>inetorgperson</value>
- </prop>
- <prop oor:name="UserUniqueAttribute" oor:type="xs:string">
- <value>uid</value>
- </prop>
- <prop oor:name="Mapping" oor:type="xs:string">
- <value>oo-ldap</value>
- </prop>
- </node>
-</oor:component-data>
diff --git a/officecfg/registry/data/org/openoffice/Office/Common.xcu b/officecfg/registry/data/org/openoffice/Office/Common.xcu
index c9747dc9dea0..fcbb1601d05e 100644
--- a/officecfg/registry/data/org/openoffice/Office/Common.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Common.xcu
@@ -103,6 +103,27 @@
<value xml:lang="zh-TW">13</value>
</prop>
</node>
+ <node oor:name="FontAntiAliasing" install:module="gconflockdown">
+ <prop oor:name="Enabled">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend FontAntiAliasingEnabled"/>
+ </prop>
+ <prop oor:name="MinPixelHeight">
+ <value oor:external=
+"com.sun.star.configuration.backend.GconfBackend FontAntiAliasingMinPixelHeight"
+/>
+ </prop>
+ </node>
+ <node oor:name="Menu" install:module="gconflockdown">
+ <prop oor:name="DontHideDisabledEntry">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend DontHideDisabledEntry"/>
+ </prop>
+ <prop oor:name="ShowIconsInMenues">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend ShowIconsInMenues"/>
+ </prop>
+ </node>
</node>
<node oor:name="Help">
<node oor:name="StartCenter">
@@ -541,18 +562,32 @@
</node>
</node>
<node oor:name="Misc">
- <prop oor:name="UseSystemFileDialog" install:module="UseOOoFileDialogs">
- <value>false</value>
+ <prop oor:name="UseSystemFileDialog">
+ <value install:module="UseOOoFileDialogs">false</value>
+ <value install:module="gconflockdown" oor:external=
+ "com.sun.star.configuration.backend.GconfBackend UseSystemFileDialog"/>
</prop>
<prop oor:name="UseSystemPrintDialog" install:module="macosx">
<value>true</value>
</prop>
+ <prop oor:name="SymbolSet" install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend SymbolSet"/>
+ </prop>
</node>
<node oor:name="Save">
<node oor:name="Document">
<prop oor:name="SaveBackwardCompatibleODF" oor:type="xs:boolean">
<value>true</value>
</prop>
+ <prop oor:name="CreateBackup" install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend CreateBackup"/>
+ </prop>
+ <prop oor:name="WarnAlienFormat" install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend WarnAlienFormat"/>
+ </prop>
</node>
<node oor:name="ODF">
<prop oor:name="DefaultVersion" oor:type="xs:short">
@@ -565,6 +600,36 @@
<prop oor:name="HyperlinksWithCtrlClick" oor:type="xs:boolean">
<value>true</value>
</prop>
+ <prop oor:name="MacroSecurityLevel" install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend MacroSecurityLevel"/>
+ </prop>
+ <prop oor:name="RecommendPasswordProtection"
+ install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend RecommendPasswordProtection"/>
+ </prop>
+ <prop oor:name="RemovePersonalInfoOnSaving"
+ install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend RemovePersonalInfoOnSaving"/>
+ </prop>
+ <prop oor:name="WarnCreatePDF" install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend WarnCreatePDF"/>
+ </prop>
+ <prop oor:name="WarnPrintDoc" install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend WarnPrintDoc"/>
+ </prop>
+ <prop oor:name="WarnSaveOrSendDoc" install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend WarnSaveOrSendDoc"/>
+ </prop>
+ <prop oor:name="WarnSignDoc" install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend WarnSignDoc"/>
+ </prop>
</node>
</node>
<node oor:name="Path">
@@ -576,4 +641,60 @@
</prop>
</node>
</node>
+ <node oor:name="ExternalMailer" install:module="unixdesktop">
+ <prop oor:name="Program">
+ <value oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend ExternalMailer"/>
+ </prop>
+ </node>
+ <node oor:name="Font">
+ <node oor:name="SourceViewFont" install:module="unixdesktop">
+ <prop oor:name="FontName">
+ <value oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend SourceViewFontName"/>
+ </prop>
+ <prop oor:name="FontHeight">
+ <value oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend SourceViewFontHeight"/>
+ </prop>
+ </node>
+ <node oor:name="View" install:module="gconflockdown">
+ <prop oor:name="History">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend FontViewHistory"/>
+ </prop>
+ <prop oor:name="ShowFontBoxWYSIWYG">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend ShowFontBoxWYSIWYG"/>
+ </prop>
+ </node>
+ </node>
+ <node oor:name="Accessibility" install:module="gconflockdown">
+ <prop oor:name="IsSystemFont">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend AccessibilityIsSystemFont"/>
+ </prop>
+ </node>
+ <node oor:name="Print" install:module="gconflockdown">
+ <prop oor:name="PrintingModifiesDocument">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend PrintingModifiesDocument"/>
+ </prop>
+ </node>
+ <node oor:name="Undo" install:module="gconflockdown">
+ <prop oor:name="Steps">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend UndoSteps"/>
+ </prop>
+ </node>
+ <node oor:name="_3D_Engine" install:module="gconflockdown">
+ <prop oor:name="OpenGL">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend OpenGL"/>
+ </prop>
+ <prop oor:name="OpenGL_Faster">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend OpenGL_Faster"/>
+ </prop>
+ </node>
</oor:component-data>
diff --git a/officecfg/registry/data/org/openoffice/Office/Labels.xcu b/officecfg/registry/data/org/openoffice/Office/Labels.xcu
index e8d96dfff17f..1f4495756972 100644
--- a/officecfg/registry/data/org/openoffice/Office/Labels.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Labels.xcu
@@ -39,8 +39,8 @@
<node oor:name="L0" oor:op="replace" oor:finalized="true">
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2050 Video Spine</value>
+
+ <value>C2050 Video Spine</value>
</prop>
<prop oor:name="Measure">
@@ -50,8 +50,8 @@
<node oor:name="L1" oor:op="replace" oor:finalized="true">
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2050 Video Face</value>
+
+ <value>C2050 Video Face</value>
</prop>
<prop oor:name="Measure">
@@ -61,9 +61,8 @@
<node oor:name="L2" oor:op="replace" oor:finalized="true">
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2070 Transfer Film for Mouse Pad</value>
+ <value>C2070 Transfer Film for Mouse Pad</value>
</prop>
<prop oor:name="Measure">
@@ -73,8 +72,8 @@
<node oor:name="L3" oor:op="replace" oor:finalized="true">
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2080 Transfer Film for Puzzle</value>
+
+ <value>C2080 Transfer Film for Puzzle</value>
</prop>
<prop oor:name="Measure">
@@ -85,8 +84,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2090 T-Shirt Transfer Set</value>
+ <value>C2090 T-Shirt Transfer Set</value>
</prop>
<prop oor:name="Measure">
@@ -97,8 +95,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2160 Avery Inkjet Label</value>
+ <value>C2160 Avery Inkjet Label</value>
</prop>
<prop oor:name="Measure">
@@ -109,8 +106,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2163 Avery Inkjet Label</value>
+ <value>C2163 Avery Inkjet Label</value>
</prop>
<prop oor:name="Measure">
@@ -121,8 +117,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2165 Large Labels</value>
+ <value>C2165 Large Labels</value>
</prop>
<prop oor:name="Measure">
@@ -133,8 +128,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2166 Avery 3.5&quot; Disk Label (Face only)</value>
+ <value>C2166 Avery 3.5&quot; Disk Label (Face only)</value>
</prop>
<prop oor:name="Measure">
@@ -145,8 +139,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2241 Avery Rectangle Sticker</value>
+ <value>C2241 Avery Rectangle Sticker</value>
</prop>
<prop oor:name="Measure">
@@ -157,8 +150,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2243 Avery Small Round Sticker</value>
+ <value>C2243 Avery Small Round Sticker</value>
</prop>
<prop oor:name="Measure">
@@ -169,8 +161,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2244 Avery Big Round Sticker</value>
+ <value>C2244 Avery Big Round Sticker</value>
</prop>
<prop oor:name="Measure">
@@ -181,8 +172,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2246 Avery Full Page Sticker</value>
+ <value>C2246 Avery Full Page Sticker</value>
</prop>
<prop oor:name="Measure">
@@ -193,8 +183,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2265 Disk Labels</value>
+ <value>C2265 Disk Labels</value>
</prop>
<prop oor:name="Measure">
@@ -205,8 +194,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2341 Embossed Cards A5 (Cover)</value>
+ <value>C2341 Embossed Cards A5 (Cover)</value>
</prop>
<prop oor:name="Measure">
@@ -217,8 +205,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2341 Embossed Cards A5 (Inside)</value>
+ <value>C2341 Embossed Cards A5 (Inside)</value>
</prop>
<prop oor:name="Measure">
@@ -229,8 +216,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2342 Embossed cards A6 (Coverl)</value>
+ <value>C2342 Embossed cards A6 (Coverl)</value>
</prop>
<prop oor:name="Measure">
@@ -241,8 +227,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2342 Embossed Cards A6 (Inside)</value>
+ <value>C2342 Embossed Cards A6 (Inside)</value>
</prop>
<prop oor:name="Measure">
@@ -253,8 +238,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2351 Avery A5 Greeting Card</value>
+ <value>C2351 Avery A5 Greeting Card</value>
</prop>
<prop oor:name="Measure">
@@ -265,8 +249,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2352 Avery A6 Greeting Card</value>
+ <value>C2352 Avery A6 Greeting Card</value>
</prop>
<prop oor:name="Measure">
@@ -277,8 +260,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2353 Avery Postcard</value>
+ <value>C2353 Avery Postcard</value>
</prop>
<prop oor:name="Measure">
@@ -289,8 +271,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2354 Avery Biz Card</value>
+ <value>C2354 Avery Biz Card</value>
</prop>
<prop oor:name="Measure">
@@ -301,8 +282,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2355 Avery Note Cards</value>
+ <value>C2355 Avery Note Cards</value>
</prop>
<prop oor:name="Measure">
@@ -313,8 +293,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2356 Avery Full Page Card</value>
+ <value>C2356 Avery Full Page Card</value>
</prop>
<prop oor:name="Measure">
@@ -325,8 +304,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2357 Compliment Cards</value>
+ <value>C2357 Compliment Cards</value>
</prop>
<prop oor:name="Measure">
@@ -337,8 +315,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2361 Greeting Cards (A6)</value>
+ <value>C2361 Greeting Cards (A6)</value>
</prop>
<prop oor:name="Measure">
@@ -349,8 +326,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2364 Marbled Business Cards</value>
+ <value>C2364 Marbled Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -361,8 +337,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2365 Marbled Business Cards</value>
+ <value>C2365 Marbled Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -373,8 +348,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2366 Marbled Business Cards</value>
+ <value>C2366 Marbled Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -385,8 +359,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2367 Marbled Business Cards</value>
+ <value>C2367 Marbled Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -397,8 +370,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2370 A4 Coated Paper -110gsm</value>
+ <value>C2370 A4 Coated Paper -110gsm</value>
</prop>
<prop oor:name="Measure">
@@ -409,8 +381,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2371 A4 Coated Paper -160gsm</value>
+ <value>C2371 A4 Coated Paper -160gsm</value>
</prop>
<prop oor:name="Measure">
@@ -421,8 +392,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2374 Marbled Paper</value>
+ <value>C2374 Marbled Paper</value>
</prop>
<prop oor:name="Measure">
@@ -433,8 +403,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2375 Marbled Paper</value>
+ <value>C2375 Marbled Paper</value>
</prop>
<prop oor:name="Measure">
@@ -445,8 +414,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2376 Marbled Paper</value>
+ <value>C2376 Marbled Paper</value>
</prop>
<prop oor:name="Measure">
@@ -457,8 +425,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2377 Marbled Paper</value>
+ <value>C2377 Marbled Paper</value>
</prop>
<prop oor:name="Measure">
@@ -469,8 +436,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2378 A4 Colour Laser Paper</value>
+ <value>C2378 A4 Colour Laser Paper</value>
</prop>
<prop oor:name="Measure">
@@ -481,8 +447,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2379 A4 Bright White</value>
+ <value>C2379 A4 Bright White</value>
</prop>
<prop oor:name="Measure">
@@ -493,8 +458,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2410 Avery Self-Laminating Card</value>
+ <value>C2410 Avery Self-Laminating Card</value>
</prop>
<prop oor:name="Measure">
@@ -505,8 +469,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2420 Avery Self-Laminating Bookmark</value>
+ <value>C2420 Avery Self-Laminating Bookmark</value>
</prop>
<prop oor:name="Measure">
@@ -517,8 +480,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2546 Windows Decals</value>
+ <value>C2546 Windows Decals</value>
</prop>
<prop oor:name="Measure">
@@ -529,8 +491,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2547 Fantastic Plastic</value>
+ <value>C2547 Fantastic Plastic</value>
</prop>
<prop oor:name="Measure">
@@ -541,8 +502,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2651 Avery Inkjet Mini Label</value>
+ <value>C2651 Avery Inkjet Mini Label</value>
</prop>
<prop oor:name="Measure">
@@ -553,8 +513,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C6353 Photo Quality Gloss 4 x 6 Cards</value>
+ <value>C6353 Photo Quality Gloss 4 x 6 Cards</value>
</prop>
<prop oor:name="Measure">
@@ -565,8 +524,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9146 Photo Quality Label (Full Page)</value>
+ <value>C9146 Photo Quality Label (Full Page)</value>
</prop>
<prop oor:name="Measure">
@@ -577,8 +535,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9151 Photo Quality Label</value>
+ <value>C9151 Photo Quality Label</value>
</prop>
<prop oor:name="Measure">
@@ -589,8 +546,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9169 Photo Quality Label (4 per page)</value>
+ <value>C9169 Photo Quality Label (4 per page)</value>
</prop>
<prop oor:name="Measure">
@@ -601,8 +557,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9312 Clean Edge(TM) Business Card</value>
+ <value>C9312 Clean Edge(TM) Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -613,8 +568,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9351 Photo Quality Gloss A5 Greeting Card</value>
+ <value>C9351 Photo Quality Gloss A5 Greeting Card</value>
</prop>
<prop oor:name="Measure">
@@ -625,8 +579,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9352 Greeting Cards Glossy A6</value>
+ <value>C9352 Greeting Cards Glossy A6</value>
</prop>
<prop oor:name="Measure">
@@ -637,8 +590,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9353 Photo Quality Gloss Postcards</value>
+ <value>C9353 Photo Quality Gloss Postcards</value>
</prop>
<prop oor:name="Measure">
@@ -649,8 +601,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9354 Photo Quality Gloss Business Cards</value>
+ <value>C9354 Photo Quality Gloss Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -661,8 +612,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9355 Post Cards</value>
+ <value>C9355 Post Cards</value>
</prop>
<prop oor:name="Measure">
@@ -673,8 +623,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9356 Photo Quality A4 Card Sheet</value>
+ <value>C9356 Photo Quality A4 Card Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -685,8 +634,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9362 Business Cards Glossy</value>
+ <value>C9362 Business Cards Glossy</value>
</prop>
<prop oor:name="Measure">
@@ -697,8 +645,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9372 Photo Paper Glossy 9 x 13</value>
+ <value>C9372 Photo Paper Glossy 9 x 13</value>
</prop>
<prop oor:name="Measure">
@@ -709,8 +656,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9373 Photo Gloss Paper</value>
+ <value>C9373 Photo Gloss Paper</value>
</prop>
<prop oor:name="Measure">
@@ -721,8 +667,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9374 Photo Quality Glossy Inkjet Card</value>
+ <value>C9374 Photo Quality Glossy Inkjet Card</value>
</prop>
<prop oor:name="Measure">
@@ -733,8 +678,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9405 Avery T-Shirt Transfer Sheets</value>
+ <value>C9405 Avery T-Shirt Transfer Sheets</value>
</prop>
<prop oor:name="Measure">
@@ -745,8 +689,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9406 Avery T-Shirt Transfer Sheets</value>
+ <value>C9406 Avery T-Shirt Transfer Sheets</value>
</prop>
<prop oor:name="Measure">
@@ -757,8 +700,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9430 Photo Quality Glossy A4 Inkjet Paper</value>
+ <value>C9430 Photo Quality Glossy A4 Inkjet Paper</value>
</prop>
<prop oor:name="Measure">
@@ -769,8 +711,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9431 Photo Quality Glossy Paper - 160gsm</value>
+ <value>C9431 Photo Quality Glossy Paper - 160gsm</value>
</prop>
<prop oor:name="Measure">
@@ -781,8 +722,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9433 Inkjet Glossy Double Sided Paper</value>
+ <value>C9433 Inkjet Glossy Double Sided Paper</value>
</prop>
<prop oor:name="Measure">
@@ -793,8 +733,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9434 Photo Cards Glossy</value>
+ <value>C9434 Photo Cards Glossy</value>
</prop>
<prop oor:name="Measure">
@@ -805,8 +744,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9612 CD-R Business Card</value>
+ <value>C9612 CD-R Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -817,8 +755,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9660 Full Face CD/DVD Labels</value>
+ <value>C9660 Full Face CD/DVD Labels</value>
</prop>
<prop oor:name="Measure">
@@ -829,8 +766,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">COPT210 Copier Transparency</value>
+ <value>COPT210 Copier Transparency</value>
</prop>
<prop oor:name="Measure">
@@ -841,8 +777,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">IJT310 Inkjet Transparency - 90microns</value>
+ <value>IJT310 Inkjet Transparency - 90microns</value>
</prop>
<prop oor:name="Measure">
@@ -853,8 +788,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">IJT311 Inkjet Transparency - 120 microns</value>
+ <value>IJT311 Inkjet Transparency - 120 microns</value>
</prop>
<prop oor:name="Measure">
@@ -865,8 +799,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J40063 Address</value>
+ <value>J40063 Address</value>
</prop>
<prop oor:name="Measure">
@@ -877,8 +810,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J40065 Parcel</value>
+ <value>J40065 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -889,8 +821,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J400DK 3.5&quot; Diskette - Face Only</value>
+ <value>J400DK 3.5&quot; Diskette - Face Only</value>
</prop>
<prop oor:name="Measure">
@@ -901,8 +832,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J400SL 35mm Slide</value>
+ <value>J400SL 35mm Slide</value>
</prop>
<prop oor:name="Measure">
@@ -913,8 +843,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J400VF Video Face</value>
+ <value>J400VF Video Face</value>
</prop>
<prop oor:name="Measure">
@@ -925,8 +854,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J400VS Video Spine</value>
+ <value>J400VS Video Spine</value>
</prop>
<prop oor:name="Measure">
@@ -937,8 +865,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8156 Address</value>
+ <value>J8156 Address</value>
</prop>
<prop oor:name="Measure">
@@ -949,8 +876,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8157 Address</value>
+ <value>J8157 Address</value>
</prop>
<prop oor:name="Measure">
@@ -961,8 +887,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8158 Address</value>
+ <value>J8158 Address</value>
</prop>
<prop oor:name="Measure">
@@ -973,8 +898,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8159 Address</value>
+ <value>J8159 Address</value>
</prop>
<prop oor:name="Measure">
@@ -985,8 +909,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8160 Address</value>
+ <value>J8160 Address</value>
</prop>
<prop oor:name="Measure">
@@ -997,8 +920,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8161 Address</value>
+ <value>J8161 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1009,8 +931,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8162 Address</value>
+ <value>J8162 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1021,8 +942,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8163 Address</value>
+ <value>J8163 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1033,8 +953,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8164 Address</value>
+ <value>J8164 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1045,8 +964,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8165 Parcel</value>
+ <value>J8165 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -1057,8 +975,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8166 Parcel</value>
+ <value>J8166 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -1069,8 +986,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8167 Shipping</value>
+ <value>J8167 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -1081,8 +997,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8168 Shipping</value>
+ <value>J8168 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -1093,8 +1008,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8169 Parcel</value>
+ <value>J8169 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -1105,8 +1019,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8170 Collect/Filing</value>
+ <value>J8170 Collect/Filing</value>
</prop>
<prop oor:name="Measure">
@@ -1117,8 +1030,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8171 Lever Arch Labels - White</value>
+ <value>J8171 Lever Arch Labels - White</value>
</prop>
<prop oor:name="Measure">
@@ -1129,8 +1041,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8173 Address</value>
+ <value>J8173 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1141,8 +1052,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8359 Address</value>
+ <value>J8359 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1153,8 +1063,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8360 Address</value>
+ <value>J8360 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1165,8 +1074,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8361 Address</value>
+ <value>J8361 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1177,8 +1085,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8362 Address</value>
+ <value>J8362 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1189,8 +1096,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8363 Address</value>
+ <value>J8363 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1201,8 +1107,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8364 Address</value>
+ <value>J8364 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1213,8 +1118,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8365 Parcel</value>
+ <value>J8365 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -1225,8 +1129,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8366 Parcel</value>
+ <value>J8366 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -1237,8 +1140,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8367 Shipping</value>
+ <value>J8367 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -1249,8 +1151,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8368 Shipping</value>
+ <value>J8368 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -1261,8 +1162,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8369 Parcel</value>
+ <value>J8369 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -1273,8 +1173,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8371 Lever Arch</value>
+ <value>J8371 Lever Arch</value>
</prop>
<prop oor:name="Measure">
@@ -1285,8 +1184,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8414 Clean Edge (TM) Business Card</value>
+ <value>J8414 Clean Edge (TM) Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -1297,8 +1195,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8415 Greeting Cards Maxi (A6)</value>
+ <value>J8415 Greeting Cards Maxi (A6)</value>
</prop>
<prop oor:name="Measure">
@@ -1309,8 +1206,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8423 Name Card</value>
+ <value>J8423 Name Card</value>
</prop>
<prop oor:name="Measure">
@@ -1321,8 +1217,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8431 CD Case Insert - Cover</value>
+ <value>J8431 CD Case Insert - Cover</value>
</prop>
<prop oor:name="Measure">
@@ -1333,8 +1228,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8432 CD Case Insert - Tray</value>
+ <value>J8432 CD Case Insert - Tray</value>
</prop>
<prop oor:name="Measure">
@@ -1345,8 +1239,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8433 CD Envelope</value>
+ <value>J8433 CD Envelope</value>
</prop>
<prop oor:name="Measure">
@@ -1357,8 +1250,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8434 Inkjet CD Inserts - Cover Section</value>
+ <value>J8434 Inkjet CD Inserts - Cover Section</value>
</prop>
<prop oor:name="Measure">
@@ -1369,8 +1261,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8434 Inkjet CD Inserts - Tray Section</value>
+ <value>J8434 Inkjet CD Inserts - Tray Section</value>
</prop>
<prop oor:name="Measure">
@@ -1381,8 +1272,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8435 CD Case Insert Cover Section</value>
+ <value>J8435 CD Case Insert Cover Section</value>
</prop>
<prop oor:name="Measure">
@@ -1393,8 +1283,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8435 CD Case Insert Tray Section</value>
+ <value>J8435 CD Case Insert Tray Section</value>
</prop>
<prop oor:name="Measure">
@@ -1405,8 +1294,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8436 CD Case Spine Labels</value>
+ <value>J8436 CD Case Spine Labels</value>
</prop>
<prop oor:name="Measure">
@@ -1417,8 +1305,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8440 Zip(TM) Disk Card Insert - Panels</value>
+ <value>J8440 Zip(TM) Disk Card Insert - Panels</value>
</prop>
<prop oor:name="Measure">
@@ -1429,8 +1316,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8560 Clear Address</value>
+ <value>J8560 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -1441,8 +1327,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8562 Clear Address</value>
+ <value>J8562 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -1453,8 +1338,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8563 Clear Address</value>
+ <value>J8563 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -1465,8 +1349,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8565 Clear Parcel</value>
+ <value>J8565 Clear Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -1477,8 +1360,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8567 Clear A4 Labels</value>
+ <value>J8567 Clear A4 Labels</value>
</prop>
<prop oor:name="Measure">
@@ -1489,8 +1371,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8570 Full Face CD/DVD Labels - Clear Inkjet</value>
+ <value>J8570 Full Face CD/DVD Labels - Clear Inkjet</value>
</prop>
<prop oor:name="Measure">
@@ -1501,8 +1382,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8587 Inkjet Transparencies</value>
+ <value>J8587 Inkjet Transparencies</value>
</prop>
<prop oor:name="Measure">
@@ -1513,8 +1393,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8612 CD-R Business Card</value>
+ <value>J8612 CD-R Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -1525,8 +1404,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8651 Mini Address</value>
+ <value>J8651 Mini Address</value>
</prop>
<prop oor:name="Measure">
@@ -1537,8 +1415,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8654 Miini Address</value>
+ <value>J8654 Miini Address</value>
</prop>
<prop oor:name="Measure">
@@ -1549,8 +1426,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8655 Audio Cassette</value>
+ <value>J8655 Audio Cassette</value>
</prop>
<prop oor:name="Measure">
@@ -1561,8 +1437,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8656 35 mm Slide</value>
+ <value>J8656 35 mm Slide</value>
</prop>
<prop oor:name="Measure">
@@ -1573,8 +1448,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8657 35 mm Slides/Small Items</value>
+ <value>J8657 35 mm Slides/Small Items</value>
</prop>
<prop oor:name="Measure">
@@ -1585,8 +1459,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8658 Mini Labels - Removable</value>
+ <value>J8658 Mini Labels - Removable</value>
</prop>
<prop oor:name="Measure">
@@ -1597,8 +1470,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8659 Mini Labels - Removable</value>
+ <value>J8659 Mini Labels - Removable</value>
</prop>
<prop oor:name="Measure">
@@ -1609,8 +1481,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8666 3.5&quot; Diskette - Face Only</value>
+ <value>J8666 3.5&quot; Diskette - Face Only</value>
</prop>
<prop oor:name="Measure">
@@ -1621,8 +1492,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8667 Mini Disk Label - Face</value>
+ <value>J8667 Mini Disk Label - Face</value>
</prop>
<prop oor:name="Measure">
@@ -1633,8 +1503,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8667 Mini Disk Label - Spine</value>
+ <value>J8667 Mini Disk Label - Spine</value>
</prop>
<prop oor:name="Measure">
@@ -1645,8 +1514,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8668 Labels for Zip (TM.) Disk</value>
+ <value>J8668 Labels for Zip (TM.) Disk</value>
</prop>
<prop oor:name="Measure">
@@ -1657,8 +1525,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8671 Video Face</value>
+ <value>J8671 Video Face</value>
</prop>
<prop oor:name="Measure">
@@ -1669,8 +1536,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8674 Video Spine</value>
+ <value>J8674 Video Spine</value>
</prop>
<prop oor:name="Measure">
@@ -1681,8 +1547,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8676 Full Face CD/DVD Labels</value>
+ <value>J8676 Full Face CD/DVD Labels</value>
</prop>
<prop oor:name="Measure">
@@ -1693,8 +1558,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8701 Lever Arch</value>
+ <value>J8701 Lever Arch</value>
</prop>
<prop oor:name="Measure">
@@ -1705,8 +1569,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8702 Lever Arch</value>
+ <value>J8702 Lever Arch</value>
</prop>
<prop oor:name="Measure">
@@ -1717,8 +1580,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8766 3.5&quot; Diskette - Face Only</value>
+ <value>J8766 3.5&quot; Diskette - Face Only</value>
</prop>
<prop oor:name="Measure">
@@ -1729,8 +1591,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8770 Full Face CD/DVD Labels</value>
+ <value>J8770 Full Face CD/DVD Labels</value>
</prop>
<prop oor:name="Measure">
@@ -1741,8 +1602,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8771 Video Face</value>
+ <value>J8771 Video Face</value>
</prop>
<prop oor:name="Measure">
@@ -1753,8 +1613,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8774 Video Spine</value>
+ <value>J8774 Video Spine</value>
</prop>
<prop oor:name="Measure">
@@ -1765,8 +1624,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8776 Full Face CD/DVD Labels - Holographic</value>
+ <value>J8776 Full Face CD/DVD Labels - Holographic</value>
</prop>
<prop oor:name="Measure">
@@ -1777,8 +1635,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8777 Full Face CD/DVD Labels - Silver</value>
+ <value>J8777 Full Face CD/DVD Labels - Silver</value>
</prop>
<prop oor:name="Measure">
@@ -1789,8 +1646,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8778 Full Face CD/DVD Labels - Gold</value>
+ <value>J8778 Full Face CD/DVD Labels - Gold</value>
</prop>
<prop oor:name="Measure">
@@ -1801,8 +1657,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8867 Printable Magnets - Full Sheet</value>
+ <value>J8867 Printable Magnets - Full Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -1813,8 +1668,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8871 Printable Magnets</value>
+ <value>J8871 Printable Magnets</value>
</prop>
<prop oor:name="Measure">
@@ -1825,8 +1679,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8875 Printable Magnets</value>
+ <value>J8875 Printable Magnets</value>
</prop>
<prop oor:name="Measure">
@@ -1837,8 +1690,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J9124 Inkjet Labels, Glossy</value>
+ <value>J9124 Inkjet Labels, Glossy</value>
</prop>
<prop oor:name="Measure">
@@ -1849,8 +1701,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L30063 Address</value>
+ <value>L30063 Address</value>
</prop>
<prop oor:name="Measure">
@@ -1861,8 +1712,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L30065 Parcel</value>
+ <value>L30065 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -1873,8 +1723,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L300DK 3.5&quot; Diskette - Face Only</value>
+ <value>L300DK 3.5&quot; Diskette - Face Only</value>
</prop>
<prop oor:name="Measure">
@@ -1885,8 +1734,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L300SL 35mm Slide</value>
+ <value>L300SL 35mm Slide</value>
</prop>
<prop oor:name="Measure">
@@ -1897,8 +1745,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L300VF Video Face</value>
+ <value>L300VF Video Face</value>
</prop>
<prop oor:name="Measure">
@@ -1909,8 +1756,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L300VS Video Spine</value>
+ <value>L300VS Video Spine</value>
</prop>
<prop oor:name="Measure">
@@ -1921,8 +1767,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L6008 Silver Heavy Duty Labels</value>
+ <value>L6008 Silver Heavy Duty Labels</value>
</prop>
<prop oor:name="Measure">
@@ -1933,8 +1778,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L6009 Silver Heavy Duty Labels</value>
+ <value>L6009 Silver Heavy Duty Labels</value>
</prop>
<prop oor:name="Measure">
@@ -1945,8 +1789,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L6011 Silver Heavy Duty Labels</value>
+ <value>L6011 Silver Heavy Duty Labels</value>
</prop>
<prop oor:name="Measure">
@@ -1957,8 +1800,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L6012 Silver Heavy Duty Labels</value>
+ <value>L6012 Silver Heavy Duty Labels</value>
</prop>
<prop oor:name="Measure">
@@ -1969,8 +1811,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L6112 Anti Tamper Labels</value>
+ <value>L6112 Anti Tamper Labels</value>
</prop>
<prop oor:name="Measure">
@@ -1981,8 +1822,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L6113 Anti Tamper Labels</value>
+ <value>L6113 Anti Tamper Labels</value>
</prop>
<prop oor:name="Measure">
@@ -1993,8 +1833,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L6114 Anti Tamper Labels</value>
+ <value>L6114 Anti Tamper Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2005,8 +1844,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7051 Heavy Duty Labels Mini</value>
+ <value>L7051 Heavy Duty Labels Mini</value>
</prop>
<prop oor:name="Measure">
@@ -2017,8 +1855,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7060 White Heavy Duty Labels</value>
+ <value>L7060 White Heavy Duty Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2029,8 +1866,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7063 White Heavy Duty Labels</value>
+ <value>L7063 White Heavy Duty Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2041,8 +1877,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7067 White Heavy Duty Labels</value>
+ <value>L7067 White Heavy Duty Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2053,8 +1888,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7068 White Heavy Duty Labels</value>
+ <value>L7068 White Heavy Duty Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2065,8 +1899,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7069 White Heavy Duty Labels</value>
+ <value>L7069 White Heavy Duty Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2077,8 +1910,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7156 Address</value>
+ <value>L7156 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2089,8 +1921,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7157 Address</value>
+ <value>L7157 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2101,8 +1932,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7158 Address</value>
+ <value>L7158 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2113,8 +1943,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7159 Address</value>
+ <value>L7159 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2125,8 +1954,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7160 Address</value>
+ <value>L7160 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2137,8 +1965,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7161 Address</value>
+ <value>L7161 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2149,8 +1976,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7162 Address</value>
+ <value>L7162 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2161,8 +1987,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7163 Address</value>
+ <value>L7163 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2173,8 +1998,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7164 Address</value>
+ <value>L7164 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2185,8 +2009,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7165 Parcel</value>
+ <value>L7165 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -2197,8 +2020,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7166 Parcel</value>
+ <value>L7166 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -2209,8 +2031,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7167 Shipping</value>
+ <value>L7167 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -2221,8 +2042,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7168 Shipping</value>
+ <value>L7168 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -2233,8 +2053,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7169 Parcel</value>
+ <value>L7169 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -2245,8 +2064,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7170 Eurofolio</value>
+ <value>L7170 Eurofolio</value>
</prop>
<prop oor:name="Measure">
@@ -2257,8 +2075,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7171 Lever Arch - White</value>
+ <value>L7171 Lever Arch - White</value>
</prop>
<prop oor:name="Measure">
@@ -2269,8 +2086,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7171B Lever Arch Labels - Blue</value>
+ <value>L7171B Lever Arch Labels - Blue</value>
</prop>
<prop oor:name="Measure">
@@ -2281,8 +2097,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7171G Lever Arch Labels - Green</value>
+ <value>L7171G Lever Arch Labels - Green</value>
</prop>
<prop oor:name="Measure">
@@ -2293,8 +2108,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7171R Lever Arch Labels - Red</value>
+ <value>L7171R Lever Arch Labels - Red</value>
</prop>
<prop oor:name="Measure">
@@ -2305,8 +2119,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7172 Ring Binder</value>
+ <value>L7172 Ring Binder</value>
</prop>
<prop oor:name="Measure">
@@ -2317,8 +2130,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7173 Shipping</value>
+ <value>L7173 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -2329,8 +2141,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7176 Labels for 60mm Box File</value>
+ <value>L7176 Labels for 60mm Box File</value>
</prop>
<prop oor:name="Measure">
@@ -2341,8 +2152,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7177 Address</value>
+ <value>L7177 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2353,8 +2163,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7178 Labels for 40mm Box File</value>
+ <value>L7178 Labels for 40mm Box File</value>
</prop>
<prop oor:name="Measure">
@@ -2365,8 +2174,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7179 Labels for 25mm Box File</value>
+ <value>L7179 Labels for 25mm Box File</value>
</prop>
<prop oor:name="Measure">
@@ -2377,8 +2185,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7263 Fluorescent Yellow Address</value>
+ <value>L7263 Fluorescent Yellow Address</value>
</prop>
<prop oor:name="Measure">
@@ -2389,8 +2196,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7363 Address</value>
+ <value>L7363 Address</value>
</prop>
<prop oor:name="Measure">
@@ -2401,8 +2207,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7400 Suspended Files (Cupboard)</value>
+ <value>L7400 Suspended Files (Cupboard)</value>
</prop>
<prop oor:name="Measure">
@@ -2413,8 +2218,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7408 Suspended Files (Drawer)</value>
+ <value>L7408 Suspended Files (Drawer)</value>
</prop>
<prop oor:name="Measure">
@@ -2425,8 +2229,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7409 Suspension Tab Card Inserts</value>
+ <value>L7409 Suspension Tab Card Inserts</value>
</prop>
<prop oor:name="Measure">
@@ -2437,8 +2240,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-5 IndexMaker 5 part - Labels</value>
+ <value>L7410-5 IndexMaker 5 part - Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2449,8 +2251,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-5 IndexMaker 5 part - Contents Sheet</value>
+ <value>L7410-5 IndexMaker 5 part - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2461,8 +2262,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-6 IndexMaker 6 part - Labels</value>
+ <value>L7410-6 IndexMaker 6 part - Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2473,8 +2273,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-6 IndexMaker 6 part - Contents Sheet</value>
+ <value>L7410-6 IndexMaker 6 part - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2485,8 +2284,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-10 IndexMaker 10 part - Labels</value>
+ <value>L7410-10 IndexMaker 10 part - Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2497,8 +2295,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-10 IndexMaker 10 part - Contents Sheet</value>
+ <value>L7410-10 IndexMaker 10 part - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2509,8 +2306,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-12 IndexMaker 12 part - Labels</value>
+ <value>L7410-12 IndexMaker 12 part - Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2521,8 +2317,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-12 IndexMaker 12 part - Contents Sheet</value>
+ <value>L7410-12 IndexMaker 12 part - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2533,8 +2328,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-5 ReadyIndex 1-5 Index - Contents Sheet</value>
+ <value>L7411-5 ReadyIndex 1-5 Index - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2545,8 +2339,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-6 ReadyIndex 1-6 Index - Contents Sheet</value>
+ <value>L7411-6 ReadyIndex 1-6 Index - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2557,8 +2350,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-10 ReadyIndex 1-10 Index - Contents Sheet</value>
+ <value>L7411-10 ReadyIndex 1-10 Index - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2569,8 +2361,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-12 ReadyIndex 1-12 Index - Contents Sheet</value>
+ <value>L7411-12 ReadyIndex 1-12 Index - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2581,8 +2372,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-15 ReadyIndex 1-15 Index - Contents Sheet</value>
+ <value>L7411-15 ReadyIndex 1-15 Index - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2593,8 +2383,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-20 ReadyIndex 1-20 Index - Contents Sheet</value>
+ <value>L7411-20 ReadyIndex 1-20 Index - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2605,8 +2394,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-31 ReadyIndex 1-31 Index - Contents Sheet</value>
+ <value>L7411-31 ReadyIndex 1-31 Index - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2617,8 +2405,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-AZ ReadyIndex A-Z Index - Contents Sheet</value>
+ <value>L7411-AZ ReadyIndex A-Z Index - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2629,8 +2416,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-JD ReadyIndex Jan-Dec Index - Contents Sheet</value>
+ <value>L7411-JD ReadyIndex Jan-Dec Index - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2641,8 +2427,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7412-5 Insertable Tab Dividers - 5 Tabs</value>
+ <value>L7412-5 Insertable Tab Dividers - 5 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -2653,8 +2438,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7412-6 Insertable Tab Dividers - 6 Tabs</value>
+ <value>L7412-6 Insertable Tab Dividers - 6 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -2665,8 +2449,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7412-8 Insertable Tab Dividers - 8 Tabs</value>
+ <value>L7412-8 Insertable Tab Dividers - 8 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -2677,8 +2460,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7412-10 Insertable Tab Dividers - 10 Tabs</value>
+ <value>L7412-10 Insertable Tab Dividers - 10 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -2689,8 +2471,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7412-12 Insertable Tab Dividers - 12 Tabs</value>
+ <value>L7412-12 Insertable Tab Dividers - 12 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -2701,8 +2482,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7413 Business Card</value>
+ <value>L7413 Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -2713,8 +2493,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7414 Business Card</value>
+ <value>L7414 Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -2725,8 +2504,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7415 Business Card</value>
+ <value>L7415 Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -2737,8 +2515,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7416-5 IndexMaker 5 part (Unpunched) - Labels</value>
+ <value>L7416-5 IndexMaker 5 part (Unpunched) - Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2749,8 +2526,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7416-5 IndexMaker 5 part (Unpunched) - Contents Sheet</value>
+ <value>L7416-5 IndexMaker 5 part (Unpunched) - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2761,8 +2537,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7416-6 IndexMaker 6 part - Extra Wide - Labels</value>
+ <value>L7416-6 IndexMaker 6 part - Extra Wide - Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2773,8 +2548,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7416-6 IndexMaker 6 part - Extra Wide - Contents Sheet</value>
+ <value>L7416-6 IndexMaker 6 part - Extra Wide - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2785,8 +2559,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7416-10 IndexMaker 10 part (Unpunched) - Labels</value>
+ <value>L7416-10 IndexMaker 10 part (Unpunched) - Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2797,8 +2570,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7416-10 IndexMaker 10 part (Unpunched) - Contents Sheet</value>
+ <value>L7416-10 IndexMaker 10 part (Unpunched) - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2809,8 +2581,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7416-12 IndexMaker 12 part - Extra Wide - Labels</value>
+ <value>L7416-12 IndexMaker 12 part - Extra Wide - Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2821,8 +2592,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7416-12 IndexMaker 12 part - Extra Wide - Contents Sheet</value>
+ <value>L7416-12 IndexMaker 12 part - Extra Wide - Contents Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -2833,8 +2603,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7417 Business Card</value>
+ <value>L7417 Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -2845,8 +2614,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7418 Name Badge</value>
+ <value>L7418 Name Badge</value>
</prop>
<prop oor:name="Measure">
@@ -2857,8 +2625,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7419 Business Card</value>
+ <value>L7419 Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -2869,8 +2636,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7420-5 Direct Print Dividers</value>
+ <value>L7420-5 Direct Print Dividers</value>
</prop>
<prop oor:name="Measure">
@@ -2881,8 +2647,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7420-6 Direct Print Dividers</value>
+ <value>L7420-6 Direct Print Dividers</value>
</prop>
<prop oor:name="Measure">
@@ -2893,8 +2658,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7420-8 Direct Print Dividers</value>
+ <value>L7420-8 Direct Print Dividers</value>
</prop>
<prop oor:name="Measure">
@@ -2905,8 +2669,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7421 Post Card</value>
+ <value>L7421 Post Card</value>
</prop>
<prop oor:name="Measure">
@@ -2917,8 +2680,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7422 Suspension Tab Card Inserts</value>
+ <value>L7422 Suspension Tab Card Inserts</value>
</prop>
<prop oor:name="Measure">
@@ -2929,8 +2691,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7423 Delegate Card - Embossed</value>
+ <value>L7423 Delegate Card - Embossed</value>
</prop>
<prop oor:name="Measure">
@@ -2941,8 +2702,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7424 Lever Arch Labels</value>
+ <value>L7424 Lever Arch Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2953,8 +2713,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7425 Lever Arch Labels</value>
+ <value>L7425 Lever Arch Labels</value>
</prop>
<prop oor:name="Measure">
@@ -2965,8 +2724,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7426 Note Card</value>
+ <value>L7426 Note Card</value>
</prop>
<prop oor:name="Measure">
@@ -2977,8 +2735,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7451-5 ReadyIndex 5 Index (Unnumbered) - Contents</value>
+ <value>L7451-5 ReadyIndex 5 Index (Unnumbered) - Contents</value>
</prop>
<prop oor:name="Measure">
@@ -2989,8 +2746,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7451-10 ReadyIndex 10 Index (Unnumbered) - Contents</value>
+ <value>L7451-10 ReadyIndex 10 Index (Unnumbered) - Contents</value>
</prop>
<prop oor:name="Measure">
@@ -3001,8 +2757,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7551 Clear Mini Address</value>
+ <value>L7551 Clear Mini Address</value>
</prop>
<prop oor:name="Measure">
@@ -3013,8 +2768,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7552 Clear Mini</value>
+ <value>L7552 Clear Mini</value>
</prop>
<prop oor:name="Measure">
@@ -3025,8 +2779,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7553 Clear Mini</value>
+ <value>L7553 Clear Mini</value>
</prop>
<prop oor:name="Measure">
@@ -3037,8 +2790,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7560 Clear Address</value>
+ <value>L7560 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -3049,8 +2801,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7562 Clear Address</value>
+ <value>L7562 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -3061,8 +2812,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7563 Clear Address</value>
+ <value>L7563 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -3073,8 +2823,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7565 Clear Parcel</value>
+ <value>L7565 Clear Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -3085,8 +2834,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7567 Clear A4 Labels</value>
+ <value>L7567 Clear A4 Labels</value>
</prop>
<prop oor:name="Measure">
@@ -3097,8 +2845,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7568 Clear A5 Labels</value>
+ <value>L7568 Clear A5 Labels</value>
</prop>
<prop oor:name="Measure">
@@ -3109,8 +2856,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7587 Laser Transparencies</value>
+ <value>L7587 Laser Transparencies</value>
</prop>
<prop oor:name="Measure">
@@ -3121,8 +2867,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7630 Circular</value>
+ <value>L7630 Circular</value>
</prop>
<prop oor:name="Measure">
@@ -3133,8 +2878,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7650 Circular</value>
+ <value>L7650 Circular</value>
</prop>
<prop oor:name="Measure">
@@ -3145,8 +2889,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7651 Mini Address</value>
+ <value>L7651 Mini Address</value>
</prop>
<prop oor:name="Measure">
@@ -3157,8 +2900,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7651/PF Mini Address</value>
+ <value>L7651/PF Mini Address</value>
</prop>
<prop oor:name="Measure">
@@ -3169,8 +2911,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7651/YF Mini Address</value>
+ <value>L7651/YF Mini Address</value>
</prop>
<prop oor:name="Measure">
@@ -3181,8 +2922,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7652 Miini Address</value>
+ <value>L7652 Miini Address</value>
</prop>
<prop oor:name="Measure">
@@ -3193,8 +2933,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7653 Mini</value>
+ <value>L7653 Mini</value>
</prop>
<prop oor:name="Measure">
@@ -3205,8 +2944,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7654 Miini Address</value>
+ <value>L7654 Miini Address</value>
</prop>
<prop oor:name="Measure">
@@ -3217,8 +2955,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7655 Audio Cassette</value>
+ <value>L7655 Audio Cassette</value>
</prop>
<prop oor:name="Measure">
@@ -3229,8 +2966,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7656 35 mm Slide</value>
+ <value>L7656 35 mm Slide</value>
</prop>
<prop oor:name="Measure">
@@ -3241,8 +2977,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7657 Mini Labels - Removable - Laser</value>
+ <value>L7657 Mini Labels - Removable - Laser</value>
</prop>
<prop oor:name="Measure">
@@ -3253,8 +2988,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7658 Mini Labels - Removable - Laser</value>
+ <value>L7658 Mini Labels - Removable - Laser</value>
</prop>
<prop oor:name="Measure">
@@ -3265,8 +2999,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7663 5.25&quot; Diskette</value>
+ <value>L7663 5.25&quot; Diskette</value>
</prop>
<prop oor:name="Measure">
@@ -3277,8 +3010,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7664 3.5&quot; Diskette - Wraparound</value>
+ <value>L7664 3.5&quot; Diskette - Wraparound</value>
</prop>
<prop oor:name="Measure">
@@ -3289,8 +3021,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7665 Mini Data Cartridge</value>
+ <value>L7665 Mini Data Cartridge</value>
</prop>
<prop oor:name="Measure">
@@ -3301,8 +3032,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7666 3.5&quot; Diskette - Face Only</value>
+ <value>L7666 3.5&quot; Diskette - Face Only</value>
</prop>
<prop oor:name="Measure">
@@ -3313,8 +3043,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7667 Standard Data Cartridge</value>
+ <value>L7667 Standard Data Cartridge</value>
</prop>
<prop oor:name="Measure">
@@ -3325,8 +3054,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7668 Labels for Zip(TM) Disk</value>
+ <value>L7668 Labels for Zip(TM) Disk</value>
</prop>
<prop oor:name="Measure">
@@ -3337,8 +3065,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7669 Labels for SuperDisk (TM )</value>
+ <value>L7669 Labels for SuperDisk (TM )</value>
</prop>
<prop oor:name="Measure">
@@ -3349,8 +3076,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7670 Circular - Fluorescent Yellow</value>
+ <value>L7670 Circular - Fluorescent Yellow</value>
</prop>
<prop oor:name="Measure">
@@ -3361,8 +3087,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7671 Video Face</value>
+ <value>L7671 Video Face</value>
</prop>
<prop oor:name="Measure">
@@ -3373,8 +3098,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7674 Video Spine</value>
+ <value>L7674 Video Spine</value>
</prop>
<prop oor:name="Measure">
@@ -3385,8 +3109,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7675 4mm Data Cartridge</value>
+ <value>L7675 4mm Data Cartridge</value>
</prop>
<prop oor:name="Measure">
@@ -3397,8 +3120,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7676 Full Face CD/DVD Labels - Black &amp; White</value>
+ <value>L7676 Full Face CD/DVD Labels - Black &amp; White</value>
</prop>
<prop oor:name="Measure">
@@ -3409,8 +3131,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7680 Mini Address - Gold</value>
+ <value>L7680 Mini Address - Gold</value>
</prop>
<prop oor:name="Measure">
@@ -3421,8 +3142,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7701 Lever Arch</value>
+ <value>L7701 Lever Arch</value>
</prop>
<prop oor:name="Measure">
@@ -3433,8 +3153,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7702 Lever Arch</value>
+ <value>L7702 Lever Arch</value>
</prop>
<prop oor:name="Measure">
@@ -3445,8 +3164,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7760 Full Face CD/DVD Labels - Colour Laser</value>
+ <value>L7760 Full Face CD/DVD Labels - Colour Laser</value>
</prop>
<prop oor:name="Measure">
@@ -3457,8 +3175,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7765 Presentation/Photo - Glossy Colour Laser</value>
+ <value>L7765 Presentation/Photo - Glossy Colour Laser</value>
</prop>
<prop oor:name="Measure">
@@ -3469,8 +3186,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7767 Presentation/Photo - Glossy Colour Laser</value>
+ <value>L7767 Presentation/Photo - Glossy Colour Laser</value>
</prop>
<prop oor:name="Measure">
@@ -3481,8 +3197,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7768 Presentation/Photo - Glossy Colour Laser</value>
+ <value>L7768 Presentation/Photo - Glossy Colour Laser</value>
</prop>
<prop oor:name="Measure">
@@ -3493,8 +3208,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7769 Presentation/Photo - Glossy Colour Laser</value>
+ <value>L7769 Presentation/Photo - Glossy Colour Laser</value>
</prop>
<prop oor:name="Measure">
@@ -3505,8 +3219,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7901 Organizer Page</value>
+ <value>L7901 Organizer Page</value>
</prop>
<prop oor:name="Measure">
@@ -3517,8 +3230,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7902 Organizer Page (A5)</value>
+ <value>L7902 Organizer Page (A5)</value>
</prop>
<prop oor:name="Measure">
@@ -3529,8 +3241,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7905 Compliment Slip</value>
+ <value>L7905 Compliment Slip</value>
</prop>
<prop oor:name="Measure">
@@ -3541,8 +3252,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">LPT110 Laser/Copier Transparency - 100micron</value>
+ <value>LPT110 Laser/Copier Transparency - 100micron</value>
</prop>
<prop oor:name="Measure">
@@ -3553,8 +3263,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">LPT111 Laser/Copier Transparency - 100micron</value>
+ <value>LPT111 Laser/Copier Transparency - 100micron</value>
</prop>
<prop oor:name="Measure">
@@ -3568,8 +3277,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2412 Laminated Cards, large</value>
+ <value>C2412 Laminated Cards, large</value>
</prop>
<prop oor:name="Measure">
@@ -3580,8 +3288,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2413 Laminated Cards</value>
+ <value>C2413 Laminated Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3592,8 +3299,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2414 Laminated Cards</value>
+ <value>C2414 Laminated Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3604,8 +3310,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C24412 Laminated Cards, large</value>
+ <value>C24412 Laminated Cards, large</value>
</prop>
<prop oor:name="Measure">
@@ -3616,8 +3321,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C25446 A5 Sheet</value>
+ <value>C25446 A5 Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -3628,8 +3332,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C25447 A5 Sheet</value>
+ <value>C25447 A5 Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -3640,8 +3343,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2546 Windows Decals</value>
+ <value>C2546 Windows Decals</value>
</prop>
<prop oor:name="Measure">
@@ -3652,8 +3354,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2547 Fantastic Plastic</value>
+ <value>C2547 Fantastic Plastic</value>
</prop>
<prop oor:name="Measure">
@@ -3664,8 +3365,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C91131 Business Cards</value>
+ <value>C91131 Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3676,8 +3376,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C91149 Business Cards</value>
+ <value>C91149 Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3688,8 +3387,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9167 A4 Sheet</value>
+ <value>C9167 A4 Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -3700,8 +3398,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9169 Glossy Photo Quality Labels</value>
+ <value>C9169 Glossy Photo Quality Labels</value>
</prop>
<prop oor:name="Measure">
@@ -3712,8 +3409,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9356 Photo Quality A4 Card Sheet</value>
+ <value>C9356 Photo Quality A4 Card Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -3724,8 +3420,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J21013 Business Cards</value>
+ <value>J21013 Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3736,8 +3431,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J21015 Business Cards</value>
+ <value>J21015 Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3748,8 +3442,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J21016 Business Cards</value>
+ <value>J21016 Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3760,8 +3453,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J21031 Business Cards</value>
+ <value>J21031 Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3772,8 +3464,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J21033 Business Cards</value>
+ <value>J21033 Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3784,8 +3475,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J21131 Business Cards</value>
+ <value>J21131 Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3796,8 +3486,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J21141 Greeting Cards</value>
+ <value>J21141 Greeting Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3808,8 +3497,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J21149 Business Cards</value>
+ <value>J21149 Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -3820,8 +3508,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J2356 A4 Sheet</value>
+ <value>J2356 A4 Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -3832,8 +3519,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8359 Address</value>
+ <value>J8359 Address</value>
</prop>
<prop oor:name="Measure">
@@ -3844,8 +3530,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8360 Address</value>
+ <value>J8360 Address</value>
</prop>
<prop oor:name="Measure">
@@ -3856,8 +3541,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8361 Address</value>
+ <value>J8361 Address</value>
</prop>
<prop oor:name="Measure">
@@ -3868,8 +3552,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8362 Address</value>
+ <value>J8362 Address</value>
</prop>
<prop oor:name="Measure">
@@ -3880,8 +3563,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8363 Address</value>
+ <value>J8363 Address</value>
</prop>
<prop oor:name="Measure">
@@ -3892,8 +3574,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8365 Address</value>
+ <value>J8365 Address</value>
</prop>
<prop oor:name="Measure">
@@ -3904,8 +3585,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8367 Shipping A4</value>
+ <value>J8367 Shipping A4</value>
</prop>
<prop oor:name="Measure">
@@ -3916,8 +3596,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8368 Shipping A5</value>
+ <value>J8368 Shipping A5</value>
</prop>
<prop oor:name="Measure">
@@ -3928,8 +3607,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8369 Parcel</value>
+ <value>J8369 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -3940,8 +3618,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8371 Lever Arch</value>
+ <value>J8371 Lever Arch</value>
</prop>
<prop oor:name="Measure">
@@ -3952,8 +3629,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8751 Mini Address</value>
+ <value>J8751 Mini Address</value>
</prop>
<prop oor:name="Measure">
@@ -3964,8 +3640,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8756 35 mm Slide</value>
+ <value>J8756 35 mm Slide</value>
</prop>
<prop oor:name="Measure">
@@ -3976,8 +3651,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8766 3.5&quot; Diskette</value>
+ <value>J8766 3.5&quot; Diskette</value>
</prop>
<prop oor:name="Measure">
@@ -3988,8 +3662,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8771 Video Face</value>
+ <value>J8771 Video Face</value>
</prop>
<prop oor:name="Measure">
@@ -4000,8 +3673,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8774 Video Spine</value>
+ <value>J8774 Video Spine</value>
</prop>
<prop oor:name="Measure">
@@ -4012,8 +3684,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J88911 Address</value>
+ <value>J88911 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4024,8 +3695,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J88915 Address</value>
+ <value>J88915 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4036,8 +3706,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J88919 Address</value>
+ <value>J88919 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4048,8 +3717,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J88923 Address</value>
+ <value>J88923 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4060,8 +3728,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J88927 Address</value>
+ <value>J88927 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4072,8 +3739,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J88935 Address</value>
+ <value>J88935 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4084,8 +3750,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7159 Address</value>
+ <value>L7159 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4096,8 +3761,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7160 Address</value>
+ <value>L7160 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4108,8 +3772,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7161 Address</value>
+ <value>L7161 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4120,8 +3783,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7162 Address</value>
+ <value>L7162 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4132,8 +3794,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7163 Address</value>
+ <value>L7163 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4144,8 +3805,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7164 Address</value>
+ <value>L7164 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4156,8 +3816,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7165 Parcel</value>
+ <value>L7165 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -4168,8 +3827,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7166 Parcel</value>
+ <value>L7166 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -4180,8 +3838,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7167 Shipping</value>
+ <value>L7167 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -4192,8 +3849,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7168 Shipping</value>
+ <value>L7168 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -4204,8 +3860,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7169 Parcel</value>
+ <value>L7169 Parcel</value>
</prop>
<prop oor:name="Measure">
@@ -4216,8 +3871,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7170 Eurofolio</value>
+ <value>L7170 Eurofolio</value>
</prop>
<prop oor:name="Measure">
@@ -4228,8 +3882,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7171 Lever Arch</value>
+ <value>L7171 Lever Arch</value>
</prop>
<prop oor:name="Measure">
@@ -4240,8 +3893,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7172 Ring Binder</value>
+ <value>L7172 Ring Binder</value>
</prop>
<prop oor:name="Measure">
@@ -4252,8 +3904,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7173 Address</value>
+ <value>L7173 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4264,8 +3915,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7651 Mini Adress</value>
+ <value>L7651 Mini Adress</value>
</prop>
<prop oor:name="Measure">
@@ -4276,8 +3926,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7656 35 mm Slide</value>
+ <value>L7656 35 mm Slide</value>
</prop>
<prop oor:name="Measure">
@@ -4288,8 +3937,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7664 3.5&quot; Diskette - Wraparound</value>
+ <value>L7664 3.5&quot; Diskette - Wraparound</value>
</prop>
<prop oor:name="Measure">
@@ -4300,8 +3948,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7665 Mini Data Cartridge</value>
+ <value>L7665 Mini Data Cartridge</value>
</prop>
<prop oor:name="Measure">
@@ -4312,8 +3959,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7666 3.5&quot; Diskette</value>
+ <value>L7666 3.5&quot; Diskette</value>
</prop>
<prop oor:name="Measure">
@@ -4324,8 +3970,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7667 Standard Data Cartridge</value>
+ <value>L7667 Standard Data Cartridge</value>
</prop>
<prop oor:name="Measure">
@@ -4336,8 +3981,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7668 Labels for Zip(TM) Disk</value>
+ <value>L7668 Labels for Zip(TM) Disk</value>
</prop>
<prop oor:name="Measure">
@@ -4348,8 +3992,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7671 Video Face</value>
+ <value>L7671 Video Face</value>
</prop>
<prop oor:name="Measure">
@@ -4360,8 +4003,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7674 Video Spine</value>
+ <value>L7674 Video Spine</value>
</prop>
<prop oor:name="Measure">
@@ -4372,8 +4014,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L78382 Address</value>
+ <value>L78382 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4384,8 +4025,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L78383 Address</value>
+ <value>L78383 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4396,8 +4036,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L78384 Address</value>
+ <value>L78384 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4408,8 +4047,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L78386 Address</value>
+ <value>L78386 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4420,8 +4058,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L78387 Address</value>
+ <value>L78387 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4432,8 +4069,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L78388 Address</value>
+ <value>L78388 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4444,8 +4080,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">M21131 Business Cards</value>
+ <value>M21131 Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -4456,8 +4091,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">M8167 A4 Sheet</value>
+ <value>M8167 A4 Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -4468,8 +4102,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">M88173 Address</value>
+ <value>M88173 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4480,8 +4113,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">M88175 Address</value>
+ <value>M88175 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4492,8 +4124,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">M88177 Address</value>
+ <value>M88177 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4504,8 +4135,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">M88179 Address</value>
+ <value>M88179 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4516,8 +4146,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">M88183 Address</value>
+ <value>M88183 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4528,8 +4157,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">M88185 Address</value>
+ <value>M88185 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4540,8 +4168,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">M88187 Address</value>
+ <value>M88187 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4552,8 +4179,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">M88315 Address</value>
+ <value>M88315 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4564,8 +4190,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">P78204 Address</value>
+ <value>P78204 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4576,8 +4201,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">P78261 Address</value>
+ <value>P78261 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4588,8 +4212,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">P78270 Address</value>
+ <value>P78270 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4600,8 +4223,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">P78275 Address</value>
+ <value>P78275 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4615,8 +4237,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5167 Return Address</value>
+ <value>5167 Return Address</value>
</prop>
<prop oor:name="Measure">
@@ -4627,8 +4248,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5267 Return Address</value>
+ <value>5267 Return Address</value>
</prop>
<prop oor:name="Measure">
@@ -4639,8 +4259,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5160 Address</value>
+ <value>5160 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4651,8 +4270,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5260 Address</value>
+ <value>5260 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4663,8 +4281,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5960 Address</value>
+ <value>5960 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4675,8 +4292,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5159 Address</value>
+ <value>5159 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4687,8 +4303,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5161 Address</value>
+ <value>5161 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4699,8 +4314,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5261 Address</value>
+ <value>5261 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4711,8 +4325,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5961 Address</value>
+ <value>5961 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4723,8 +4336,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5162 Address</value>
+ <value>5162 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4735,8 +4347,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5262 Address</value>
+ <value>5262 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4747,8 +4358,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5922 Address</value>
+ <value>5922 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4759,8 +4369,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5962 Address</value>
+ <value>5962 Address</value>
</prop>
<prop oor:name="Measure">
@@ -4771,8 +4380,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5163 Address / Shipping</value>
+ <value>5163 Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -4783,8 +4391,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5263 Address / Shipping</value>
+ <value>5263 Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -4795,8 +4402,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5963 Address / Shipping</value>
+ <value>5963 Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -4807,8 +4413,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5164 Address / Shipping</value>
+ <value>5164 Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -4819,8 +4424,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5264 Address / Shipping</value>
+ <value>5264 Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -4831,8 +4435,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5168 Shipping</value>
+ <value>5168 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -4843,8 +4446,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5667 Clear Return Address</value>
+ <value>5667 Clear Return Address</value>
</prop>
<prop oor:name="Measure">
@@ -4855,8 +4457,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5660 Clear Address</value>
+ <value>5660 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -4867,8 +4468,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5930 Clear Address</value>
+ <value>5930 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -4879,8 +4479,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5661 Clear Address</value>
+ <value>5661 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -4891,8 +4490,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5662 Clear Address</value>
+ <value>5662 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -4903,8 +4501,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5663 Clear Address</value>
+ <value>5663 Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -4915,8 +4512,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5664 Clear Address / Shipping</value>
+ <value>5664 Clear Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -4927,8 +4523,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5165 Full Sheet</value>
+ <value>5165 Full Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -4939,8 +4534,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5265 Full Sheet</value>
+ <value>5265 Full Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -4951,8 +4545,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5266 File Folder-Assorted</value>
+ <value>5266 File Folder-Assorted</value>
</prop>
<prop oor:name="Measure">
@@ -4963,8 +4556,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5066 File Folder-Red</value>
+ <value>5066 File Folder-Red</value>
</prop>
<prop oor:name="Measure">
@@ -4975,8 +4567,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5166 File Folder-Orange</value>
+ <value>5166 File Folder-Orange</value>
</prop>
<prop oor:name="Measure">
@@ -4987,8 +4578,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5366 File Folder-White</value>
+ <value>5366 File Folder-White</value>
</prop>
<prop oor:name="Measure">
@@ -4999,8 +4589,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5666 File Folder-Purple</value>
+ <value>5666 File Folder-Purple</value>
</prop>
<prop oor:name="Measure">
@@ -5011,8 +4600,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5766 File Folder-Blue</value>
+ <value>5766 File Folder-Blue</value>
</prop>
<prop oor:name="Measure">
@@ -5023,8 +4611,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5866 File Folder-Green</value>
+ <value>5866 File Folder-Green</value>
</prop>
<prop oor:name="Measure">
@@ -5035,8 +4622,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5966 File Folder-Yellow</value>
+ <value>5966 File Folder-Yellow</value>
</prop>
<prop oor:name="Measure">
@@ -5047,8 +4633,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5293 Round</value>
+ <value>5293 Round</value>
</prop>
<prop oor:name="Measure">
@@ -5059,8 +4644,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5294 Round</value>
+ <value>5294 Round</value>
</prop>
<prop oor:name="Measure">
@@ -5071,8 +4655,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5196 3-1/2&quot; Diskette - White</value>
+ <value>5196 3-1/2&quot; Diskette - White</value>
</prop>
<prop oor:name="Measure">
@@ -5083,8 +4666,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5096 3-1/2&quot; Diskette - Red</value>
+ <value>5096 3-1/2&quot; Diskette - Red</value>
</prop>
<prop oor:name="Measure">
@@ -5095,8 +4677,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5896 3-1/2&quot; Diskette - Blue</value>
+ <value>5896 3-1/2&quot; Diskette - Blue</value>
</prop>
<prop oor:name="Measure">
@@ -5107,8 +4688,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5197 5-1/4 Diskette - White</value>
+ <value>5197 5-1/4 Diskette - White</value>
</prop>
<prop oor:name="Measure">
@@ -5119,8 +4699,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5198 Audio Cassette</value>
+ <value>5198 Audio Cassette</value>
</prop>
<prop oor:name="Measure">
@@ -5131,8 +4710,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5199 Video Cassette Face</value>
+ <value>5199 Video Cassette Face</value>
</prop>
<prop oor:name="Measure">
@@ -5143,8 +4721,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5199 Video Cassette Spine</value>
+ <value>5199 Video Cassette Spine</value>
</prop>
<prop oor:name="Measure">
@@ -5155,8 +4732,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5925 White Laser Labels for Zip Disks (bottom spine)</value>
+ <value>5925 White Laser Labels for Zip Disks (bottom spine)</value>
</prop>
<prop oor:name="Measure">
@@ -5167,8 +4743,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5925 White Laser Labels for Zip Disks (face)</value>
+ <value>5925 White Laser Labels for Zip Disks (face)</value>
</prop>
<prop oor:name="Measure">
@@ -5179,8 +4754,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5925 White Laser Labels for Zip Disks (top spine)</value>
+ <value>5925 White Laser Labels for Zip Disks (top spine)</value>
</prop>
<prop oor:name="Measure">
@@ -5191,8 +4765,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5931 White CD/DVD Labels for Lasers (face)</value>
+ <value>5931 White CD/DVD Labels for Lasers (face)</value>
</prop>
<prop oor:name="Measure">
@@ -5203,8 +4776,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5931 White CD/DVD Labels for Lasers (spines)</value>
+ <value>5931 White CD/DVD Labels for Lasers (spines)</value>
</prop>
<prop oor:name="Measure">
@@ -5215,8 +4787,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5970 Fluorescent Laser - Magenta</value>
+ <value>5970 Fluorescent Laser - Magenta</value>
</prop>
<prop oor:name="Measure">
@@ -5227,8 +4798,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5971 Fluorescent Laser - Green</value>
+ <value>5971 Fluorescent Laser - Green</value>
</prop>
<prop oor:name="Measure">
@@ -5239,8 +4809,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5972 Fluorescent Laser - Yellow</value>
+ <value>5972 Fluorescent Laser - Yellow</value>
</prop>
<prop oor:name="Measure">
@@ -5251,8 +4820,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5975 Fluorescent Laser - Full Sheet Assorted</value>
+ <value>5975 Fluorescent Laser - Full Sheet Assorted</value>
</prop>
<prop oor:name="Measure">
@@ -5263,8 +4831,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5979 Fluorescent Laser - Assorted</value>
+ <value>5979 Fluorescent Laser - Assorted</value>
</prop>
<prop oor:name="Measure">
@@ -5275,8 +4842,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5980 Pastel Laser - Blue</value>
+ <value>5980 Pastel Laser - Blue</value>
</prop>
<prop oor:name="Measure">
@@ -5287,8 +4853,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5997 Videotape Face</value>
+ <value>5997 Videotape Face</value>
</prop>
<prop oor:name="Measure">
@@ -5299,8 +4864,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5997 Videotape Spine</value>
+ <value>5997 Videotape Spine</value>
</prop>
<prop oor:name="Measure">
@@ -5311,8 +4875,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5998 Audio Tape</value>
+ <value>5998 Audio Tape</value>
</prop>
<prop oor:name="Measure">
@@ -5323,8 +4886,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5395 Name Badge - White</value>
+ <value>5395 Name Badge - White</value>
</prop>
<prop oor:name="Measure">
@@ -5335,8 +4897,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5095 Name Badge - Red</value>
+ <value>5095 Name Badge - Red</value>
</prop>
<prop oor:name="Measure">
@@ -5347,8 +4908,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5895 Name Badge - Blue</value>
+ <value>5895 Name Badge - Blue</value>
</prop>
<prop oor:name="Measure">
@@ -5359,8 +4919,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5371 Business Card - White</value>
+ <value>5371 Business Card - White</value>
</prop>
<prop oor:name="Measure">
@@ -5371,8 +4930,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5871 Laser Business Card</value>
+ <value>5871 Laser Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -5383,8 +4941,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5376 Business Card - Ivory</value>
+ <value>5376 Business Card - Ivory</value>
</prop>
<prop oor:name="Measure">
@@ -5395,8 +4952,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5377 Business Card - Gray</value>
+ <value>5377 Business Card - Gray</value>
</prop>
<prop oor:name="Measure">
@@ -5407,8 +4963,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5911 Business Card</value>
+ <value>5911 Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -5419,8 +4974,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5383 Name Tag Kit</value>
+ <value>5383 Name Tag Kit</value>
</prop>
<prop oor:name="Measure">
@@ -5431,8 +4985,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5390 Name Tag Refill</value>
+ <value>5390 Name Tag Refill</value>
</prop>
<prop oor:name="Measure">
@@ -5443,8 +4996,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5883 Name Tag Kit - Blue</value>
+ <value>5883 Name Tag Kit - Blue</value>
</prop>
<prop oor:name="Measure">
@@ -5455,8 +5007,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5384 Name Tag Kit</value>
+ <value>5384 Name Tag Kit</value>
</prop>
<prop oor:name="Measure">
@@ -5467,8 +5018,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5392 Name Tag Refill</value>
+ <value>5392 Name Tag Refill</value>
</prop>
<prop oor:name="Measure">
@@ -5479,8 +5029,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5385 Rotary Card - Small</value>
+ <value>5385 Rotary Card - Small</value>
</prop>
<prop oor:name="Measure">
@@ -5491,8 +5040,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5386 Rotary Card - Large</value>
+ <value>5386 Rotary Card - Large</value>
</prop>
<prop oor:name="Measure">
@@ -5503,8 +5051,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5388 Index Card</value>
+ <value>5388 Index Card</value>
</prop>
<prop oor:name="Measure">
@@ -5515,8 +5062,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5389 Post Card</value>
+ <value>5389 Post Card</value>
</prop>
<prop oor:name="Measure">
@@ -5527,8 +5073,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5305 Laser Tent Cards Med.</value>
+ <value>5305 Laser Tent Cards Med.</value>
</prop>
<prop oor:name="Measure">
@@ -5539,8 +5084,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5309 Laser Tent Cards Large</value>
+ <value>5309 Laser Tent Cards Large</value>
</prop>
<prop oor:name="Measure">
@@ -5551,8 +5095,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5315 Laser Note Cards</value>
+ <value>5315 Laser Note Cards</value>
</prop>
<prop oor:name="Measure">
@@ -5563,8 +5106,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5361 Laminated ID Cards</value>
+ <value>5361 Laminated ID Cards</value>
</prop>
<prop oor:name="Measure">
@@ -5575,8 +5117,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5361 Laminated ID Cards-Single Card</value>
+ <value>5361 Laminated ID Cards-Single Card</value>
</prop>
<prop oor:name="Measure">
@@ -5587,8 +5128,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5362 Laminated Name Badges</value>
+ <value>5362 Laminated Name Badges</value>
</prop>
<prop oor:name="Measure">
@@ -5599,8 +5139,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5362 Laminated N. Badges-Single Card</value>
+ <value>5362 Laminated N. Badges-Single Card</value>
</prop>
<prop oor:name="Measure">
@@ -5611,8 +5150,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5364 Laminated Rotary Index Cards</value>
+ <value>5364 Laminated Rotary Index Cards</value>
</prop>
<prop oor:name="Measure">
@@ -5623,8 +5161,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5364 Laminated Rotary Index-Single Card</value>
+ <value>5364 Laminated Rotary Index-Single Card</value>
</prop>
<prop oor:name="Measure">
@@ -5635,8 +5172,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">74520 Name Badge Inserts - 3&quot; x 4&quot;</value>
+ <value>74520 Name Badge Inserts - 3&quot; x 4&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -5647,8 +5183,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">74540 Name Badge Inserts - 3&quot; x 4&quot;</value>
+ <value>74540 Name Badge Inserts - 3&quot; x 4&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -5659,8 +5194,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">74541 Name Badge Inserts - 3&quot; x 4&quot;</value>
+ <value>74541 Name Badge Inserts - 3&quot; x 4&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -5671,8 +5205,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">74550 Name Badge Inserts - 2 1/4&quot; x 3 1/2&quot;</value>
+ <value>74550 Name Badge Inserts - 2 1/4&quot; x 3 1/2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -5683,8 +5216,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">74552 Name Badge Inserts - 2&quot; x 3&quot;</value>
+ <value>74552 Name Badge Inserts - 2&quot; x 3&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -5695,8 +5227,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">74558 Name Badge Inserts - 2&quot; x 3&quot;</value>
+ <value>74558 Name Badge Inserts - 2&quot; x 3&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -5707,8 +5238,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">74650 Name Badge Inserts - 2 1/4&quot; x 3 1/2&quot;</value>
+ <value>74650 Name Badge Inserts - 2 1/4&quot; x 3 1/2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -5719,8 +5249,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">74651 Name Badge Inserts - 2 1/4&quot; x 3 1/2&quot;</value>
+ <value>74651 Name Badge Inserts - 2 1/4&quot; x 3 1/2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -5731,8 +5260,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8160 Ink Jet Address</value>
+ <value>8160 Ink Jet Address</value>
</prop>
<prop oor:name="Measure">
@@ -5743,8 +5271,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8460 Ink Jet Address</value>
+ <value>8460 Ink Jet Address</value>
</prop>
<prop oor:name="Measure">
@@ -5755,8 +5282,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8461 Ink Jet Address</value>
+ <value>8461 Ink Jet Address</value>
</prop>
<prop oor:name="Measure">
@@ -5767,8 +5293,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8161 Ink Jet Address</value>
+ <value>8161 Ink Jet Address</value>
</prop>
<prop oor:name="Measure">
@@ -5779,8 +5304,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8162 Ink Jet Address</value>
+ <value>8162 Ink Jet Address</value>
</prop>
<prop oor:name="Measure">
@@ -5791,8 +5315,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8462 Ink Jet Address</value>
+ <value>8462 Ink Jet Address</value>
</prop>
<prop oor:name="Measure">
@@ -5803,8 +5326,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8163 Ink Jet Address / Shipping</value>
+ <value>8163 Ink Jet Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -5815,8 +5337,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8463 Ink Jet Address / Shipping</value>
+ <value>8463 Ink Jet Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -5827,8 +5348,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8464 Ink Jet Address / Shipping</value>
+ <value>8464 Ink Jet Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -5839,8 +5359,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8923 Ink Jet Address / Shipping</value>
+ <value>8923 Ink Jet Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -5851,8 +5370,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8164 Ink Jet Address / Shipping</value>
+ <value>8164 Ink Jet Address / Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -5863,8 +5381,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8165 Ink Jet Full Sheet</value>
+ <value>8165 Ink Jet Full Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -5875,8 +5392,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8465 Ink Jet Full Sheet</value>
+ <value>8465 Ink Jet Full Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -5887,8 +5403,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8166 Ink Jet File Folder-Assorted</value>
+ <value>8166 Ink Jet File Folder-Assorted</value>
</prop>
<prop oor:name="Measure">
@@ -5899,8 +5414,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8366 Ink Jet File Folder-White</value>
+ <value>8366 Ink Jet File Folder-White</value>
</prop>
<prop oor:name="Measure">
@@ -5911,8 +5425,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8167 Ink Jet Return Address</value>
+ <value>8167 Ink Jet Return Address</value>
</prop>
<prop oor:name="Measure">
@@ -5923,8 +5436,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8196 Ink Jet 3-1/2&quot; Diskette</value>
+ <value>8196 Ink Jet 3-1/2&quot; Diskette</value>
</prop>
<prop oor:name="Measure">
@@ -5935,8 +5447,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8250 Ink Jet Label for Color Printing</value>
+ <value>8250 Ink Jet Label for Color Printing</value>
</prop>
<prop oor:name="Measure">
@@ -5947,8 +5458,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8252 Ink Jet Label for Color Printing</value>
+ <value>8252 Ink Jet Label for Color Printing</value>
</prop>
<prop oor:name="Measure">
@@ -5959,8 +5469,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8253 Ink Jet Label for Color Printing</value>
+ <value>8253 Ink Jet Label for Color Printing</value>
</prop>
<prop oor:name="Measure">
@@ -5971,8 +5480,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8254 Ink Jet Label for Color Printing</value>
+ <value>8254 Ink Jet Label for Color Printing</value>
</prop>
<prop oor:name="Measure">
@@ -5983,8 +5491,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8255 Ink Jet Label for Color Printing </value>
+ <value>8255 Ink Jet Label for Color Printing </value>
</prop>
<prop oor:name="Measure">
@@ -5995,8 +5502,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8257 Ink Jet Return Address for Color Printing</value>
+ <value>8257 Ink Jet Return Address for Color Printing</value>
</prop>
<prop oor:name="Measure">
@@ -6007,8 +5513,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8309 Tent Card Large</value>
+ <value>8309 Tent Card Large</value>
</prop>
<prop oor:name="Measure">
@@ -6019,8 +5524,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8315 Ink Jet Note Cards</value>
+ <value>8315 Ink Jet Note Cards</value>
</prop>
<prop oor:name="Measure">
@@ -6031,8 +5535,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8316 Ink Jet Greeting Card (Portrait)*</value>
+ <value>8316 Ink Jet Greeting Card (Portrait)*</value>
</prop>
<prop oor:name="Measure">
@@ -6043,8 +5546,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8316 Ink Jet Greeting Card (Landscape)*</value>
+ <value>8316 Ink Jet Greeting Card (Landscape)*</value>
</prop>
<prop oor:name="Measure">
@@ -6055,8 +5557,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8324 Ink Jet Brochures</value>
+ <value>8324 Ink Jet Brochures</value>
</prop>
<prop oor:name="Measure">
@@ -6067,8 +5568,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8371 Ink Jet Business Card</value>
+ <value>8371 Ink Jet Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -6079,8 +5579,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8385 Rotary Card - Small</value>
+ <value>8385 Rotary Card - Small</value>
</prop>
<prop oor:name="Measure">
@@ -6091,8 +5590,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8387 Ink Jet Postcard - 4-up</value>
+ <value>8387 Ink Jet Postcard - 4-up</value>
</prop>
<prop oor:name="Measure">
@@ -6103,8 +5601,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8388 Index Card</value>
+ <value>8388 Index Card</value>
</prop>
<prop oor:name="Measure">
@@ -6115,8 +5612,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8871 Clean Edge Business Cards (IJ)</value>
+ <value>8871 Clean Edge Business Cards (IJ)</value>
</prop>
<prop oor:name="Measure">
@@ -6127,8 +5623,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8376 Ink Jet Business Card - Ivory</value>
+ <value>8376 Ink Jet Business Card - Ivory</value>
</prop>
<prop oor:name="Measure">
@@ -6139,8 +5634,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8377 Ink Jet Business Card - Gray</value>
+ <value>8377 Ink Jet Business Card - Gray</value>
</prop>
<prop oor:name="Measure">
@@ -6151,8 +5645,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8660 Ink Jet Clear Address</value>
+ <value>8660 Ink Jet Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -6163,8 +5656,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8662 Ink Jet Clear Address</value>
+ <value>8662 Ink Jet Clear Address</value>
</prop>
<prop oor:name="Measure">
@@ -6175,8 +5667,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8663 Ink Jet Clear Address/Shipping</value>
+ <value>8663 Ink Jet Clear Address/Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -6187,8 +5678,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8665 Ink Jet Clear Full Sheet</value>
+ <value>8665 Ink Jet Clear Full Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -6199,8 +5689,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8667 Ink Jet Clear Address Labels</value>
+ <value>8667 Ink Jet Clear Address Labels</value>
</prop>
<prop oor:name="Measure">
@@ -6211,8 +5700,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8925 White Inkjet Labels for Zip Disks (bottom spine)</value>
+ <value>8925 White Inkjet Labels for Zip Disks (bottom spine)</value>
</prop>
<prop oor:name="Measure">
@@ -6223,8 +5711,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8925 White Inkjet Labels for Zip Disks (face)</value>
+ <value>8925 White Inkjet Labels for Zip Disks (face)</value>
</prop>
<prop oor:name="Measure">
@@ -6235,8 +5722,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8925 White Inkjet Labels for Zip Disks (top spine)</value>
+ <value>8925 White Inkjet Labels for Zip Disks (top spine)</value>
</prop>
<prop oor:name="Measure">
@@ -6247,8 +5733,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8931 White CD/DVD Jewel Case Insert (spines)</value>
+ <value>8931 White CD/DVD Jewel Case Insert (spines)</value>
</prop>
<prop oor:name="Measure">
@@ -6259,8 +5744,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8931 White CD/DVD Jewel Case Inserts (cover)</value>
+ <value>8931 White CD/DVD Jewel Case Inserts (cover)</value>
</prop>
<prop oor:name="Measure">
@@ -6271,8 +5755,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8931 White CD/DVD Jewel Case Inserts (tray)</value>
+ <value>8931 White CD/DVD Jewel Case Inserts (tray)</value>
</prop>
<prop oor:name="Measure">
@@ -6283,8 +5766,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8931 White CD/DVD Labels for Inkjet Printers</value>
+ <value>8931 White CD/DVD Labels for Inkjet Printers</value>
</prop>
<prop oor:name="Measure">
@@ -6295,8 +5777,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11161 Ready Index ExtraWide 5 Tab</value>
+ <value>11161 Ready Index ExtraWide 5 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6307,8 +5788,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11163 Ready Index ExtraWide 8 Tab</value>
+ <value>11163 Ready Index ExtraWide 8 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6319,8 +5799,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11165 Ready Index ExtraWide 10 Tab</value>
+ <value>11165 Ready Index ExtraWide 10 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6331,8 +5810,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11526 Direct Print Custom Dividers 5 Tab Single Set</value>
+ <value>11526 Direct Print Custom Dividers 5 Tab Single Set</value>
</prop>
<prop oor:name="Measure">
@@ -6343,8 +5821,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11527 Direct Print Custom Dividers 8 Tab Single Set</value>
+ <value>11527 Direct Print Custom Dividers 8 Tab Single Set</value>
</prop>
<prop oor:name="Measure">
@@ -6355,8 +5832,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11171 Easy Edit Ready Index - 5 Tabs</value>
+ <value>11171 Easy Edit Ready Index - 5 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -6367,8 +5843,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11172 Easy Edit Ready Index - 8 Tabs</value>
+ <value>11172 Easy Edit Ready Index - 8 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -6379,8 +5854,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11173 Easy Edit Ready Index - 10 Tabs</value>
+ <value>11173 Easy Edit Ready Index - 10 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -6391,8 +5865,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11251 Clear Label/Index Maker Presentation Kit 5 Tab</value>
+ <value>11251 Clear Label/Index Maker Presentation Kit 5 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6403,8 +5876,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11251 Clear Label/Index Maker Spine Label 1/4&quot; or 5/16&quot;</value>
+ <value>11251 Clear Label/Index Maker Spine Label 1/4&quot; or 5/16&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6415,8 +5887,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11251 Clear Label/Index Maker Spine Label 3/8&quot; or 1/2&quot;</value>
+ <value>11251 Clear Label/Index Maker Spine Label 3/8&quot; or 1/2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6427,8 +5898,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11251 Clear Label/Index Maker Spine Label 5/8&quot; or 3/4&quot;</value>
+ <value>11251 Clear Label/Index Maker Spine Label 5/8&quot; or 3/4&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6439,8 +5909,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11251 Clear Label/Index Maker Spine Label 1&quot; or Larger</value>
+ <value>11251 Clear Label/Index Maker Spine Label 1&quot; or Larger</value>
</prop>
<prop oor:name="Measure">
@@ -6451,8 +5920,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11253 Clear Label/Index Maker Narrow 5 Tab</value>
+ <value>11253 Clear Label/Index Maker Narrow 5 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6463,8 +5931,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11253 Clear Label/Index Maker Spine Label 1/4&quot; or 5/16&quot;</value>
+ <value>11253 Clear Label/Index Maker Spine Label 1/4&quot; or 5/16&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6475,8 +5942,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11253 Clear Label/Index Maker Spine Label 3/8&quot; or 1/2&quot;</value>
+ <value>11253 Clear Label/Index Maker Spine Label 3/8&quot; or 1/2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6487,8 +5953,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11253 Clear Label/Index Maker Spine Label 5/8&quot; or 3/4&quot;</value>
+ <value>11253 Clear Label/Index Maker Spine Label 5/8&quot; or 3/4&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6499,8 +5964,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11253 Clear Label/Index Maker Spine Label 1&quot; or Larger</value>
+ <value>11253 Clear Label/Index Maker Spine Label 1&quot; or Larger</value>
</prop>
<prop oor:name="Measure">
@@ -6511,8 +5975,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11260 Ready Index Landscape - 5 Tabs</value>
+ <value>11260 Ready Index Landscape - 5 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -6523,8 +5986,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">11261 Ready Index Landscape - 8 Tabs</value>
+ <value>11261 Ready Index Landscape - 8 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -6535,8 +5997,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">12260 Ready Index Landscape - 5 Tabs</value>
+ <value>12260 Ready Index Landscape - 5 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -6547,8 +6008,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">12261 Ready Index Landscape - 8 Tabs</value>
+ <value>12261 Ready Index Landscape - 8 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -6559,8 +6019,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Index Maker 3 Tab</value>
+ <value>Index Maker 3 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6571,8 +6030,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Index Maker 5 Tab</value>
+ <value>Index Maker 5 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6583,8 +6041,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Index Maker 8 Tab</value>
+ <value>Index Maker 8 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6595,8 +6052,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Hidden Tab 5 Tab</value>
+ <value>Hidden Tab 5 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6607,8 +6063,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Hidden Tab 8 Tab</value>
+ <value>Hidden Tab 8 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6619,8 +6074,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Hidden Tab 10 Tab</value>
+ <value>Hidden Tab 10 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6631,8 +6085,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Prof. Ready Index Spine Insert 1&quot;</value>
+ <value>Prof. Ready Index Spine Insert 1&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6643,8 +6096,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Prof. Ready Index Spine Insert 1 1/2&quot;</value>
+ <value>Prof. Ready Index Spine Insert 1 1/2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6655,8 +6107,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Prof. Ready Index Spine Insert 2&quot;</value>
+ <value>Prof. Ready Index Spine Insert 2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6667,8 +6118,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Prof. Ready Index Spine Insert 3&quot;</value>
+ <value>Prof. Ready Index Spine Insert 3&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6679,8 +6129,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Ready Index 5 Tab</value>
+ <value>Ready Index 5 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6691,8 +6140,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Ready Index 8 Tab</value>
+ <value>Ready Index 8 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6703,8 +6151,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Ready Index 10 Tab</value>
+ <value>Ready Index 10 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6715,8 +6162,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Ready Index 12 Tab</value>
+ <value>Ready Index 12 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6727,8 +6173,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Ready Index 15 Tab</value>
+ <value>Ready Index 15 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6739,8 +6184,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">WorkSaver Divider 5 Tabs</value>
+ <value>WorkSaver Divider 5 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -6751,8 +6195,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">WorkSaver Divider 8 Tabs</value>
+ <value>WorkSaver Divider 8 Tabs</value>
</prop>
<prop oor:name="Measure">
@@ -6763,8 +6206,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">WorkSaver Inserts 1/3 Cut</value>
+ <value>WorkSaver Inserts 1/3 Cut</value>
</prop>
<prop oor:name="Measure">
@@ -6775,8 +6217,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">WorkSaver Inserts 1/5 Cut</value>
+ <value>WorkSaver Inserts 1/5 Cut</value>
</prop>
<prop oor:name="Measure">
@@ -6787,8 +6228,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Self Adhesive Index Tab 1&quot;</value>
+ <value>Self Adhesive Index Tab 1&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6799,8 +6239,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Self Adhesive Index Tab 1 1/2&quot;</value>
+ <value>Self Adhesive Index Tab 1 1/2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6811,8 +6250,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Self Adhesive Index Tab 2&quot;</value>
+ <value>Self Adhesive Index Tab 2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6823,8 +6261,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Protect &apos;n Tab - 5 Tab</value>
+ <value>Protect &apos;n Tab - 5 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6835,8 +6272,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">Protect &apos;n Tab - 8 Tab</value>
+ <value>Protect &apos;n Tab - 8 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -6847,8 +6283,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">TitleFrames Asst.Spines Insert 1&quot;</value>
+ <value>TitleFrames Asst.Spines Insert 1&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6859,8 +6294,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">TitleFrames Asst.Spines Insert 1 1/2&quot;</value>
+ <value>TitleFrames Asst.Spines Insert 1 1/2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6871,8 +6305,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">TitleFrames Asst.Spines Insert 2&quot;</value>
+ <value>TitleFrames Asst.Spines Insert 2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6883,8 +6316,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">TitleFrames Asst. Spines Insert 3&quot;</value>
+ <value>TitleFrames Asst. Spines Insert 3&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6895,8 +6327,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">TitleFrames Cover - 1&quot;</value>
+ <value>TitleFrames Cover - 1&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6907,8 +6338,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">TitleFrames Spine - 1&quot;</value>
+ <value>TitleFrames Spine - 1&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6919,8 +6349,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">TitleFrames Cover - 1 1/2&quot;</value>
+ <value>TitleFrames Cover - 1 1/2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6931,8 +6360,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">TitleFrames Spine - 1 1/2&quot;</value>
+ <value>TitleFrames Spine - 1 1/2&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -6943,8 +6371,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">2160 Addressing</value>
+ <value>2160 Addressing</value>
</prop>
<prop oor:name="Measure">
@@ -6955,8 +6382,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">2162 Addressing</value>
+ <value>2162 Addressing</value>
</prop>
<prop oor:name="Measure">
@@ -6967,8 +6393,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">2163 Address/Shipping</value>
+ <value>2163 Address/Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -6979,8 +6404,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">2164 Shipping</value>
+ <value>2164 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -6991,8 +6415,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">2180 File Folder-Assorted</value>
+ <value>2180 File Folder-Assorted</value>
</prop>
<prop oor:name="Measure">
@@ -7003,8 +6426,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">2181 File Folder-White</value>
+ <value>2181 File Folder-White</value>
</prop>
<prop oor:name="Measure">
@@ -7015,8 +6437,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">2186 3.5&quot; Diskette-White</value>
+ <value>2186 3.5&quot; Diskette-White</value>
</prop>
<prop oor:name="Measure">
@@ -7027,8 +6448,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6490 Remove &apos;Em 3.5&quot; Diskette-Face Only Labels</value>
+ <value>6490 Remove &apos;Em 3.5&quot; Diskette-Face Only Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7039,8 +6459,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6466 Remove &apos;Em File Folder Labels</value>
+ <value>6466 Remove &apos;Em File Folder Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7051,8 +6470,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6460 Remove &apos;Em Address Labels</value>
+ <value>6460 Remove &apos;Em Address Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7063,8 +6481,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6464 Remove &apos;Em Shipping Labels</value>
+ <value>6464 Remove &apos;Em Shipping Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7075,8 +6492,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6465 Removable Laser - Full Sheet</value>
+ <value>6465 Removable Laser - Full Sheet</value>
</prop>
<prop oor:name="Measure">
@@ -7087,8 +6503,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6467 Removable Laser - Small Multi-Purpose</value>
+ <value>6467 Removable Laser - Small Multi-Purpose</value>
</prop>
<prop oor:name="Measure">
@@ -7099,8 +6514,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6503 Remove&apos;em white laser 8 1/2&quot; x 11&quot;</value>
+ <value>6503 Remove&apos;em white laser 8 1/2&quot; x 11&quot;</value>
</prop>
<prop oor:name="Measure">
@@ -7111,8 +6525,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5824 CD-Recordable Labels</value>
+ <value>5824 CD-Recordable Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7123,8 +6536,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5836 MtgCreator Portfolio Label</value>
+ <value>5836 MtgCreator Portfolio Label</value>
</prop>
<prop oor:name="Measure">
@@ -7135,8 +6547,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5836 MtgCreator Divider 5 Tab</value>
+ <value>5836 MtgCreator Divider 5 Tab</value>
</prop>
<prop oor:name="Measure">
@@ -7147,8 +6558,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3111 Square Stickers</value>
+ <value>3111 Square Stickers</value>
</prop>
<prop oor:name="Measure">
@@ -7159,8 +6569,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3112 Small Round Stickers</value>
+ <value>3112 Small Round Stickers</value>
</prop>
<prop oor:name="Measure">
@@ -7171,8 +6580,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3114 Full Page Stickers</value>
+ <value>3114 Full Page Stickers</value>
</prop>
<prop oor:name="Measure">
@@ -7183,8 +6591,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3248 Glossy Photo Quality Postcard</value>
+ <value>3248 Glossy Photo Quality Postcard</value>
</prop>
<prop oor:name="Measure">
@@ -7195,8 +6602,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3251 Feather Edge Greeting Card</value>
+ <value>3251 Feather Edge Greeting Card</value>
</prop>
<prop oor:name="Measure">
@@ -7207,8 +6613,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3252 Vellum Overlay Greeting Card</value>
+ <value>3252 Vellum Overlay Greeting Card</value>
</prop>
<prop oor:name="Measure">
@@ -7219,8 +6624,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3254 Glossy Photo Quality Print-to-the-Edge Greeting Card</value>
+ <value>3254 Glossy Photo Quality Print-to-the-Edge Greeting Card</value>
</prop>
<prop oor:name="Measure">
@@ -7231,8 +6635,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3256 White Embossed Note Cards</value>
+ <value>3256 White Embossed Note Cards</value>
</prop>
<prop oor:name="Measure">
@@ -7243,8 +6646,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3259 Ivory Embossed Note Card</value>
+ <value>3259 Ivory Embossed Note Card</value>
</prop>
<prop oor:name="Measure">
@@ -7255,8 +6657,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3260 Ivory Embossed Half-Fold Card</value>
+ <value>3260 Ivory Embossed Half-Fold Card</value>
</prop>
<prop oor:name="Measure">
@@ -7267,8 +6668,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3261 White Large Labels</value>
+ <value>3261 White Large Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7279,8 +6679,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3261 White Small Labels</value>
+ <value>3261 White Small Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7291,8 +6690,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3261 White Return Address Labels</value>
+ <value>3261 White Return Address Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7303,8 +6701,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3263 White Postcard</value>
+ <value>3263 White Postcard</value>
</prop>
<prop oor:name="Measure">
@@ -7315,8 +6712,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3265 White Half-Fold Card</value>
+ <value>3265 White Half-Fold Card</value>
</prop>
<prop oor:name="Measure">
@@ -7327,8 +6723,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3266 White Quarter-Fold Card</value>
+ <value>3266 White Quarter-Fold Card</value>
</prop>
<prop oor:name="Measure">
@@ -7339,8 +6734,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3268 White Note Card</value>
+ <value>3268 White Note Card</value>
</prop>
<prop oor:name="Measure">
@@ -7351,8 +6745,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3274 White Big Round Stickers</value>
+ <value>3274 White Big Round Stickers</value>
</prop>
<prop oor:name="Measure">
@@ -7363,8 +6756,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3274 White Small Round Stickers</value>
+ <value>3274 White Small Round Stickers</value>
</prop>
<prop oor:name="Measure">
@@ -7375,8 +6767,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3274 White Square Stickers</value>
+ <value>3274 White Square Stickers</value>
</prop>
<prop oor:name="Measure">
@@ -7387,8 +6778,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3269 Glossy Photo Quality Half-Fold Cards</value>
+ <value>3269 Glossy Photo Quality Half-Fold Cards</value>
</prop>
<prop oor:name="Measure">
@@ -7399,8 +6789,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8313 Glossy Photo Quality 4&quot; x 6&quot; Card</value>
+ <value>8313 Glossy Photo Quality 4&quot; x 6&quot; Card</value>
</prop>
<prop oor:name="Measure">
@@ -7411,8 +6800,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8314 Glossy Photo Quality 8-1/2&quot; x 11&quot; Card</value>
+ <value>8314 Glossy Photo Quality 8-1/2&quot; x 11&quot; Card</value>
</prop>
<prop oor:name="Measure">
@@ -7423,8 +6811,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8373 Glossy Photo Quality Business Card</value>
+ <value>8373 Glossy Photo Quality Business Card</value>
</prop>
<prop oor:name="Measure">
@@ -7435,8 +6822,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8389 Glossy Photo Quality Postcard</value>
+ <value>8389 Glossy Photo Quality Postcard</value>
</prop>
<prop oor:name="Measure">
@@ -7447,8 +6833,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8763 Glossy Photo Quality Labels</value>
+ <value>8763 Glossy Photo Quality Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7459,8 +6844,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8769 Glossy Photo Quality Labels</value>
+ <value>8769 Glossy Photo Quality Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7471,8 +6855,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3273 White Print-to-the-Edge Greeting Cards</value>
+ <value>3273 White Print-to-the-Edge Greeting Cards</value>
</prop>
<prop oor:name="Measure">
@@ -7483,8 +6866,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3277 Textured Canvas for Ink Jet Printers</value>
+ <value>3277 Textured Canvas for Ink Jet Printers</value>
</prop>
<prop oor:name="Measure">
@@ -7495,8 +6877,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8317 Embossed Ink Jet Note Card - Ivory</value>
+ <value>8317 Embossed Ink Jet Note Card - Ivory</value>
</prop>
<prop oor:name="Measure">
@@ -7507,8 +6888,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8384 Photo Quality Brochures</value>
+ <value>8384 Photo Quality Brochures</value>
</prop>
<prop oor:name="Measure">
@@ -7519,8 +6899,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">53220 Glossy 4x6 Photo Paper</value>
+ <value>53220 Glossy 4x6 Photo Paper</value>
</prop>
<prop oor:name="Measure">
@@ -7531,8 +6910,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">53221 Glossy 5x7 Photo Paper</value>
+ <value>53221 Glossy 5x7 Photo Paper</value>
</prop>
<prop oor:name="Measure">
@@ -7543,8 +6921,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5881 Color Laser Business Cards</value>
+ <value>5881 Color Laser Business Cards</value>
</prop>
<prop oor:name="Measure">
@@ -7555,8 +6932,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5884 Glossy Color Laser Brochures</value>
+ <value>5884 Glossy Color Laser Brochures</value>
</prop>
<prop oor:name="Measure">
@@ -7567,8 +6943,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5889 Color Laser Postcards</value>
+ <value>5889 Color Laser Postcards</value>
</prop>
<prop oor:name="Measure">
@@ -7579,8 +6954,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">8877 Ink Jet Business Card - Gray</value>
+ <value>8877 Ink Jet Business Card - Gray</value>
</prop>
<prop oor:name="Measure">
@@ -7591,8 +6965,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6873 Color Laser Address Labels</value>
+ <value>6873 Color Laser Address Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7603,8 +6976,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6879 Color Laser Address Labels</value>
+ <value>6879 Color Laser Address Labels</value>
</prop>
<prop oor:name="Measure">
@@ -7615,8 +6987,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4207 Price Marking</value>
+ <value>4207 Price Marking</value>
</prop>
<prop oor:name="Measure">
@@ -7627,8 +6998,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4144 Address</value>
+ <value>4144 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7639,8 +7009,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4021 Address</value>
+ <value>4021 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7651,8 +7020,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4145 Address</value>
+ <value>4145 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7663,8 +7031,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4013 Address</value>
+ <value>4013 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7675,8 +7042,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">R-4013 Address</value>
+ <value>R-4013 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7687,8 +7053,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4030 Address</value>
+ <value>4030 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7699,8 +7064,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4031 Address</value>
+ <value>4031 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7711,8 +7075,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4029 Address</value>
+ <value>4029 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7723,8 +7086,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4060 Address</value>
+ <value>4060 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7735,8 +7097,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4065 Address</value>
+ <value>4065 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7747,8 +7108,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4143 Address</value>
+ <value>4143 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7759,8 +7119,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4066 Address</value>
+ <value>4066 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7771,8 +7130,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4146 Address</value>
+ <value>4146 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7783,8 +7141,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4014 Address</value>
+ <value>4014 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7795,8 +7152,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4032 Address</value>
+ <value>4032 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7807,8 +7163,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4033 Address</value>
+ <value>4033 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7819,8 +7174,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4022 Address</value>
+ <value>4022 Address</value>
</prop>
<prop oor:name="Measure">
@@ -7831,8 +7185,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4162 Address-Clear</value>
+ <value>4162 Address-Clear</value>
</prop>
<prop oor:name="Measure">
@@ -7843,8 +7196,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4601 Address-Clear</value>
+ <value>4601 Address-Clear</value>
</prop>
<prop oor:name="Measure">
@@ -7855,8 +7207,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4161 Shipping-Red Border</value>
+ <value>4161 Shipping-Red Border</value>
</prop>
<prop oor:name="Measure">
@@ -7867,8 +7218,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4088 Shipping</value>
+ <value>4088 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -7879,8 +7229,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4076 Shipping</value>
+ <value>4076 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -7891,8 +7240,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4110 Shipping</value>
+ <value>4110 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -7903,8 +7251,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4027 File Folder / Address</value>
+ <value>4027 File Folder / Address</value>
</prop>
<prop oor:name="Measure">
@@ -7915,8 +7262,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4255 File Folder</value>
+ <value>4255 File Folder</value>
</prop>
<prop oor:name="Measure">
@@ -7927,8 +7273,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4266 File Folder-Assorted</value>
+ <value>4266 File Folder-Assorted</value>
</prop>
<prop oor:name="Measure">
@@ -7939,8 +7284,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4163 Piggyback</value>
+ <value>4163 Piggyback</value>
</prop>
<prop oor:name="Measure">
@@ -7951,8 +7295,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4160 Name Badge</value>
+ <value>4160 Name Badge</value>
</prop>
<prop oor:name="Measure">
@@ -7963,8 +7306,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4241 3-1/2&quot; Diskette</value>
+ <value>4241 3-1/2&quot; Diskette</value>
</prop>
<prop oor:name="Measure">
@@ -7975,8 +7317,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4166 Index Card</value>
+ <value>4166 Index Card</value>
</prop>
<prop oor:name="Measure">
@@ -7987,8 +7328,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4167 Post Card</value>
+ <value>4167 Post Card</value>
</prop>
<prop oor:name="Measure">
@@ -7999,8 +7339,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4037 Address</value>
+ <value>4037 Address</value>
</prop>
<prop oor:name="Measure">
@@ -8011,8 +7350,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4020 Address</value>
+ <value>4020 Address</value>
</prop>
<prop oor:name="Measure">
@@ -8023,8 +7361,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4109 Address</value>
+ <value>4109 Address</value>
</prop>
<prop oor:name="Measure">
@@ -8035,8 +7372,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4018 Address - Removable</value>
+ <value>4018 Address - Removable</value>
</prop>
<prop oor:name="Measure">
@@ -8047,8 +7383,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4062 Address</value>
+ <value>4062 Address</value>
</prop>
<prop oor:name="Measure">
@@ -8059,8 +7394,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4035 Address</value>
+ <value>4035 Address</value>
</prop>
<prop oor:name="Measure">
@@ -8071,8 +7405,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4052 Data Storage</value>
+ <value>4052 Data Storage</value>
</prop>
<prop oor:name="Measure">
@@ -8083,8 +7416,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4067 Address</value>
+ <value>4067 Address</value>
</prop>
<prop oor:name="Measure">
@@ -8095,8 +7427,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4019 Address - Removable</value>
+ <value>4019 Address - Removable</value>
</prop>
<prop oor:name="Measure">
@@ -8107,8 +7438,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4015 Address</value>
+ <value>4015 Address</value>
</prop>
<prop oor:name="Measure">
@@ -8119,8 +7449,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4090 Address</value>
+ <value>4090 Address</value>
</prop>
<prop oor:name="Measure">
@@ -8131,8 +7460,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4043 Shipping</value>
+ <value>4043 Shipping</value>
</prop>
<prop oor:name="Measure">
@@ -8146,8 +7474,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">2493 Inkjet-Photo-Papier, blanko</value>
+ <value>2493 Inkjet-Photo-Papier, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8158,8 +7485,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">2494 Inkjet-Photo-Papier, blanko</value>
+ <value>2494 Inkjet-Photo-Papier, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8170,8 +7496,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">2495 Inkjet-Photo-Papier, blanko</value>
+ <value>2495 Inkjet-Photo-Papier, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8182,8 +7507,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32010 Visitenkarten, blanko</value>
+ <value>32010 Visitenkarten, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8194,8 +7518,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32011 Visitenkarten, blanko, schnittgestanzt</value>
+ <value>32011 Visitenkarten, blanko, schnittgestanzt</value>
</prop>
<prop oor:name="Measure">
@@ -8206,8 +7529,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32012 Visitenkarten, blanko, schnittgestanzt</value>
+ <value>32012 Visitenkarten, blanko, schnittgestanzt</value>
</prop>
<prop oor:name="Measure">
@@ -8218,8 +7540,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32014 Inkjet-Visitenkarten, blanko</value>
+ <value>32014 Inkjet-Visitenkarten, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8230,8 +7551,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32017 Doppel-Visitenkarten, blanko</value>
+ <value>32017 Doppel-Visitenkarten, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8242,8 +7562,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32020 Visitenkarten, marmoriert</value>
+ <value>32020 Visitenkarten, marmoriert</value>
</prop>
<prop oor:name="Measure">
@@ -8254,8 +7573,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32021 Visitenkarten, marmoriert</value>
+ <value>32021 Visitenkarten, marmoriert</value>
</prop>
<prop oor:name="Measure">
@@ -8266,8 +7584,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32022 Visitenkarten, marmoriert</value>
+ <value>32022 Visitenkarten, marmoriert</value>
</prop>
<prop oor:name="Measure">
@@ -8278,8 +7595,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32023 Visitenkarten, marmoriert</value>
+ <value>32023 Visitenkarten, marmoriert</value>
</prop>
<prop oor:name="Measure">
@@ -8290,8 +7606,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32029 Visitenkarten, blanko, Glossy</value>
+ <value>32029 Visitenkarten, blanko, Glossy</value>
</prop>
<prop oor:name="Measure">
@@ -8302,8 +7617,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32030 Visitenkarten, Blue Wave</value>
+ <value>32030 Visitenkarten, Blue Wave</value>
</prop>
<prop oor:name="Measure">
@@ -8314,8 +7628,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32031 Visitenkarten, Paradise</value>
+ <value>32031 Visitenkarten, Paradise</value>
</prop>
<prop oor:name="Measure">
@@ -8326,8 +7639,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32032 Visitenkarten, Sahara</value>
+ <value>32032 Visitenkarten, Sahara</value>
</prop>
<prop oor:name="Measure">
@@ -8338,8 +7650,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32036 Visitenkarten, Cosmic</value>
+ <value>32036 Visitenkarten, Cosmic</value>
</prop>
<prop oor:name="Measure">
@@ -8350,8 +7661,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32040 Visitenkarten, blanko</value>
+ <value>32040 Visitenkarten, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8362,8 +7672,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32060 Inkjet Bütten-Papier, Cream</value>
+ <value>32060 Inkjet Bütten-Papier, Cream</value>
</prop>
<prop oor:name="Measure">
@@ -8374,8 +7683,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32061 Inkjet Bütten-Papier, Aqua</value>
+ <value>32061 Inkjet Bütten-Papier, Aqua</value>
</prop>
<prop oor:name="Measure">
@@ -8386,8 +7694,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32062 Inkjet Bütten-Papier, Jade</value>
+ <value>32062 Inkjet Bütten-Papier, Jade</value>
</prop>
<prop oor:name="Measure">
@@ -8398,8 +7705,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32063 Inkjet Bütten-Papier, Sand</value>
+ <value>32063 Inkjet Bütten-Papier, Sand</value>
</prop>
<prop oor:name="Measure">
@@ -8410,8 +7716,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32064 Inkjet-Papier, Leinenstruktur</value>
+ <value>32064 Inkjet-Papier, Leinenstruktur</value>
</prop>
<prop oor:name="Measure">
@@ -8422,8 +7727,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32065 Inkjet-Papier, Hammerschlag</value>
+ <value>32065 Inkjet-Papier, Hammerschlag</value>
</prop>
<prop oor:name="Measure">
@@ -8434,8 +7738,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32080 Marmoriertes Papier</value>
+ <value>32080 Marmoriertes Papier</value>
</prop>
<prop oor:name="Measure">
@@ -8446,8 +7749,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32081 Marmoriertes Papier</value>
+ <value>32081 Marmoriertes Papier</value>
</prop>
<prop oor:name="Measure">
@@ -8458,8 +7760,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32082 Marmoriertes Papier</value>
+ <value>32082 Marmoriertes Papier</value>
</prop>
<prop oor:name="Measure">
@@ -8470,8 +7771,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32083 Marmoriertes Papier</value>
+ <value>32083 Marmoriertes Papier</value>
</prop>
<prop oor:name="Measure">
@@ -8482,8 +7782,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32098 Urkunde marmoriert, Text rot</value>
+ <value>32098 Urkunde marmoriert, Text rot</value>
</prop>
<prop oor:name="Measure">
@@ -8494,8 +7793,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32099 Urkunde marmoriert, Text gold</value>
+ <value>32099 Urkunde marmoriert, Text gold</value>
</prop>
<prop oor:name="Measure">
@@ -8506,8 +7804,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32250 CD-Einleger, blanko</value>
+ <value>32250 CD-Einleger, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8518,8 +7815,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32251 Inkjet-CD-Einleger</value>
+ <value>32251 Inkjet-CD-Einleger</value>
</prop>
<prop oor:name="Measure">
@@ -8530,8 +7826,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32252 Postkarte, blanko</value>
+ <value>32252 Postkarte, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8542,8 +7837,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32253 Tischkarte, blanko</value>
+ <value>32253 Tischkarte, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8554,8 +7848,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32254 Karteikarte, blanko</value>
+ <value>32254 Karteikarte, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8566,8 +7859,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32255 Cassetten-Einleger, blanko</value>
+ <value>32255 Cassetten-Einleger, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8578,8 +7870,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32256 Video-Einleger, blanko</value>
+ <value>32256 Video-Einleger, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8590,8 +7881,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32257 Tischkarte lang, blanko</value>
+ <value>32257 Tischkarte lang, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8602,8 +7892,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32258 Regalschilder</value>
+ <value>32258 Regalschilder</value>
</prop>
<prop oor:name="Measure">
@@ -8614,8 +7903,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32286 Inkjet-Glückwunschkarten, blanko</value>
+ <value>32286 Inkjet-Glückwunschkarten, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8626,8 +7914,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32287 Inkjet-Glückwunschkarten, blanko</value>
+ <value>32287 Inkjet-Glückwunschkarten, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8638,8 +7925,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32288 Inkjet-Glückwunschkarten, blanko</value>
+ <value>32288 Inkjet-Glückwunschkarten, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8650,8 +7936,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">32289 Inkjet-Glückwunschkarten, blanko</value>
+ <value>32289 Inkjet-Glückwunschkarten, blanko</value>
</prop>
<prop oor:name="Measure">
@@ -8662,8 +7947,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9312 Glossy Visitenkarten, schnittgestanzt</value>
+ <value>C9312 Glossy Visitenkarten, schnittgestanzt</value>
</prop>
<prop oor:name="Measure">
@@ -8674,8 +7958,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3415 Kreise</value>
+ <value>3415 Kreise</value>
</prop>
<prop oor:name="Measure">
@@ -8686,8 +7969,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3416 Kreise</value>
+ <value>3416 Kreise</value>
</prop>
<prop oor:name="Measure">
@@ -8698,8 +7980,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3418 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3418 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8710,8 +7991,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3420 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3420 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8722,8 +8002,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3421 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3421 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8734,8 +8013,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3422 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3422 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8746,8 +8024,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3423 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3423 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8758,8 +8035,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3424 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3424 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8770,8 +8046,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3425 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3425 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8782,8 +8057,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3426 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3426 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8794,8 +8068,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3427 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3427 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8806,8 +8079,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3448 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3448 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8818,8 +8090,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3449 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3449 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8830,8 +8101,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3450 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3450 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8842,8 +8112,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3451 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3451 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8854,8 +8123,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3452 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3452 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8866,8 +8134,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3453 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3453 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8878,8 +8145,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3454 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3454 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8890,8 +8156,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3455 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3455 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8902,8 +8167,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3456 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3456 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8914,8 +8178,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3457 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3457 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8926,8 +8189,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3458 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3458 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8938,8 +8200,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3459 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3459 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8950,8 +8211,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3470 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3470 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8962,8 +8222,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3471 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3471 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8974,8 +8233,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3472 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3472 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8986,8 +8244,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3473 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3473 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -8998,8 +8255,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3474 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3474 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9010,8 +8266,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3475 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3475 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9022,8 +8277,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3477 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3477 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9034,8 +8288,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3478 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3478 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9046,8 +8299,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3479 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3479 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9058,8 +8310,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3481 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3481 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9070,8 +8321,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3483 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3483 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9082,8 +8332,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3484 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3484 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9094,8 +8343,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3489 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3489 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9106,8 +8354,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3490 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3490 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9118,8 +8365,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3651 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3651 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9130,8 +8376,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3652 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3652 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9142,8 +8387,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3653 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3653 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9154,8 +8398,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3654 CD-Etiketten</value>
+ <value>3654 CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9166,8 +8409,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3655 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3655 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9178,8 +8420,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3657 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3657 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9190,8 +8431,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3658 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3658 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9202,8 +8442,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3659 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3659 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9214,8 +8453,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3660 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3660 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9226,8 +8464,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3661 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3661 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9238,8 +8475,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3662 Ordnerrücken-Etiketten, schmal</value>
+ <value>3662 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9250,8 +8486,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3663 Ordnerrücken-Etiketten, breit</value>
+ <value>3663 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9262,8 +8497,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3664 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3664 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9274,8 +8508,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3665 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3665 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9286,8 +8519,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3666 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3666 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9298,8 +8530,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3667 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3667 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9310,8 +8541,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3668 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3668 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9322,8 +8552,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3669 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>3669 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9334,8 +8563,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3674 Computer-Etiketten</value>
+ <value>3674 Computer-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9346,8 +8574,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3675 Computer-Etiketten</value>
+ <value>3675 Computer-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9358,8 +8585,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3676 Computer-Etiketten</value>
+ <value>3676 Computer-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9370,8 +8596,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3677 Computer-Etiketten, für 3,5&quot; Disk.</value>
+ <value>3677 Computer-Etiketten, für 3,5&quot; Disk.</value>
</prop>
<prop oor:name="Measure">
@@ -9382,8 +8607,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3684 Computer-Etiketten, für 3,5&quot; Disk.</value>
+ <value>3684 Computer-Etiketten, für 3,5&quot; Disk.</value>
</prop>
<prop oor:name="Measure">
@@ -9394,8 +8618,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3685 Computer-Etiketten, für 3,5&quot; Disk.</value>
+ <value>3685 Computer-Etiketten, für 3,5&quot; Disk.</value>
</prop>
<prop oor:name="Measure">
@@ -9406,8 +8629,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3686 Computer-Etiketten, für 3,5&quot; Disk.</value>
+ <value>3686 Computer-Etiketten, für 3,5&quot; Disk.</value>
</prop>
<prop oor:name="Measure">
@@ -9418,8 +8640,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3687 Computer-Etiketten, für 3,5&quot; Disk.</value>
+ <value>3687 Computer-Etiketten, für 3,5&quot; Disk.</value>
</prop>
<prop oor:name="Measure">
@@ -9430,8 +8651,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3688 Ordnerrücken-Etiketten, breit</value>
+ <value>3688 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9442,8 +8662,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3689 Ordnerrücken-Etiketten, schmal</value>
+ <value>3689 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9454,8 +8673,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3691 Ordnerrücken-Etiketten, breit</value>
+ <value>3691 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9466,8 +8684,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3692 Ordnerrücken-Etiketten, breit</value>
+ <value>3692 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9478,8 +8695,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3693 Ordnerrücken-Etiketten, breit</value>
+ <value>3693 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9490,8 +8706,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3694 Ordnerrücken-Etiketten, breit</value>
+ <value>3694 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9502,8 +8717,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3696 Ordnerrücken-Etiketten, schmal</value>
+ <value>3696 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9514,8 +8728,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3697 Ordnerrücken-Etiketten, schmal</value>
+ <value>3697 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9526,8 +8739,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3698 Ordnerrücken-Etiketten, schmal</value>
+ <value>3698 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9538,8 +8750,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3699 Ordnerrücken-Etiketten, schmal</value>
+ <value>3699 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9550,8 +8761,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4720 Transparente Etiketten</value>
+ <value>4720 Transparente Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9562,8 +8772,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4721 Transparente Etiketten</value>
+ <value>4721 Transparente Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9574,8 +8783,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4722 Transparente Etiketten</value>
+ <value>4722 Transparente Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9586,8 +8794,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4723 Transparente Etiketten</value>
+ <value>4723 Transparente Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -9598,8 +8805,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4730 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4730 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9610,8 +8816,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4731 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4731 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9622,8 +8827,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4732 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4732 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9634,8 +8838,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4733 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4733 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9646,8 +8849,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4734 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4734 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9658,8 +8860,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4735 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4735 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9670,8 +8871,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4736 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4736 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9682,8 +8882,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4737 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4737 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9694,8 +8893,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4738 Disketten-Etiketten, Stick+Lift</value>
+ <value>4738 Disketten-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9706,8 +8904,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4739 Disketten-Etiketten, Stick+Lift</value>
+ <value>4739 Disketten-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9718,8 +8915,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4740 Disketten-Etiketten, Stick+Lift</value>
+ <value>4740 Disketten-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9730,8 +8926,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4741 Disketten-Etiketten, Stick+Lift</value>
+ <value>4741 Disketten-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9742,8 +8937,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4742 Video-Etiketten, Stick+Lift</value>
+ <value>4742 Video-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9754,8 +8948,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4743 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4743 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9766,8 +8959,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4744 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4744 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9778,8 +8970,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4745 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>4745 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9790,8 +8981,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4746 Video-Etiketten, Stick+Lift</value>
+ <value>4746 Video-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -9802,8 +8992,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4747 Etiketten für ZIP-Disketten</value>
+ <value>4747 Etiketten für ZIP-Disketten</value>
</prop>
<prop oor:name="Measure">
@@ -9814,8 +9003,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4748 Ordnerrücken-Etiketten, schmal</value>
+ <value>4748 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9826,8 +9014,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4749 Ordnerrücken-Etiketten, schmal</value>
+ <value>4749 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9838,8 +9025,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4750 Ordnerrücken-Etiketten, schmal</value>
+ <value>4750 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9850,8 +9036,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4751 Ordnerrücken-Etiketten, schmal</value>
+ <value>4751 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9862,8 +9047,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4752 Ordnerrücken-Etiketten, breit</value>
+ <value>4752 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9874,8 +9058,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4753 Ordnerrücken-Etiketten, breit</value>
+ <value>4753 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9886,8 +9069,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4754 Ordnerrücken-Etiketten, breit</value>
+ <value>4754 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9898,8 +9080,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4755 Ordnerrücken-Etiketten, breit</value>
+ <value>4755 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9910,8 +9091,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4756 Hängeordner-Etiketten, schmal</value>
+ <value>4756 Hängeordner-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9922,8 +9102,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4757 Hängeordner-Etiketten, breit</value>
+ <value>4757 Hängeordner-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9934,8 +9113,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4758 Ordnerrücken-Etiketten, schmal</value>
+ <value>4758 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9946,8 +9124,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4759 Ordnerrücken-Etiketten, breit</value>
+ <value>4759 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9958,8 +9135,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4760 Ordnerrücken-Etiketten, schmal</value>
+ <value>4760 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9970,8 +9146,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4761 Ordnerrücken-Etiketten, breit</value>
+ <value>4761 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -9982,8 +9157,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4762 Ordnerrücken-Etiketten, schmal</value>
+ <value>4762 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -9994,8 +9168,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4763 Ordnerrücken-Etiketten, schmal</value>
+ <value>4763 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -10006,8 +9179,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4764 Ordnerrücken-Etiketten, schmal</value>
+ <value>4764 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -10018,8 +9190,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4765 Ordnerrücken-Etiketten, schmal</value>
+ <value>4765 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -10030,8 +9201,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4766 Ordnerrücken-Etiketten, breit</value>
+ <value>4766 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -10042,8 +9212,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4767 Ordnerrücken-Etiketten, breit</value>
+ <value>4767 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -10054,8 +9223,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4768 Ordnerrücken-Etiketten, breit</value>
+ <value>4768 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -10066,8 +9234,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4769 Ordnerrücken-Etiketten, breit</value>
+ <value>4769 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -10078,8 +9245,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4770 Transparente Etiketten</value>
+ <value>4770 Transparente Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10090,8 +9256,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4771 Transparente Etiketten</value>
+ <value>4771 Transparente Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10102,8 +9267,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4772 Transparente Etiketten</value>
+ <value>4772 Transparente Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10114,8 +9278,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4773 Wetterfeste Etiketten</value>
+ <value>4773 Wetterfeste Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10126,8 +9289,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4774 Wetterfeste Etiketten</value>
+ <value>4774 Wetterfeste Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10138,8 +9300,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4775 Wetterfeste Etiketten</value>
+ <value>4775 Wetterfeste Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10150,8 +9311,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4776 Wetterfeste Etiketten</value>
+ <value>4776 Wetterfeste Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10162,8 +9322,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4777 Transparente Etiketten</value>
+ <value>4777 Transparente Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10174,8 +9333,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4780 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>4780 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10186,8 +9344,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4781 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>4781 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10198,8 +9355,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4782 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>4782 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10210,8 +9366,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4784 Namens-Etiketten</value>
+ <value>4784 Namens-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10222,8 +9377,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4790 Inkjet-Etiketten, rund</value>
+ <value>4790 Inkjet-Etiketten, rund</value>
</prop>
<prop oor:name="Measure">
@@ -10234,8 +9388,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4791 Inkjet-Etiketten</value>
+ <value>4791 Inkjet-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10246,8 +9399,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4792 Inkjet-Etiketten</value>
+ <value>4792 Inkjet-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10258,8 +9410,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4793 Inkjet-Etiketten</value>
+ <value>4793 Inkjet-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10270,8 +9421,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4794 Inkjet-Etiketten</value>
+ <value>4794 Inkjet-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10282,8 +9432,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4795 Inkjet-Etiketten</value>
+ <value>4795 Inkjet-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10294,8 +9443,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4798 Disketten-Etiketten Photo-Qualität</value>
+ <value>4798 Disketten-Etiketten Photo-Qualität</value>
</prop>
<prop oor:name="Measure">
@@ -10306,8 +9454,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">4799 Inkjet-Etiketten, oval</value>
+ <value>4799 Inkjet-Etiketten, oval</value>
</prop>
<prop oor:name="Measure">
@@ -10318,8 +9465,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6002 Neon-Etiketten</value>
+ <value>6002 Neon-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10330,8 +9476,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6003 Neon-Etiketten</value>
+ <value>6003 Neon-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10342,8 +9487,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6004 Neon-Etiketten</value>
+ <value>6004 Neon-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10354,8 +9498,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6005 Neon-Etiketten</value>
+ <value>6005 Neon-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10366,8 +9509,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6006 Neon-Etiketten</value>
+ <value>6006 Neon-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10378,8 +9520,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6008 Typenschild-Etiketten</value>
+ <value>6008 Typenschild-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10390,8 +9531,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6009 Typenschild-Etiketten</value>
+ <value>6009 Typenschild-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10402,8 +9542,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6011 Typenschild-Etiketten</value>
+ <value>6011 Typenschild-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10414,8 +9553,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6012 Typenschild-Etiketten</value>
+ <value>6012 Typenschild-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10426,8 +9564,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6013 Typenschild-Etiketten</value>
+ <value>6013 Typenschild-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10438,8 +9575,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6014 Etiketten für CD-Hüllen</value>
+ <value>6014 Etiketten für CD-Hüllen</value>
</prop>
<prop oor:name="Measure">
@@ -10450,8 +9586,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6015 CD-Etiketten incl. Zentrierhilfe</value>
+ <value>6015 CD-Etiketten incl. Zentrierhilfe</value>
</prop>
<prop oor:name="Measure">
@@ -10462,8 +9597,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6019 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>6019 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -10474,8 +9608,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6020 Dia-Etiketten, Stick+Lift</value>
+ <value>6020 Dia-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -10486,8 +9619,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6021 Sichtreiter-Etiketten, Stick+Lift</value>
+ <value>6021 Sichtreiter-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -10498,8 +9630,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6022 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>6022 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -10510,8 +9641,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6023 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>6023 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -10522,8 +9652,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6024 Inkjet+Laser+Kopier-Etiketten Stick+Lift, </value>
+ <value>6024 Inkjet+Laser+Kopier-Etiketten Stick+Lift, </value>
</prop>
<prop oor:name="Measure">
@@ -10534,8 +9663,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6025 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>6025 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -10546,8 +9674,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6026 Disketten-Etiketten, Stick+Lift</value>
+ <value>6026 Disketten-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -10558,8 +9685,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6029 Disketten-Etiketten, Stick+Lift</value>
+ <value>6029 Disketten-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -10570,8 +9696,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6030 Cassetten-Etiketten, Stick+Lift</value>
+ <value>6030 Cassetten-Etiketten, Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -10582,8 +9707,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6031 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
+ <value>6031 Inkjet+Laser+Kopier-Etiketten Stick+Lift</value>
</prop>
<prop oor:name="Measure">
@@ -10594,8 +9718,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6036 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>6036 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10606,8 +9729,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6037 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>6037 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10618,8 +9740,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6038 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>6038 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10630,8 +9751,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6039 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>6039 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10642,8 +9762,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6040 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>6040 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10654,8 +9773,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6041 Inkjet+Laser+Kopier-Etiketten</value>
+ <value>6041 Inkjet+Laser+Kopier-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10666,8 +9784,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6043 CD-Etiketten</value>
+ <value>6043 CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10678,8 +9795,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6044 CD-Etiketten</value>
+ <value>6044 CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10690,8 +9806,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6045 CD-Etiketten</value>
+ <value>6045 CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10702,8 +9817,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6046 CD-Etiketten</value>
+ <value>6046 CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10714,8 +9828,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6047 CD-Etiketten</value>
+ <value>6047 CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10726,8 +9839,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6058 Ordnerrücken-Etiketten, schmal</value>
+ <value>6058 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -10738,8 +9850,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6059 Ordnerrücken-Etiketten, breit</value>
+ <value>6059 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -10750,8 +9861,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6060 Ordnerrücken-Etiketten, schmal</value>
+ <value>6060 Ordnerrücken-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -10762,8 +9872,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6061 Ordnerrücken-Etiketten, breit</value>
+ <value>6061 Ordnerrücken-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -10774,8 +9883,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6074 Inkjet-Glossy-CD-Etiketten</value>
+ <value>6074 Inkjet-Glossy-CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10786,8 +9894,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6077 Inkjet-Glossy-Etiketten</value>
+ <value>6077 Inkjet-Glossy-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10798,8 +9905,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6078 Inkjet-Glossy-Etiketten</value>
+ <value>6078 Inkjet-Glossy-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10810,8 +9916,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6079 Inkjet-Glossy-Etiketten, oval</value>
+ <value>6079 Inkjet-Glossy-Etiketten, oval</value>
</prop>
<prop oor:name="Measure">
@@ -10822,8 +9927,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6080 Inkjet-Glossy-Etiketten</value>
+ <value>6080 Inkjet-Glossy-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10834,8 +9938,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6081 Inkjet-Glossy-Etiketten</value>
+ <value>6081 Inkjet-Glossy-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10846,8 +9949,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6082 Inkjet-Glossy-CD-Etiketten</value>
+ <value>6082 Inkjet-Glossy-CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10858,8 +9960,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6083 Inkjet-Glossy-Etiketten</value>
+ <value>6083 Inkjet-Glossy-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10870,8 +9971,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6090 Korrektur- und Abdeck-Etiketten</value>
+ <value>6090 Korrektur- und Abdeck-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10882,8 +9982,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6091 Korrektur- und Abdeck-Etiketten</value>
+ <value>6091 Korrektur- und Abdeck-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10894,8 +9993,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6092 Korrektur- und Abdeck-Etiketten</value>
+ <value>6092 Korrektur- und Abdeck-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10906,8 +10004,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6093 Korrektur- und Abdeck-Etiketten</value>
+ <value>6093 Korrektur- und Abdeck-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10918,8 +10015,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6094 Korrektur- und Abdeck-Etiketten</value>
+ <value>6094 Korrektur- und Abdeck-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10930,8 +10026,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6102 Farbige Folien-Etiketten</value>
+ <value>6102 Farbige Folien-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10942,8 +10037,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6103 Farbige Folien-Etiketten</value>
+ <value>6103 Farbige Folien-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10954,8 +10048,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6104 Farbige Folien-Etiketten</value>
+ <value>6104 Farbige Folien-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10966,8 +10059,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6105 Farbige Folien-Etiketten</value>
+ <value>6105 Farbige Folien-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10978,8 +10070,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6106 Farbige Folien-Etiketten</value>
+ <value>6106 Farbige Folien-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -10990,8 +10081,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6107 Farbige Folien-Etiketten</value>
+ <value>6107 Farbige Folien-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11002,8 +10092,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6108 Farbige Folien-Etiketten</value>
+ <value>6108 Farbige Folien-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11014,8 +10103,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6109 Farbige Folien-Etiketten</value>
+ <value>6109 Farbige Folien-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11026,8 +10114,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6110 Farbige Folien-Etiketten</value>
+ <value>6110 Farbige Folien-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11038,8 +10125,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6111 Farbige Folien-Etiketten</value>
+ <value>6111 Farbige Folien-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11050,8 +10136,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6112 Sicherheits-Etiketten</value>
+ <value>6112 Sicherheits-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11062,8 +10147,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6113 Sicherheits-Etiketten</value>
+ <value>6113 Sicherheits-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11074,8 +10158,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6114 Sicherheits-Etiketten</value>
+ <value>6114 Sicherheits-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11086,8 +10169,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6115 CD-Etiketten</value>
+ <value>6115 CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11098,8 +10180,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6116 MiniDisc-Etiketten</value>
+ <value>6116 MiniDisc-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11110,8 +10191,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6117 CD-Etiketten</value>
+ <value>6117 CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11122,8 +10202,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">6118 CD-Etiketten</value>
+ <value>6118 CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11134,8 +10213,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7767 Farblaser-Glossy-Etiketten</value>
+ <value>L7767 Farblaser-Glossy-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11146,8 +10224,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7768 Farblaser-Glossy-Etiketten</value>
+ <value>L7768 Farblaser-Glossy-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11158,8 +10235,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7769 Farblaser-Glossy-Etiketten</value>
+ <value>L7769 Farblaser-Glossy-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11170,8 +10246,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7765 Farblaser-Glossy-Etiketten</value>
+ <value>L7765 Farblaser-Glossy-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11182,8 +10257,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9660 SuperSize Inkjet-Glossy-CD-Etiketten</value>
+ <value>C9660 SuperSize Inkjet-Glossy-CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11194,8 +10268,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7760 SuperSize Farblaser-Glossy-CD-Etiketten</value>
+ <value>L7760 SuperSize Farblaser-Glossy-CD-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11206,8 +10279,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8776 Inkjet-Stardust-CD-Etiketten*</value>
+ <value>J8776 Inkjet-Stardust-CD-Etiketten*</value>
</prop>
<prop oor:name="Measure">
@@ -11218,8 +10290,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8871 Inkjet-Magnet-Schilder**</value>
+ <value>J8871 Inkjet-Magnet-Schilder**</value>
</prop>
<prop oor:name="Measure">
@@ -11230,8 +10301,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8875 Inkjet-Magnet-Schilder**</value>
+ <value>J8875 Inkjet-Magnet-Schilder**</value>
</prop>
<prop oor:name="Measure">
@@ -11242,8 +10312,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8867 Inkjet-Magnet-Schilder**</value>
+ <value>J8867 Inkjet-Magnet-Schilder**</value>
</prop>
<prop oor:name="Measure">
@@ -11254,8 +10323,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2166 Etikett rechteckig</value>
+ <value>C2166 Etikett rechteckig</value>
</prop>
<prop oor:name="Measure">
@@ -11266,8 +10334,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2243 Etikett rund, klein</value>
+ <value>C2243 Etikett rund, klein</value>
</prop>
<prop oor:name="Measure">
@@ -11278,8 +10345,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2351 Glückwunschkarten A5</value>
+ <value>C2351 Glückwunschkarten A5</value>
</prop>
<prop oor:name="Measure">
@@ -11290,8 +10356,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2354 Visitenkarten bis zum Rand</value>
+ <value>C2354 Visitenkarten bis zum Rand</value>
</prop>
<prop oor:name="Measure">
@@ -11302,8 +10367,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2355 Glückwunschkarten Standard</value>
+ <value>C2355 Glückwunschkarten Standard</value>
</prop>
<prop oor:name="Measure">
@@ -11314,8 +10378,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2410 Clubkarten laminiert</value>
+ <value>C2410 Clubkarten laminiert</value>
</prop>
<prop oor:name="Measure">
@@ -11326,8 +10389,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2651 Etikett rechteckig, klein</value>
+ <value>C2651 Etikett rechteckig, klein</value>
</prop>
<prop oor:name="Measure">
@@ -11338,8 +10400,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9405 T-Shirt Transferfolie</value>
+ <value>C9405 T-Shirt Transferfolie</value>
</prop>
<prop oor:name="Measure">
@@ -11350,8 +10411,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2547 Fantastic Plastic</value>
+ <value>C2547 Fantastic Plastic</value>
</prop>
<prop oor:name="Measure">
@@ -11362,8 +10422,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2070 Transfer-Folie für Mousepad</value>
+ <value>C2070 Transfer-Folie für Mousepad</value>
</prop>
<prop oor:name="Measure">
@@ -11374,8 +10433,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2090 T-Shirt Transfer-Folie</value>
+ <value>C2090 T-Shirt Transfer-Folie</value>
</prop>
<prop oor:name="Measure">
@@ -11386,8 +10444,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2080 Transfer-Folie für Puzzles</value>
+ <value>C2080 Transfer-Folie für Puzzles</value>
</prop>
<prop oor:name="Measure">
@@ -11398,8 +10455,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8416 Einladungskarten mit Klebeverschluss</value>
+ <value>J8416 Einladungskarten mit Klebeverschluss</value>
</prop>
<prop oor:name="Measure">
@@ -11410,8 +10466,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2546 Fensterbilder</value>
+ <value>C2546 Fensterbilder</value>
</prop>
<prop oor:name="Measure">
@@ -11422,8 +10477,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9660 CD-Etiketten, glossy, Super-Size</value>
+ <value>C9660 CD-Etiketten, glossy, Super-Size</value>
</prop>
<prop oor:name="Measure">
@@ -11434,8 +10488,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8770 CD-Etiketten, Super-Ssize</value>
+ <value>J8770 CD-Etiketten, Super-Ssize</value>
</prop>
<prop oor:name="Measure">
@@ -11446,8 +10499,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2050 Video-Etiketten, seitlich</value>
+ <value>C2050 Video-Etiketten, seitlich</value>
</prop>
<prop oor:name="Measure">
@@ -11458,8 +10510,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2050 Video-Etiketten, oben</value>
+ <value>C2050 Video-Etiketten, oben</value>
</prop>
<prop oor:name="Measure">
@@ -11470,8 +10521,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8666 Disketten-Etiketten</value>
+ <value>J8666 Disketten-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11482,8 +10532,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J9124 Photo-Etiketten, 13 x 18</value>
+ <value>J9124 Photo-Etiketten, 13 x 18</value>
</prop>
<prop oor:name="Measure">
@@ -11494,8 +10543,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7424 Ordner-Etiketten, breit</value>
+ <value>L7424 Ordner-Etiketten, breit</value>
</prop>
<prop oor:name="Measure">
@@ -11506,8 +10554,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7425 Ordner-Etiketten, schmal</value>
+ <value>L7425 Ordner-Etiketten, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -11518,8 +10565,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8587 Inkjet-Folie</value>
+ <value>J8587 Inkjet-Folie</value>
</prop>
<prop oor:name="Measure">
@@ -11530,8 +10576,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7587 Laser-Folie</value>
+ <value>L7587 Laser-Folie</value>
</prop>
<prop oor:name="Measure">
@@ -11542,8 +10587,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9431 Photo-Papier, glossy</value>
+ <value>C9431 Photo-Papier, glossy</value>
</prop>
<prop oor:name="Measure">
@@ -11554,8 +10598,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9434 Photo-Karton, glossy</value>
+ <value>C9434 Photo-Karton, glossy</value>
</prop>
<prop oor:name="Measure">
@@ -11566,8 +10609,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9372 Photo-Papier, glossy, 9 x 13</value>
+ <value>C9372 Photo-Papier, glossy, 9 x 13</value>
</prop>
<prop oor:name="Measure">
@@ -11578,8 +10620,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2371 Inkjet-Papier</value>
+ <value>C2371 Inkjet-Papier</value>
</prop>
<prop oor:name="Measure">
@@ -11590,8 +10631,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2370 Inkjet-Papier</value>
+ <value>C2370 Inkjet-Papier</value>
</prop>
<prop oor:name="Measure">
@@ -11602,8 +10642,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2374 Marmoriertes Papier</value>
+ <value>C2374 Marmoriertes Papier</value>
</prop>
<prop oor:name="Measure">
@@ -11614,8 +10653,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2375 Marmoriertes Papier</value>
+ <value>C2375 Marmoriertes Papier</value>
</prop>
<prop oor:name="Measure">
@@ -11626,8 +10664,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2376 Marmoriertes Papier</value>
+ <value>C2376 Marmoriertes Papier</value>
</prop>
<prop oor:name="Measure">
@@ -11638,8 +10675,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2377 Marmoriertes Papier</value>
+ <value>C2377 Marmoriertes Papier</value>
</prop>
<prop oor:name="Measure">
@@ -11650,8 +10686,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9355 Postkarten, Vorderseite</value>
+ <value>C9355 Postkarten, Vorderseite</value>
</prop>
<prop oor:name="Measure">
@@ -11662,8 +10697,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9355 Postkarten, Rückseite</value>
+ <value>C9355 Postkarten, Rückseite</value>
</prop>
<prop oor:name="Measure">
@@ -11674,8 +10708,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">J8435 CD-Einleger</value>
+ <value>J8435 CD-Einleger</value>
</prop>
<prop oor:name="Measure">
@@ -11686,8 +10719,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9362 Visitenkarten, glossy</value>
+ <value>C9362 Visitenkarten, glossy</value>
</prop>
<prop oor:name="Measure">
@@ -11698,8 +10730,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2364 Marmorierte Visitenkarten</value>
+ <value>C2364 Marmorierte Visitenkarten</value>
</prop>
<prop oor:name="Measure">
@@ -11710,8 +10741,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2365 Marmorierte Visitenkarten</value>
+ <value>C2365 Marmorierte Visitenkarten</value>
</prop>
<prop oor:name="Measure">
@@ -11722,8 +10752,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2366 Marmorierte Visitenkarten</value>
+ <value>C2366 Marmorierte Visitenkarten</value>
</prop>
<prop oor:name="Measure">
@@ -11734,8 +10763,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C2367 Marmorierte Visitenkarten</value>
+ <value>C2367 Marmorierte Visitenkarten</value>
</prop>
<prop oor:name="Measure">
@@ -11746,8 +10774,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">C9352 Glückwunschkarten A6, glossy</value>
+ <value>C9352 Glückwunschkarten A6, glossy</value>
</prop>
<prop oor:name="Measure">
@@ -11758,8 +10785,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7159 Laser-Etiketten</value>
+ <value>L7159 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11770,8 +10796,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7160 Laser-Etiketten</value>
+ <value>L7160 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11782,8 +10807,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7161 Laser-Etiketten</value>
+ <value>L7161 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11794,8 +10818,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7162 Laser-Etiketten</value>
+ <value>L7162 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11806,8 +10829,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7163 Laser-Etiketten</value>
+ <value>L7163 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11818,8 +10840,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7164 Laser-Etiketten</value>
+ <value>L7164 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11830,8 +10851,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7165 Laser-Etiketten</value>
+ <value>L7165 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11842,8 +10862,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7166 Laser-Etiketten</value>
+ <value>L7166 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11854,8 +10873,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7167 Laser-Etiketten</value>
+ <value>L7167 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11866,8 +10884,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7168 Laser-Etiketten</value>
+ <value>L7168 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11878,8 +10895,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7169 Laser-Etiketten</value>
+ <value>L7169 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11890,8 +10906,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7173 Laser-Etiketten</value>
+ <value>L7173 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11902,8 +10917,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7651 Laser-Etiketten</value>
+ <value>L7651 Laser-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -11914,8 +10928,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-10 Etiketten Register - Etikettenbogen 10</value>
+ <value>L7410-10 Etiketten Register - Etikettenbogen 10</value>
</prop>
<prop oor:name="Measure">
@@ -11926,8 +10939,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-10 Etiketten Register - Inhaltsblatt 10-t</value>
+ <value>L7410-10 Etiketten Register - Inhaltsblatt 10-t</value>
</prop>
<prop oor:name="Measure">
@@ -11938,8 +10950,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-12 Etiketten Register - Etikettenbogen 12</value>
+ <value>L7410-12 Etiketten Register - Etikettenbogen 12</value>
</prop>
<prop oor:name="Measure">
@@ -11950,8 +10961,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-12 Etiketten Register - Inhaltsblatt 12-t</value>
+ <value>L7410-12 Etiketten Register - Inhaltsblatt 12-t</value>
</prop>
<prop oor:name="Measure">
@@ -11962,8 +10972,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-5 Etiketten Register - Etikettenbogen 5-t</value>
+ <value>L7410-5 Etiketten Register - Etikettenbogen 5-t</value>
</prop>
<prop oor:name="Measure">
@@ -11974,8 +10983,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7410-5 Etiketten Register - Inhaltsblatt 5-tei</value>
+ <value>L7410-5 Etiketten Register - Inhaltsblatt 5-tei</value>
</prop>
<prop oor:name="Measure">
@@ -11986,8 +10994,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-10 Zahlen Register - Inhaltsblatt 1-10</value>
+ <value>L7411-10 Zahlen Register - Inhaltsblatt 1-10</value>
</prop>
<prop oor:name="Measure">
@@ -11998,8 +11005,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-12 Zahlen Register - Inhaltsblatt 1-12</value>
+ <value>L7411-12 Zahlen Register - Inhaltsblatt 1-12</value>
</prop>
<prop oor:name="Measure">
@@ -12010,8 +11016,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-15 Zahlen Register - Inhaltsblatt 1-15</value>
+ <value>L7411-15 Zahlen Register - Inhaltsblatt 1-15</value>
</prop>
<prop oor:name="Measure">
@@ -12022,8 +11027,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-20 Zahlen Register - Inhaltsblatt 1-20</value>
+ <value>L7411-20 Zahlen Register - Inhaltsblatt 1-20</value>
</prop>
<prop oor:name="Measure">
@@ -12034,8 +11038,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-31 Zahlen Register - Inhaltsblatt 1-31</value>
+ <value>L7411-31 Zahlen Register - Inhaltsblatt 1-31</value>
</prop>
<prop oor:name="Measure">
@@ -12046,8 +11049,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-5 Zahlen Register - Inhaltsblatt 1-5</value>
+ <value>L7411-5 Zahlen Register - Inhaltsblatt 1-5</value>
</prop>
<prop oor:name="Measure">
@@ -12058,8 +11060,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-AZ A-Z Register - Inhaltsblatt</value>
+ <value>L7411-AZ A-Z Register - Inhaltsblatt</value>
</prop>
<prop oor:name="Measure">
@@ -12070,8 +11071,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7411-JD Monats Register - Inhaltsblatt Jan - D</value>
+ <value>L7411-JD Monats Register - Inhaltsblatt Jan - D</value>
</prop>
<prop oor:name="Measure">
@@ -12082,8 +11082,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7412-10 Einsteckschilder für Register 10-teilig</value>
+ <value>L7412-10 Einsteckschilder für Register 10-teilig</value>
</prop>
<prop oor:name="Measure">
@@ -12094,8 +11093,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7412-12 Einsteckschilder für Register 12-teilig</value>
+ <value>L7412-12 Einsteckschilder für Register 12-teilig</value>
</prop>
<prop oor:name="Measure">
@@ -12106,8 +11104,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">L7412-5 Einsteckschilder für Register 5-teilig</value>
+ <value>L7412-5 Einsteckschilder für Register 5-teilig</value>
</prop>
<prop oor:name="Measure">
@@ -12118,8 +11115,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5129061 Trennstreifen </value>
+ <value>5129061 Trennstreifen </value>
</prop>
<prop oor:name="Measure">
@@ -12130,8 +11126,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3600 Computer-Etikett</value>
+ <value>3600 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12142,8 +11137,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3601 Computer-Etikett</value>
+ <value>3601 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12154,8 +11148,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3602 Computer-Etikett</value>
+ <value>3602 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12166,8 +11159,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3603 Computer-Etikett</value>
+ <value>3603 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12178,8 +11170,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3604 Computer-Etikett</value>
+ <value>3604 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12190,8 +11181,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3605 Computer-Etikett</value>
+ <value>3605 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12202,8 +11192,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3606 Computer-Etikett</value>
+ <value>3606 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12214,8 +11203,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3607 Computer-Etikett</value>
+ <value>3607 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12226,8 +11214,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3608 Computer-Etikett</value>
+ <value>3608 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12238,8 +11225,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3609 Computer-Etikett</value>
+ <value>3609 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12250,8 +11236,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3610 Computer-Etikett</value>
+ <value>3610 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12262,8 +11247,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3611 Computer-Etikett</value>
+ <value>3611 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12274,8 +11258,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3612 Computer-Etikett</value>
+ <value>3612 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12286,8 +11269,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3613 Computer-Etikett</value>
+ <value>3613 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12298,8 +11280,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3614 Computer-Etikett</value>
+ <value>3614 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12310,8 +11291,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3615 Computer-Etikett</value>
+ <value>3615 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12322,8 +11302,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3617 Computer-Etikett</value>
+ <value>3617 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12334,8 +11313,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3620 Computer-Etikett</value>
+ <value>3620 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12346,8 +11324,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3621 Computer-Etikett</value>
+ <value>3621 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12358,8 +11335,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3623 Computer-Etikett</value>
+ <value>3623 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12370,8 +11346,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3633 Computer-Etikett</value>
+ <value>3633 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12382,8 +11357,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3634 Computer-Etikett, schnittgestanzt</value>
+ <value>3634 Computer-Etikett, schnittgestanzt</value>
</prop>
<prop oor:name="Measure">
@@ -12394,8 +11368,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3635 Computer-Etikett</value>
+ <value>3635 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12406,8 +11379,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3643 Computer-Etikett</value>
+ <value>3643 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12418,8 +11390,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3645 Computer-Etikett</value>
+ <value>3645 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12430,8 +11401,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3646 Computer-Etikett</value>
+ <value>3646 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12442,8 +11412,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3647 Computer-Etikett</value>
+ <value>3647 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12454,8 +11423,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3648 Computer-Etikett, ablösbar</value>
+ <value>3648 Computer-Etikett, ablösbar</value>
</prop>
<prop oor:name="Measure">
@@ -12466,8 +11434,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3674 Computer-Etikett</value>
+ <value>3674 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12478,8 +11445,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3675 Computer-Etikett</value>
+ <value>3675 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12490,8 +11456,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">3676 Computer-Etikett</value>
+ <value>3676 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12502,8 +11467,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5100 Computer-Etikett</value>
+ <value>5100 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12514,8 +11478,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5101 Computer-Etikett</value>
+ <value>5101 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12526,8 +11489,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5103 Computer-Etikett</value>
+ <value>5103 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12538,8 +11500,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5104 Computer-Etikett</value>
+ <value>5104 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12550,8 +11511,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5105 Computer-Etikett</value>
+ <value>5105 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12562,8 +11522,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5106 Computer-Etikett</value>
+ <value>5106 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12574,8 +11533,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5107 Computer-Etikett</value>
+ <value>5107 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12586,8 +11544,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5108 Computer-Etikett</value>
+ <value>5108 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12598,8 +11555,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5109 Computer-Etikett</value>
+ <value>5109 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12610,8 +11566,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5110 Computer-Etikett</value>
+ <value>5110 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12622,8 +11577,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5111 Computer-Etikett</value>
+ <value>5111 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12634,8 +11588,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5112 Computer-Etikett</value>
+ <value>5112 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12646,8 +11599,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5121 Computer-Etikett</value>
+ <value>5121 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12658,8 +11610,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5122 Computer-Etikett</value>
+ <value>5122 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12670,8 +11621,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5123 Computer-Etikett</value>
+ <value>5123 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12682,8 +11632,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5124 Computer-Etikett</value>
+ <value>5124 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12694,8 +11643,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5130 Computer-Etikett</value>
+ <value>5130 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12706,8 +11654,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5131 Computer-Etikett</value>
+ <value>5131 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12718,8 +11665,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5132 Computer-Etikett</value>
+ <value>5132 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12730,8 +11676,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5133 Computer-Etikett</value>
+ <value>5133 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12742,8 +11687,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5137 Computer-Etikett</value>
+ <value>5137 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12754,8 +11698,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5140 Computer-Etikett</value>
+ <value>5140 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12766,8 +11709,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5141 Computer-Etikett</value>
+ <value>5141 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12778,8 +11720,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5142 Computer-Etikett</value>
+ <value>5142 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12790,8 +11731,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5143 Computer-Etikett</value>
+ <value>5143 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12802,8 +11742,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5145 Computer-Etikett</value>
+ <value>5145 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12814,8 +11753,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5146 Computer-Etikett</value>
+ <value>5146 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12826,8 +11764,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5147 Computer-Etikett</value>
+ <value>5147 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12838,8 +11775,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5160 Computer-Etikett</value>
+ <value>5160 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12850,8 +11786,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5161 Computer-Etikett</value>
+ <value>5161 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12862,8 +11797,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5162 Computer-Etikett</value>
+ <value>5162 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12874,8 +11808,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5163 Computer-Etikett</value>
+ <value>5163 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12886,8 +11819,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5164 Computer-Etikett</value>
+ <value>5164 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12898,8 +11830,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5170 Computer-Etikett</value>
+ <value>5170 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12910,8 +11841,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">5171 Computer-Etikett</value>
+ <value>5171 Computer-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -12925,8 +11855,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083200/6 Adressetikett</value>
+ <value>083200/6 Adressetikett</value>
</prop>
<prop oor:name="Measure">
@@ -12937,8 +11866,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083200/6 Adressetikett</value>
+ <value>083200/6 Adressetikett</value>
</prop>
<prop oor:name="Measure">
@@ -12949,8 +11877,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083203/0 Adressetikett</value>
+ <value>083203/0 Adressetikett</value>
</prop>
<prop oor:name="Measure">
@@ -12961,8 +11888,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083204/8 Adressetikett</value>
+ <value>083204/8 Adressetikett</value>
</prop>
<prop oor:name="Measure">
@@ -12973,8 +11899,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083205/5 Diskettenetikett</value>
+ <value>083205/5 Diskettenetikett</value>
</prop>
<prop oor:name="Measure">
@@ -12985,8 +11910,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083207/1 Adressetikett</value>
+ <value>083207/1 Adressetikett</value>
</prop>
<prop oor:name="Measure">
@@ -12997,8 +11921,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083215/4 Diskettenetikett</value>
+ <value>083215/4 Diskettenetikett</value>
</prop>
<prop oor:name="Measure">
@@ -13009,8 +11932,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083216/2 CD-ROM-Etikett</value>
+ <value>083216/2 CD-ROM-Etikett</value>
</prop>
<prop oor:name="Measure">
@@ -13021,8 +11943,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083217/0 Adressetikett</value>
+ <value>083217/0 Adressetikett</value>
</prop>
<prop oor:name="Measure">
@@ -13033,8 +11954,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083219/6 Adressetikett</value>
+ <value>083219/6 Adressetikett</value>
</prop>
<prop oor:name="Measure">
@@ -13045,8 +11965,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083220/4 Adressetikett Laser</value>
+ <value>083220/4 Adressetikett Laser</value>
</prop>
<prop oor:name="Measure">
@@ -13057,8 +11976,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083221/2 Adressetikett Laser</value>
+ <value>083221/2 Adressetikett Laser</value>
</prop>
<prop oor:name="Measure">
@@ -13069,8 +11987,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083222/0 Adressetikett Laser</value>
+ <value>083222/0 Adressetikett Laser</value>
</prop>
<prop oor:name="Measure">
@@ -13081,8 +11998,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083224/6 Diskettenetikett Laser</value>
+ <value>083224/6 Diskettenetikett Laser</value>
</prop>
<prop oor:name="Measure">
@@ -13093,8 +12009,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083230/3 Adressetikett Inkjet</value>
+ <value>083230/3 Adressetikett Inkjet</value>
</prop>
<prop oor:name="Measure">
@@ -13105,8 +12020,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083231/1 Adressetikett Inkjet</value>
+ <value>083231/1 Adressetikett Inkjet</value>
</prop>
<prop oor:name="Measure">
@@ -13117,8 +12031,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083234/5 Diskettenetikett Inkjet</value>
+ <value>083234/5 Diskettenetikett Inkjet</value>
</prop>
<prop oor:name="Measure">
@@ -13129,8 +12042,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083240/2 Adressetik. Laser+InkJet</value>
+ <value>083240/2 Adressetik. Laser+InkJet</value>
</prop>
<prop oor:name="Measure">
@@ -13141,8 +12053,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083244/4 Diskettenetik.Laser+InkJet</value>
+ <value>083244/4 Diskettenetik.Laser+InkJet</value>
</prop>
<prop oor:name="Measure">
@@ -13153,8 +12064,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083250/1 Adressetiketten</value>
+ <value>083250/1 Adressetiketten</value>
</prop>
<prop oor:name="Measure">
@@ -13165,8 +12075,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083251/9 Ordner-Etiketten, 8 cm</value>
+ <value>083251/9 Ordner-Etiketten, 8 cm</value>
</prop>
<prop oor:name="Measure">
@@ -13177,8 +12086,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083252/7 Ordner-Etiketten, 5 cm</value>
+ <value>083252/7 Ordner-Etiketten, 5 cm</value>
</prop>
<prop oor:name="Measure">
@@ -13189,8 +12097,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083253/5 Neonetiketten</value>
+ <value>083253/5 Neonetiketten</value>
</prop>
<prop oor:name="Measure">
@@ -13201,8 +12108,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083254/3 Transparente Etiketten</value>
+ <value>083254/3 Transparente Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -13213,8 +12119,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083255/0 Diskettenetiketten</value>
+ <value>083255/0 Diskettenetiketten</value>
</prop>
<prop oor:name="Measure">
@@ -13225,8 +12130,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">83256/8a Videoetiketten 0</value>
+ <value>83256/8a Videoetiketten 0</value>
</prop>
<prop oor:name="Measure">
@@ -13237,8 +12141,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">83256/8b Videoetiketten 0</value>
+ <value>83256/8b Videoetiketten 0</value>
</prop>
<prop oor:name="Measure">
@@ -13249,8 +12152,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083257/6 Diaetiketten</value>
+ <value>083257/6 Diaetiketten</value>
</prop>
<prop oor:name="Measure">
@@ -13261,8 +12163,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083258/4 Farbdruck-Etiketten</value>
+ <value>083258/4 Farbdruck-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -13273,8 +12174,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">502041/7 Visitenkarten</value>
+ <value>502041/7 Visitenkarten</value>
</prop>
<prop oor:name="Measure">
@@ -13285,8 +12185,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value>
- <value xml:lang="en-US">083271/7 Ordnerrückeneinsteckschilder</value>
+ <value>083271/7 Ordnerrückeneinsteckschilder</value>
</prop>
<prop oor:name="Measure">
@@ -13296,987 +12195,987 @@
</node>
<node oor:name="Herma A4" oor:op="replace">
- <node oor:name="L0" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4093 SuperPrint CD-Etikett, gold</value></prop>
+ <node oor:name="L0" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4093 SuperPrint CD-Etikett, gold</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
- <node oor:name="L1" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4094 SuperPrint CD-Etikett, silber</value></prop>
+ <node oor:name="L1" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4094 SuperPrint CD-Etikett, silber</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
- <node oor:name="L2" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4097 SuperPrint Silberfolie</value></prop>
+ <node oor:name="L2" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4097 SuperPrint Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;4826;2116,7;4572;2116,7;975;2150;4;12</value></prop></node>
- <node oor:name="L3" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4098 SuperPrint Silberfolie</value></prop>
+ <node oor:name="L3" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4098 SuperPrint Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
- <node oor:name="L4" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4099 SuperPrint Silberfolie</value></prop>
+ <node oor:name="L4" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4099 SuperPrint Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;9854;5080;9600;5080;773;2150;2;5</value></prop></node>
- <node oor:name="L5" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4100 SuperPrint Goldfolie</value></prop>
+ <node oor:name="L5" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4100 SuperPrint Goldfolie</value></prop>
<prop oor:name="Measure"><value>S;3302;1693;3048;1693;721;1303;6;16</value></prop></node>
- <node oor:name="L6" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4101 SuperPrint Goldfolie</value></prop>
+ <node oor:name="L6" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4101 SuperPrint Goldfolie</value></prop>
<prop oor:name="Measure"><value>S;4318;1270;4318;1030;1864;1000;4;22</value></prop></node>
- <node oor:name="L7" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4102 SuperPrint Goldfolie</value></prop>
+ <node oor:name="L7" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4102 SuperPrint Goldfolie</value></prop>
<prop oor:name="Measure"><value>S;4830;2540;4830;2540;840;880;4;11</value></prop></node>
- <node oor:name="L8" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4103 SuperPrint Goldfolie</value></prop>
+ <node oor:name="L8" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4103 SuperPrint Goldfolie</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
- <node oor:name="L9" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4104 SuperPrint Goldfolie</value></prop>
+ <node oor:name="L9" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4104 SuperPrint Goldfolie</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L10" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4105 SuperPrint Goldfolie, Kreise 60 mm</value></prop>
+<node oor:name="L10" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4105 SuperPrint Goldfolie, Kreise 60 mm</value></prop>
<prop oor:name="Measure"><value>S;6700;6700;6000;6000;800;1800;3;4</value></prop></node>
-<node oor:name="L11" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4106 SuperPrint Goldfolie, oval</value></prop>
+<node oor:name="L11" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4106 SuperPrint Goldfolie, oval</value></prop>
<prop oor:name="Measure"><value>S;6350;4656;5842;4233;1229;1093;3;6</value></prop></node>
-<node oor:name="L12" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4107 SuperPrint Goldfolie, A4</value></prop>
+<node oor:name="L12" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4107 SuperPrint Goldfolie, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L13" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4108 SuperPrint Goldfolie</value></prop>
+<node oor:name="L13" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4108 SuperPrint Goldfolie</value></prop>
<prop oor:name="Measure"><value>S;2794;1000;2540;1000;848;1350;7;27</value></prop></node>
-<node oor:name="L14" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4109 SuperPrint Goldfolie, oval</value></prop>
+<node oor:name="L14" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4109 SuperPrint Goldfolie, oval</value></prop>
<prop oor:name="Measure"><value>S;4572;2963;4064;2540;1610;1727;4;9</value></prop></node>
-<node oor:name="L15" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4110 SuperPrint Silberfolie</value></prop>
+<node oor:name="L15" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4110 SuperPrint Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;3302;1693;3048;1693;721;1303;6;16</value></prop></node>
-<node oor:name="L16" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4111 SuperPrint Silberfolie</value></prop>
+<node oor:name="L16" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4111 SuperPrint Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;4318;1270;4318;1030;1864;1000;4;22</value></prop></node>
-<node oor:name="L17" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4112 SuperPrint Silberfolie</value></prop>
+<node oor:name="L17" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4112 SuperPrint Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L18" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4113 SuperPrint Silberfolie</value></prop>
+<node oor:name="L18" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4113 SuperPrint Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
-<node oor:name="L19" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4114 SuperPrint Silberfolie</value></prop>
+<node oor:name="L19" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4114 SuperPrint Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L20" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4115 SuperPrint Silberfolie, Kreise 60 mm</value></prop>
+<node oor:name="L20" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4115 SuperPrint Silberfolie, Kreise 60 mm</value></prop>
<prop oor:name="Measure"><value>S;6700;6700;6000;6000;800;1800;3;4</value></prop></node>
-<node oor:name="L21" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4116 SuperPrint Silberfolie, oval</value></prop>
+<node oor:name="L21" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4116 SuperPrint Silberfolie, oval</value></prop>
<prop oor:name="Measure"><value>S;6350;4656;5842;4233;1229;1093;3;6</value></prop></node>
-<node oor:name="L22" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4117 SuperPrint Silberfolie, A4</value></prop>
+<node oor:name="L22" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4117 SuperPrint Silberfolie, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L23" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4118 SuperPrint Silberfolie</value></prop>
+<node oor:name="L23" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4118 SuperPrint Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;2794;1000;2540;1000;848;1350;7;27</value></prop></node>
-<node oor:name="L24" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4119 SuperPrint Silberfolie</value></prop>
+<node oor:name="L24" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4119 SuperPrint Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;6604;1693;6350;1693;721;1303;3;16</value></prop></node>
-<node oor:name="L25" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4200 SuperPrint weiß</value></prop>
+<node oor:name="L25" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4200 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;4830;3387;4830;3387;840;1302;4;8</value></prop></node>
-<node oor:name="L26" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4201 SuperPrint Sichtreiteretiketten, weiß</value></prop>
+<node oor:name="L26" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4201 SuperPrint Sichtreiteretiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;1693;4572;1693;975;1306;4;16</value></prop></node>
-<node oor:name="L27" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4202 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L27" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4202 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;6604;847;6350;847;721;1298;3;32</value></prop></node>
-<node oor:name="L28" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4203 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L28" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4203 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;6604;4656;6350;4656;721;882;3;6</value></prop></node>
-<node oor:name="L29" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4204 SuperPrint 3,5"-Disketten, gelb</value></prop>
+<node oor:name="L29" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4204 SuperPrint 3,5"-Disketten, gelb</value></prop>
<prop oor:name="Measure"><value>S;9000;5080;7000;5080;2500;2150;2;5</value></prop></node>
-<node oor:name="L30" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4205 SuperPrint 3,5"-Disketten, rot</value></prop>
+<node oor:name="L30" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4205 SuperPrint 3,5"-Disketten, rot</value></prop>
<prop oor:name="Measure"><value>S;9000;5080;7000;5080;2500;2150;2;5</value></prop></node>
-<node oor:name="L31" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4206 SuperPrint 3,5"-Disketten, blau</value></prop>
+<node oor:name="L31" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4206 SuperPrint 3,5"-Disketten, blau</value></prop>
<prop oor:name="Measure"><value>S;9000;5080;7000;5080;2500;2150;2;5</value></prop></node>
-<node oor:name="L32" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4207 SuperPrint 3,5"-Disketten, grün</value></prop>
+<node oor:name="L32" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4207 SuperPrint 3,5"-Disketten, grün</value></prop>
<prop oor:name="Measure"><value>S;9000;5080;7000;5080;2500;2150;2;5</value></prop></node>
-<node oor:name="L33" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4208 SuperPrint Musik-Cassetten, weiß</value></prop>
+<node oor:name="L33" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4208 SuperPrint Musik-Cassetten, weiß</value></prop>
<prop oor:name="Measure"><value>S;9154;4233;8900;4233;1475;2150;2;6</value></prop></node>
-<node oor:name="L34" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4209 SuperPrint weiß, z.B. für Regalbeschriftung, ablösbar</value></prop>
+<node oor:name="L34" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4209 SuperPrint weiß, z.B. für Regalbeschriftung, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;9854;1693;9600;1693;773;1306;2;16</value></prop></node>
-<node oor:name="L35" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4210 SuperPrint weiß, ablösbar</value></prop>
+<node oor:name="L35" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4210 SuperPrint weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;3810;1270;3810;1270;975;880;5;22</value></prop></node>
-<node oor:name="L36" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4211 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L36" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4211 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;2794;1693;2540;1693;848;1306;7;16</value></prop></node>
-<node oor:name="L37" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4212 SuperPrint weiß, ablösbar</value></prop>
+<node oor:name="L37" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4212 SuperPrint weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;3810;2120;3810;2120;975;1070;5;13</value></prop></node>
-<node oor:name="L38" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4226 SuperPrint weiß, deckend</value></prop>
+<node oor:name="L38" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4226 SuperPrint weiß, deckend</value></prop>
<prop oor:name="Measure"><value>S;4826;1693;4826;1693;848;1306;4;16</value></prop></node>
-<node oor:name="L39" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4227 SuperPrint weiß, deckend</value></prop>
+<node oor:name="L39" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4227 SuperPrint weiß, deckend</value></prop>
<prop oor:name="Measure"><value>S;6460;3387;6460;3387;810;1303;3;8</value></prop></node>
-<node oor:name="L40" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4228 SuperPrint weiß, deckend</value></prop>
+<node oor:name="L40" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4228 SuperPrint weiß, deckend</value></prop>
<prop oor:name="Measure"><value>S;9652;4233;9652;4233;848;2151;2;6</value></prop></node>
-<node oor:name="L41" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4229 SuperPrint weiß, deckend</value></prop>
+<node oor:name="L41" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4229 SuperPrint weiß, deckend</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L42" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4230 SuperPrint weiß, deckend</value></prop>
+<node oor:name="L42" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4230 SuperPrint weiß, deckend</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L43" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4232 SuperPrint Sicherheits-/Verschlussetiketten, weiß</value></prop>
+<node oor:name="L43" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4232 SuperPrint Sicherheits-/Verschlussetiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;2116,7;4572;2116,7;975;2150;4;12</value></prop></node>
-<node oor:name="L44" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4233 SuperPrint Sicherheits-/Verschlussetiketten, weiß</value></prop>
+<node oor:name="L44" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4233 SuperPrint Sicherheits-/Verschlussetiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L45" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4234 SuperPrint Sicherheits-/Verschlussetiketten, weiß</value></prop>
+<node oor:name="L45" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4234 SuperPrint Sicherheits-/Verschlussetiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;4600;4600;4000;4000;1600;1350;4;6</value></prop></node>
-<node oor:name="L46" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4249 SuperPrint weiß</value></prop>
+<node oor:name="L46" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4249 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;19960;14350;19960;14350;520;500;1;2</value></prop></node>
-<node oor:name="L47" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4250 SuperPrint weiß</value></prop>
+<node oor:name="L47" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4250 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10190;13900;9910;13900;450;950;2;2</value></prop></node>
-<node oor:name="L48" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4252 SuperPrint weiß</value></prop>
+<node oor:name="L48" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4252 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;19960;28910;19960;28910;520;395;1;1</value></prop></node>
-<node oor:name="L49" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4256 SuperPrint gelb</value></prop>
+<node oor:name="L49" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4256 SuperPrint gelb</value></prop>
<prop oor:name="Measure"><value>S;10500;3712,5;10500;3712,5;0;0;2;8</value></prop></node>
-<node oor:name="L50" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4257 SuperPrint rot</value></prop>
+<node oor:name="L50" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4257 SuperPrint rot</value></prop>
<prop oor:name="Measure"><value>S;10500;3712,5;10500;3712,5;0;0;2;8</value></prop></node>
-<node oor:name="L51" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4258 SuperPrint blau</value></prop>
+<node oor:name="L51" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4258 SuperPrint blau</value></prop>
<prop oor:name="Measure"><value>S;10500;3712,5;10500;3712,5;0;0;2;8</value></prop></node>
-<node oor:name="L52" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4259 SuperPrint grün</value></prop>
+<node oor:name="L52" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4259 SuperPrint grün</value></prop>
<prop oor:name="Measure"><value>S;10500;3712,5;10500;3712,5;0;0;2;8</value></prop></node>
-<node oor:name="L53" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4262 SuperPrint weiß</value></prop>
+<node oor:name="L53" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4262 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;6460;3387;6460;3387;810;1303;3;8</value></prop></node>
-<node oor:name="L54" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4263 SuperPrint weiß</value></prop>
+<node oor:name="L54" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4263 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;3387;7000;3387;0;1303;3;8</value></prop></node>
-<node oor:name="L55" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4264 SuperPrint weiß</value></prop>
+<node oor:name="L55" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4264 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;3387;10500;3387;0;1303;2;8</value></prop></node>
-<node oor:name="L56" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4265 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L56" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4265 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;4656;6350;4656;721;882;3;6</value></prop></node>
-<node oor:name="L57" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4266 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L57" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4266 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;7200;6350;7200;721;450;3;4</value></prop></node>
-<node oor:name="L58" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4267 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L58" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4267 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;3387;9906;3387;467;1303;2;8</value></prop></node>
-<node oor:name="L59" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4268 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L59" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4268 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;5700;9906;5700;467;600;2;5</value></prop></node>
-<node oor:name="L60" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4269 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L60" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4269 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L61" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4270 SuperPrint weiß</value></prop>
+<node oor:name="L61" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4270 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;3810;2120;3810;2120;975;1070;5;13</value></prop></node>
-<node oor:name="L62" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4271 SuperPrint weiß</value></prop>
+<node oor:name="L62" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4271 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;1693;4826;1693;848;1306;4;16</value></prop></node>
-<node oor:name="L63" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4272 SuperPrint weiß</value></prop>
+<node oor:name="L63" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4272 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L64" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4273 SuperPrint weiß</value></prop>
+<node oor:name="L64" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4273 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;5250;2120;5250;2120;0;0;4;14</value></prop></node>
-<node oor:name="L65" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4275 SuperPrint weiß</value></prop>
+<node oor:name="L65" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4275 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;6600;2540;6600;2540;600;880;3;11</value></prop></node>
-<node oor:name="L66" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4278 SuperPrint 3,5"-Disketten, weiß</value></prop>
+<node oor:name="L66" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4278 SuperPrint 3,5"-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;5080;7000;5080;0;2150;3;5</value></prop></node>
-<node oor:name="L67" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4279 SuperPrint 3,5"-Disketten, weiß</value></prop>
+<node oor:name="L67" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4279 SuperPrint 3,5"-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;6773;7000;6773;0;1303;3;4</value></prop></node>
-<node oor:name="L68" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4280 SuperPrint weiß</value></prop>
+<node oor:name="L68" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4280 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;6773;9652;6773;848;1303;2;4</value></prop></node>
-<node oor:name="L69" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4281 SuperPrint weiß</value></prop>
+<node oor:name="L69" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4281 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;5080;10500;5080;0;2150;2;5</value></prop></node>
-<node oor:name="L70" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4282 SuperPrint weiß, A5</value></prop>
+<node oor:name="L70" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4282 SuperPrint weiß, A5</value></prop>
<prop oor:name="Measure"><value>S;21000;14850;21000;14850;0;0;1;2</value></prop></node>
-<node oor:name="L71" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4283 SuperPrint für schmale Ordner, weiß</value></prop>
+<node oor:name="L71" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4283 SuperPrint für schmale Ordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L72" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4284 SuperPrint für breite Ordner, weiß</value></prop>
+<node oor:name="L72" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4284 SuperPrint für breite Ordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L73" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4290 SuperPrint für schmale Ordner, weiß</value></prop>
+<node oor:name="L73" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4290 SuperPrint für schmale Ordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;19200;3400;19200;3400;900;1250;1;8</value></prop></node>
-<node oor:name="L74" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4291 SuperPrint für breite Ordner, weiß</value></prop>
+<node oor:name="L74" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4291 SuperPrint für breite Ordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;19200;5900;19200;5900;900;3050;1;4</value></prop></node>
-<node oor:name="L75" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4292 SuperPrint für schmale Ordner, gelb</value></prop>
+<node oor:name="L75" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4292 SuperPrint für schmale Ordner, gelb</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L76" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4293 SuperPrint für schmale Ordner, rot</value></prop>
+<node oor:name="L76" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4293 SuperPrint für schmale Ordner, rot</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L77" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4294 SuperPrint für schmale Ordner, blau</value></prop>
+<node oor:name="L77" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4294 SuperPrint für schmale Ordner, blau</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L78" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4295 SuperPrint für schmale Ordner, grün</value></prop>
+<node oor:name="L78" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4295 SuperPrint für schmale Ordner, grün</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L79" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4296 SuperPrint für breite Ordner, gelb</value></prop>
+<node oor:name="L79" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4296 SuperPrint für breite Ordner, gelb</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L80" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4297 SuperPrint für breite Ordner, rot</value></prop>
+<node oor:name="L80" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4297 SuperPrint für breite Ordner, rot</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L81" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4298 SuperPrint für breite Ordner, blau</value></prop>
+<node oor:name="L81" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4298 SuperPrint für breite Ordner, blau</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L82" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4299 SuperPrint für breite Ordner, grün</value></prop>
+<node oor:name="L82" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4299 SuperPrint für breite Ordner, grün</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L83" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4333 SuperPrint weiß </value></prop>
+<node oor:name="L83" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4333 SuperPrint weiß </value></prop>
<prop oor:name="Measure"><value>S;2794;1000;2540;1000;848;1350;7;27</value></prop></node>
-<node oor:name="L84" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4334 SuperPrint weiß </value></prop>
+<node oor:name="L84" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4334 SuperPrint weiß </value></prop>
<prop oor:name="Measure"><value>S;2794;1693;2540;1693;848;1306;7;16</value></prop></node>
-<node oor:name="L85" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4336 SuperPrint weiß </value></prop>
+<node oor:name="L85" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4336 SuperPrint weiß </value></prop>
<prop oor:name="Measure"><value>S;3810;1693;3556;1693;1102;1306;5;16</value></prop></node>
-<node oor:name="L86" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4343 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L86" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4343 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;2041;1000;1780;1000;425,5;1350;10;27</value></prop></node>
-<node oor:name="L87" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4344 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L87" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4344 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;2794;1000;2540;1000;848;1350;7;27</value></prop></node>
-<node oor:name="L88" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4345 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L88" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4345 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;3810;1693;3556;1693;1102;1306;5;16</value></prop></node>
-<node oor:name="L89" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4346 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L89" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4346 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;4826;2116,7;4572;2116,7;975;2150;4;12</value></prop></node>
-<node oor:name="L90" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4347 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L90" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4347 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L91" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4348 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L91" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4348 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;9854;4233;9600;4233;773;2150;2;6</value></prop></node>
-<node oor:name="L92" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4349 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L92" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4349 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;9854;5080;9600;5080;773;2150;2;5</value></prop></node>
-<node oor:name="L93" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4350 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L93" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4350 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;9854;6350;9600;6350;773;2150;2;4</value></prop></node>
-<node oor:name="L94" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4351 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L94" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4351 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;21000;14850;21000;14850;0;0;1;2</value></prop></node>
-<node oor:name="L95" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4352 SuperPrint weiß, ablösbar</value></prop>
+<node oor:name="L95" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4352 SuperPrint weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L96" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4353 SuperPrint 3,5"-Disketten, weiß</value></prop>
+<node oor:name="L96" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4353 SuperPrint 3,5"-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;9000;5080;7000;5080;2500;2150;2;5</value></prop></node>
-<node oor:name="L97" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4354 SuperPrint 3,5"-Disketten, farbig sortiert</value></prop>
+<node oor:name="L97" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4354 SuperPrint 3,5"-Disketten, farbig sortiert</value></prop>
<prop oor:name="Measure"><value>S;9000;5080;7000;5080;2500;2150;2;5</value></prop></node>
-<node oor:name="L98" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4355 SuperPrint 3,5"-Disketten, weiß</value></prop>
+<node oor:name="L98" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4355 SuperPrint 3,5"-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;9000;6773;7000;6773;2500;1304;2;4</value></prop></node>
-<node oor:name="L99" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4356 SuperPrint 3,5"-Disketten, farbig sortiert</value></prop>
+<node oor:name="L99" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4356 SuperPrint 3,5"-Disketten, farbig sortiert</value></prop>
<prop oor:name="Measure"><value>S;9000;6773;7000;6773;2500;1304;2;4</value></prop></node>
-<node oor:name="L100" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4357 SuperPrint weiß</value></prop>
+<node oor:name="L100" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4357 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;4850;2540;4850;2540;800;2150;4;10</value></prop></node>
-<node oor:name="L101" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4358 SuperPrint Oval, weiß, ablösbar</value></prop>
+<node oor:name="L101" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4358 SuperPrint Oval, weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;6604;4656,7;6350;4233;721;1093;3;6</value></prop></node>
-<node oor:name="L102" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4359 SuperPrint weiß</value></prop>
+<node oor:name="L102" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4359 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;6773;9652;6773;848;1303;2;4</value></prop></node>
-<node oor:name="L103" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4360 SuperPrint weiß</value></prop>
+<node oor:name="L103" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4360 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;3600;7000;3600;0;450;3;8</value></prop></node>
-<node oor:name="L104" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4361 SuperPrint weiß</value></prop>
+<node oor:name="L104" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4361 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;4125;7000;4125;0;412,5;3;7</value></prop></node>
-<node oor:name="L105" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4362 SuperPrint weiß</value></prop>
+<node oor:name="L105" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4362 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;4125;10500;4125;0;412,5;2;7</value></prop></node>
-<node oor:name="L106" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4363 SuperPrint weiß</value></prop>
+<node oor:name="L106" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4363 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;4800;10500;4800;0;450;2;6</value></prop></node>
-<node oor:name="L107" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4364 SuperPrint weiß</value></prop>
+<node oor:name="L107" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4364 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;14400;10500;14400;0;450;2;2</value></prop></node>
-<node oor:name="L108" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4366 SuperPrint gelb, Ecken abgerundet</value></prop>
+<node oor:name="L108" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4366 SuperPrint gelb, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;4826;2116,7;4572;2116,7;975;2150;4;12</value></prop></node>
-<node oor:name="L109" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4367 SuperPrint rot, Ecken abgerundet</value></prop>
+<node oor:name="L109" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4367 SuperPrint rot, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;4826;2116,7;4572;2116,7;975;2150;4;12</value></prop></node>
-<node oor:name="L110" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4368 SuperPrint blau, Ecken abgerundet</value></prop>
+<node oor:name="L110" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4368 SuperPrint blau, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;4826;2116,7;4572;2116,7;975;2150;4;12</value></prop></node>
-<node oor:name="L111" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4369 SuperPrint grün, Ecken abgerundet</value></prop>
+<node oor:name="L111" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4369 SuperPrint grün, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;4826;2116,7;4572;2116,7;975;2150;4;12</value></prop></node>
-<node oor:name="L112" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4373 SuperPrint CD-Cover, weiß</value></prop>
+<node oor:name="L112" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4373 SuperPrint CD-Cover, weiß</value></prop>
<prop oor:name="Measure"><value>S;12150;14550;12150;11750;4425;1700;1;2</value></prop></node>
-<node oor:name="L113" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4374 SuperPrint CD-Etikett, transparente Folie</value></prop>
+<node oor:name="L113" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4374 SuperPrint CD-Etikett, transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L114" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4375 SuperPrint transparente Folie</value></prop>
+<node oor:name="L114" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4375 SuperPrint transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L115" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4376 SuperPrint transparente Folie</value></prop>
+<node oor:name="L115" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4376 SuperPrint transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L116" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4377 SuperPrint witterungsbeständig, weiß</value></prop>
+<node oor:name="L116" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4377 SuperPrint witterungsbeständig, weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L117" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4378 SuperPrint witterungsbeständig, weiß</value></prop>
+<node oor:name="L117" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4378 SuperPrint witterungsbeständig, weiß</value></prop>
<prop oor:name="Measure"><value>S;21000;14850;21000;14850;0;0;1;2</value></prop></node>
-<node oor:name="L118" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4379 SuperPrint witterungsbeständig, weiß</value></prop>
+<node oor:name="L118" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4379 SuperPrint witterungsbeständig, weiß</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L119" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4380 SuperPrint Oval, weiß</value></prop>
+<node oor:name="L119" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4380 SuperPrint Oval, weiß</value></prop>
<prop oor:name="Measure"><value>S;4572;2963;4064;2540;1610;1727;4;9</value></prop></node>
-<node oor:name="L120" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4385 SuperPrint Kreise 10 mm, weiß, ablösbar</value></prop>
+<node oor:name="L120" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4385 SuperPrint Kreise 10 mm, weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;1270;1270;1000;1000;1110;1650;15;21</value></prop></node>
-<node oor:name="L121" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4386 SuperPrint Kreise 20 mm, weiß, ablösbar</value></prop>
+<node oor:name="L121" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4386 SuperPrint Kreise 20 mm, weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;2254;2254;2000;2000;1611;1453;8;12</value></prop></node>
-<node oor:name="L122" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4387 SuperPrint Kreise 30 mm, weiß</value></prop>
+<node oor:name="L122" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4387 SuperPrint Kreise 30 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;3254;3254;3000;3000;865;1961;6;8</value></prop></node>
-<node oor:name="L123" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4388 SuperPrint Tiefkühletiketten, weiß</value></prop>
+<node oor:name="L123" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4388 SuperPrint Tiefkühletiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;3810;2120;3810;2120;975;1070;5;13</value></prop></node>
-<node oor:name="L124" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4389 SuperPrint Tiefkühletiketten, weiß</value></prop>
+<node oor:name="L124" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4389 SuperPrint Tiefkühletiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L125" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4390 SuperPrint weiß</value></prop>
+<node oor:name="L125" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4390 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L126" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4391 SuperPrint weiß</value></prop>
+<node oor:name="L126" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4391 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;3712,5;10500;3712,5;0;0;2;8</value></prop></node>
-<node oor:name="L127" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4392 SuperPrint weiß, ablösbar</value></prop>
+<node oor:name="L127" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4392 SuperPrint weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;5250;2970;5250;2970;0;0;4;10</value></prop></node>
-<node oor:name="L128" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4393 SuperPrint weiß, ablösbar</value></prop>
+<node oor:name="L128" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4393 SuperPrint weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;10500;4125;10500;4125;0;412,5;2;7</value></prop></node>
-<node oor:name="L129" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4394 SuperPrint weiß, ablösbar</value></prop>
+<node oor:name="L129" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4394 SuperPrint weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;10500;14400;10500;14400;0;450;2;2</value></prop></node>
-<node oor:name="L130" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4396 SuperPrint gelb, A6</value></prop>
+<node oor:name="L130" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4396 SuperPrint gelb, A6</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L131" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4397 SuperPrint rot, A6</value></prop>
+<node oor:name="L131" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4397 SuperPrint rot, A6</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L132" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4398 SuperPrint blau, A6</value></prop>
+<node oor:name="L132" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4398 SuperPrint blau, A6</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L133" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4399 SuperPrint grün, A6</value></prop>
+<node oor:name="L133" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4399 SuperPrint grün, A6</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L134" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4401 SuperPrint gelb, A4</value></prop>
+<node oor:name="L134" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4401 SuperPrint gelb, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L135" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4402 SuperPrint rot, A4</value></prop>
+<node oor:name="L135" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4402 SuperPrint rot, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L136" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4403 SuperPrint blau, A4</value></prop>
+<node oor:name="L136" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4403 SuperPrint blau, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L137" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4404 SuperPrint grün, A4</value></prop>
+<node oor:name="L137" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4404 SuperPrint grün, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L138" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4406 SuperPrint gelb</value></prop>
+<node oor:name="L138" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4406 SuperPrint gelb</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L139" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4407 SuperPrint rot</value></prop>
+<node oor:name="L139" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4407 SuperPrint rot</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L140" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4408 SuperPrint blau</value></prop>
+<node oor:name="L140" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4408 SuperPrint blau</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L141" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4409 SuperPrint grün</value></prop>
+<node oor:name="L141" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4409 SuperPrint grün</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L142" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4414 SuperPrint weiß</value></prop>
+<node oor:name="L142" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4414 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;3600;7000;3600;0;450;3;8</value></prop></node>
-<node oor:name="L143" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4415 SuperPrint weiß</value></prop>
+<node oor:name="L143" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4415 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;4125;7000;4125;0;412,5;3;7</value></prop></node>
-<node oor:name="L144" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4416 SuperPrint weiß</value></prop>
+<node oor:name="L144" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4416 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;4125;10500;4125;0;412,5;2;7</value></prop></node>
-<node oor:name="L145" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4417 SuperPrint weiß</value></prop>
+<node oor:name="L145" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4417 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;4800;10500;4800;0;450;2;6</value></prop></node>
-<node oor:name="L146" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4418 SuperPrint Namensetiketten Acetatseide, rot</value></prop>
+<node oor:name="L146" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4418 SuperPrint Namensetiketten Acetatseide, rot</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L147" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4419 SuperPrint Namensetiketten Acetatseide, blau</value></prop>
+<node oor:name="L147" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4419 SuperPrint Namensetiketten Acetatseide, blau</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L148" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4421 SuperPrint gelb</value></prop>
+<node oor:name="L148" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4421 SuperPrint gelb</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L149" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4422 SuperPrint rot</value></prop>
+<node oor:name="L149" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4422 SuperPrint rot</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L150" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4423 SuperPrint blau</value></prop>
+<node oor:name="L150" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4423 SuperPrint blau</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L151" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4424 SuperPrint grün</value></prop>
+<node oor:name="L151" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4424 SuperPrint grün</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L152" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4425 SuperPrint weiß</value></prop>
+<node oor:name="L152" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4425 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;5700;10500;5700;0;600;2;5</value></prop></node>
-<node oor:name="L153" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4426 SuperPrint weiß</value></prop>
+<node oor:name="L153" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4426 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;7000;10500;7000;0;850;2;4</value></prop></node>
-<node oor:name="L154" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4427 SuperPrint weiß</value></prop>
+<node oor:name="L154" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4427 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;3500;10500;3500;0;850;2;8</value></prop></node>
-<node oor:name="L155" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4428 SuperPrint weiß, A4</value></prop>
+<node oor:name="L155" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4428 SuperPrint weiß, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L156" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4429 SuperPrint weiß</value></prop>
+<node oor:name="L156" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4429 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;3500;7000;3500;0;850;3;8</value></prop></node>
-<node oor:name="L157" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4450 SuperPrint weiß</value></prop>
+<node oor:name="L157" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4450 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;3200;7000;3200;0;450;3;9</value></prop></node>
-<node oor:name="L158" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4451 SuperPrint weiß</value></prop>
+<node oor:name="L158" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4451 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;4125;7000;4125;0;412,5;3;7</value></prop></node>
-<node oor:name="L159" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4452 SuperPrint weiß</value></prop>
+<node oor:name="L159" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4452 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;4125;10500;4125;0;412,5;2;7</value></prop></node>
-<node oor:name="L160" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4453 SuperPrint weiß</value></prop>
+<node oor:name="L160" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4453 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;3600;7000;3600;0;450;3;8</value></prop></node>
-<node oor:name="L161" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4454 SuperPrint weiß</value></prop>
+<node oor:name="L161" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4454 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;14400;10500;14400;0;450;2;2</value></prop></node>
-<node oor:name="L162" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4455 SuperPrint weiß</value></prop>
+<node oor:name="L162" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4455 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;2540;7000;2540;0;880;3;11</value></prop></node>
-<node oor:name="L163" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4456 SuperPrint weiß</value></prop>
+<node oor:name="L163" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4456 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;2970;7000;2970;0;0;3;10</value></prop></node>
-<node oor:name="L164" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4457 SuperPrint weiß</value></prop>
+<node oor:name="L164" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4457 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;4800;10500;4800;0;450;2;6</value></prop></node>
-<node oor:name="L165" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4458 SuperPrint weiß</value></prop>
+<node oor:name="L165" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4458 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;20000;29700;20000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L166" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4459 SuperPrint weiß</value></prop>
+<node oor:name="L166" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4459 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;1693;7000;1693;0;460;3;17</value></prop></node>
-<node oor:name="L167" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4461 SuperPrint weiß</value></prop>
+<node oor:name="L167" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4461 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;5250;2970;5250;2970;0;0;4;10</value></prop></node>
-<node oor:name="L168" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4462 SuperPrint weiß</value></prop>
+<node oor:name="L168" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4462 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;3712,5;10500;3712,5;0;0;2;8</value></prop></node>
-<node oor:name="L169" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4464 SuperPrint weiß</value></prop>
+<node oor:name="L169" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4464 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L170" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4465 SuperPrint transparente Folie</value></prop>
+<node oor:name="L170" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4465 SuperPrint transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L171" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4466 SuperPrint gelb</value></prop>
+<node oor:name="L171" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4466 SuperPrint gelb</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L172" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4467 SuperPrint rot</value></prop>
+<node oor:name="L172" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4467 SuperPrint rot</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L173" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4468 SuperPrint blau</value></prop>
+<node oor:name="L173" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4468 SuperPrint blau</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L174" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4469 SuperPrint grün</value></prop>
+<node oor:name="L174" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4469 SuperPrint grün</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L175" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4470 SuperPrint weiß</value></prop>
+<node oor:name="L175" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4470 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;7425;10500;7425;0;0;2;4</value></prop></node>
-<node oor:name="L176" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4471 SuperPrint CD-Etikett, weiß</value></prop>
+<node oor:name="L176" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4471 SuperPrint CD-Etikett, weiß</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L177" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4472 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L177" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4472 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;8128;13970;7874;13970;2499;880;2;2</value></prop></node>
-<node oor:name="L178" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4473 SuperPrint weiß</value></prop>
+<node oor:name="L178" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4473 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;4100;7000;4100;0;500;3;7</value></prop></node>
-<node oor:name="L179" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4474 SuperPrint weiß</value></prop>
+<node oor:name="L179" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4474 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;4850;2540;4850;2540;800;2150;4;10</value></prop></node>
-<node oor:name="L180" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4475 SuperPrint weiß</value></prop>
+<node oor:name="L180" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4475 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;4100;10500;4100;0;500;2;7</value></prop></node>
-<node oor:name="L181" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4476 SuperPrint Kreise 40 mm, weiß</value></prop>
+<node oor:name="L181" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4476 SuperPrint Kreise 40 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;4600;4600;4000;4000;1600;1350;4;6</value></prop></node>
-<node oor:name="L182" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4477 SuperPrint Kreise 60 mm, weiß</value></prop>
+<node oor:name="L182" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4477 SuperPrint Kreise 60 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;6700;6700;6000;6000;800;1800;3;4</value></prop></node>
-<node oor:name="L183" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4478 SuperPrint Kreise 85 mm, weiß</value></prop>
+<node oor:name="L183" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4478 SuperPrint Kreise 85 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;9500;9500;8500;8500;1500;1100;2;3</value></prop></node>
-<node oor:name="L184" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4479 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L184" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4479 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;3387;8890;3387;1229;1303;2;8</value></prop></node>
-<node oor:name="L185" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4606 SuperPrint weiß</value></prop>
+<node oor:name="L185" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4606 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;3810;2120;3810;2120;975;1070;5;13</value></prop></node>
-<node oor:name="L186" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4607 SuperPrint weiß</value></prop>
+<node oor:name="L186" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4607 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;1693;4826;1693;848;1306;4;16</value></prop></node>
-<node oor:name="L187" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4608 SuperPrint weiß</value></prop>
+<node oor:name="L187" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4608 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L188" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4609 SuperPrint weiß</value></prop>
+<node oor:name="L188" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4609 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;5250;2120;5250;2120;0;0;4;14</value></prop></node>
-<node oor:name="L189" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4610 SuperPrint weiß</value></prop>
+<node oor:name="L189" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4610 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;5250;2970;5250;2970;0;0;4;10</value></prop></node>
-<node oor:name="L190" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4611 SuperPrint weiß</value></prop>
+<node oor:name="L190" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4611 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;1693;7000;1693;0;460;3;17</value></prop></node>
-<node oor:name="L191" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4612 SuperPrint weiß</value></prop>
+<node oor:name="L191" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4612 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;2970;7000;2970;0;0;3;10</value></prop></node>
-<node oor:name="L192" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4613 SuperPrint weiß</value></prop>
+<node oor:name="L192" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4613 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;6600;2540;6600;2540;600;880;3;11</value></prop></node>
-<node oor:name="L193" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4614 SuperPrint weiß</value></prop>
+<node oor:name="L193" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4614 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L194" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4615 SuperPrint weiß</value></prop>
+<node oor:name="L194" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4615 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L195" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4616 SuperPrint weiß</value></prop>
+<node oor:name="L195" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4616 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;4243;7000;4243;0;0;3;7</value></prop></node>
-<node oor:name="L196" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4617 SuperPrint 3,5"-Disketten, weiß</value></prop>
+<node oor:name="L196" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4617 SuperPrint 3,5"-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;6773;7000;6773;0;1303;3;4</value></prop></node>
-<node oor:name="L197" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4618 SuperPrint 3,5"-Disketten, weiß</value></prop>
+<node oor:name="L197" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4618 SuperPrint 3,5"-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;5080;7000;5080;0;2150;3;5</value></prop></node>
-<node oor:name="L198" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4619 SuperPrint weiß</value></prop>
+<node oor:name="L198" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4619 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;3387;9652;3387;848;1303;2;8</value></prop></node>
-<node oor:name="L199" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4620 SuperPrint weiß</value></prop>
+<node oor:name="L199" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4620 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;3712,5;10500;3712,5;0;0;2;8</value></prop></node>
-<node oor:name="L200" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4623 SuperPrint weiß</value></prop>
+<node oor:name="L200" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4623 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;4233;9652;4233;848;2151;2;6</value></prop></node>
-<node oor:name="L201" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4624 SuperPrint weiß</value></prop>
+<node oor:name="L201" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4624 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;6773;9652;6773;848;1303;2;4</value></prop></node>
-<node oor:name="L202" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4625 SuperPrint weiß</value></prop>
+<node oor:name="L202" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4625 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;4243;10500;4243;0;0;2;7</value></prop></node>
-<node oor:name="L203" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4626 SuperPrint weiß</value></prop>
+<node oor:name="L203" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4626 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;7425;10500;7425;0;0;2;4</value></prop></node>
-<node oor:name="L204" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4627 SuperPrint weiß, A6</value></prop>
+<node oor:name="L204" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4627 SuperPrint weiß, A6</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L205" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4628 SuperPrint weiß, A5</value></prop>
+<node oor:name="L205" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4628 SuperPrint weiß, A5</value></prop>
<prop oor:name="Measure"><value>S;21000;14850;21000;14850;0;0;1;2</value></prop></node>
-<node oor:name="L206" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4629 SuperPrint weiß</value></prop>
+<node oor:name="L206" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4629 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;5080;10500;5080;0;2150;2;5</value></prop></node>
-<node oor:name="L207" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4631 SuperPrint weiß</value></prop>
+<node oor:name="L207" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4631 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L208" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4654 SuperPrint weiß</value></prop>
+<node oor:name="L208" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4654 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;3900;10500;3900;0;1200;2;7</value></prop></node>
-<node oor:name="L209" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4664 SuperPrint Lohnsteueretikett,perforiert mit Klebestreifen, weiß </value></prop>
+<node oor:name="L209" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4664 SuperPrint Lohnsteueretikett,perforiert mit Klebestreifen, weiß </value></prop>
<prop oor:name="Measure"><value>S;10500;3900;10500;3900;0;1200;2;7</value></prop></node>
-<node oor:name="L210" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4666 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L210" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4666 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;4656;8890;4656;1229;880;2;6</value></prop></node>
-<node oor:name="L211" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4667 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L211" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4667 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;5080;9600;5080;773;2150;2;5</value></prop></node>
-<node oor:name="L212" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4668 SuperPrint weiß</value></prop>
+<node oor:name="L212" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4668 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;4243;7000;4243;0;0;3;7</value></prop></node>
-<node oor:name="L213" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4669 SuperPrint weiß</value></prop>
+<node oor:name="L213" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4669 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;4233;9652;4233;848;2150;2;6</value></prop></node>
-<node oor:name="L214" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4670 SuperPrint weiß</value></prop>
+<node oor:name="L214" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4670 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L215" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4672 SuperPrint weiß</value></prop>
+<node oor:name="L215" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4672 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;3387;9652;3387;848;1303;2;8</value></prop></node>
-<node oor:name="L216" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4674 SuperPrint weiß</value></prop>
+<node oor:name="L216" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4674 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;4243;10500;4243;0;0;2;7</value></prop></node>
-<node oor:name="L217" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4676 SuperPrint weiß, A6</value></prop>
+<node oor:name="L217" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4676 SuperPrint weiß, A6</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L218" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4677 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L218" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4677 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
-<node oor:name="L219" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4678 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L219" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4678 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;3810;9906;3810;467;1515;2;7</value></prop></node>
-<node oor:name="L220" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4680 SuperPrint transparente Folie</value></prop>
+<node oor:name="L220" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4680 SuperPrint transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L221" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4681 SuperPrint transparente Folie</value></prop>
+<node oor:name="L221" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4681 SuperPrint transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L222" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4682 SuperPrint transparente Folie</value></prop>
+<node oor:name="L222" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4682 SuperPrint transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;9652;4233;9652;4233;848;2150;2;6</value></prop></node>
-<node oor:name="L223" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4683 SuperPrint transparente Folie, A5</value></prop>
+<node oor:name="L223" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4683 SuperPrint transparente Folie, A5</value></prop>
<prop oor:name="Measure"><value>S;21000;14850;21000;14850;0;0;1;2</value></prop></node>
-<node oor:name="L224" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4684 SuperPrint transparente Folie</value></prop>
+<node oor:name="L224" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4684 SuperPrint transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;5250;2970;5250;2970;0;0;4;10</value></prop></node>
-<node oor:name="L225" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4685 SuperPrint transparente Folie</value></prop>
+<node oor:name="L225" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4685 SuperPrint transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L226" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4686 SuperPrint Kreise 40 mm, transparent</value></prop>
+<node oor:name="L226" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4686 SuperPrint Kreise 40 mm, transparent</value></prop>
<prop oor:name="Measure"><value>S;4600;4600;4000;4000;1600;1350;4;6</value></prop></node>
-<node oor:name="L227" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4690 SuperPrint weiße Folie</value></prop>
+<node oor:name="L227" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4690 SuperPrint weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L228" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4691 SuperPrint weiße Folie</value></prop>
+<node oor:name="L228" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4691 SuperPrint weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L229" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4692 SuperPrint weiße Folie</value></prop>
+<node oor:name="L229" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4692 SuperPrint weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;9652;4233;9652;4233;848;2150;2;6</value></prop></node>
-<node oor:name="L230" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4693 SuperPrint weiße Folie, A5</value></prop>
+<node oor:name="L230" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4693 SuperPrint weiße Folie, A5</value></prop>
<prop oor:name="Measure"><value>S;21000;14850;21000;14850;0;0;1;2</value></prop></node>
-<node oor:name="L231" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4694 SuperPrint weiße Folie</value></prop>
+<node oor:name="L231" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4694 SuperPrint weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;5250;2970;5250;2970;0;0;4;10</value></prop></node>
-<node oor:name="L232" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4695 SuperPrint weiße Folie</value></prop>
+<node oor:name="L232" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4695 SuperPrint weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;7000;3712,5;7000;3712,5;0;0;3;8</value></prop></node>
-<node oor:name="L233" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4696 SuperPrint weiße Folie</value></prop>
+<node oor:name="L233" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4696 SuperPrint weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;10500;4243;10500;4243;0;0;2;7</value></prop></node>
-<node oor:name="L234" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4697 SuperPrint weiße Folie</value></prop>
+<node oor:name="L234" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4697 SuperPrint weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L235" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4698 SuperPrint weiße Folie</value></prop>
+<node oor:name="L235" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4698 SuperPrint weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L236" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4810 InkPrint Special weiß</value></prop>
+<node oor:name="L236" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4810 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;3810;2120;3810;2120;975;1070;5;13</value></prop></node>
-<node oor:name="L237" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4811 InkPrint Special weiß</value></prop>
+<node oor:name="L237" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4811 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;1693;4826;1693;848;1303;4;16</value></prop></node>
-<node oor:name="L238" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4812 InkPrint Special weiß</value></prop>
+<node oor:name="L238" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4812 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L239" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4814 InkPrint Special weiß</value></prop>
+<node oor:name="L239" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4814 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L240" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4815 InkPrint Special weiß</value></prop>
+<node oor:name="L240" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4815 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;3387;9652;3387;848;1303;2;8</value></prop></node>
-<node oor:name="L241" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4816 InkPrint Special weiß</value></prop>
+<node oor:name="L241" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4816 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;4230;9652;4230;848;2150;2;6</value></prop></node>
-<node oor:name="L242" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4817 InkPrint Special weiß</value></prop>
+<node oor:name="L242" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4817 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;6773;9652;6773;848;1303;2;4</value></prop></node>
-<node oor:name="L243" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4819 InkPrint Special weiß</value></prop>
+<node oor:name="L243" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4819 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L244" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4820 InkPrint Special weiß</value></prop>
+<node oor:name="L244" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4820 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L245" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4821 InkPrint Special 3,5"-Disketten, weiß</value></prop>
+<node oor:name="L245" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4821 InkPrint Special 3,5"-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;6600;6773;6600;6773;600;1303;3;4</value></prop></node>
-<node oor:name="L246" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4822 InkPrint Special weiß</value></prop>
+<node oor:name="L246" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4822 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;3387;9652;3387;848;1303;2;8</value></prop></node>
-<node oor:name="L247" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4823 InkPrint Special weiß</value></prop>
+<node oor:name="L247" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4823 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;4230;9652;4230;848;2150;2;6</value></prop></node>
-<node oor:name="L248" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4824 InkPrint Special weiß</value></prop>
+<node oor:name="L248" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4824 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L249" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4825 InkPrint Special für schmale Ordner, weiß</value></prop>
+<node oor:name="L249" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4825 InkPrint Special für schmale Ordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L250" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4826 InkPrint Special für breite Ordner, weiß</value></prop>
+<node oor:name="L250" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4826 InkPrint Special für breite Ordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L251" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4827 InkPrint Special Videocassette, Rücken, weiß</value></prop>
+<node oor:name="L251" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4827 InkPrint Special Videocassette, Rücken, weiß</value></prop>
<prop oor:name="Measure"><value>S;14732;2000;14732;2000;3134;1850;1;13</value></prop></node>
-<node oor:name="L252" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4828 InkPrint Special Videocassette, Front, weiß</value></prop>
+<node oor:name="L252" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4828 InkPrint Special Videocassette, Front, weiß</value></prop>
<prop oor:name="Measure"><value>S;8128;4656;7874;4656;2499;882;2;6</value></prop></node>
-<node oor:name="L253" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4829 InkPrint Special Diabeschriftung, weiß</value></prop>
+<node oor:name="L253" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4829 InkPrint Special Diabeschriftung, weiß</value></prop>
<prop oor:name="Measure"><value>S;4572;847;4318;847;1483;1298;4;32</value></prop></node>
-<node oor:name="L254" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4830 InkPrint Special für schmale Ordner, lang, weiß</value></prop>
+<node oor:name="L254" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4830 InkPrint Special für schmale Ordner, lang, weiß</value></prop>
<prop oor:name="Measure"><value>S;3800;29700;3800;29700;1000;0;5;1</value></prop></node>
-<node oor:name="L255" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4831 InkPrint Special für breite Ordner, lang, weiß</value></prop>
+<node oor:name="L255" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4831 InkPrint Special für breite Ordner, lang, weiß</value></prop>
<prop oor:name="Measure"><value>S;6100;29700;6100;29700;1350;0;3;1</value></prop></node>
-<node oor:name="L256" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4841 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L256" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4841 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L257" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4842 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L257" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4842 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L258" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4843 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L258" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4843 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;9652;4233;9652;4233;848;2150;2;6</value></prop></node>
-<node oor:name="L259" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4844 InkPrint Special transparente Folie, A4</value></prop>
+<node oor:name="L259" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4844 InkPrint Special transparente Folie, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L260" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4845 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L260" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4845 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;4826;2116,7;4572;2116,7;975;2150;4;12</value></prop></node>
-<node oor:name="L261" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4846 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L261" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4846 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L262" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4847 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L262" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4847 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;9854;5080;9600;5080;773;2150;2;5</value></prop></node>
-<node oor:name="L263" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4848 InkPrint Special CD-Etikett, transparente Folie</value></prop>
+<node oor:name="L263" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4848 InkPrint Special CD-Etikett, transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L264" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4851 InkPrint Special weiße Folie</value></prop>
+<node oor:name="L264" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4851 InkPrint Special weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L265" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4852 InkPrint Special weiße Folie</value></prop>
+<node oor:name="L265" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4852 InkPrint Special weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L266" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4853 InkPrint Special weiße Folie</value></prop>
+<node oor:name="L266" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4853 InkPrint Special weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;9652;4233;9652;4233;848;2150;2;6</value></prop></node>
-<node oor:name="L267" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4854 InkPrint Special weiße Folie, A4</value></prop>
+<node oor:name="L267" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4854 InkPrint Special weiße Folie, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L268" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4864 InkPrint Special wetterfeste Folie, weiß</value></prop>
+<node oor:name="L268" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4864 InkPrint Special wetterfeste Folie, weiß</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L269" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4865 InkPrint Special wetterfeste Folie, weiß</value></prop>
+<node oor:name="L269" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4865 InkPrint Special wetterfeste Folie, weiß</value></prop>
<prop oor:name="Measure"><value>S;9854;13970;9600;13970;773;880;2;2</value></prop></node>
-<node oor:name="L270" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4866 InkPrint Special wetterfeste Folie, weiß</value></prop>
+<node oor:name="L270" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4866 InkPrint Special wetterfeste Folie, weiß</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L271" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4867 InkPrint Special wetterfeste Folie, weiß, oval</value></prop>
+<node oor:name="L271" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4867 InkPrint Special wetterfeste Folie, weiß, oval</value></prop>
<prop oor:name="Measure"><value>S;9398;6773;8890;6350;1356;1515;2;4</value></prop></node>
-<node oor:name="L272" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5051 SuperPrint weiß</value></prop>
+<node oor:name="L272" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5051 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L273" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5052 SuperPrint weiß</value></prop>
+<node oor:name="L273" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5052 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;5250;2120;5250;2120;0;0;4;14</value></prop></node>
-<node oor:name="L274" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5053 SuperPrint weiß</value></prop>
+<node oor:name="L274" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5053 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L275" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5054 SuperPrint weiß</value></prop>
+<node oor:name="L275" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5054 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;4243;7000;4243;0;0;3;7</value></prop></node>
-<node oor:name="L276" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5055 SuperPrint 3,5"-Disketten, weiß</value></prop>
+<node oor:name="L276" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5055 SuperPrint 3,5"-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;5080;7000;5080;0;2150;3;5</value></prop></node>
-<node oor:name="L277" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5056 SuperPrint weiß</value></prop>
+<node oor:name="L277" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5056 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;4233;9652;4233;850;2151;2;6</value></prop></node>
-<node oor:name="L278" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5057 SuperPrint weiß</value></prop>
+<node oor:name="L278" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5057 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;4243;10500;4243;0;0;2;7</value></prop></node>
-<node oor:name="L279" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5058 SuperPrint gelb</value></prop>
+<node oor:name="L279" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5058 SuperPrint gelb</value></prop>
<prop oor:name="Measure"><value>S;10500;4243;10500;4243;0;0;2;7</value></prop></node>
-<node oor:name="L280" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5059 SuperPrint rot</value></prop>
+<node oor:name="L280" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5059 SuperPrint rot</value></prop>
<prop oor:name="Measure"><value>S;10500;4243;10500;4243;0;0;2;7</value></prop></node>
-<node oor:name="L281" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5060 SuperPrint blau</value></prop>
+<node oor:name="L281" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5060 SuperPrint blau</value></prop>
<prop oor:name="Measure"><value>S;10500;4243;10500;4243;0;0;2;7</value></prop></node>
-<node oor:name="L282" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5061 SuperPrint grün</value></prop>
+<node oor:name="L282" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5061 SuperPrint grün</value></prop>
<prop oor:name="Measure"><value>S;10500;4243;10500;4243;0;0;2;7</value></prop></node>
-<node oor:name="L283" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5062 SuperPrint weiß</value></prop>
+<node oor:name="L283" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5062 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;10500;7425;10500;7425;0;0;2;4</value></prop></node>
-<node oor:name="L284" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5063 SuperPrint weiß, A6</value></prop>
+<node oor:name="L284" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5063 SuperPrint weiß, A6</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L285" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5064 SuperPrint weiß, A5</value></prop>
+<node oor:name="L285" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5064 SuperPrint weiß, A5</value></prop>
<prop oor:name="Measure"><value>S;21000;14850;21000;14850;0;0;1;2</value></prop></node>
-<node oor:name="L286" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5065 SuperPrint weiß, A4</value></prop>
+<node oor:name="L286" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5065 SuperPrint weiß, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L287" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5066 SuperPrint Kreise 40 mm, weiß</value></prop>
+<node oor:name="L287" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5066 SuperPrint Kreise 40 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;4600;4600;4000;4000;1600;1350;4;6</value></prop></node>
-<node oor:name="L288" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5067 SuperPrint Kreise 60 mm, weiß</value></prop>
+<node oor:name="L288" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5067 SuperPrint Kreise 60 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;6700;6700;6000;6000;800;1800;3;4</value></prop></node>
-<node oor:name="L289" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5068 SuperPrint Kreise 85 mm, weiß</value></prop>
+<node oor:name="L289" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5068 SuperPrint Kreise 85 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;9500;9500;8500;8500;1500;1100;2;3</value></prop></node>
-<node oor:name="L290" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5069 SuperPrint Videocassette, Rücken, weiß</value></prop>
+<node oor:name="L290" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5069 SuperPrint Videocassette, Rücken, weiß</value></prop>
<prop oor:name="Measure"><value>S;14732;2000;14732;2000;3134;1850;1;13</value></prop></node>
-<node oor:name="L291" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5070 SuperPrint Videocassette, Front, weiß</value></prop>
+<node oor:name="L291" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5070 SuperPrint Videocassette, Front, weiß</value></prop>
<prop oor:name="Measure"><value>S;8128;4656;7874;4656;2499;882;2;6</value></prop></node>
-<node oor:name="L292" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5071 SuperPrint Diabeschriftung, weiß</value></prop>
+<node oor:name="L292" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5071 SuperPrint Diabeschriftung, weiß</value></prop>
<prop oor:name="Measure"><value>S;4572;847;4318;847;1483;1298;4;32</value></prop></node>
-<node oor:name="L293" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5072 SuperPrint Pfeile, gelb</value></prop>
+<node oor:name="L293" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5072 SuperPrint Pfeile, gelb</value></prop>
<prop oor:name="Measure"><value>S;9652;4656;9144;2540;1102;1938;2;6</value></prop></node>
-<node oor:name="L294" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5073 SuperPrint Pfeile, rot</value></prop>
+<node oor:name="L294" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5073 SuperPrint Pfeile, rot</value></prop>
<prop oor:name="Measure"><value>S;9652;4656;9144;2540;1102;1938;2;6</value></prop></node>
-<node oor:name="L295" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5074 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
+<node oor:name="L295" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5074 SuperPrint weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
-<node oor:name="L296" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5075 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L296" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5075 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;3387;9906;3387;467;1303;2;8</value></prop></node>
-<node oor:name="L297" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5076 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L297" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5076 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;3810;9906;3810;467;1515;2;7</value></prop></node>
-<node oor:name="L298" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5077 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L298" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5077 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L299" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5078 SuperPrint CD-Box-Etiketten, weiß</value></prop>
+<node oor:name="L299" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5078 SuperPrint CD-Box-Etiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;11430;550;11430;550;4785;1650;1;48</value></prop></node>
-<node oor:name="L300" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5079 SuperPrint CD-Etikett, weiß</value></prop>
+<node oor:name="L300" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5079 SuperPrint CD-Etikett, weiß</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L301" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5080 SuperPrint weiß, ablösbar</value></prop>
+<node oor:name="L301" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5080 SuperPrint weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;5250;2120;5250;2120;0;0;4;14</value></prop></node>
-<node oor:name="L302" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5081 SuperPrint weiß, ablösbar</value></prop>
+<node oor:name="L302" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5081 SuperPrint weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;10500;4243;10500;4243;0;0;2;7</value></prop></node>
-<node oor:name="L303" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5082 SuperPrint weiß, ablösbar</value></prop>
+<node oor:name="L303" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5082 SuperPrint weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;10500;14850;10500;14850;0;0;2;2</value></prop></node>
-<node oor:name="L304" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5083 SuperPrint CD-Etikett, gelb</value></prop>
+<node oor:name="L304" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5083 SuperPrint CD-Etikett, gelb</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L305" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5084 SuperPrint CD-Etikett, rot</value></prop>
+<node oor:name="L305" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5084 SuperPrint CD-Etikett, rot</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L306" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5085 SuperPrint CD-Etikett, blau</value></prop>
+<node oor:name="L306" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5085 SuperPrint CD-Etikett, blau</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L307" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5086 SuperPrint CD-Etikett, grün</value></prop>
+<node oor:name="L307" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5086 SuperPrint CD-Etikett, grün</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L308" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5087 SuperPrint ZIP-Disketten, weiß</value></prop>
+<node oor:name="L308" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5087 SuperPrint ZIP-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;6175;5000;5900;5000;1375;2350;3;5</value></prop></node>
-<node oor:name="L309" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5088 SuperPrint für schmale Ordner, farbig sort.</value></prop>
+<node oor:name="L309" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5088 SuperPrint für schmale Ordner, farbig sort.</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L310" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5089 SuperPrint für breite Ordner, farbig sort.</value></prop>
+<node oor:name="L310" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5089 SuperPrint für breite Ordner, farbig sort.</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L311" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5090 SuperPrint für schmale Ordner, weiß</value></prop>
+<node oor:name="L311" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5090 SuperPrint für schmale Ordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L312" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5091 SuperPrint für schmale Ordner, gelb</value></prop>
+<node oor:name="L312" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5091 SuperPrint für schmale Ordner, gelb</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L313" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5092 SuperPrint für schmale Ordner, rot</value></prop>
+<node oor:name="L313" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5092 SuperPrint für schmale Ordner, rot</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L314" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5093 SuperPrint für schmale Ordner, blau</value></prop>
+<node oor:name="L314" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5093 SuperPrint für schmale Ordner, blau</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L315" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5094 SuperPrint für schmale Ordner, grün</value></prop>
+<node oor:name="L315" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5094 SuperPrint für schmale Ordner, grün</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1550;1;7</value></prop></node>
-<node oor:name="L316" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5095 SuperPrint für breite Ordner, weiß</value></prop>
+<node oor:name="L316" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5095 SuperPrint für breite Ordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L317" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5096 SuperPrint für breite Ordner, gelb</value></prop>
+<node oor:name="L317" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5096 SuperPrint für breite Ordner, gelb</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L318" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5097 SuperPrint für breite Ordner, rot</value></prop>
+<node oor:name="L318" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5097 SuperPrint für breite Ordner, rot</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L319" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5098 SuperPrint für breite Ordner, blau</value></prop>
+<node oor:name="L319" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5098 SuperPrint für breite Ordner, blau</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L320" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5099 SuperPrint für breite Ordner, grün</value></prop>
+<node oor:name="L320" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5099 SuperPrint für breite Ordner, grün</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;2650;1;4</value></prop></node>
-<node oor:name="L321" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5123 SuperPrint für breite Ordner, weiß</value></prop>
+<node oor:name="L321" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5123 SuperPrint für breite Ordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;19200;5900;19200;5900;900;3050;1;4</value></prop></node>
-<node oor:name="L322" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5124 SuperPrint für breite Ordner, gelb</value></prop>
+<node oor:name="L322" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5124 SuperPrint für breite Ordner, gelb</value></prop>
<prop oor:name="Measure"><value>S;19200;5900;19200;5900;900;3050;1;4</value></prop></node>
-<node oor:name="L323" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5125 SuperPrint für breite Ordner, rot</value></prop>
+<node oor:name="L323" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5125 SuperPrint für breite Ordner, rot</value></prop>
<prop oor:name="Measure"><value>S;19200;5900;19200;5900;900;3050;1;4</value></prop></node>
-<node oor:name="L324" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5126 SuperPrint für breite Ordner, blau</value></prop>
+<node oor:name="L324" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5126 SuperPrint für breite Ordner, blau</value></prop>
<prop oor:name="Measure"><value>S;19200;5900;19200;5900;900;3050;1;4</value></prop></node>
-<node oor:name="L325" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5127 SuperPrint für breite Ordner, grün</value></prop>
+<node oor:name="L325" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5127 SuperPrint für breite Ordner, grün</value></prop>
<prop oor:name="Measure"><value>S;19200;5900;19200;5900;900;3050;1;4</value></prop></node>
-<node oor:name="L326" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5128 SuperPrint für schmale Ordner, lang, farbig sort.</value></prop>
+<node oor:name="L326" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5128 SuperPrint für schmale Ordner, lang, farbig sort.</value></prop>
<prop oor:name="Measure"><value>S;3800;29700;3800;29700;1000;0;5;1</value></prop></node>
-<node oor:name="L327" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5129 SuperPrint für breite Ordner, lang, farbig sort.</value></prop>
+<node oor:name="L327" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5129 SuperPrint für breite Ordner, lang, farbig sort.</value></prop>
<prop oor:name="Measure"><value>S;6100;29700;6100;29700;1350;0;3;1</value></prop></node>
-<node oor:name="L328" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5130 SuperPrint für schmale Ordner, lang, weiß</value></prop>
+<node oor:name="L328" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5130 SuperPrint für schmale Ordner, lang, weiß</value></prop>
<prop oor:name="Measure"><value>S;3800;29700;3800;29700;1000;0;5;1</value></prop></node>
-<node oor:name="L329" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5131 SuperPrint für schmale Ordner, lang, gelb</value></prop>
+<node oor:name="L329" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5131 SuperPrint für schmale Ordner, lang, gelb</value></prop>
<prop oor:name="Measure"><value>S;3800;29700;3800;29700;1000;0;5;1</value></prop></node>
-<node oor:name="L330" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5132 SuperPrint für schmale Ordner, lang, rot</value></prop>
+<node oor:name="L330" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5132 SuperPrint für schmale Ordner, lang, rot</value></prop>
<prop oor:name="Measure"><value>S;3800;29700;3800;29700;1000;0;5;1</value></prop></node>
-<node oor:name="L331" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5133 SuperPrint für schmale Ordner, lang, blau</value></prop>
+<node oor:name="L331" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5133 SuperPrint für schmale Ordner, lang, blau</value></prop>
<prop oor:name="Measure"><value>S;3800;29700;3800;29700;1000;0;5;1</value></prop></node>
-<node oor:name="L332" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5134 SuperPrint für schmale Ordner, lang, grün</value></prop>
+<node oor:name="L332" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5134 SuperPrint für schmale Ordner, lang, grün</value></prop>
<prop oor:name="Measure"><value>S;3800;29700;3800;29700;1000;0;5;1</value></prop></node>
-<node oor:name="L333" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5135 SuperPrint für breite Ordner, lang, weiß</value></prop>
+<node oor:name="L333" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5135 SuperPrint für breite Ordner, lang, weiß</value></prop>
<prop oor:name="Measure"><value>S;6100;29700;6100;29700;1350;0;3;1</value></prop></node>
-<node oor:name="L334" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5136 SuperPrint für breite Ordner, lang, gelb</value></prop>
+<node oor:name="L334" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5136 SuperPrint für breite Ordner, lang, gelb</value></prop>
<prop oor:name="Measure"><value>S;6100;29700;6100;29700;1350;0;3;1</value></prop></node>
-<node oor:name="L335" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5137 SuperPrint für breite Ordner, lang, rot</value></prop>
+<node oor:name="L335" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5137 SuperPrint für breite Ordner, lang, rot</value></prop>
<prop oor:name="Measure"><value>S;6100;29700;6100;29700;1350;0;3;1</value></prop></node>
-<node oor:name="L336" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5138 SuperPrint für breite Ordner, lang, blau</value></prop>
+<node oor:name="L336" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5138 SuperPrint für breite Ordner, lang, blau</value></prop>
<prop oor:name="Measure"><value>S;6100;29700;6100;29700;1350;0;3;1</value></prop></node>
-<node oor:name="L337" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5139 SuperPrint für breite Ordner, lang, grün</value></prop>
+<node oor:name="L337" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5139 SuperPrint für breite Ordner, lang, grün</value></prop>
<prop oor:name="Measure"><value>S;6100;29700;6100;29700;1350;0;3;1</value></prop></node>
-<node oor:name="L338" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5140 SuperPrint neon-gelb</value></prop>
+<node oor:name="L338" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5140 SuperPrint neon-gelb</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L339" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5141 SuperPrint neon-orange</value></prop>
+<node oor:name="L339" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5141 SuperPrint neon-orange</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L340" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5142 SuperPrint neon-pink</value></prop>
+<node oor:name="L340" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5142 SuperPrint neon-pink</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L341" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5143 SuperPrint neon-grün</value></prop>
+<node oor:name="L341" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5143 SuperPrint neon-grün</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L342" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5144 SuperPrint neon-gelb</value></prop>
+<node oor:name="L342" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5144 SuperPrint neon-gelb</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L343" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5145 SuperPrint neon-orange</value></prop>
+<node oor:name="L343" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5145 SuperPrint neon-orange</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L344" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5146 SuperPrint neon-pink</value></prop>
+<node oor:name="L344" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5146 SuperPrint neon-pink</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L345" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5147 SuperPrint neon-grün</value></prop>
+<node oor:name="L345" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5147 SuperPrint neon-grün</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L346" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5148 SuperPrint neon-gelb, A4</value></prop>
+<node oor:name="L346" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5148 SuperPrint neon-gelb, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L347" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5149 SuperPrint neon-orange, A4</value></prop>
+<node oor:name="L347" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5149 SuperPrint neon-orange, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L348" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5150 SuperPrint neon-pink, A4</value></prop>
+<node oor:name="L348" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5150 SuperPrint neon-pink, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L349" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5151 SuperPrint neon-grün, A4</value></prop>
+<node oor:name="L349" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5151 SuperPrint neon-grün, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L350" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5152 SuperPrint neon-gelb, Kreise 60 mm</value></prop>
+<node oor:name="L350" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5152 SuperPrint neon-gelb, Kreise 60 mm</value></prop>
<prop oor:name="Measure"><value>S;6700;6700;6000;6000;800;1800;3;4</value></prop></node>
-<node oor:name="L351" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5153 SuperPrint neon-orange, Kreise 60 mm</value></prop>
+<node oor:name="L351" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5153 SuperPrint neon-orange, Kreise 60 mm</value></prop>
<prop oor:name="Measure"><value>S;6700;6700;6000;6000;800;1800;3;4</value></prop></node>
-<node oor:name="L352" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5154 SuperPrint neon-pink, Kreise 60 mm</value></prop>
+<node oor:name="L352" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5154 SuperPrint neon-pink, Kreise 60 mm</value></prop>
<prop oor:name="Measure"><value>S;6700;6700;6000;6000;800;1800;3;4</value></prop></node>
-<node oor:name="L353" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5155 SuperPrint neon-grün, Kreise 60 mm</value></prop>
+<node oor:name="L353" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5155 SuperPrint neon-grün, Kreise 60 mm</value></prop>
<prop oor:name="Measure"><value>S;6700;6700;6000;6000;800;1800;3;4</value></prop></node>
-<node oor:name="L354" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5158 SuperPrint für schmale Ordner, lang, weiß</value></prop>
+<node oor:name="L354" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5158 SuperPrint für schmale Ordner, lang, weiß</value></prop>
<prop oor:name="Measure"><value>S;3400;29700;3400;29700;2000;0;5;1</value></prop></node>
-<node oor:name="L355" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5159 SuperPrint für breite Ordner, lang, weiß</value></prop>
+<node oor:name="L355" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5159 SuperPrint für breite Ordner, lang, weiß</value></prop>
<prop oor:name="Measure"><value>S;5900;29700;5900;29700;1650;0;3;1</value></prop></node>
-<node oor:name="L356" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5160 SuperPrint für schmale Ordner, weiß</value></prop>
+<node oor:name="L356" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5160 SuperPrint für schmale Ordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;19200;3400;19200;3400;900;1250;1;8</value></prop></node>
-<node oor:name="L357" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5161 SuperPrint für schmale Ordner, gelb</value></prop>
+<node oor:name="L357" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5161 SuperPrint für schmale Ordner, gelb</value></prop>
<prop oor:name="Measure"><value>S;19200;3400;19200;3400;900;1250;1;8</value></prop></node>
-<node oor:name="L358" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5162 SuperPrint für schmale Ordner, rot</value></prop>
+<node oor:name="L358" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5162 SuperPrint für schmale Ordner, rot</value></prop>
<prop oor:name="Measure"><value>S;19200;3400;19200;3400;900;1250;1;8</value></prop></node>
-<node oor:name="L359" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5163 SuperPrint für schmale Ordner, blau</value></prop>
+<node oor:name="L359" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5163 SuperPrint für schmale Ordner, blau</value></prop>
<prop oor:name="Measure"><value>S;19200;3400;19200;3400;900;1250;1;8</value></prop></node>
-<node oor:name="L360" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5164 SuperPrint für schmale Ordner, grün</value></prop>
+<node oor:name="L360" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5164 SuperPrint für schmale Ordner, grün</value></prop>
<prop oor:name="Measure"><value>S;19200;3400;19200;3400;900;1250;1;8</value></prop></node>
-<node oor:name="L361" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5165 SuperPrint für schmale Hängeordner, weiß</value></prop>
+<node oor:name="L361" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5165 SuperPrint für schmale Hängeordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;3400;29700;3400;29700;2000;0;5;1</value></prop></node>
-<node oor:name="L362" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5166 SuperPrint für breite Hängeordner, weiß</value></prop>
+<node oor:name="L362" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5166 SuperPrint für breite Hängeordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;5800;29700;5800;29700;1800;0;3;1</value></prop></node>
-<node oor:name="L363" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5167 SuperPrint für breite Hängeordner, weiß</value></prop>
+<node oor:name="L363" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5167 SuperPrint für breite Hängeordner, weiß</value></prop>
<prop oor:name="Measure"><value>S;6300;29700;6300;29700;1050;0;3;1</value></prop></node>
-<node oor:name="L364" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8619 SuperPrint Mini-CD-Etiketten, weiß</value></prop>
+<node oor:name="L364" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8619 SuperPrint Mini-CD-Etiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;9200;8950;7800;7800;2000;2000;2;3</value></prop></node>
-<node oor:name="L365" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8631 SuperPrint weiß</value></prop>
+<node oor:name="L365" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8631 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L366" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8632 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L366" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8632 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
-<node oor:name="L367" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8633 SuperPrint weiß</value></prop>
+<node oor:name="L367" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8633 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L368" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8634 SuperPrint weiß</value></prop>
+<node oor:name="L368" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8634 SuperPrint weiß</value></prop>
<prop oor:name="Measure"><value>S;7000;4243;7000;4243;0;0;3;7</value></prop></node>
-<node oor:name="L369" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8635 SuperPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L369" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8635 SuperPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;3810;9906;3810;467;1515;2;7</value></prop></node>
-<node oor:name="L370" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8636 SuperPrint weiß, A5</value></prop>
+<node oor:name="L370" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8636 SuperPrint weiß, A5</value></prop>
<prop oor:name="Measure"><value>S;21000;14850;21000;14850;0;0;1;2</value></prop></node>
-<node oor:name="L371" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8637 SuperPrint weiß, A4</value></prop>
+<node oor:name="L371" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8637 SuperPrint weiß, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L372" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8650 ColorPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L372" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8650 ColorPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
-<node oor:name="L373" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8651 ColorPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L373" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8651 ColorPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;3387;8890;3387;1229;1303;2;8</value></prop></node>
-<node oor:name="L374" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8652 ColorPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L374" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8652 ColorPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;4656;8890;4656;1229;882;2;6</value></prop></node>
-<node oor:name="L375" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8653 ColorPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L375" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8653 ColorPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;5080;9600;5080;773;2150;2;5</value></prop></node>
-<node oor:name="L376" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8654 ColorPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L376" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8654 ColorPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;13970;9600;13970;773;880;2;2</value></prop></node>
-<node oor:name="L377" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8655 ColorPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L377" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8655 ColorPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L378" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8680 ColorPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L378" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8680 ColorPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
-<node oor:name="L379" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8681 ColorPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L379" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8681 ColorPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;4656;8890;4656;1229;882;2;6</value></prop></node>
-<node oor:name="L380" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8682 ColorPrint weiß, Ecken abgerundet</value></prop>
+<node oor:name="L380" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8682 ColorPrint weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L381" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8683 ColorPrint CD-Etikett, weiß</value></prop>
+<node oor:name="L381" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8683 ColorPrint CD-Etikett, weiß</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L382" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8800 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L382" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8800 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6096;3387;5334;3387;1737;1303;3;8</value></prop></node>
-<node oor:name="L383" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8801 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L383" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8801 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
-<node oor:name="L384" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8802 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L384" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8802 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;4656;6350;4656;721;882;3;6</value></prop></node>
-<node oor:name="L385" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8803 InkPrint Special 3,5"-Disketten, weiß</value></prop>
+<node oor:name="L385" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8803 InkPrint Special 3,5"-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;9000;5080;7000;5080;2500;2150;2;5</value></prop></node>
-<node oor:name="L386" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8804 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L386" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8804 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;3387;8890;3387;1229;1303;2;8</value></prop></node>
-<node oor:name="L387" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8805 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L387" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8805 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;4656;8890;4656;1229;882;2;6</value></prop></node>
-<node oor:name="L388" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8806 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L388" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8806 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;5080;9600;5080;773;2150;2;5</value></prop></node>
-<node oor:name="L389" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8807 InkPrint Special weiß, z.B. Paketadresse, ca. A6</value></prop>
+<node oor:name="L389" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8807 InkPrint Special weiß, z.B. Paketadresse, ca. A6</value></prop>
<prop oor:name="Measure"><value>S;9854;13970;9600;13970;773;880;2;2</value></prop></node>
-<node oor:name="L390" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8808 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L390" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8808 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;3387;9906;3387;467;1303;2;8</value></prop></node>
-<node oor:name="L391" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8809 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L391" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8809 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;3810;9906;3810;467;1515;2;7</value></prop></node>
-<node oor:name="L392" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8810 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L392" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8810 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L393" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8811 InkPrint Special weiß, ca. DIN A5</value></prop>
+<node oor:name="L393" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8811 InkPrint Special weiß, ca. DIN A5</value></prop>
<prop oor:name="Measure"><value>S;19200;13970;19200;13970;900;880;1;2</value></prop></node>
-<node oor:name="L394" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8830 InkPrint Special weiß, z.B. für Preisauszeichnung</value></prop>
+<node oor:name="L394" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8830 InkPrint Special weiß, z.B. für Preisauszeichnung</value></prop>
<prop oor:name="Measure"><value>S;2794;847;2540;847;848;1303;7;32</value></prop></node>
-<node oor:name="L395" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8831 InkPrint Special weiß, quadratisch</value></prop>
+<node oor:name="L395" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8831 InkPrint Special weiß, quadratisch</value></prop>
<prop oor:name="Measure"><value>S;3048;2540;2540;2540;1610;880;6;11</value></prop></node>
-<node oor:name="L396" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8832 InkPrint Special weiß, z.B. für Preisauszeichnung</value></prop>
+<node oor:name="L396" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8832 InkPrint Special weiß, z.B. für Preisauszeichnung</value></prop>
<prop oor:name="Measure"><value>S;3302;1693;3048;1693;721;1303;6;16</value></prop></node>
-<node oor:name="L397" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8833 InkPrint Special weiß</value></prop>
+<node oor:name="L397" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8833 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;3810;2120;3810;2120;975;1070;5;13</value></prop></node>
-<node oor:name="L398" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8834 InkPrint Special weiß</value></prop>
+<node oor:name="L398" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8834 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;4830;1693;4830;1693;840;1330;4;16</value></prop></node>
-<node oor:name="L399" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8835 InkPrint Special weiß</value></prop>
+<node oor:name="L399" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8835 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;4830;2540;4830;2540;840;880;4;11</value></prop></node>
-<node oor:name="L400" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8836 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L400" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8836 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6096;3387;5334;3387;1737;1303;3;8</value></prop></node>
-<node oor:name="L401" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8837 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L401" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8837 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;2540;6350;2540;721;880;3;11</value></prop></node>
-<node oor:name="L402" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8838 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L402" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8838 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
-<node oor:name="L403" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8839 InkPrint Special 3,5"-Disketten, weiß</value></prop>
+<node oor:name="L403" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8839 InkPrint Special 3,5"-Disketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;9000;5080;7000;5080;2500;2150;2;5</value></prop></node>
-<node oor:name="L404" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8840 InkPrint Special weiß, Visitenkartenformat</value></prop>
+<node oor:name="L404" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8840 InkPrint Special weiß, Visitenkartenformat</value></prop>
<prop oor:name="Measure"><value>S;8890;5080;8382;5080;1864;2150;2;5</value></prop></node>
-<node oor:name="L405" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8841 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L405" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8841 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;3387;8890;3387;1229;1303;2;8</value></prop></node>
-<node oor:name="L406" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8842 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L406" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8842 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;4656;8890;4656;1229;882;2;6</value></prop></node>
-<node oor:name="L407" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8843 InkPrint Special weiß, z.B. für Regalbeschriftung</value></prop>
+<node oor:name="L407" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8843 InkPrint Special weiß, z.B. für Regalbeschriftung</value></prop>
<prop oor:name="Measure"><value>S;9854;847;9600;847;773;1303;2;32</value></prop></node>
-<node oor:name="L408" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8844 InkPrint Special weiß, z.B. für Regalbeschriftung</value></prop>
+<node oor:name="L408" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8844 InkPrint Special weiß, z.B. für Regalbeschriftung</value></prop>
<prop oor:name="Measure"><value>S;9854;1693;9600;1693;773;1303;2;16</value></prop></node>
-<node oor:name="L409" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8845 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L409" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8845 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;5080;9600;5080;773;2150;2;5</value></prop></node>
-<node oor:name="L410" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8846 InkPrint Special weiß</value></prop>
+<node oor:name="L410" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8846 InkPrint Special weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;6773;9652;6773;848;1303;2;4</value></prop></node>
-<node oor:name="L411" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8847 InkPrint Special weiß, Paketadresse, ca. A6</value></prop>
+<node oor:name="L411" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8847 InkPrint Special weiß, Paketadresse, ca. A6</value></prop>
<prop oor:name="Measure"><value>S;9854;13970;9600;13970;773;880;2;2</value></prop></node>
-<node oor:name="L412" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8848 InkPrint Special weiß, z.B. für Regalbeschriftung</value></prop>
+<node oor:name="L412" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8848 InkPrint Special weiß, z.B. für Regalbeschriftung</value></prop>
<prop oor:name="Measure"><value>S;19200;847;19200;847;900;1303;1;32</value></prop></node>
-<node oor:name="L413" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8849 InkPrint Special weiß, z.B. für Regalbeschriftung</value></prop>
+<node oor:name="L413" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8849 InkPrint Special weiß, z.B. für Regalbeschriftung</value></prop>
<prop oor:name="Measure"><value>S;19200;1693;19200;1693;900;1303;1;16</value></prop></node>
-<node oor:name="L414" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8850 InkPrint Special weiß, ca. DIN A5</value></prop>
+<node oor:name="L414" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8850 InkPrint Special weiß, ca. DIN A5</value></prop>
<prop oor:name="Measure"><value>S;19200;13970;19200;13970;900;880;1;2</value></prop></node>
-<node oor:name="L415" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8851 InkPrint Special Kreise 32 mm, weiß</value></prop>
+<node oor:name="L415" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8851 InkPrint Special Kreise 32 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;3810;3810;3200;3200;1280;1820;5;7</value></prop></node>
-<node oor:name="L416" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8852 InkPrint Special Kreise 63,5 mm, weiß</value></prop>
+<node oor:name="L416" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8852 InkPrint Special Kreise 63,5 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;6604;6773;6350;6350;721;1516;3;4</value></prop></node>
-<node oor:name="L417" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8853 InkPrint Special Oval, weiß</value></prop>
+<node oor:name="L417" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8853 InkPrint Special Oval, weiß</value></prop>
<prop oor:name="Measure"><value>S;6350;4656;5842;4233;1229;1093;3;6</value></prop></node>
-<node oor:name="L418" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8854 InkPrint Special Oval, weiß</value></prop>
+<node oor:name="L418" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8854 InkPrint Special Oval, weiß</value></prop>
<prop oor:name="Measure"><value>S;9398;6773;8890;6350;1356;1515;2;4</value></prop></node>
-<node oor:name="L419" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8855 InkPrint Special abgeschrägte Ecken, weiß</value></prop>
+<node oor:name="L419" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8855 InkPrint Special abgeschrägte Ecken, weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;6773;8890;6773;1229;1303;2;4</value></prop></node>
-<node oor:name="L420" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8856 InkPrint Special Registeretiketten, weiß</value></prop>
+<node oor:name="L420" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8856 InkPrint Special Registeretiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;3048;4656;2540;4230;1610;1092;6;6</value></prop></node>
-<node oor:name="L421" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8857 InkPrint Special Sterne 63,5 mm, weiß</value></prop>
+<node oor:name="L421" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8857 InkPrint Special Sterne 63,5 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;6604;6773;6350;6350;721;1516;3;4</value></prop></node>
-<node oor:name="L422" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8858 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L422" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8858 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;4656;6350;4656;721;882;3;6</value></prop></node>
-<node oor:name="L423" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8859 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L423" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8859 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;3387;9906;3387;467;1303;2;8</value></prop></node>
-<node oor:name="L424" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8860 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L424" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8860 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;3810;9906;3810;467;1515;2;7</value></prop></node>
-<node oor:name="L425" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8861 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L425" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8861 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;5700;9906;5700;467;600;2;5</value></prop></node>
-<node oor:name="L426" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8862 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L426" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8862 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L427" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8863 InkPrint Special Kreise 40 mm, weiß</value></prop>
+<node oor:name="L427" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8863 InkPrint Special Kreise 40 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;4600;4600;4000;4000;1600;1350;4;6</value></prop></node>
-<node oor:name="L428" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8864 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L428" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8864 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;4826;2116,7;4572;2116,7;975;2150;4;12</value></prop></node>
-<node oor:name="L429" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8865 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L429" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8865 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L430" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8866 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L430" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8866 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;4233;9600;4233;773;2150;2;6</value></prop></node>
-<node oor:name="L431" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8867 InkPrint Special weiß, Ecken abgerundet</value></prop>
+<node oor:name="L431" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8867 InkPrint Special weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;6350;9600;6350;773;2150;2;4</value></prop></node>
-<node oor:name="L432" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8868 InkPrint Special Sonderform, weiß</value></prop>
+<node oor:name="L432" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8868 InkPrint Special Sonderform, weiß</value></prop>
<prop oor:name="Measure"><value>S;6604;4656,7;6350;4233;721;1093;3;6</value></prop></node>
-<node oor:name="L433" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8869 InkPrint Special Oval, weiß</value></prop>
+<node oor:name="L433" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8869 InkPrint Special Oval, weiß</value></prop>
<prop oor:name="Measure"><value>S;6604;4656,7;6350;4233;721;1093;3;6</value></prop></node>
-<node oor:name="L434" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8870 InkPrint Special Oval, weiß</value></prop>
+<node oor:name="L434" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8870 InkPrint Special Oval, weiß</value></prop>
<prop oor:name="Measure"><value>S;9854;6773;9600;6350;773;1515;2;4</value></prop></node>
-<node oor:name="L435" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8886 InkPrint Special Glossy-Qualität, Fotos 10x15, Two-in-one</value></prop>
+<node oor:name="L435" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8886 InkPrint Special Glossy-Qualität, Fotos 10x15, Two-in-one</value></prop>
<prop oor:name="Measure"><value>S;15000;14800;15000;10000;3000;2450;1;2</value></prop></node>
-<node oor:name="L436" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8887 InkPrint Special Glossy-Qualität, Paßfoto-Format, Two-in-one</value></prop>
+<node oor:name="L436" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8887 InkPrint Special Glossy-Qualität, Paßfoto-Format, Two-in-one</value></prop>
<prop oor:name="Measure"><value>S;4100;5100;3500;4500;2600;2400;4;5</value></prop></node>
-<node oor:name="L437" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8888 InkPrint Special Glossy-Qualität, CD-Cover-Etikett, weiß</value></prop>
+<node oor:name="L437" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8888 InkPrint Special Glossy-Qualität, CD-Cover-Etikett, weiß</value></prop>
<prop oor:name="Measure"><value>S;12150;14550;12150;11750;4425;1700;1;2</value></prop></node>
-<node oor:name="L438" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8889 InkPrint Special Glossy-Qualität,Visitenkartenetikett, weiß</value></prop>
+<node oor:name="L438" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8889 InkPrint Special Glossy-Qualität,Visitenkartenetikett, weiß</value></prop>
<prop oor:name="Measure"><value>S;9600;5500;8300;5200;1550;1250;2;5</value></prop></node>
-<node oor:name="L439" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8890 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
+<node oor:name="L439" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8890 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
-<node oor:name="L440" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8891 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
+<node oor:name="L440" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8891 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;3387;8890;3387;1229;1303;2;8</value></prop></node>
-<node oor:name="L441" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8892 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
+<node oor:name="L441" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8892 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9652;4656;8890;4656;1229;882;2;6</value></prop></node>
-<node oor:name="L442" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8893 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
+<node oor:name="L442" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8893 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;5080;9600;5080;773;2150;2;5</value></prop></node>
-<node oor:name="L443" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8894 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
+<node oor:name="L443" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8894 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;13970;9600;13970;773;880;2;2</value></prop></node>
-<node oor:name="L444" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8895 InkPrint Special Glossy-Qualität, weiß</value></prop>
+<node oor:name="L444" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8895 InkPrint Special Glossy-Qualität, weiß</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L445" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8896 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
+<node oor:name="L445" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8896 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;5079;6350;4656;721;2363,5;3;5</value></prop></node>
-<node oor:name="L446" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8897 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
+<node oor:name="L446" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8897 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9398;6773;8890;6350;1356;1515;2;4</value></prop></node>
-<node oor:name="L447" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8898 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
+<node oor:name="L447" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8898 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9398;13123;8890;12700;1356;1932;2;2</value></prop></node>
-<node oor:name="L448" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8899 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
+<node oor:name="L448" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8899 InkPrint Special Glossy-Qualität, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;17800;13300;17800;12700;1600;1843;1;2</value></prop></node>
-<node oor:name="L449" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8900 InkPrint Special Glossy-Qualität, CD-Etikett, weiß</value></prop>
+<node oor:name="L449" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8900 InkPrint Special Glossy-Qualität, CD-Etikett, weiß</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L450" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8901 InkPrint Special Glossy-Qualität, oval</value></prop>
+<node oor:name="L450" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8901 InkPrint Special Glossy-Qualität, oval</value></prop>
<prop oor:name="Measure"><value>S;6604;4656;6350;4233;721;1093;3;6</value></prop></node>
-<node oor:name="L451" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8939 InkPrint Special Mini-CD-Etiketten, weiß</value></prop>
+<node oor:name="L451" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8939 InkPrint Special Mini-CD-Etiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;9200;8950;7800;7800;2000;2000;2;3</value></prop></node>
-<node oor:name="L452" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8961 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L452" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8961 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L453" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8962 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L453" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8962 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L454" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8963 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L454" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8963 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;9652;4233;9652;4233;848;2150;2;6</value></prop></node>
-<node oor:name="L455" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8964 InkPrint Special transparente Folie, A4</value></prop>
+<node oor:name="L455" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8964 InkPrint Special transparente Folie, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L456" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8965 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L456" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8965 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;4826;2116,7;4572;2116,7;975;2150;4;12</value></prop></node>
-<node oor:name="L457" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8966 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L457" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8966 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1515;3;9</value></prop></node>
-<node oor:name="L458" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8967 InkPrint Special transparente Folie</value></prop>
+<node oor:name="L458" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8967 InkPrint Special transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;9854;5080;9600;5080;773;2150;2;5</value></prop></node>
-<node oor:name="L459" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8968 InkPrint Special CD-Etikett, transparente Folie</value></prop>
+<node oor:name="L459" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8968 InkPrint Special CD-Etikett, transparente Folie</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L460" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8971 InkPrint Special weiße Folie</value></prop>
+<node oor:name="L460" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8971 InkPrint Special weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L461" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8972 InkPrint Special weiße Folie</value></prop>
+<node oor:name="L461" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8972 InkPrint Special weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L462" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8973 InkPrint Special weiße Folie</value></prop>
+<node oor:name="L462" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8973 InkPrint Special weiße Folie</value></prop>
<prop oor:name="Measure"><value>S;9652;4233;9652;4233;848;2150;2;6</value></prop></node>
-<node oor:name="L463" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8974 InkPrint Special weiße Folie, A4</value></prop>
+<node oor:name="L463" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8974 InkPrint Special weiße Folie, A4</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L464" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8981 InkPrint Special Goldfolie</value></prop>
+<node oor:name="L464" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8981 InkPrint Special Goldfolie</value></prop>
<prop oor:name="Measure"><value>S;4826;2540;4826;2540;848;880;4;11</value></prop></node>
-<node oor:name="L465" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8982 InkPrint Special Goldfolie</value></prop>
+<node oor:name="L465" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8982 InkPrint Special Goldfolie</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L466" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8983 SuperPrint Goldfolie, oval</value></prop>
+<node oor:name="L466" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8983 SuperPrint Goldfolie, oval</value></prop>
<prop oor:name="Measure"><value>S;4572;2963;4064;2540;1610;1727;4;9</value></prop></node>
-<node oor:name="L467" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8984 InkPrint Special CD-Etikett, gold</value></prop>
+<node oor:name="L467" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8984 InkPrint Special CD-Etikett, gold</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L468" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8991 InkPrint Special Silberfolie</value></prop>
+<node oor:name="L468" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8991 InkPrint Special Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;6600;3387;6600;3387;600;1303;3;8</value></prop></node>
-<node oor:name="L469" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8992 InkPrint Special Silberfolie</value></prop>
+<node oor:name="L469" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8992 InkPrint Special Silberfolie</value></prop>
<prop oor:name="Measure"><value>S;21000;29700;21000;29700;0;0;1;1</value></prop></node>
-<node oor:name="L470" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8993 SuperPrint Silberfolie, oval</value></prop>
+<node oor:name="L470" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8993 SuperPrint Silberfolie, oval</value></prop>
<prop oor:name="Measure"><value>S;4572;2963;4064;2540;1610;1727;4;9</value></prop></node>
-<node oor:name="L471" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8994 InkPrint Special CD-Etikett, silber</value></prop>
+<node oor:name="L471" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8994 InkPrint Special CD-Etikett, silber</value></prop>
<prop oor:name="Measure"><value>S;11600;14800;11600;11600;4700;1650;1;2</value></prop></node>
-<node oor:name="L472" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4639a SuperPrint BETACAM SP/U-MATIC, Cassette (Front), weiß</value></prop>
+<node oor:name="L472" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4639a SuperPrint BETACAM SP/U-MATIC, Cassette (Front), weiß</value></prop>
<prop oor:name="Measure"><value>S;10160;6773;9906;6773;467;1303;2;4</value></prop></node>
-<node oor:name="L473" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4639b SuperPrint BETACAM SP/U-MATIC, Cassette (Rücken), weiß</value></prop>
+<node oor:name="L473" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4639b SuperPrint BETACAM SP/U-MATIC, Cassette (Rücken), weiß</value></prop>
<prop oor:name="Measure"><value>S;14000;1693;14000;1693;3500;1306;1;16</value></prop></node>
-<node oor:name="L474" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4640a SuperPrint Maxi Data Cartridge, weiß</value></prop>
+<node oor:name="L474" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4640a SuperPrint Maxi Data Cartridge, weiß</value></prop>
<prop oor:name="Measure"><value>S;13400;6770;13400;6770;3800;1310;1;4</value></prop></node>
-<node oor:name="L475" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4640b SuperPrint Maxi Data Cartridge (Hülle), weiß</value></prop>
+<node oor:name="L475" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4640b SuperPrint Maxi Data Cartridge (Hülle), weiß</value></prop>
<prop oor:name="Measure"><value>S;13400;1270;13400;1270;3800;1515;1;21</value></prop></node>
-<node oor:name="L476" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4641a SuperPrint Data Cartridge 4 mm, weiß</value></prop>
+<node oor:name="L476" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4641a SuperPrint Data Cartridge 4 mm, weiß</value></prop>
<prop oor:name="Measure"><value>S;6096;2120;5334;2120;1737;1070;3;13</value></prop></node>
-<node oor:name="L477" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4641b SuperPrint Data Cartridge 4 mm (Hülle), weiß</value></prop>
+<node oor:name="L477" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4641b SuperPrint Data Cartridge 4 mm (Hülle), weiß</value></prop>
<prop oor:name="Measure"><value>S;6604;3810;6350;3810;721;1515;3;7</value></prop></node>
-<node oor:name="L478" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4642a SuperPrint MiniData Cartridge, weiß</value></prop>
+<node oor:name="L478" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4642a SuperPrint MiniData Cartridge, weiß</value></prop>
<prop oor:name="Measure"><value>S;8800;2400;7300;2400;2450;1650;2;11</value></prop></node>
-<node oor:name="L479" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4642b SuperPrint MiniData Cartridge (Hülle), weiß</value></prop>
+<node oor:name="L479" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4642b SuperPrint MiniData Cartridge (Hülle), weiß</value></prop>
<prop oor:name="Measure"><value>S;9000;1000;7500;1000;2250;1850;2;26</value></prop></node>
-<node oor:name="L480" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4643a SuperPrint Magneto Optical Disk 3,5", weiß</value></prop>
+<node oor:name="L480" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4643a SuperPrint Magneto Optical Disk 3,5", weiß</value></prop>
<prop oor:name="Measure"><value>S;9000;6773;7000;6773;2500;1304;2;4</value></prop></node>
-<node oor:name="L481" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4643b SuperPrint Magneto Optical Disk 3,5" (Hülle), weiß</value></prop>
+<node oor:name="L481" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4643b SuperPrint Magneto Optical Disk 3,5" (Hülle), weiß</value></prop>
<prop oor:name="Measure"><value>S;9800;12400;8800;10400;1200;3450;2;2</value></prop></node>
-<node oor:name="L482" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4646a SuperPrint Mini Digital Video, weiß</value></prop>
+<node oor:name="L482" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4646a SuperPrint Mini Digital Video, weiß</value></prop>
<prop oor:name="Measure"><value>S;4572;847;4318;847;1483;1298;4;32</value></prop></node>
-<node oor:name="L483" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4646b SuperPrint Mini Digital Video (Hülle), weiß</value></prop>
+<node oor:name="L483" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4646b SuperPrint Mini Digital Video (Hülle), weiß</value></prop>
<prop oor:name="Measure"><value>S;6604;2540;6350;2540;721;880;3;11</value></prop></node>
-<node oor:name="L484" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4647a SuperPrint Video 8, Hi-8, Data Cartridge 8mm, weiß </value></prop>
+<node oor:name="L484" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4647a SuperPrint Video 8, Hi-8, Data Cartridge 8mm, weiß </value></prop>
<prop oor:name="Measure"><value>S;9000;1000;7500;1000;2250;1850;2;26</value></prop></node>
-<node oor:name="L485" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4647b SuperPrint Video 8, Hi-8, Data Cartridge 8 mm (Hülle), weiß</value></prop>
+<node oor:name="L485" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4647b SuperPrint Video 8, Hi-8, Data Cartridge 8 mm (Hülle), weiß</value></prop>
<prop oor:name="Measure"><value>S;9652;4656;8890;4656;1229;882;2;6</value></prop></node>
-<node oor:name="L486" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4648a SuperPrint VHS-C, SVHS-C, Cassette (Rücken) weiß</value></prop>
+<node oor:name="L486" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4648a SuperPrint VHS-C, SVHS-C, Cassette (Rücken) weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;1200;4318;1200;1102;1050;4;23</value></prop></node>
-<node oor:name="L487" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4648b SuperPrint VHS-C, SVHS-C, Cassette (Front), weiß</value></prop>
+<node oor:name="L487" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4648b SuperPrint VHS-C, SVHS-C, Cassette (Front), weiß</value></prop>
<prop oor:name="Measure"><value>S;6350;3810;5842;3810;1229;1515;3;7</value></prop></node>
-<node oor:name="L488" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4649a SuperPrint MiniDisk, weiß</value></prop>
+<node oor:name="L488" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4649a SuperPrint MiniDisk, weiß</value></prop>
<prop oor:name="Measure"><value>S;3600;5500;3600;5200;1500;1250;5;5</value></prop></node>
-<node oor:name="L489" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">4649b SuperPrint MiniDisk-Hülle, weiß</value></prop>
+<node oor:name="L489" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>4649b SuperPrint MiniDisk-Hülle, weiß</value></prop>
<prop oor:name="Measure"><value>S;9000;5080;7000;5080;2500;2150;2;5</value></prop></node>
-<node oor:name="L490" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">5116 taillierte Ringetiketten für Schmuck, weiß</value></prop>
+<node oor:name="L490" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>5116 taillierte Ringetiketten für Schmuck, weiß</value></prop>
<prop oor:name="Measure"><value>S;5900;1400;4900;1000;2150;1050;3;20</value>
</prop>
</node>
@@ -14284,280 +13183,280 @@
</node>
<node oor:name="Herma A5" oor:op="replace">
- <node oor:name="L0" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8600 A5 Kreise 10 mm, weiß, ablösbar</value></prop>
+ <node oor:name="L0" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8600 A5 Kreise 10 mm, weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;1270;1270;1000;1000;1110;1210;15;10</value></prop></node>
- <node oor:name="L1" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8601 A5 Kreise 20 mm, weiß, ablösbar</value></prop>
+ <node oor:name="L1" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8601 A5 Kreise 20 mm, weiß, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;2300;2300;2000;2000;1450;675;8;6</value></prop></node>
- <node oor:name="L2" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8602 A5 Kreise 60 mm, gelb, ablösbar</value></prop>
+ <node oor:name="L2" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8602 A5 Kreise 60 mm, gelb, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;6700;6700;6000;6000;800;1075;3;2</value></prop></node>
- <node oor:name="L3" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8603 A5 weiß, Ecken abgerundet, ablösbar</value></prop>
+ <node oor:name="L3" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8603 A5 weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;1524;850;1270;850;721;1050;13;15</value></prop></node>
- <node oor:name="L4" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8604 A5 weiß, Ecken abgerundet, ablösbar</value></prop>
+ <node oor:name="L4" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8604 A5 weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;2034;1000;1780;1000;457;1425;10;12</value></prop></node>
- <node oor:name="L5" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8605 A5 weiß, Ecken abgerundet, ablösbar</value></prop>
+ <node oor:name="L5" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8605 A5 weiß, Ecken abgerundet, ablösbar</value></prop>
<prop oor:name="Measure"><value>S;2794;1693;2540;1693;848;1499,5;7;7</value></prop></node>
- <node oor:name="L6" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8606 A5 Diabeschriftung, weiß</value></prop>
+ <node oor:name="L6" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8606 A5 Diabeschriftung, weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;1000;4572;1000;975;1425;4;12</value></prop></node>
- <node oor:name="L7" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8607 A5 Sichtreiteretiketten, weiß</value></prop>
+ <node oor:name="L7" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8607 A5 Sichtreiteretiketten, weiß</value></prop>
<prop oor:name="Measure"><value>S;4826;1693;4572;1693;975;1499,5;4;7</value></prop></node>
- <node oor:name="L8" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8608 A5 weiß, Ecken abgerundet</value></prop>
+ <node oor:name="L8" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8608 A5 weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;6604;2963,3;6350;2963,3;721;1499,5;3;4</value></prop></node>
- <node oor:name="L9" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8609 A5 weiß, Ecken abgerundet</value></prop>
+ <node oor:name="L9" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8609 A5 weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;4233;9600;4233;773;1075,5;2;3</value></prop></node>
- <node oor:name="L10" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8610 A5 weiß, Ecken abgerundet</value></prop>
+ <node oor:name="L10" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8610 A5 weiß, Ecken abgerundet</value></prop>
<prop oor:name="Measure"><value>S;9854;6350;9600;6350;773;1075;2;2</value></prop></node>
- <node oor:name="L11" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8611 A5 3,5"-Disketten, farbig sortiert</value></prop>
+ <node oor:name="L11" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8611 A5 3,5"-Disketten, farbig sortiert</value></prop>
<prop oor:name="Measure"><value>S;9000;6773;7000;6773;2500;652;2;2</value></prop></node>
- <node oor:name="L12" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8612 A5 Videoetiketten, Front, weiß</value></prop>
+ <node oor:name="L12" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8612 A5 Videoetiketten, Front, weiß</value></prop>
<prop oor:name="Measure"><value>S;8128;4646;7874;4646;2499;2769;2;2</value></prop></node>
- <node oor:name="L13" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8613 A5 Videoetiketten, Rücken, weiß</value></prop>
+ <node oor:name="L13" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8613 A5 Videoetiketten, Rücken, weiß</value></prop>
<prop oor:name="Measure"><value>S;14732;1693;14732;1693;3134;1499,5;1;7</value></prop></node>
- <node oor:name="L14" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8614 A5 Musik-Cassetten, weiß</value></prop>
+ <node oor:name="L14" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8614 A5 Musik-Cassetten, weiß</value></prop>
<prop oor:name="Measure"><value>S;9154;4233;8900;4233;1473;1075,5;2;3</value></prop></node>
- <node oor:name="L15" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8615 A5 für schmale Ordner, farbig sortiert</value></prop>
+ <node oor:name="L15" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8615 A5 für schmale Ordner, farbig sortiert</value></prop>
<prop oor:name="Measure"><value>S;19200;3800;19200;3800;900;1725;1;3</value></prop></node>
- <node oor:name="L16" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8616 A5 für breite Ordner, farbig sortiert</value></prop>
+ <node oor:name="L16" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8616 A5 für breite Ordner, farbig sortiert</value></prop>
<prop oor:name="Measure"><value>S;19200;6100;19200;6100;900;1325;1;2</value></prop></node>
</node>
<node oor:name="Herma endlos" oor:op="replace">
-<node oor:name="L0" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8001 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L0" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8001 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8890;2540;8890;2300;1105;0;1;1</value></prop></node>
-<node oor:name="L1" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8002 Endlosetiketten 3-bahnig, Kennzeichnung</value></prop>
+<node oor:name="L1" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8002 Endlosetiketten 3-bahnig, Kennzeichnung</value></prop>
<prop oor:name="Measure"><value>C;2794;1693;2540;1453;1486;0;3;1</value></prop></node>
-<node oor:name="L2" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8003 Endlosetiketten 2-bahnig, Kennzeichnung</value></prop>
+<node oor:name="L2" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8003 Endlosetiketten 2-bahnig, Kennzeichnung</value></prop>
<prop oor:name="Measure"><value>C;3810;2117;3556;1900;1867;0;2;1</value></prop></node>
-<node oor:name="L3" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8004 Endlosetiketten 2-bahnig, Diabeschriftung</value></prop>
+<node oor:name="L3" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8004 Endlosetiketten 2-bahnig, Diabeschriftung</value></prop>
<prop oor:name="Measure"><value>C;4572;1270;4318;1030;1105;0;2;1</value></prop></node>
-<node oor:name="L4" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8005 Endlosetiketten 2-bahnig, Kennzeichnung</value></prop>
+<node oor:name="L4" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8005 Endlosetiketten 2-bahnig, Kennzeichnung</value></prop>
<prop oor:name="Measure"><value>C;4064;2540;3810;2300;1613;0;2;1</value></prop></node>
-<node oor:name="L5" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8006 Endlosetiketten 2-bahnig, Kennzeichnung</value></prop>
+<node oor:name="L5" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8006 Endlosetiketten 2-bahnig, Kennzeichnung</value></prop>
<prop oor:name="Measure"><value>C;4318;1693;4064;1453;1359;0;2;1</value></prop></node>
-<node oor:name="L6" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8007 Endlosetiketten 2-bahnig, Kennzeichnung</value></prop>
+<node oor:name="L6" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8007 Endlosetiketten 2-bahnig, Kennzeichnung</value></prop>
<prop oor:name="Measure"><value>C;4572;3810;4318;3570;1105;0;2;1</value></prop></node>
-<node oor:name="L7" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8008 Endlosetiketten 1-bahnig, 3,5"-Diskette, weiß</value></prop>
+<node oor:name="L7" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8008 Endlosetiketten 1-bahnig, 3,5"-Diskette, weiß</value></prop>
<prop oor:name="Measure"><value>C;7112;7620;7112;6960;1994;0;1;1</value></prop></node>
-<node oor:name="L8" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8009 Endlosetiketten 1-bahnig, Namensetiketten, Acetatseide</value></prop>
+<node oor:name="L8" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8009 Endlosetiketten 1-bahnig, Namensetiketten, Acetatseide</value></prop>
<prop oor:name="Measure"><value>C;7000;2540;7000;2300;1500;0;1;1</value></prop></node>
-<node oor:name="L9" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8010 Endlosetiketten 1-bahnig, 3,5"-Diskette, weiß, Front</value></prop>
+<node oor:name="L9" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8010 Endlosetiketten 1-bahnig, 3,5"-Diskette, weiß, Front</value></prop>
<prop oor:name="Measure"><value>C;7112;5080;7112;4840;1444;0;1;1</value></prop></node>
-<node oor:name="L10" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8011 Endlosetiketten 1-bahnig, 3,5"-Diskette, gelb</value></prop>
+<node oor:name="L10" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8011 Endlosetiketten 1-bahnig, 3,5"-Diskette, gelb</value></prop>
<prop oor:name="Measure"><value>C;7112;7620;7112;6960;1994;0;1;1</value></prop></node>
-<node oor:name="L11" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8012 Endlosetiketten 1-bahnig, 3,5"-Diskette, rot</value></prop>
+<node oor:name="L11" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8012 Endlosetiketten 1-bahnig, 3,5"-Diskette, rot</value></prop>
<prop oor:name="Measure"><value>C;7112;7620;7112;6960;1994;0;1;1</value></prop></node>
-<node oor:name="L12" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8013 Endlosetiketten 1-bahnig, 3,5"-Diskette, blau</value></prop>
+<node oor:name="L12" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8013 Endlosetiketten 1-bahnig, 3,5"-Diskette, blau</value></prop>
<prop oor:name="Measure"><value>C;7112;7620;7112;6960;1994;0;1;1</value></prop></node>
-<node oor:name="L13" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8014 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L13" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8014 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;6858;3810;6858;3570;1571;0;1;1</value></prop></node>
-<node oor:name="L14" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8015 Endlosetiketten 1-bahnig, 3,5"-Diskette, grün</value></prop>
+<node oor:name="L14" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8015 Endlosetiketten 1-bahnig, 3,5"-Diskette, grün</value></prop>
<prop oor:name="Measure"><value>C;7112;7620;7112;6960;1994;0;1;1</value></prop></node>
-<node oor:name="L15" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8021 Endlosetiketten 2-bahnig, gelb</value></prop>
+<node oor:name="L15" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8021 Endlosetiketten 2-bahnig, gelb</value></prop>
<prop oor:name="Measure"><value>C;4064;2540;3810;2300;1613;0;2;1</value></prop></node>
-<node oor:name="L16" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8022 Endlosetiketten 2-bahnig, rot</value></prop>
+<node oor:name="L16" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8022 Endlosetiketten 2-bahnig, rot</value></prop>
<prop oor:name="Measure"><value>C;4064;2540;3810;2300;1613;0;2;1</value></prop></node>
-<node oor:name="L17" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8036 Endlosetiketten 2-bahnig, ablösbar</value></prop>
+<node oor:name="L17" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8036 Endlosetiketten 2-bahnig, ablösbar</value></prop>
<prop oor:name="Measure"><value>C;4064;2540;3810;2300;1613;0;2;1</value></prop></node>
-<node oor:name="L18" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8040 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L18" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8040 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L19" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8041 Endlosetiketten 1-bahnig, gelb</value></prop>
+<node oor:name="L19" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8041 Endlosetiketten 1-bahnig, gelb</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L20" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8042 Endlosetiketten 1-bahnig, rot</value></prop>
+<node oor:name="L20" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8042 Endlosetiketten 1-bahnig, rot</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L21" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8043 Endlosetiketten 1-bahnig, blau</value></prop>
+<node oor:name="L21" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8043 Endlosetiketten 1-bahnig, blau</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L22" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8045 Endlosetiketten 1-bahnig, grün</value></prop>
+<node oor:name="L22" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8045 Endlosetiketten 1-bahnig, grün</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L23" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8050 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L23" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8050 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8890;5080;8890;4840;1105;0;1;1</value></prop></node>
-<node oor:name="L24" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8060 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L24" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8060 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L25" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8061 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L25" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8061 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8890;5080;8890;4840;1105;0;1;1</value></prop></node>
-<node oor:name="L26" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8066 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L26" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8066 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10160;3810;10160;3570;1170;0;1;1</value></prop></node>
-<node oor:name="L27" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8067 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L27" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8067 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10668;3810;10668;3570;916;0;1;1</value></prop></node>
-<node oor:name="L28" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8068 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L28" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8068 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10160;5080;10160;4840;1170;0;1;1</value></prop></node>
-<node oor:name="L29" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8069 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L29" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8069 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10668;5080;10668;4840;916;0;1;1</value></prop></node>
-<node oor:name="L30" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8070 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L30" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8070 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;11176;5080;11176;4840;1162;0;1;1</value></prop></node>
-<node oor:name="L31" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8071 Endlosetiketten 1-bahnig, Videocassetten</value></prop>
+<node oor:name="L31" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8071 Endlosetiketten 1-bahnig, Videocassetten</value></prop>
<prop oor:name="Measure"><value>C;14732;2540;14732;1900;1134;0;1;1</value></prop></node>
-<node oor:name="L32" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8072 Endlosetiketten 1-bahnig, Querperforation, weiß</value></prop>
+<node oor:name="L32" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8072 Endlosetiketten 1-bahnig, Querperforation, weiß</value></prop>
<prop oor:name="Measure"><value>C;14732;10160;14732;9920;1134;0;1;1</value></prop></node>
-<node oor:name="L33" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8073 Endlosetiketten 1-bahnig, Querperforation, gelb</value></prop>
+<node oor:name="L33" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8073 Endlosetiketten 1-bahnig, Querperforation, gelb</value></prop>
<prop oor:name="Measure"><value>C;14732;10160;14732;9920;1134;0;1;1</value></prop></node>
-<node oor:name="L34" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8074 Endlosetiketten 1-bahnig, Querperforation, rot</value></prop>
+<node oor:name="L34" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8074 Endlosetiketten 1-bahnig, Querperforation, rot</value></prop>
<prop oor:name="Measure"><value>C;14732;10160;14732;9920;1134;0;1;1</value></prop></node>
-<node oor:name="L35" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8104 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
+<node oor:name="L35" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8104 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;8890;5080;8890;4840;1105;0;1;1</value></prop></node>
-<node oor:name="L36" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8111 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
+<node oor:name="L36" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8111 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L37" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8112 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
+<node oor:name="L37" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8112 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;10160;3810;10160;3570;1170;0;1;1</value></prop></node>
-<node oor:name="L38" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8113 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
+<node oor:name="L38" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8113 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;10160;5080;10160;4840;1170;0;1;1</value></prop></node>
-<node oor:name="L39" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8116 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
+<node oor:name="L39" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8116 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;11176;5080;11176;4840;1162;0;1;1</value></prop></node>
-<node oor:name="L40" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8121 Endlosetiketten 1-bahnig, gelb</value></prop>
+<node oor:name="L40" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8121 Endlosetiketten 1-bahnig, gelb</value></prop>
<prop oor:name="Measure"><value>C;10160;5080;10160;4840;1170;0;1;1</value></prop></node>
-<node oor:name="L41" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8122 Endlosetiketten 1-bahnig, rot</value></prop>
+<node oor:name="L41" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8122 Endlosetiketten 1-bahnig, rot</value></prop>
<prop oor:name="Measure"><value>C;10160;5080;10160;4840;1170;0;1;1</value></prop></node>
-<node oor:name="L42" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8123 Endlosetiketten 1-bahnig, blau</value></prop>
+<node oor:name="L42" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8123 Endlosetiketten 1-bahnig, blau</value></prop>
<prop oor:name="Measure"><value>C;10160;5080;10160;4840;1170;0;1;1</value></prop></node>
-<node oor:name="L43" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8125 Endlosetiketten 1-bahnig, grün</value></prop>
+<node oor:name="L43" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8125 Endlosetiketten 1-bahnig, grün</value></prop>
<prop oor:name="Measure"><value>C;10160;5080;10160;4840;1170;0;1;1</value></prop></node>
-<node oor:name="L44" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8158 Endlosetiketten 1-bahnig, Kennzeichnung</value></prop>
+<node oor:name="L44" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8158 Endlosetiketten 1-bahnig, Kennzeichnung</value></prop>
<prop oor:name="Measure"><value>C;7366;1270;7366;1030;1317;0;1;1</value></prop></node>
-<node oor:name="L45" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8160 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L45" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8160 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8890;2540;8890;2300;1105;0;1;1</value></prop></node>
-<node oor:name="L46" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8161 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L46" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8161 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L47" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8162 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L47" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8162 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10160;3810;10160;3570;1170;0;1;1</value></prop></node>
-<node oor:name="L48" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8163 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L48" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8163 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10160;5080;10160;4840;1170;0;1;1</value></prop></node>
-<node oor:name="L49" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8164 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L49" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8164 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10160;2540;10160;2300;1170;0;1;1</value></prop></node>
-<node oor:name="L50" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8166 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L50" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8166 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;11176;5080;11176;4840;1162;0;1;1</value></prop></node>
-<node oor:name="L51" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8167 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L51" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8167 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10414;3810;10160;3570;1713;0;2;1</value></prop></node>
-<node oor:name="L52" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8168 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L52" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8168 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10414;5080;10160;4840;2213;0;2;1</value></prop></node>
-<node oor:name="L53" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8169 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L53" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8169 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10414;2540;10160;2300;1213;0;2;1</value></prop></node>
-<node oor:name="L54" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8170 Endlosetiketten 1-bahnig, ablösbar</value></prop>
+<node oor:name="L54" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8170 Endlosetiketten 1-bahnig, ablösbar</value></prop>
<prop oor:name="Measure"><value>C;8890;2540;8890;2300;1105;0;1;1</value></prop></node>
-<node oor:name="L55" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8171 Endlosetiketten 1-bahnig, ablösbar</value></prop>
+<node oor:name="L55" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8171 Endlosetiketten 1-bahnig, ablösbar</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L56" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8172 Endlosetiketten 1-bahnig, ablösbar</value></prop>
+<node oor:name="L56" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8172 Endlosetiketten 1-bahnig, ablösbar</value></prop>
<prop oor:name="Measure"><value>C;6858;3810;6858;3570;1571;0;1;1</value></prop></node>
-<node oor:name="L57" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8173 Endlosetiketten 1-bahn., Querperforation, ablösbar</value></prop>
+<node oor:name="L57" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8173 Endlosetiketten 1-bahn., Querperforation, ablösbar</value></prop>
<prop oor:name="Measure"><value>C;14732;7620;14732;7380;1134;0;1;1</value></prop></node>
-<node oor:name="L58" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8178 Endlosetiketten 1-bahnig, schnittgestanzt</value></prop>
+<node oor:name="L58" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8178 Endlosetiketten 1-bahnig, schnittgestanzt</value></prop>
<prop oor:name="Measure"><value>C;9500;3810;9500;3810;1000;0;1;1</value></prop></node>
-<node oor:name="L59" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8179 Endlosetiketten 1-bahnig, schnittgestanzt</value></prop>
+<node oor:name="L59" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8179 Endlosetiketten 1-bahnig, schnittgestanzt</value></prop>
<prop oor:name="Measure"><value>C;15200;5080;15200;5080;900;0;1;1</value></prop></node>
-<node oor:name="L60" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8181 Endlosetiketten 1-bahnig, gelb</value></prop>
+<node oor:name="L60" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8181 Endlosetiketten 1-bahnig, gelb</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L61" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8182 Endlosetiketten 1-bahnig, rot</value></prop>
+<node oor:name="L61" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8182 Endlosetiketten 1-bahnig, rot</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L62" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8183 Endlosetiketten 1-bahnig, blau</value></prop>
+<node oor:name="L62" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8183 Endlosetiketten 1-bahnig, blau</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L63" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8185 Endlosetiketten 1-bahnig, grün</value></prop>
+<node oor:name="L63" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8185 Endlosetiketten 1-bahnig, grün</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L64" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8200 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L64" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8200 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;7874;2540;7874;2300;1063;0;1;1</value></prop></node>
-<node oor:name="L65" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8201 Endlosetiketten 1-bahnig, 3,5"-Diskette, Front</value></prop>
+<node oor:name="L65" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8201 Endlosetiketten 1-bahnig, 3,5"-Diskette, Front</value></prop>
<prop oor:name="Measure"><value>C;7112;5080;7112;4840;1444;0;1;1</value></prop></node>
-<node oor:name="L66" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8202 Endlosetiketten 1-bahnig, Kennzeichnung</value></prop>
+<node oor:name="L66" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8202 Endlosetiketten 1-bahnig, Kennzeichnung</value></prop>
<prop oor:name="Measure"><value>C;7366;1270;7366;1030;1317;0;1;1</value></prop></node>
-<node oor:name="L67" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8203 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L67" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8203 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10160;7620;10160;7380;1170;0;1;1</value></prop></node>
-<node oor:name="L68" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8204 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L68" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8204 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8890;5080;8890;4840;1105;0;1;1</value></prop></node>
-<node oor:name="L69" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8207 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L69" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8207 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;6858;3810;6858;3570;881;0;1;1</value></prop></node>
-<node oor:name="L70" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8209 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L70" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8209 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10668;3810;10668;3570;916;0;1;1</value></prop></node>
-<node oor:name="L71" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8210 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L71" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8210 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8890;2540;8890;2300;1105;0;1;1</value></prop></node>
-<node oor:name="L72" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8211 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L72" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8211 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8890;3810;8890;3570;1105;0;1;1</value></prop></node>
-<node oor:name="L73" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8212 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L73" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8212 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10160;3810;10160;3570;1170;0;1;1</value></prop></node>
-<node oor:name="L74" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8213 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L74" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8213 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10160;5080;10160;4840;1170;0;1;1</value></prop></node>
-<node oor:name="L75" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8214 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L75" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8214 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10160;2540;10160;2300;1170;0;1;1</value></prop></node>
-<node oor:name="L76" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8215 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L76" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8215 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;11176;3810;11176;3570;1162;0;1;1</value></prop></node>
-<node oor:name="L77" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8216 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L77" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8216 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;11176;5080;11176;4840;1162;0;1;1</value></prop></node>
-<node oor:name="L78" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8217 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L78" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8217 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;12700;2540;12700;2300;1150;0;1;1</value></prop></node>
-<node oor:name="L79" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8218 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L79" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8218 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;12700;3810;12700;3570;1150;0;1;1</value></prop></node>
-<node oor:name="L80" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8219 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L80" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8219 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;13460;2117;13460;1900;1200;0;1;1</value></prop></node>
-<node oor:name="L81" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8220 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L81" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8220 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;9144;3810;8890;3570;1108;0;2;1</value></prop></node>
-<node oor:name="L82" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8221 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L82" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8221 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;9144;2540;8890;2300;1108;0;2;1</value></prop></node>
-<node oor:name="L83" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8222 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L83" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8222 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;5334;3810;5080;3570;1043;0;2;1</value></prop></node>
-<node oor:name="L84" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8223 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L84" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8223 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;4064;2540;3810;2300;1613;0;2;1</value></prop></node>
-<node oor:name="L85" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8225 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L85" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8225 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10414;3810;10160;3570;1213;0;2;1</value></prop></node>
-<node oor:name="L86" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8226 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L86" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8226 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;9144;5080;8890;4840;1108;0;2;1</value></prop></node>
-<node oor:name="L87" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8227 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L87" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8227 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10414;5080;10160;4840;1213;0;2;1</value></prop></node>
-<node oor:name="L88" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8228 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L88" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8228 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;4064;1270;3810;1030;1613;0;2;1</value></prop></node>
-<node oor:name="L89" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8229 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L89" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8229 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;5334;2540;5080;2300;1043;0;2;1</value></prop></node>
-<node oor:name="L90" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8230 Endlosetiketten 3-bahnig</value></prop>
+<node oor:name="L90" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8230 Endlosetiketten 3-bahnig</value></prop>
<prop oor:name="Measure"><value>C;9144;2540;8890;2300;1211;0;3;1</value></prop></node>
-<node oor:name="L91" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8231 Endlosetiketten 3-bahnig</value></prop>
+<node oor:name="L91" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8231 Endlosetiketten 3-bahnig</value></prop>
<prop oor:name="Measure"><value>C;9144;3810;8890;3570;1211;0;3;1</value></prop></node>
-<node oor:name="L92" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8232 Endlosetiketten 3-bahnig</value></prop>
+<node oor:name="L92" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8232 Endlosetiketten 3-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10414;3810;10160;3570;1156;0;3;1</value></prop></node>
-<node oor:name="L93" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8233 Endlosetiketten 3-bahnig</value></prop>
+<node oor:name="L93" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8233 Endlosetiketten 3-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10922;5080;10668;4840;1244;0;3;1</value></prop></node>
-<node oor:name="L94" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8234 Endlosetiketten 3-bahnig</value></prop>
+<node oor:name="L94" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8234 Endlosetiketten 3-bahnig</value></prop>
<prop oor:name="Measure"><value>C;9144;5080;8890;4840;1211;0;3;1</value></prop></node>
-<node oor:name="L95" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8235 Endlosetiketten 3-bahnig</value></prop>
+<node oor:name="L95" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8235 Endlosetiketten 3-bahnig</value></prop>
<prop oor:name="Measure"><value>C;11430;5080;11176;4840;1232;0;3;1</value></prop></node>
-<node oor:name="L96" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8236 Endlosetiketten 3-bahnig, mit Querperforation</value></prop>
+<node oor:name="L96" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8236 Endlosetiketten 3-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;7112;3810;6858;3570;1209;0;3;1</value></prop></node>
-<node oor:name="L97" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8237 Endlosetiketten 3-bahnig</value></prop>
+<node oor:name="L97" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8237 Endlosetiketten 3-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10922;3810;10668;3570;1244;0;3;1</value></prop></node>
-<node oor:name="L98" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8238 Endlosetiketten 3-bahnig</value></prop>
+<node oor:name="L98" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8238 Endlosetiketten 3-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10414;5080;10160;4840;1156;0;3;1</value></prop></node>
-<node oor:name="L99" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8240 Endlosetiketten 4-bahnig</value></prop>
+<node oor:name="L99" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8240 Endlosetiketten 4-bahnig</value></prop>
<prop oor:name="Measure"><value>C;7620;3810;7366;3570;1087;0;4;1</value></prop></node>
-<node oor:name="L100" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8241 Endlosetiketten 4-bahnig</value></prop>
+<node oor:name="L100" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8241 Endlosetiketten 4-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8382;2540;8128;2300;1213;0;4;1</value></prop></node>
-<node oor:name="L101" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8242 Endlosetiketten 4-bahnig</value></prop>
+<node oor:name="L101" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8242 Endlosetiketten 4-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8382;3810;8128;3570;1213;0;4;1</value></prop></node>
-<node oor:name="L102" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8243 Endlosetiketten 4-bahnig</value></prop>
+<node oor:name="L102" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8243 Endlosetiketten 4-bahnig</value></prop>
<prop oor:name="Measure"><value>C;8382;5080;8128;4840;1213;0;4;1</value></prop></node>
-<node oor:name="L103" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8245 Endlosetiketten 4-bahnig</value></prop>
+<node oor:name="L103" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8245 Endlosetiketten 4-bahnig</value></prop>
<prop oor:name="Measure"><value>C;5334;2540;5080;2300;1209;0;4;1</value></prop></node>
-<node oor:name="L104" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8246 Endlosetiketten 4-bahnig</value></prop>
+<node oor:name="L104" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8246 Endlosetiketten 4-bahnig</value></prop>
<prop oor:name="Measure"><value>C;5334;3810;5080;3570;1209;0;4;1</value></prop></node>
-<node oor:name="L105" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8265 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L105" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8265 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;12700;5080;12700;4840;1150;0;1;1</value></prop></node>
-<node oor:name="L106" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8266 Endlosetiketten 2-bahnig</value></prop>
+<node oor:name="L106" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8266 Endlosetiketten 2-bahnig</value></prop>
<prop oor:name="Measure"><value>C;12954;5080;12700;4840;1173;0;2;1</value></prop></node>
-<node oor:name="L107" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8267 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L107" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8267 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;7874;3810;7874;3570;1063;0;1;1</value></prop></node>
-<node oor:name="L108" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8268 Endlosetiketten 3-bahnig, Kennzeichnung</value></prop>
+<node oor:name="L108" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8268 Endlosetiketten 3-bahnig, Kennzeichnung</value></prop>
<prop oor:name="Measure"><value>C;2794;1693;2540;1453;1486;0;3;1</value></prop></node>
-<node oor:name="L109" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8002 Endlosetiketten 3-bahnig, Kennzeichnung</value></prop>
+<node oor:name="L109" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8002 Endlosetiketten 3-bahnig, Kennzeichnung</value></prop>
<prop oor:name="Measure"><value>C;2794;1693;2540;1453;1486;0;3;1</value></prop></node>
-<node oor:name="L110" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8269 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
+<node oor:name="L110" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8269 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;21082;15240;21082;15000;1209;0;1;1</value></prop></node>
-<node oor:name="L111" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8290 Endlosetiketten 2-bahnig, mit Querperforation</value></prop>
+<node oor:name="L111" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8290 Endlosetiketten 2-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;14986;10160;14732;9920;1141;0;2;1</value></prop></node>
-<node oor:name="L112" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8291 Endlosetiketten 1-bahnig, 3,5"-Diskette</value></prop>
+<node oor:name="L112" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8291 Endlosetiketten 1-bahnig, 3,5"-Diskette</value></prop>
<prop oor:name="Measure"><value>C;7112;7620;7112;6960;1994;0;1;1</value></prop></node>
-<node oor:name="L113" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8292 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
+<node oor:name="L113" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8292 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;14732;10160;14732;9920;1134;0;1;1</value></prop></node>
-<node oor:name="L114" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8293 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
+<node oor:name="L114" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8293 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;14732;5080;14732;4840;1134;0;1;1</value></prop></node>
-<node oor:name="L115" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8294 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
+<node oor:name="L115" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8294 Endlosetiketten 1-bahnig, mit Querperforation</value></prop>
<prop oor:name="Measure"><value>C;14732;7620;14732;7380;1134;0;1;1</value></prop></node>
-<node oor:name="L116" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8295 Endlosetiketten 8-bahnig</value></prop>
+<node oor:name="L116" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8295 Endlosetiketten 8-bahnig</value></prop>
<prop oor:name="Measure"><value>C;4064;1270;3810;1030;1371;0;8;1</value></prop></node>
-<node oor:name="L117" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8296 Endlosetiketten 1-bahnig</value></prop>
+<node oor:name="L117" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8296 Endlosetiketten 1-bahnig</value></prop>
<prop oor:name="Measure"><value>C;10668;5080;10668;4840;916;0;1;1</value></prop></node>
-<node oor:name="L118" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value xml:lang="x-no-translate">true</value><value xml:lang="en-US">8299 Endlosetiketten 1-bahnig, 5,25"-Diskette, ablösbar</value></prop>
+<node oor:name="L118" oor:op="replace" oor:finalized="true"><prop oor:name="Name"><value>8299 Endlosetiketten 1-bahnig, 5,25"-Diskette, ablösbar</value></prop>
<prop oor:name="Measure"><value>C;7112;3386;7112;3146;1444;0;1;1</value></prop></node>
</node>
<node oor:name="Leitz" oor:op="replace">
@@ -14566,7 +13465,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">1680 Kartonrückenschilder, breit</value>
+ <value>1680 Kartonrückenschilder, breit</value>
</prop>
<prop oor:name="Measure">
@@ -14577,7 +13476,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">1681 Kartonrückenschilder, schmal</value>
+ <value>1681 Kartonrückenschilder, schmal</value>
</prop>
<prop oor:name="Measure">
@@ -14588,7 +13487,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">1685 Papierrückenschilder selbstkl., breit</value>
+ <value>1685 Papierrückenschilder selbstkl., breit</value>
</prop>
<prop oor:name="Measure">
@@ -14599,7 +13498,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">1686 Papierrückenschilder selbstkl., schmal</value>
+ <value>1686 Papierrückenschilder selbstkl., schmal</value>
</prop>
<prop oor:name="Measure">
@@ -14610,7 +13509,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">1687 Papierrückenschilder selbstkl., breit</value>
+ <value>1687 Papierrückenschilder selbstkl., breit</value>
</prop>
<prop oor:name="Measure">
@@ -14621,7 +13520,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">1688 Papierrückenschilder selbstkl., schmal</value>
+ <value>1688 Papierrückenschilder selbstkl., schmal</value>
</prop>
<prop oor:name="Measure">
@@ -14632,7 +13531,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">6098 Papierrückenschilder selbstkl., breit</value>
+ <value>6098 Papierrückenschilder selbstkl., breit</value>
</prop>
<prop oor:name="Measure">
@@ -14643,7 +13542,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">6099 Papierrückenschilder selbstkl., schmal</value>
+ <value>6099 Papierrückenschilder selbstkl., schmal</value>
</prop>
<prop oor:name="Measure">
@@ -14654,7 +13553,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">1900 Blanko-Schildchen</value>
+ <value>1900 Blanko-Schildchen</value>
</prop>
<prop oor:name="Measure">
@@ -14665,7 +13564,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">2466 Blanko-Schildchen</value>
+ <value>2466 Blanko-Schildchen</value>
</prop>
<prop oor:name="Measure">
@@ -14676,7 +13575,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">6010 Blanko-Schildchen</value>
+ <value>6010 Blanko-Schildchen</value>
</prop>
<prop oor:name="Measure">
@@ -14687,7 +13586,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">6643 Beschriftungsschilder, selbstklebend </value>
+ <value>6643 Beschriftungsschilder, selbstklebend </value>
</prop>
<prop oor:name="Measure">
@@ -14701,7 +13600,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DP001 Tischkarten blanko weiß</value>
+ <value>DP001 Tischkarten blanko weiß</value>
</prop>
<prop oor:name="Measure">
@@ -14712,7 +13611,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DP002 Tischkarten konturgestanzt</value>
+ <value>DP002 Tischkarten konturgestanzt</value>
</prop>
<prop oor:name="Measure">
@@ -14723,7 +13622,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DE115 Design-Etiketten</value>
+ <value>DE115 Design-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -14734,7 +13633,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DE141 Design-Etiketten</value>
+ <value>DE141 Design-Etiketten</value>
</prop>
<prop oor:name="Measure">
@@ -14745,7 +13644,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">LP750 CD-Einleger</value>
+ <value>LP750 CD-Einleger</value>
</prop>
<prop oor:name="Measure">
@@ -14756,7 +13655,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DD300 CD-Einleger</value>
+ <value>DD300 CD-Einleger</value>
</prop>
<prop oor:name="Measure">
@@ -14767,7 +13666,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DD405 CD-Einleger</value>
+ <value>DD405 CD-Einleger</value>
</prop>
<prop oor:name="Measure">
@@ -14778,7 +13677,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">LP755 CD-Booklet</value>
+ <value>LP755 CD-Booklet</value>
</prop>
<prop oor:name="Measure">
@@ -14789,7 +13688,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DD450 CD-Booklet</value>
+ <value>DD450 CD-Booklet</value>
</prop>
<prop oor:name="Measure">
@@ -14800,7 +13699,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DP839/DP939 Design-Visitenkarten</value>
+ <value>DP839/DP939 Design-Visitenkarten</value>
</prop>
<prop oor:name="Measure">
@@ -14811,7 +13710,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DP835/DP935 Design-Visitenkarten gestanzt</value>
+ <value>DP835/DP935 Design-Visitenkarten gestanzt</value>
</prop>
<prop oor:name="Measure">
@@ -14822,7 +13721,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DP836/DP936 Design-Visitenkarten</value>
+ <value>DP836/DP936 Design-Visitenkarten</value>
</prop>
<prop oor:name="Measure">
@@ -14833,7 +13732,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DP837/DP937 Design-Visitenkarten gestanzt, m. abger. Ecken</value>
+ <value>DP837/DP937 Design-Visitenkarten gestanzt, m. abger. Ecken</value>
</prop>
<prop oor:name="Measure">
@@ -14844,7 +13743,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">DP838/DP938 Design-Klapp-Visitenkarten</value>
+ <value>DP838/DP938 Design-Klapp-Visitenkarten</value>
</prop>
<prop oor:name="Measure">
@@ -14855,7 +13754,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">LP781 Regalschild</value>
+ <value>LP781 Regalschild</value>
</prop>
<prop oor:name="Measure">
@@ -14866,7 +13765,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">LP731 Ordner-Einsteckschild</value>
+ <value>LP731 Ordner-Einsteckschild</value>
</prop>
<prop oor:name="Measure">
@@ -14877,7 +13776,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">LP734 Ordner-Einsteckschild</value>
+ <value>LP734 Ordner-Einsteckschild</value>
</prop>
<prop oor:name="Measure">
@@ -14888,7 +13787,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">LP710 Postkarte bedruckt</value>
+ <value>LP710 Postkarte bedruckt</value>
</prop>
<prop oor:name="Measure">
@@ -14899,7 +13798,7 @@
<prop oor:name="Name">
- <value xml:lang="x-no-translate">true</value><value xml:lang="en-US">LP711 Postkarte</value>
+ <value>LP711 Postkarte</value>
</prop>
<prop oor:name="Measure">
diff --git a/officecfg/registry/data/org/openoffice/Office/Paths.xcu b/officecfg/registry/data/org/openoffice/Office/Paths.xcu
index b979f0f097c3..c16dfeef624d 100644
--- a/officecfg/registry/data/org/openoffice/Office/Paths.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Paths.xcu
@@ -226,6 +226,13 @@
</prop>
</node>
</node>
-
+ <node oor:name="Variables">
+ <prop oor:name="Work">
+ <value install:module="macosx" oor:external=
+ "com.sun.star.configuration.backend.MacOSXBackend WorkPathVariable"/>
+ <value install:module="unixdesktop" oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend WorkPathVariable"/>
+ </prop>
+ </node>
</oor:component-data>
diff --git a/officecfg/registry/data/org/openoffice/Office/Recovery.xcu b/officecfg/registry/data/org/openoffice/Office/Recovery.xcu
new file mode 100644
index 000000000000..bd6aab12361b
--- /dev/null
+++ b/officecfg/registry/data/org/openoffice/Office/Recovery.xcu
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+**********************************************************************-->
+
+<oor:component-data xmlns:install="http://openoffice.org/2004/installation"
+ xmlns:oor="http://openoffice.org/2001/registry"
+ oor:package="org.openoffice.Office" oor:name="Recovery">
+ <node oor:name="AutoSave" install:module="gconflockdown">
+ <prop oor:name="Enabled">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend AutoSaveEnabled"/>
+ </prop>
+ <prop oor:name="TimeIntervall">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend AutoSaveTimeIntervall"/>
+ </prop>
+ </node>
+</oor:component-data>
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/BasicIDEWindowState.xcu b/officecfg/registry/data/org/openoffice/Office/UI/BasicIDEWindowState.xcu
index 1e498b1889bf..a2bc0ee3c4da 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/BasicIDEWindowState.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/BasicIDEWindowState.xcu
@@ -116,7 +116,7 @@
</prop>
<prop oor:name="Docked" oor:type="xs:boolean">
- <value>False</value>
+ <value>false</value>
</prop>
<prop oor:name="Visible" oor:type="xs:boolean">
<value>true</value>
diff --git a/officecfg/registry/data/org/openoffice/Office/makefile.mk b/officecfg/registry/data/org/openoffice/Office/makefile.mk
index 50b67954aeef..c27c5d7dfc8f 100644
--- a/officecfg/registry/data/org/openoffice/Office/makefile.mk
+++ b/officecfg/registry/data/org/openoffice/Office/makefile.mk
@@ -78,6 +78,8 @@ MODULEFILES= \
Common-base.xcu \
Common-math.xcu \
Common-unx.xcu \
+ Common-unixdesktop.xcu \
+ Common-gconflockdown.xcu \
Common-macosx.xcu \
Common-wnt.xcu \
Common-UseOOoFileDialogs.xcu \
@@ -88,6 +90,7 @@ MODULEFILES= \
Common-korea.xcu \
Paths-macosx.xcu \
Paths-unxwnt.xcu \
+ Paths-unixdesktop.xcu \
Writer-cjk.xcu \
Writer-defaultfontarial.xcu \
Writer-directcursor.xcu \
@@ -100,8 +103,8 @@ MODULEFILES= \
Embedding-math.xcu \
Embedding-base.xcu \
Embedding-writer.xcu \
- UI-brand.xcu
-
+ UI-brand.xcu \
+ Recovery-gconflockdown.xcu
LOCALIZEDFILES= \
Accelerators.xcu \
diff --git a/officecfg/registry/data/org/openoffice/Setup.xcu b/officecfg/registry/data/org/openoffice/Setup.xcu
index 75d67f0a017a..fc87cd92df6a 100644
--- a/officecfg/registry/data/org/openoffice/Setup.xcu
+++ b/officecfg/registry/data/org/openoffice/Setup.xcu
@@ -329,7 +329,7 @@
<value >swform</value>
</prop>
<prop oor:name="ooSetupFactoryUIName">
- <value xml:lang="en-US">Base: Form Design</value>
+ <value>Base: Form Design</value>
</prop>
<prop oor:name="ooSetupFactoryWindowStateConfigRef">
<value >WriterFormWindowState</value>
@@ -364,7 +364,7 @@
<value>swreport</value>
</prop>
<prop oor:name="ooSetupFactoryUIName">
- <value xml:lang="en-US">Base: Report Design</value>
+ <value>Base: Report Design</value>
</prop>
<prop oor:name="ooSetupFactoryWindowStateConfigRef">
<value>WriterReportWindowState</value>
@@ -402,8 +402,7 @@
<value >swxform</value>
</prop>
<prop oor:name="ooSetupFactoryUIName">
- <value xml:lang="en-US">XML Form Document</value>
- <value xml:lang="de">XML Formulardokumente</value>
+ <value>XML Form Document</value>
</prop>
<prop oor:name="ooSetupFactoryWindowStateConfigRef">
<value >XFormsWindowState</value>
@@ -473,7 +472,7 @@
<value >GenericCategories</value>
</prop>
<prop oor:name="ooSetupFactoryUIName">
- <value xml:lang="en-US">Base: Relation Design</value>
+ <value>Base: Relation Design</value>
</prop>
</node>
<node oor:name="com.sun.star.sdb.QueryDesign" oor:op="replace" install:module="base">
@@ -498,7 +497,7 @@
<value >GenericCategories</value>
</prop>
<prop oor:name="ooSetupFactoryUIName">
- <value xml:lang="en-US">Base: Query Design</value>
+ <value>Base: Query Design</value>
</prop>
</node>
<node oor:name="com.sun.star.sdb.ViewDesign" oor:op="replace" install:module="base">
@@ -523,7 +522,7 @@
<value >GenericCategories</value>
</prop>
<prop oor:name="ooSetupFactoryUIName">
- <value xml:lang="en-US">Base: View Design</value>
+ <value>Base: View Design</value>
</prop>
</node>
<node oor:name="com.sun.star.sdb.TableDesign" oor:op="replace" install:module="base">
@@ -548,7 +547,7 @@
<value >GenericCategories</value>
</prop>
<prop oor:name="ooSetupFactoryUIName">
- <value xml:lang="en-US">Base: Table Design</value>
+ <value>Base: Table Design</value>
</prop>
</node>
<node oor:name="com.sun.star.sdb.DataSourceBrowser" oor:op="replace" install:module="base">
@@ -573,7 +572,7 @@
<value >GenericCategories</value>
</prop>
<prop oor:name="ooSetupFactoryUIName">
- <value xml:lang="en-US">Base: Data View</value>
+ <value>Base: Data View</value>
</prop>
</node>
<node oor:name="com.sun.star.sdb.TableDataView" oor:op="replace" install:module="base">
diff --git a/officecfg/registry/data/org/openoffice/System.xcu b/officecfg/registry/data/org/openoffice/System.xcu
new file mode 100644
index 000000000000..ef7c008d3830
--- /dev/null
+++ b/officecfg/registry/data/org/openoffice/System.xcu
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+**********************************************************************-->
+
+<oor:component-data xmlns:oor="http://openoffice.org/2001/registry"
+ oor:package="org.openoffice" oor:name="System">
+ <node oor:name="L10N">
+ <prop oor:name="Locale">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LocaleBackend Locale"/>
+ </prop>
+ <prop oor:name="UILocale">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LocaleBackend UILocale"/>
+ </prop>
+ <prop oor:name="SystemLocale">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LocaleBackend SystemLocale"/>
+ </prop>
+ </node>
+</oor:component-data>
diff --git a/officecfg/registry/data/org/openoffice/UserProfile.xcu b/officecfg/registry/data/org/openoffice/UserProfile.xcu
index 69def88b1a53..632753bc3c7a 100644
--- a/officecfg/registry/data/org/openoffice/UserProfile.xcu
+++ b/officecfg/registry/data/org/openoffice/UserProfile.xcu
@@ -37,5 +37,12 @@
<prop oor:name="fathersname" oor:type="xs:string">
<value/>
</prop>
+ <prop oor:name="givenname" install:module="gconflockdown">
+ <value oor:external=
+ "com.sun.star.configuration.backend.GconfBackend givenname"/>
+ </prop>
+ <prop oor:name="sn" install:module="gconflockdown">
+ <value oor:external="com.sun.star.configuration.backend.GconfBackend sn"/>
+ </prop>
</node>
</oor:component-data>
diff --git a/officecfg/registry/data/org/openoffice/VCL.xcu b/officecfg/registry/data/org/openoffice/VCL.xcu
index 9d145fbcc831..29b32149c337 100644
--- a/officecfg/registry/data/org/openoffice/VCL.xcu
+++ b/officecfg/registry/data/org/openoffice/VCL.xcu
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
<!--***********************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -29,16 +29,20 @@
*
************************************************************************ -->
<!DOCTYPE oor:component-data SYSTEM "../../../component-update.dtd">
-<oor:component-data oor:name="VCL" oor:package="org.openoffice" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<oor:component-data oor:name="VCL" oor:package="org.openoffice" xmlns:oor="http://openoffice.org/2001/registry" xmlns:install="http://openoffice.org/2004/installation" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<node oor:name="Settings">
<node oor:name="Accessibility" oor:op="replace">
<prop oor:name="EnableATToolSupport" oor:type="xs:string" oor:op="replace">
<value>false</value>
+ <value install:module="unixdesktop" oor:external=
+ "com.sun.star.configuration.backend.DesktopBackend EnableATToolSupport"/>
</prop>
</node>
<node oor:name="DesktopManagement" oor:op="replace">
<prop oor:name="DisablePrinting" oor:type="xs:string" oor:op="replace">
<value>false</value>
+ <value install:module="gconflockdown" oor:external=
+ "com.sun.star.configuration.backend.GconfBackend DisablePrinting"/>
</prop>
</node>
<node oor:name="Transfer" oor:op="replace">
@@ -1364,7 +1368,6 @@
</prop>
<prop oor:name="SubstFontsMS">
<value>바탕</value>
- <value></value>
</prop>
<prop oor:name="SubstFontsPS">
<value></value>
diff --git a/officecfg/registry/data/org/openoffice/makefile.mk b/officecfg/registry/data/org/openoffice/makefile.mk
index 6d5a1b264d8c..f0e5150ebfcf 100644
--- a/officecfg/registry/data/org/openoffice/makefile.mk
+++ b/officecfg/registry/data/org/openoffice/makefile.mk
@@ -42,12 +42,16 @@ PACKAGE=org.openoffice
XCUFILES= \
Inet.xcu \
Setup.xcu \
+ System.xcu \
VCL.xcu \
FirstStartWizard.xcu \
UserProfile.xcu
MODULEFILES= \
Inet-defaultsearchengine.xcu \
+ Inet-macosx.xcu \
+ Inet-unixdesktop.xcu \
+ Inet-wnt.xcu \
Setup-brand.xcu \
Setup-writer.xcu \
Setup-calc.xcu \
@@ -56,22 +60,15 @@ MODULEFILES= \
Setup-base.xcu \
Setup-math.xcu \
Setup-report.xcu \
- Setup-start.xcu
+ Setup-start.xcu \
+ UserProfile-gconflockdown.xcu \
+ VCL-gconflockdown.xcu \
+ VCL-unixdesktop.xcu
LOCALIZEDFILES=Setup.xcu
-SAMPLEFILES= \
- LDAP.xcu.sample
-
.INCLUDE : target.mk
LANGUAGEPACKS=$(MISC)$/registry$/spool$/Langpack-{$(alllangiso)}.xcu
-SAMPLETARGETS=$(MISC)$/registry$/data$/$(PACKAGEDIR)$/{$(SAMPLEFILES)}
ALLTAR : $(LANGUAGEPACKS)
-ALLTAR : $(SAMPLETARGETS)
-
-$(SAMPLETARGETS) : $(SAMPLEFILES)
- -$(MKDIRHIER) $(@:d)
- $(COPY) $< $@
-
diff --git a/officecfg/registry/schema/oo-ad-ldap-attr.map b/officecfg/registry/schema/oo-ad-ldap-attr.map
deleted file mode 100644
index 8e4d09b7e582..000000000000
--- a/officecfg/registry/schema/oo-ad-ldap-attr.map
+++ /dev/null
@@ -1,50 +0,0 @@
-# User.givenName
-org.openoffice.UserProfile/Data/givenname = givenName
-
-# User.sn
-org.openoffice.UserProfile/Data/sn = sn
-
-# User.initials
-org.openoffice.UserProfile/Data/initials = initials
-
-# User.street
-org.openoffice.UserProfile/Data/street = street,postalAddress
-
-# User.l (city)
-org.openoffice.UserProfile/Data/l = l
-
-# User.st (state)
-org.openoffice.UserProfile/Data/st = st
-
-# User.postalCode
-org.openoffice.UserProfile/Data/postalcode = postalCode
-
-# User.c (country)
-org.openoffice.UserProfile/Data/c = c,co
-
-# User.department (company)
-org.openoffice.UserProfile/Data/o = department
-
-# deprecated -- no LDAP corollary
-org.openoffice.UserProfile/Data/position =
-
-# User.title
-org.openoffice.UserProfile/Data/title = title
-
-# User.homePhone
-org.openoffice.UserProfile/Data/homephone = homePhone
-
-# User.telephoneNumber
-org.openoffice.UserProfile/Data/telephonenumber = telephoneNumber
-
-# UserfacsimileTelephoneNumber
-org.openoffice.UserProfile/Data/facsimiletelephonenumber = facsimileTelephoneNumber
-
-# User.mail
-org.openoffice.UserProfile/Data/mail = mail
-
-# Deprecated
-#UserGroup =
-
-
-
diff --git a/officecfg/registry/schema/oo-ad-ldap.xcd.sample b/officecfg/registry/schema/oo-ad-ldap.xcd.sample
new file mode 100644
index 000000000000..83786dc8aaa8
--- /dev/null
+++ b/officecfg/registry/schema/oo-ad-ldap.xcd.sample
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+**********************************************************************-->
+
+<!-- This file is an example of an LDAP configuration file.
+
+ To use user data from LDAP in your installation, you need to provide a
+ customized version of this file, removing the ".sample" suffix.
+
+ This sample file is designed to work with a Windows Active Directory
+ Server. There is another sample file designed to work with a Sun Java
+ System Directory Server. Only one of those files should be activated by
+ removing its ".sample" suffix.
+
+ To customize values in this file, replace the data within <value>...
+ </value> elements flagged as "CUSTOMIZE" with the values for your
+ organization. If a certain setting is not necessary for your installation,
+ you can remove the compelete corresponding <value>...</value> element.
+-->
+
+<oor:data xmlns:oor="http://openoffice.org/2001/registry">
+ <dependency file="main"/>
+ <oor:component-data oor:package="org.openoffice" oor:name="LDAP">
+ <node oor:name="UserDirectory">
+ <prop oor:name="SearchUser">
+ <!-- CUSTOMIZE, activate unless anonymous access is possible:
+ <value>MyUserLogin</value> -->
+ </prop>
+ <prop oor:name="SearchPassword">
+ <!-- CUSTOMIZE, activate unless anonymous access is possible:
+ <value>MyPassword</value> -->
+ </prop>
+ <prop oor:name="UserObjectClass">
+ <!-- CUSTOMIZE --><value>inetorgperson</value>
+ </prop>
+ <prop oor:name="UserUniqueAttribute">
+ <!-- CUSTOMIZE --><value>uid</value>
+ </prop>
+ <node oor:name="ServerDefinition">
+ <prop oor:name="Server">
+ <!-- CUSTOMIZE --><value>ldapserver.mycorp.com</value>
+ </prop>
+ <prop oor:name="Port">
+ <!-- CUSTOMIZE --><value>389</value>
+ </prop>
+ <prop oor:name="BaseDN">
+ <!-- CUSTOMIZE --><value>dc=mycorp,dc=com</value>
+ </prop>
+ </node>
+ </node>
+ </oor:component-data>
+ <oor:component-data oor:package="org.openoffice" oor:name="UserProfile">
+ <node oor:name="Data">
+ <prop oor:name="o">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe department"/>
+ </prop>
+ <prop oor:name="givenname">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe givenname"/>
+ </prop>
+ <prop oor:name="sn">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe sn"/>
+ </prop>
+ <prop oor:name="initials">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe initials"/>
+ </prop>
+ <prop oor:name="street">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe street,postalAddress"/>
+ </prop>
+ <prop oor:name="l">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe l"/>
+ </prop>
+ <prop oor:name="st">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe st"/>
+ </prop>
+ <prop oor:name="postalcode">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe postalCode"/>
+ </prop>
+ <prop oor:name="c">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe c,co"/>
+ </prop>
+ <prop oor:name="title">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe title"/>
+ </prop>
+ <prop oor:name="position">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe position"/>
+ </prop>
+ <prop oor:name="homephone">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe homePhone"/>
+ </prop>
+ <prop oor:name="telephonenumber">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe telephoneNumber"/>
+ </prop>
+ <prop oor:name="facsimiletelephonenumber">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe facsimileTelephoneNumber"
+/>
+ </prop>
+ <prop oor:name="mail">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe mail"/>
+ </prop>
+ <!--
+ <prop oor:name="fathersname">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe ..."/>
+ </prop>
+ -->
+ <!--
+ <prop oor:name="apartment">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe ..."/>
+ </prop>
+ -->
+ </node>
+ </oor:component-data>
+</oor:data>
diff --git a/officecfg/registry/schema/oo-ldap-attr.map b/officecfg/registry/schema/oo-ldap-attr.map
deleted file mode 100644
index caf6be58cac2..000000000000
--- a/officecfg/registry/schema/oo-ldap-attr.map
+++ /dev/null
@@ -1,50 +0,0 @@
-# inetOrgPerson.givenName
-org.openoffice.UserProfile/Data/givenname = givenname
-
-# person.sn
-org.openoffice.UserProfile/Data/sn = sn
-
-# inetOrgPerson.initials
-org.openoffice.UserProfile/Data/initials = initials
-
-# organizationalPerson.street
-org.openoffice.UserProfile/Data/street = street,postalAddress,streetAddress
-
-# organizationalPerson.l (city)
-org.openoffice.UserProfile/Data/l = l
-
-# organizationalPerson.st (state)
-org.openoffice.UserProfile/Data/st = st
-
-# organizationalPerson.postalCode
-org.openoffice.UserProfile/Data/postalcode = postalcode
-
-# country.c (country)
-org.openoffice.UserProfile/Data/c =
-
-# organizationalPerson.o (company)
-org.openoffice.UserProfile/Data/o = o,organizationName
-
-# deprecated -- no LDAP corollary
-org.openoffice.UserProfile/Data/position =
-
-# organizationalPerson.title
-org.openoffice.UserProfile/Data/title = title
-
-# inetOrgPerson.homePhone
-org.openoffice.UserProfile/Data/homephone = homephone
-
-# organizationalPerson.telephoneNumber
-org.openoffice.UserProfile/Data/telephonenumber = telephonenumber
-
-# organizationalPerson.facsimileTelephoneNumber
-org.openoffice.UserProfile/Data/facsimiletelephonenumber = facsimiletelephonenumber,officeFax
-
-# inetOrgPerson.mail
-org.openoffice.UserProfile/Data/mail = mail
-
-# Deprecated
-#UserGroup =
-
-
-
diff --git a/officecfg/registry/schema/oo-ldap.xcd.sample b/officecfg/registry/schema/oo-ldap.xcd.sample
new file mode 100644
index 000000000000..fb3af4f02db8
--- /dev/null
+++ b/officecfg/registry/schema/oo-ldap.xcd.sample
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+**********************************************************************-->
+
+<!-- This file is an example of an LDAP configuration file.
+
+ To use user data from LDAP in your installation, you need to provide a
+ customized version of this file, removing the ".sample" suffix.
+
+ This sample file is designed to work with a Sun Java System Directory
+ Server. There is another sample file designed to work with a Windows
+ Active Directory Server. Only one of those files should be activated by
+ removing its ".sample" suffix.
+
+ To customize values in this file, replace the data within <value>...
+ </value> elements flagged as "CUSTOMIZE" with the values for your
+ organization. If a certain setting is not necessary for your installation,
+ you can remove the compelete corresponding <value>...</value> element.
+-->
+
+<oor:data xmlns:oor="http://openoffice.org/2001/registry">
+ <dependency file="main"/>
+ <oor:component-data oor:package="org.openoffice" oor:name="LDAP">
+ <node oor:name="UserDirectory">
+ <prop oor:name="SearchUser">
+ <!-- CUSTOMIZE, activate unless anonymous access is possible:
+ <value>MyUserLogin</value> -->
+ </prop>
+ <prop oor:name="SearchPassword">
+ <!-- CUSTOMIZE, activate unless anonymous access is possible:
+ <value>MyPassword</value> -->
+ </prop>
+ <prop oor:name="UserObjectClass">
+ <!-- CUSTOMIZE --><value>inetorgperson</value>
+ </prop>
+ <prop oor:name="UserUniqueAttribute">
+ <!-- CUSTOMIZE --><value>uid</value>
+ </prop>
+ <node oor:name="ServerDefinition">
+ <prop oor:name="Server">
+ <!-- CUSTOMIZE --><value>ldapserver.mycorp.com</value>
+ </prop>
+ <prop oor:name="Port">
+ <!-- CUSTOMIZE --><value>389</value>
+ </prop>
+ <prop oor:name="BaseDN">
+ <!-- CUSTOMIZE --><value>dc=mycorp,dc=com</value>
+ </prop>
+ </node>
+ </node>
+ </oor:component-data>
+ <oor:component-data oor:package="org.openoffice" oor:name="UserProfile">
+ <node oor:name="Data">
+ <prop oor:name="o">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe o,organizationName"/>
+ </prop>
+ <prop oor:name="givenname">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe givenname"/>
+ </prop>
+ <prop oor:name="sn">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe sn"/>
+ </prop>
+ <prop oor:name="initials">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe initials"/>
+ </prop>
+ <prop oor:name="street">
+ <value oor:external=
+"com.sun.star.configuration.backend.LdapUserProfileBe street,postalAddress,streetAddress"
+/>
+ </prop>
+ <prop oor:name="l">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe l"/>
+ </prop>
+ <prop oor:name="st">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe st"/>
+ </prop>
+ <prop oor:name="postalcode">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe postalcode"/>
+ </prop>
+ <!--
+ <prop oor:name="c">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe ..."/>
+ </prop>
+ -->
+ <prop oor:name="title">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe title"/>
+ </prop>
+ <prop oor:name="position">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe position"/>
+ </prop>
+ <prop oor:name="homephone">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe homephone"/>
+ </prop>
+ <prop oor:name="telephonenumber">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe telephonenumber"/>
+ </prop>
+ <prop oor:name="facsimiletelephonenumber">
+ <value oor:external=
+"com.sun.star.configuration.backend.LdapUserProfileBe facsimiletelephonenumber,officeFax"
+/>
+ </prop>
+ <prop oor:name="mail">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe mail"/>
+ </prop>
+ <!--
+ <prop oor:name="fathersname">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe ..."/>
+ </prop>
+ -->
+ <!--
+ <prop oor:name="apartment">
+ <value oor:external=
+ "com.sun.star.configuration.backend.LdapUserProfileBe ..."/>
+ </prop>
+ -->
+ </node>
+ </oor:component-data>
+</oor:data>
diff --git a/officecfg/registry/schema/org/openoffice/LDAP.xcs b/officecfg/registry/schema/org/openoffice/LDAP.xcs
index ef851d0f22ce..4ce17cbcf29f 100644
--- a/officecfg/registry/schema/org/openoffice/LDAP.xcs
+++ b/officecfg/registry/schema/org/openoffice/LDAP.xcs
@@ -57,7 +57,7 @@
</prop>
<prop oor:name="UserUniqueAttribute" oor:type="xs:string"><info><desc>Name of User entity unique attribute in LDAP repository</desc></info>
</prop>
- <prop oor:name="Mapping" oor:type="xs:string"><info><desc>Name of OOo to LDAP mapping file</desc></info>
+ <prop oor:name="Mapping" oor:type="xs:string"><info><desc>Obsolete and unused</desc></info>
</prop>
<node-ref oor:name="ServerDefinition" oor:node-type="ServerDefinition">
<info><desc>Specifies the LDAP related settings</desc></info>
diff --git a/officecfg/util/alllang.xsl b/officecfg/util/alllang.xsl
index fd03d973cf71..bd4e7934643c 100644
--- a/officecfg/util/alllang.xsl
+++ b/officecfg/util/alllang.xsl
@@ -316,6 +316,9 @@
<xsl:when test="not ($dataval)">
<xsl:value-of select="true()"/>
</xsl:when>
+ <xsl:when test="$dataval/@oor:external">
+ <xsl:value-of select="false()"/>
+ </xsl:when>
<xsl:when test="not ($schemaval)">
<xsl:choose>
<xsl:when test="$dataval/@xsi:nil='true'">
diff --git a/officecfg/util/data_val.xsl b/officecfg/util/data_val.xsl
index bdf7c1ba2546..d22814dd19f5 100644
--- a/officecfg/util/data_val.xsl
+++ b/officecfg/util/data_val.xsl
@@ -206,9 +206,6 @@
<xsl:if test="following-sibling::value[@install:module=$module and @xml:lang=$lang]">
<xsl:message terminate="yes">ERROR: Property '<xsl:value-of select="$path"/>' has multiple values for module <xsl:value-of select="$module"/> and locale <xsl:value-of select="$lang"/>!</xsl:message>
</xsl:if>
- <xsl:if test="../value[not(@install:module)]">
- <xsl:message terminate="yes">ERROR: Property '<xsl:value-of select="$path"/>' has values both with and without module. This is currently not supported. Please contact jb@openoffice.org, if you need this!</xsl:message>
- </xsl:if>
<xsl:if test="not(preceding-sibling::value/@install:module)">
<xsl:message>ATTENTION: Property '<xsl:value-of select="$path"/>' has different values for different modules. Make sure the modules are mutually exclusive!</xsl:message>
</xsl:if>
diff --git a/sfx2/source/appl/sfxhelp.cxx b/sfx2/source/appl/sfxhelp.cxx
index 8a6622636c14..a947a00b9cad 100644
--- a/sfx2/source/appl/sfxhelp.cxx
+++ b/sfx2/source/appl/sfxhelp.cxx
@@ -132,7 +132,8 @@ rtl::OUString HelpLocaleString()
Any aLocale =
::utl::ConfigManager::GetConfigManager()->GetDirectConfigProperty(
::utl::ConfigManager::LOCALE );
- bool bOk = (aLocale >>= aLocaleStr);
+ aLocale >>= aLocaleStr;
+ bool bOk = aLocaleStr.getLength() != 0;
if ( bOk )
{
rtl::OUString aBaseInstallPath;
diff --git a/sfx2/source/bastyp/helper.cxx b/sfx2/source/bastyp/helper.cxx
index 3c0adfd5c873..a463e3f1d075 100644
--- a/sfx2/source/bastyp/helper.cxx
+++ b/sfx2/source/bastyp/helper.cxx
@@ -552,9 +552,17 @@ uno::Sequence < OUString > SfxContentHelper::GetResultSet( const String& rURL )
}
}
}
- catch( uno::Exception& )
- {
- DBG_ERRORFILE( "GetResultSet: Any other exception" );
+ catch( uno::Exception& e )
+ {
+ (void) e;
+ DBG_ERRORFILE(
+ rtl::OUStringToOString(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "GetResultSet: Any other exception: ")) +
+ e.Message),
+ RTL_TEXTENCODING_UTF8).
+ getStr());
}
if ( pList )
diff --git a/shell/source/backends/desktopbe/desktopbackend.cxx b/shell/source/backends/desktopbe/desktopbackend.cxx
new file mode 100644
index 000000000000..41d0c89f96b7
--- /dev/null
+++ b/shell/source/backends/desktopbe/desktopbackend.cxx
@@ -0,0 +1,292 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_shell.hxx"
+#include "sal/config.h"
+
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/beans/Optional.hpp"
+#include "com/sun/star/beans/PropertyVetoException.hpp"
+#include "com/sun/star/beans/UnknownPropertyException.hpp"
+#include "com/sun/star/beans/XPropertyChangeListener.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+#include "com/sun/star/beans/XPropertySetInfo.hpp"
+#include "com/sun/star/beans/XVetoableChangeListener.hpp"
+#include "com/sun/star/lang/IllegalArgumentException.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/lang/XMultiComponentFactory.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XCurrentContext.hpp"
+#include "cppuhelper/factory.hxx"
+#include "cppuhelper/implbase2.hxx"
+#include "cppuhelper/implementationentry.hxx"
+#include "cppuhelper/weak.hxx"
+#include "osl/diagnose.h"
+#include "rtl/string.h"
+#include "rtl/textenc.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+#include "uno/current_context.hxx"
+#include "uno/lbnames.h"
+
+namespace {
+
+namespace css = com::sun::star;
+
+rtl::OUString SAL_CALL getDefaultImplementationName() {
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.comp.configuration.backend.DesktopBackend"));
+}
+
+css::uno::Sequence< rtl::OUString > SAL_CALL getDefaultSupportedServiceNames() {
+ rtl::OUString name(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.backend.DesktopBackend"));
+ return css::uno::Sequence< rtl::OUString >(&name, 1);
+}
+
+class Default:
+ public cppu::WeakImplHelper2<
+ css::lang::XServiceInfo, css::beans::XPropertySet >,
+ private boost::noncopyable
+{
+public:
+ Default() {}
+
+private:
+ virtual ~Default() {}
+
+ virtual rtl::OUString SAL_CALL getImplementationName()
+ throw (css::uno::RuntimeException)
+ { return getDefaultImplementationName(); }
+
+ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName)
+ throw (css::uno::RuntimeException)
+ { return ServiceName == getSupportedServiceNames()[0]; }
+
+ virtual css::uno::Sequence< rtl::OUString > SAL_CALL
+ getSupportedServiceNames() throw (css::uno::RuntimeException)
+ { return getDefaultSupportedServiceNames(); }
+
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
+ getPropertySetInfo() throw (css::uno::RuntimeException)
+ { return css::uno::Reference< css::beans::XPropertySetInfo >(); }
+
+ virtual void SAL_CALL setPropertyValue(
+ rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
+
+ virtual css::uno::Any SAL_CALL getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
+
+ virtual void SAL_CALL addPropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removePropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL addVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removeVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+};
+
+void Default::setPropertyValue(rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+}
+
+css::uno::Any Default::getPropertyValue(rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ExternalMailer")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetProxyType")))
+ {
+ return css::uno::makeAny(css::beans::Optional< css::uno::Any >());
+ }
+ throw css::beans::UnknownPropertyException(
+ PropertyName, static_cast< cppu::OWeakObject * >(this));
+}
+
+css::uno::Reference< css::uno::XInterface > createBackend(
+ css::uno::Reference< css::uno::XComponentContext > const & context,
+ rtl::OUString const & name)
+{
+ try {
+ return css::uno::Reference< css::lang::XMultiComponentFactory >(
+ context->getServiceManager(), css::uno::UNO_SET_THROW)->
+ createInstanceWithContext(name, context);
+ } catch (css::uno::RuntimeException &) {
+ // Assuming these exceptions are real errors:
+ throw;
+ } catch (css::uno::Exception & e) {
+ // Assuming these exceptions indicate that the service is not installed:
+ OSL_TRACE(
+ "createInstance(%s) failed with %s",
+ rtl::OUStringToOString(name, RTL_TEXTENCODING_UTF8).getStr(),
+ rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8).getStr());
+ return css::uno::Reference< css::uno::XInterface >();
+ }
+}
+
+css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance(
+ css::uno::Reference< css::uno::XComponentContext > const & context)
+{
+ rtl::OUString desktop;
+ css::uno::Reference< css::uno::XCurrentContext > current(
+ css::uno::getCurrentContext());
+ if (current.is()) {
+ current->getValueByName(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("system.desktop-environment"))) >>=
+ desktop;
+ }
+ // Fall back to the default if the specific backend is not available:
+ css::uno::Reference< css::uno::XInterface > backend;
+ if (desktop.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("GNOME"))) {
+ backend = createBackend(
+ context,
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.backend.GconfBackend")));
+ } else if (desktop.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("KDE"))) {
+ backend = createBackend(
+ context,
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.backend.KDEBackend")));
+ } else if (desktop.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("KDE4"))) {
+ backend = createBackend(
+ context,
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.backend.KDE4Backend")));
+ }
+ return backend.is()
+ ? backend : static_cast< cppu::OWeakObject * >(new Default);
+}
+
+static cppu::ImplementationEntry const services[] = {
+ { &createInstance, &getDefaultImplementationName,
+ &getDefaultSupportedServiceNames, &cppu::createSingleComponentFactory, 0,
+ 0 },
+ { 0, 0, 0, 0, 0, 0 }
+};
+
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
+ char const * pImplName, void * pServiceManager, void * pRegistryKey)
+{
+ return cppu::component_getFactoryHelper(
+ pImplName, pServiceManager, pRegistryKey, services);
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL
+component_getImplementationEnvironment(
+ char const ** ppEnvTypeName, uno_Environment **)
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo(
+ void * pServiceManager, void * pRegistryKey)
+{
+ return component_writeInfoHelper(pServiceManager, pRegistryKey, services);
+}
diff --git a/shell/source/backends/desktopbe/desktopbe.xml b/shell/source/backends/desktopbe/desktopbe.xml
deleted file mode 100644
index 0230028157dd..000000000000
--- a/shell/source/backends/desktopbe/desktopbe.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name>desktopbe</module-name>
- <component-description>
- <author> Jan Holesovsky </author>
- <name>com.sun.star.comp.configuration.backend.DesktopBackend</name>
- <description> The shared gconf/KDE backend; will load GconfBackend or
- KDEBackend depending on the desktop environment.</description>
- <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
- <language>c++</language>
- <status value="beta"/>
- <supported-service>com.sun.star.comp.configuration.backend.DesktopBackend</supported-service>
- <supported-service>com.sun.star.comp.configuration.backend.PlatformBackend</supported-service>
- <service-dependency>...</service-dependency>
- <type>com.sun.star.configuration.backend.XBackendChangesListener</type>
- <type>com.sun.star.configuration.backend.XBackendChangesNotifier</type>
- <type>com.sun.star.configuration.backend.XLayerHandler</type>
- <type>com.sun.star.configuration.backend.XSingleLayerStratum</type>
- <type>com.sun.star.lang.XMultiComponentFactory</type>
- <type>com.sun.star.lang.XServiceInfo</type>
- <type>com.sun.star.lang.XSingleComponentFactory</type>
- <type>com.sun.star.lang.XTypeProvider</type>
- <type>com.sun.star.uno.TypeClass</type>
- <type>com.sun.star.uno.XAggregation</type>
- <type>com.sun.star.uno.XComponentContext</type>
- <type>com.sun.star.uno.XCurrentContext</type>
- <type>com.sun.star.uno.XWeak</type>
- <type>com.sun.star.registry.XRegistryKey</type>
- </component-description>
- <project-build-dependency>cppuhelper</project-build-dependency>
- <project-build-dependency>cppu</project-build-dependency>
- <project-build-dependency>sal</project-build-dependency>
- <runtime-module-dependency>cppuhelper3$(COM)</runtime-module-dependency>
- <runtime-module-dependency>cppu3</runtime-module-dependency>
- <runtime-module-dependency>sal3</runtime-module-dependency>
-</module-description>
diff --git a/shell/source/backends/desktopbe/desktopbe1-ucd.txt b/shell/source/backends/desktopbe/desktopbe1-ucd.txt
index c1df46010377..fd874a82ead5 100644
--- a/shell/source/backends/desktopbe/desktopbe1-ucd.txt
+++ b/shell/source/backends/desktopbe/desktopbe1-ucd.txt
@@ -2,8 +2,5 @@
ImplementationName=com.sun.star.comp.configuration.backend.DesktopBackend
ComponentName=desktopbe1.uno.so
LoaderName=com.sun.star.loader.SharedLibrary
-[Data]
-SupportedComponents=org.openoffice.VCL;org.openoffice.Inet;org.openoffice.Office.Common;org.openoffice.Office.Paths;org.openoffice.UserProfile;org.openoffice.Office.Recovery;org.openoffice.Setup
[SupportedServices]
com.sun.star.configuration.backend.DesktopBackend
-com.sun.star.configuration.backend.PlatformBackend
diff --git a/shell/source/backends/desktopbe/desktopbecdef.cxx b/shell/source/backends/desktopbe/desktopbecdef.cxx
deleted file mode 100644
index 2ae366bfcc94..000000000000
--- a/shell/source/backends/desktopbe/desktopbecdef.cxx
+++ /dev/null
@@ -1,205 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: desktopbecdef.cxx,v $
- * $Revision: 1.4 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_shell.hxx"
-
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XSCHEMASUPPLIER_HPP_
-#include <com/sun/star/configuration/backend/XSingleLayerStratum.hpp>
-#endif
-#include <com/sun/star/registry/XRegistryKey.hpp>
-
-#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_HXX_
-#include <cppuhelper/implementationentry.hxx>
-#endif
-#include <com/sun/star/uno/XComponentContext.hpp>
-
-#include "uno/current_context.hxx"
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-
-//==============================================================================
-
-static uno::Reference<uno::XInterface> SAL_CALL createDesktopBackend(const uno::Reference<uno::XComponentContext>& xContext)
-{
- try {
- uno::Reference< uno::XCurrentContext > xCurrentContext(uno::getCurrentContext());
-
- if (xCurrentContext.is())
- {
- uno::Any aValue = xCurrentContext->getValueByName(
- rtl::OUString::createFromAscii( "system.desktop-environment" ) );
-
- rtl::OUString aDesktopEnvironment;
- if ( aValue >>= aDesktopEnvironment )
- {
- rtl::OUString aDesktopService;
- if ( aDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "gnome" ) )
- aDesktopService = rtl::OUString::createFromAscii( "com.sun.star.configuration.backend.GconfBackend" );
- else if ( aDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "kde" ) )
- aDesktopService = rtl::OUString::createFromAscii( "com.sun.star.configuration.backend.KDEBackend" );
- else
- return uno::Reference<uno::XInterface>();
-
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- return uno::Reference< backend::XSingleLayerStratum >::query(
- xServiceManager->createInstanceWithContext( aDesktopService, xContext) );
- }
- }
- }
- } catch (uno::RuntimeException e) {
- }
-
- return uno::Reference<uno::XInterface>();
-}
-
-static rtl::OUString SAL_CALL getBackendName(void) {
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.configuration.backend.DesktopBackend") );
-}
-
-static uno::Sequence<rtl::OUString> SAL_CALL getBackendServiceNames(void)
-{
- uno::Sequence<rtl::OUString> aServices(2) ;
- aServices[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.DesktopBackend")) ;
- aServices[1] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.PlatformBackend")) ;
-
- return aServices ;
-}
-
-static uno::Sequence<rtl::OUString> SAL_CALL getSupportedComponents(void)
-{
- const sal_Int32 nComponents = 7;
-
- uno::Sequence<rtl::OUString> aSupportedComponentsList(nComponents) ;
-
- aSupportedComponentsList[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("org.openoffice.VCL")) ;
- aSupportedComponentsList[1] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Inet")) ;
- aSupportedComponentsList[2] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Common")) ;
- aSupportedComponentsList[3] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Paths")) ;
-
- aSupportedComponentsList[4] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("org.openoffice.UserProfile")) ;
- aSupportedComponentsList[5] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Recovery")) ;
- aSupportedComponentsList[6] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Setup")) ;
-
- return aSupportedComponentsList ;
-}
-//==============================================================================
-
-static const cppu::ImplementationEntry kImplementations_entries[] =
-{
- {
- createDesktopBackend,
- getBackendName,
- getBackendServiceNames,
- cppu::createSingleComponentFactory,
- NULL,
- 0
- },
- { NULL, NULL, NULL, NULL, NULL, 0 }
-} ;
-//------------------------------------------------------------------------------
-
-extern "C" void SAL_CALL component_getImplementationEnvironment(
- const sal_Char **aEnvTypeName,
- uno_Environment ** /* aEnvironment */)
-{
- *aEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ;
-}
-
-//------------------------------------------------------------------------------
-
-extern "C" sal_Bool SAL_CALL component_writeInfo(void * /* pServiceManager */,
- void *pRegistryKey)
-{
- using namespace ::com::sun::star::registry;
- if (pRegistryKey)
- {
- try
- {
- uno::Reference< XRegistryKey > xImplKey = static_cast< XRegistryKey* >( pRegistryKey )->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + getBackendName()
- );
-
- // Register associated service names
- uno::Reference< XRegistryKey > xServicesKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES") )
- );
-
- uno::Sequence<rtl::OUString> sServiceNames = getBackendServiceNames();
- for (sal_Int32 i = 0 ; i < sServiceNames.getLength() ; ++ i)
- xServicesKey->createKey(sServiceNames[i]);
-
- // Register supported components
- uno::Reference<XRegistryKey> xComponentKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/DATA/SupportedComponents") )
- );
-
- xComponentKey->setAsciiListValue( getSupportedComponents() );
-
- return sal_True;
- }
-
- catch( InvalidRegistryException& )
- {
- OSL_ENSURE(sal_False, "InvalidRegistryException caught");
- }
- }
-
- return sal_False;
-}
-
-//------------------------------------------------------------------------------
-
-extern "C" void *component_getFactory(const sal_Char *aImplementationName,
- void *aServiceManager,
- void *aRegistryKey)
-{
- return cppu::component_getFactoryHelper(
- aImplementationName,
- aServiceManager,
- aRegistryKey,
- kImplementations_entries) ;
-}
-//------------------------------------------------------------------------------
diff --git a/shell/source/backends/desktopbe/exports.map b/shell/source/backends/desktopbe/exports.map
deleted file mode 100644
index ba501f9ae076..000000000000
--- a/shell/source/backends/desktopbe/exports.map
+++ /dev/null
@@ -1,10 +0,0 @@
-UDK_3_0_0 {
- global:
- GetVersionInfo;
- component_getImplementationEnvironment;
- component_getFactory;
- component_writeInfo;
-
- local:
- *;
-};
diff --git a/shell/source/backends/desktopbe/makefile.mk b/shell/source/backends/desktopbe/makefile.mk
index b6bcd3d95905..cc56e321296f 100644
--- a/shell/source/backends/desktopbe/makefile.mk
+++ b/shell/source/backends/desktopbe/makefile.mk
@@ -1,14 +1,13 @@
#*************************************************************************
-#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2008 by Sun Microsystems, Inc.
+#
+# Copyright 2009 by Sun Microsystems, Inc.
#
# OpenOffice.org - a multi-platform office productivity suite
#
-# $RCSfile: makefile.mk,v $
+# $RCSfile: makefile,v $
#
-# $Revision: 1.3 $
+# $Revision: 1.4 $
#
# This file is part of OpenOffice.org.
#
@@ -26,50 +25,31 @@
# version 3 along with OpenOffice.org. If not, see
# <http://www.openoffice.org/license.html>
# for a copy of the LGPLv3 License.
-#
-#*************************************************************************
-PRJ=..$/..$/..
-
-PRJNAME=shell
-TARGET=desktopbe
+#***********************************************************************/
-LIBTARGET=NO
-ENABLE_EXCEPTIONS=TRUE
+PRJ = ../../..
+PRJNAME = shell
+TARGET = desktopbe
-COMP1TYPELIST=$(TARGET)
-COMPRDB=$(SOLARBINDIR)$/types.rdb
-UNOUCROUT=$(OUT)$/inc$/$(TARGET)
-INCPRE=$(UNOUCROUT)
+ENABLE_EXCEPTIONS = TRUE
+VISIBILITY_HIDDEN = TRUE
-# --- Settings ---
+.INCLUDE: settings.mk
-.INCLUDE : settings.mk
-
-UNIXTEXT=$(MISC)/$(TARGET)1-ucd.txt
-
-# no "lib" prefix
DLLPRE =
-# --- Files ---
-
-SLOFILES=\
- $(SLO)$/desktopbecdef.obj
-
-SHL1NOCHECK=TRUE
-SHL1TARGET=$(TARGET)1.uno
-SHL1OBJS=$(SLOFILES)
-SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SLOFILES = $(SLO)/desktopbackend.obj
-SHL1IMPLIB=i$(SHL1TARGET)
-SHL1STDLIBS= \
- $(CPPUHELPERLIB) \
- $(CPPULIB) \
- $(SALLIB)
-
-SHL1VERSIONMAP=exports.map
-SHL1DEF=$(MISC)$/$(SHL1TARGET).def
-DEF1NAME=$(SHL1TARGET)
+SHL1IMPLIB = i$(SHL1TARGET)
+SHL1OBJS = $(SLOFILES)
+SHL1STDLIBS = \
+ $(CPPUHELPERLIB) \
+ $(CPPULIB) \
+ $(SALLIB)
+SHL1TARGET = desktopbe1.uno
+SHL1USE_EXPORTS = name
+DEF1NAME = $(SHL1TARGET)
-# --- Targets ---
+UNIXTEXT = $(MISC)/desktopbe1-ucd.txt
-.INCLUDE : target.mk
+.INCLUDE: target.mk
diff --git a/shell/source/backends/gconfbe/exports.map b/shell/source/backends/gconfbe/exports.map
deleted file mode 100644
index ba501f9ae076..000000000000
--- a/shell/source/backends/gconfbe/exports.map
+++ /dev/null
@@ -1,10 +0,0 @@
-UDK_3_0_0 {
- global:
- GetVersionInfo;
- component_getImplementationEnvironment;
- component_getFactory;
- component_writeInfo;
-
- local:
- *;
-};
diff --git a/shell/source/backends/gconfbe/gconflayer.cxx b/shell/source/backends/gconfbe/gconfaccess.cxx
index 9d7ac2e8e47b..20de0af6ef3d 100644
--- a/shell/source/backends/gconfbe/gconflayer.cxx
+++ b/shell/source/backends/gconfbe/gconfaccess.cxx
@@ -1,81 +1,104 @@
/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: gconflayer.cxx,v $
- * $Revision: 1.15 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
#include "precompiled_shell.hxx"
-#include "gconflayer.hxx"
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <rtl/strbuf.hxx>
-#include <rtl/ustrbuf.hxx>
-#include <osl/security.hxx>
-#include <osl/file.hxx>
-#include <osl/thread.h>
-#include <com/sun/star/uno/Sequence.hxx>
+#include "sal/config.h"
#include <string.h>
-using namespace rtl;
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "osl/file.hxx"
+#include "osl/security.hxx"
+#include "osl/thread.h"
+#include "rtl/strbuf.hxx"
+#include "rtl/ustrbuf.hxx"
-//==============================================================================
+#include "gconfaccess.hxx"
-GconfLayer::GconfLayer( const uno::Reference<uno::XComponentContext>& xContext,
- const ConfigurationValue pConfigurationValuesList[],
- const sal_Int32 nConfigurationValues,
- const char * pPreloadValuesList[] )
- :m_pConfigurationValuesList( pConfigurationValuesList )
- ,m_nConfigurationValues( nConfigurationValues )
- ,m_pPreloadValuesList( pPreloadValuesList )
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService( RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber" ) );
+#define GCONF_PROXY_MODE_KEY "/system/proxy/mode"
+#define GCONF_AUTO_SAVE_KEY "/apps/openoffice/auto_save"
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext( k_sLayerDescriberService, xContext ) );
- }
- else
+namespace gconfaccess {
+
+namespace {
+
+namespace css = com::sun::star ;
+namespace uno = css::uno ;
+using namespace rtl;
+
+GConfClient* getGconfClient()
+{
+ static GConfClient* mClient= 0;
+ if (mClient == NULL)
{
- OSL_TRACE( "Could not retrieve ServiceManager" );
+ /* initialize glib object type library */
+ g_type_init();
+
+ GError* aError = NULL;
+ if (!gconf_init(0, NULL, &aError))
+ {
+ rtl::OUStringBuffer msg;
+ msg.appendAscii("GconfBackend:GconfLayer: Cannot Initialize Gconf connection - " );
+ msg.appendAscii(aError->message);
+
+ g_error_free(aError);
+ aError = NULL;
+ throw uno::RuntimeException(msg.makeStringAndClear(),NULL);
+ }
+
+ mClient = gconf_client_get_default();
+ if (!mClient)
+ {
+ throw uno::RuntimeException(rtl::OUString::createFromAscii
+ ("GconfBackend:GconfLayer: Cannot Initialize Gconf connection"),NULL);
+ }
+
+ static const char * const PreloadValuesList[] =
+ {
+ "/desktop/gnome/interface",
+ "/system/proxy",
+ "/system/http_proxy/host",
+ "/desktop/gnome/url-handlers/mailto",
+#ifdef ENABLE_LOCKDOWN
+ "/apps/openoffice",
+ "/desktop/gnome/lockdown",
+ "/apps/openoffice/lockdown",
+#endif // ENABLE_LOCKDOWN
+ NULL
+ };
+ int i = 0;
+ while( PreloadValuesList[i] != NULL )
+ gconf_client_preload( mClient, PreloadValuesList[i++], GCONF_CLIENT_PRELOAD_ONELEVEL, NULL );
}
-}
-//------------------------------------------------------------------------------
+ return mClient;
+}
static OUString xdg_user_dir_lookup (const char *type)
{
@@ -376,13 +399,12 @@ uno::Any translateToOOo( const ConfigurationValue aValue, GConfValue *aGconfValu
//------------------------------------------------------------------------------
-sal_Bool SAL_CALL isDependencySatisfied( const ConfigurationValue aValue )
+sal_Bool SAL_CALL isDependencySatisfied( GConfClient* aClient, const ConfigurationValue aValue )
{
switch( aValue.nDependsOn )
{
case SETTING_PROXY_MODE:
{
- GConfClient* aClient = GconfBackend::getGconfClient();
GConfValue* aGconfValue = gconf_client_get( aClient, GCONF_PROXY_MODE_KEY, NULL );
if ( aGconfValue != NULL )
@@ -449,116 +471,381 @@ sal_Bool SAL_CALL isDependencySatisfied( const ConfigurationValue aValue )
return sal_False;
}
-//------------------------------------------------------------------------------
+}
-void SAL_CALL GconfLayer::readData( const uno::Reference<backend::XLayerHandler>& xHandler )
- throw ( backend::MalformedDataException, lang::NullPointerException,
- lang::WrappedTargetException, uno::RuntimeException )
+ConfigurationValue const ConfigurationValues[] =
{
- if( ! m_xLayerContentDescriber.is() )
{
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"
- ) ), static_cast < backend::XLayer * > (this) );
- }
+ SETTING_ENABLE_ACCESSIBILITY,
+ "/desktop/gnome/interface/accessibility",
+ "EnableATToolSupport",
+ sal_True,
+ SETTINGS_LAST
+ },
- uno::Sequence<backend::PropertyInfo> aPropInfoList( m_nConfigurationValues );
- sal_Int32 nProperties = 0;
+ {
+ SETTING_PROXY_MODE,
+ GCONF_PROXY_MODE_KEY,
+ "ooInetProxyType",
+ sal_True,
+ SETTINGS_LAST
+ },
- GConfClient* aClient = GconfBackend::getGconfClient();
- GConfValue* aGconfValue;
- int i = 0;
+ {
+ SETTING_PROXY_HTTP_HOST,
+ "/system/http_proxy/host",
+ "ooInetHTTPProxyName",
+ sal_False,
+ SETTING_PROXY_MODE
+ },
- while( m_pPreloadValuesList[i] != NULL )
- gconf_client_preload( aClient, m_pPreloadValuesList[i++], GCONF_CLIENT_PRELOAD_ONELEVEL, NULL );
+ {
+ SETTING_PROXY_HTTP_PORT,
+ "/system/http_proxy/port",
+ "ooInetHTTPProxyPort",
+ sal_False,
+ SETTING_PROXY_MODE
+ },
+
+ {
+ SETTING_PROXY_HTTPS_HOST,
+ "/system/proxy/secure_host",
+ "ooInetHTTPSProxyName",
+ sal_False,
+ SETTING_PROXY_MODE
+ },
- for( i = 0; i < m_nConfigurationValues; i++ )
{
- if( ( m_pConfigurationValuesList[i].nDependsOn != SETTINGS_LAST ) && !isDependencySatisfied( m_pConfigurationValuesList[i] ) )
- continue;
+ SETTING_PROXY_HTTPS_PORT,
+ "/system/proxy/secure_port",
+ "ooInetHTTPSProxyPort",
+ sal_False,
+ SETTING_PROXY_MODE
+ },
- aGconfValue = gconf_client_get( aClient, m_pConfigurationValuesList[i].GconfItem, NULL );
+ {
+ SETTING_PROXY_FTP_HOST,
+ "/system/proxy/ftp_host",
+ "ooInetFTPProxyName",
+ sal_False,
+ SETTING_PROXY_MODE
+ },
- if( aGconfValue != NULL )
- {
- aPropInfoList[nProperties].Name = rtl::OUString::createFromAscii( m_pConfigurationValuesList[i].OOoConfItem );
- aPropInfoList[nProperties].Type = rtl::OUString::createFromAscii( m_pConfigurationValuesList[i].OOoConfValueType );
- aPropInfoList[nProperties].Protected = m_pConfigurationValuesList[i].bLocked;
+ {
+ SETTING_PROXY_FTP_PORT,
+ "/system/proxy/ftp_port",
+ "ooInetFTPProxyPort",
+ sal_False,
+ SETTING_PROXY_MODE
+ },
- if( m_pConfigurationValuesList[i].bNeedsTranslation )
- aPropInfoList[nProperties].Value = translateToOOo( m_pConfigurationValuesList[i], aGconfValue );
- else
- aPropInfoList[nProperties].Value = makeAnyOfGconfValue( aGconfValue );
+ {
+ SETTING_NO_PROXY_FOR,
+ "/system/http_proxy/ignore_hosts",
+ "ooInetNoProxy",
+ sal_True,
+ SETTING_PROXY_MODE
+ },
- gconf_value_free( aGconfValue );
+ {
+ SETTING_MAILER_PROGRAM,
+ "/desktop/gnome/url-handlers/mailto/command",
+ "ExternalMailer",
+ sal_True,
+ SETTINGS_LAST
+ },
+ {
+ SETTING_SOURCEVIEWFONT_NAME,
+ "/desktop/gnome/interface/monospace_font_name",
+ "SourceViewFontName",
+ sal_True,
+ SETTINGS_LAST
+ },
+ {
+ SETTING_SOURCEVIEWFONT_HEIGHT,
+ "/desktop/gnome/interface/monospace_font_name",
+ "SourceViewFontHeight",
+ sal_True,
+ SETTINGS_LAST
+ },
- nProperties++;
- }
- }
+ {
+ SETTING_WORK_DIRECTORY,
+ "/desktop/gnome/url-handlers/mailto/command", // dummy
+ "WorkPathVariable",
+ sal_True,
+ SETTING_WORK_DIRECTORY, // so that the existence of the dir can be checked
+ },
- if( nProperties > 0 )
+#ifdef ENABLE_LOCKDOWN
{
- aPropInfoList.realloc( nProperties );
- m_xLayerContentDescriber->describeLayer( xHandler, aPropInfoList );
- }
-}
+ SETTING_WRITER_DEFAULT_DOC_FORMAT,
+ "/apps/openoffice/writer_default_document_format",
+ "TextDocumentSetupFactoryDefaultFilter",
+ sal_False,
+ SETTINGS_LAST
+ },
-//------------------------------------------------------------------------------
+ {
+ SETTING_IMPRESS_DEFAULT_DOC_FORMAT,
+ "/apps/openoffice/impress_default_document_format",
+ "PresentationDocumentSetupFactoryDefaultFilter",
+ sal_False,
+ SETTINGS_LAST
+ },
-rtl::OUString SAL_CALL GconfLayer::getTimestamp( void )
- throw (uno::RuntimeException)
-{
- // Return a hash of the values as timestamp to avoid regenerating
- // the binary cache on each office launch.
- rtl::OStringBuffer aTimeStamp;
+ {
+ SETTING_CALC_DEFAULT_DOC_FORMAT,
+ "/apps/openoffice/calc_default_document_format",
+ "SpreadsheetDocumentSetupFactoryDefaultFilter",
+ sal_False,
+ SETTINGS_LAST
+ },
- // Make sure the timestamp differs from beta
- sal_Int32 nHashCode = 0;
+ {
+ SETTING_AUTO_SAVE,
+ GCONF_AUTO_SAVE_KEY,
+ "AutoSaveEnabled",
+ sal_False,
+ SETTINGS_LAST
+ },
- GConfClient* aClient = GconfBackend::getGconfClient();
- GConfValue* aGconfValue;
- int i = 0;
+ {
+ SETTING_AUTO_SAVE_INTERVAL,
+ "/apps/openoffice/auto_save_interval",
+ "AutoSaveTimeIntervall",
+ sal_False,
+ SETTING_AUTO_SAVE
+ },
+
+ {
+ SETTING_USER_GIVENNAME,
+ "/desktop/gnome/url-handlers/mailto/command", // dummy
+ "givenname",
+ sal_True,
+ SETTING_USER_GIVENNAME
+ },
- while( m_pPreloadValuesList[i] != NULL )
- gconf_client_preload( aClient, m_pPreloadValuesList[i++], GCONF_CLIENT_PRELOAD_ONELEVEL, NULL );
+ {
+ SETTING_USER_SURNAME,
+ "/desktop/gnome/url-handlers/mailto/command", // dummy
+ "sn",
+ sal_True,
+ SETTING_USER_SURNAME
+ },
+
+ {
+ SETTING_DISABLE_PRINTING,
+ "/desktop/gnome/lockdown/disable_printing",
+ "DisablePrinting",
+ sal_True,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_USE_SYSTEM_FILE_DIALOG,
+ "/apps/openoffice/use_system_file_dialog",
+ "UseSystemFileDialog",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_PRINTING_MODIFIES_DOCUMENT,
+ "/apps/openoffice/printing_modifies_doc",
+ "PrintingModifiesDocument",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_SHOW_ICONS_IN_MENUS,
+ "/apps/openoffice/show_menu_icons",
+ "ShowIconsInMenues",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_SHOW_INACTIVE_MENUITEMS,
+ "/apps/openoffice/show_menu_inactive_items",
+ "DontHideDisabledEntry",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_SHOW_FONT_PREVIEW,
+ "/apps/openoffice/show_font_preview",
+ "ShowFontBoxWYSIWYG",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_SHOW_FONT_HISTORY,
+ "/apps/openoffice/show_font_history",
+ "FontViewHistory",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_ENABLE_OPENGL,
+ "/apps/openoffice/use_opengl",
+ "OpenGL",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_OPTIMIZE_OPENGL,
+ "/apps/openoffice/optimize_opengl",
+ "OpenGL_Faster",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_USE_SYSTEM_FONT,
+ "/apps/openoffice/use_system_font",
+ "AccessibilityIsSystemFont",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_USE_FONT_ANTI_ALIASING,
+ "/apps/openoffice/use_font_anti_aliasing",
+ "FontAntiAliasingEnabled",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_FONT_ANTI_ALIASING_MIN_PIXEL,
+ "/apps/openoffice/font_anti_aliasing_min_pixel",
+ "FontAntiAliasingMinPixelHeight",
+ sal_True,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_WARN_CREATE_PDF,
+ "/apps/openoffice/lockdown/warn_info_create_pdf",
+ "WarnCreatePDF",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_WARN_PRINT_DOC,
+ "/apps/openoffice/lockdown/warn_info_printing",
+ "WarnPrintDoc",
+ sal_False,
+ SETTINGS_LAST
+ },
- for( i = 0; i < m_nConfigurationValues; i++ )
{
- aGconfValue = gconf_client_get( aClient, m_pConfigurationValuesList[i].GconfItem, NULL );
+ SETTING_WARN_SAVEORSEND_DOC,
+ "/apps/openoffice/lockdown/warn_info_saving",
+ "WarnSaveOrSendDoc",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_WARN_SIGN_DOC,
+ "/apps/openoffice/lockdown/warn_info_signing",
+ "WarnSignDoc",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_REMOVE_PERSONAL_INFO,
+ "/apps/openoffice/lockdown/remove_personal_info_on_save",
+ "Scripting/RemovePersonalInfoOnSaving",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_RECOMMEND_PASSWORD,
+ "/apps/openoffice/lockdown/recommend_password_on_save",
+ "RecommendPasswordProtection",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_UNDO_STEPS,
+ "/apps/openoffice/undo_steps",
+ "UndoSteps",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_SYMBOL_SET,
+ "/apps/openoffice/icon_size",
+ "SymbolSet",
+ sal_True,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_MACRO_SECURITY_LEVEL,
+ "/apps/openoffice/lockdown/macro_security_level",
+ "MacroSecurityLevel",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_CREATE_BACKUP,
+ "/apps/openoffice/create_backup",
+ "CreateBackup",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+ {
+ SETTING_WARN_ALIEN_FORMAT,
+ "/apps/openoffice/warn_alien_format",
+ "WarnAlienFormat",
+ sal_False,
+ SETTINGS_LAST
+ },
+
+#endif // ENABLE_LOCKDOWN
+};
+
+std::size_t const nConfigurationValues =
+ sizeof ConfigurationValues / sizeof ConfigurationValues[0];
+
+css::beans::Optional< css::uno::Any > getValue(ConfigurationValue const & data)
+{
+ GConfClient* aClient = getGconfClient();
+ GConfValue* aGconfValue;
+ if( ( data.nDependsOn == SETTINGS_LAST ) || isDependencySatisfied( aClient, data ) )
+ {
+ aGconfValue = gconf_client_get( aClient, data.GconfItem, NULL );
if( aGconfValue != NULL )
{
- switch( aGconfValue->type )
- {
- case GCONF_VALUE_BOOL:
- nHashCode ^= (sal_Int32) !gconf_value_get_bool( aGconfValue );
- break;
-
- case GCONF_VALUE_INT:
- nHashCode ^= (sal_Int32) gconf_value_get_int( aGconfValue );
- break;
-
- case GCONF_VALUE_STRING:
- nHashCode ^= (sal_Int32) g_str_hash( gconf_value_get_string( aGconfValue ) );
- break;
-
- case GCONF_VALUE_LIST:
- if( GCONF_VALUE_STRING == gconf_value_get_list_type( aGconfValue ) )
- {
- GSList *list = gconf_value_get_list( aGconfValue );
- for(; list; list = g_slist_next(list))
- nHashCode ^= (sal_Int32) g_str_hash( gconf_value_get_string((GConfValue *) list->data) );
- break;
- }
-
- default:
- fprintf( stderr, "getTimestamp: Type not handled.\n" );
- break;
- }
- nHashCode = (nHashCode << 5) - nHashCode;
+ css::uno::Any value;
+ if( data.bNeedsTranslation )
+ value = translateToOOo( data, aGconfValue );
+ else
+ value = makeAnyOfGconfValue( aGconfValue );
+
gconf_value_free( aGconfValue );
+
+ return css::beans::Optional< css::uno::Any >(true, value);
}
}
+ return css::beans::Optional< css::uno::Any >();
+}
- return rtl::OUString::valueOf( nHashCode );
}
diff --git a/shell/source/backends/gconfbe/gconfaccess.hxx b/shell/source/backends/gconfbe/gconfaccess.hxx
new file mode 100644
index 000000000000..ad156974b150
--- /dev/null
+++ b/shell/source/backends/gconfbe/gconfaccess.hxx
@@ -0,0 +1,121 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_SHELL_SOURCE_BACKENDS_GCONFBE_GCONFACCESS_HXX
+#define INCLUDED_SHELL_SOURCE_BACKENDS_GCONFBE_GCONFACCESS_HXX
+
+#include "sal/config.h"
+
+#include <cstddef>
+
+#include "com/sun/star/beans/Optional.hpp"
+#include "gconf/gconf-client.h"
+#include "sal/types.h"
+
+namespace com { namespace sun { namespace star { namespace uno {
+ class Any;
+} } } }
+
+namespace gconfaccess {
+
+enum ConfigurationSetting
+{
+ SETTING_PROXY_MODE,
+ SETTING_PROXY_HTTP_HOST,
+ SETTING_PROXY_HTTP_PORT,
+ SETTING_PROXY_HTTPS_HOST,
+ SETTING_PROXY_HTTPS_PORT,
+ SETTING_PROXY_FTP_HOST,
+ SETTING_PROXY_FTP_PORT,
+ SETTING_NO_PROXY_FOR,
+ SETTING_ENABLE_ACCESSIBILITY,
+ SETTING_MAILER_PROGRAM,
+ SETTING_WORK_DIRECTORY,
+ SETTING_SOURCEVIEWFONT_NAME,
+ SETTING_SOURCEVIEWFONT_HEIGHT,
+ SETTING_USER_GIVENNAME,
+ SETTING_USER_SURNAME,
+
+#ifdef ENABLE_LOCKDOWN
+
+ SETTING_DISABLE_PRINTING,
+ SETTING_USE_SYSTEM_FILE_DIALOG,
+ SETTING_PRINTING_MODIFIES_DOCUMENT,
+ SETTING_SHOW_ICONS_IN_MENUS,
+ SETTING_SHOW_INACTIVE_MENUITEMS,
+ SETTING_SHOW_FONT_PREVIEW,
+ SETTING_SHOW_FONT_HISTORY,
+ SETTING_ENABLE_OPENGL,
+ SETTING_OPTIMIZE_OPENGL,
+ SETTING_SAVE_DOCUMENT_WINDOWS,
+ SETTING_SAVE_DOCUMENT_VIEW_INFO,
+ SETTING_USE_SYSTEM_FONT,
+ SETTING_USE_FONT_ANTI_ALIASING,
+ SETTING_FONT_ANTI_ALIASING_MIN_PIXEL,
+ SETTING_WARN_CREATE_PDF,
+ SETTING_WARN_PRINT_DOC,
+ SETTING_WARN_SAVEORSEND_DOC,
+ SETTING_WARN_SIGN_DOC,
+ SETTING_REMOVE_PERSONAL_INFO,
+ SETTING_RECOMMEND_PASSWORD,
+ SETTING_UNDO_STEPS,
+ SETTING_SYMBOL_SET,
+ SETTING_MACRO_SECURITY_LEVEL,
+ SETTING_CREATE_BACKUP,
+ SETTING_WARN_ALIEN_FORMAT,
+ SETTING_AUTO_SAVE,
+ SETTING_AUTO_SAVE_INTERVAL,
+ SETTING_WRITER_DEFAULT_DOC_FORMAT,
+ SETTING_IMPRESS_DEFAULT_DOC_FORMAT,
+ SETTING_CALC_DEFAULT_DOC_FORMAT,
+
+#endif // ENABLE_LOCKDOWN
+
+ SETTINGS_LAST
+};
+
+struct ConfigurationValue
+{
+ const ConfigurationSetting nSettingId;
+ const gchar *GconfItem;
+ const char *OOoConfItem;
+ const sal_Bool bNeedsTranslation;
+ const ConfigurationSetting nDependsOn;
+};
+
+extern ConfigurationValue const ConfigurationValues[];
+
+extern std::size_t const nConfigurationValues;
+
+com::sun::star::beans::Optional< com::sun::star::uno::Any > getValue(
+ ConfigurationValue const & data);
+
+}
+
+#endif
diff --git a/shell/source/backends/gconfbe/gconfbackend.cxx b/shell/source/backends/gconfbe/gconfbackend.cxx
index 504c3bba9232..27b098996b2a 100644
--- a/shell/source/backends/gconfbe/gconfbackend.cxx
+++ b/shell/source/backends/gconfbe/gconfbackend.cxx
@@ -1,1011 +1,241 @@
/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: gconfbackend.cxx,v $
- * $Revision: 1.15 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
-// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_shell.hxx"
-
-#include "gconfbackend.hxx"
-#include "gconflayer.hxx"
-#include <com/sun/star/configuration/backend/ComponentChangeEvent.hpp>
-
-#ifndef INCLUDED_VECTOR
-#include <vector>
-#define INCLUDED_VECTOR
-#endif
-#include <osl/process.h>
-#include <osl/time.h>
-#include <rtl/ustrbuf.hxx>
-#include <rtl/byteseq.h>
-
-#include <stdio.h>
-
-#ifdef ENABLE_LOCKDOWN
-// each entry should have an identifying ConfigurationSetting
-static const ConfigurationValue SetupConfigurationValuesList[] =
-{
- {
- SETTING_WRITER_DEFAULT_DOC_FORMAT,
- "/apps/openoffice/writer_default_document_format",
- "org.openoffice.Setup/Office/Factories/com.sun.star.text.TextDocument/ooSetupFactoryDefaultFilter",
- "string",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_IMPRESS_DEFAULT_DOC_FORMAT,
- "/apps/openoffice/impress_default_document_format",
- "org.openoffice.Setup/Office/Factories/com.sun.star.presentation.PresentationDocument/ooSetupFactoryDefaultFilter",
- "string",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_CALC_DEFAULT_DOC_FORMAT,
- "/apps/openoffice/calc_default_document_format",
- "org.openoffice.Setup/Office/Factories/com.sun.star.sheet.SpreadsheetDocument/ooSetupFactoryDefaultFilter",
- "string",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-};
-#endif // ENABLE_LOCKDOWN
-
-#ifdef ENABLE_LOCKDOWN
-// each entry should have an identifying ConfigurationSetting
-static const ConfigurationValue RecoveryConfigurationValuesList[] =
-{
- {
- SETTING_AUTO_SAVE,
- GCONF_AUTO_SAVE_KEY,
- "org.openoffice.Office.Recovery/AutoSave/Enabled",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_AUTO_SAVE_INTERVAL,
- "/apps/openoffice/auto_save_interval",
- "org.openoffice.Office.Recovery/AutoSave/TimeIntervall",
- "int",
- sal_False,
- sal_False,
- SETTING_AUTO_SAVE
- },
-};
-#endif // ENABLE_LOCKDOWN
-
-/*
- * This should be in a different backend actually, but this has to wait ..
- */
-
-#ifdef ENABLE_LOCKDOWN
-// each entry should have an identifying ConfigurationSetting
-static const ConfigurationValue UserProfileConfigurationValuesList[] =
-{
- {
- SETTING_USER_GIVENNAME,
- "/desktop/gnome/url-handlers/mailto/command", // dummy, needed for getTimestamp
- "org.openoffice.UserProfile/Data/givenname",
- "string",
- sal_False,
- sal_True,
- SETTING_USER_GIVENNAME
- },
-
- {
- SETTING_USER_SURNAME,
- "/desktop/gnome/url-handlers/mailto/command", // dummy, needed for getTimestamp
- "org.openoffice.UserProfile/Data/sn",
- "string",
- sal_False,
- sal_True,
- SETTING_USER_SURNAME
- },
-};
-#endif // ENABLE_LOCKDOWN
-
-// each entry should have an identifying ConfigurationSetting
-static const ConfigurationValue VCLConfigurationValuesList[] =
-{
- {
- SETTING_ENABLE_ACCESSIBILITY,
- "/desktop/gnome/interface/accessibility",
- "org.openoffice.VCL/Settings/Accessibility/EnableATToolSupport",
- "string",
- sal_False,
- sal_True,
- SETTINGS_LAST
- },
-
-#ifdef ENABLE_LOCKDOWN
-
- {
- SETTING_DISABLE_PRINTING,
- "/desktop/gnome/lockdown/disable_printing",
- "org.openoffice.VCL/Settings/DesktopManagement/DisablePrinting",
- "string",
- sal_False,
- sal_True,
- SETTINGS_LAST
- },
-
-#endif // ENABLE_LOCKDOWN
-
-};
-
-// each entry should have an identifying ConfigurationSetting
-static const ConfigurationValue InetConfigurationValuesList[] =
-{
- {
- SETTING_PROXY_MODE,
- GCONF_PROXY_MODE_KEY,
- "org.openoffice.Inet/Settings/ooInetProxyType",
- "int",
- sal_False,
- sal_True,
- SETTINGS_LAST
- },
-
- {
- SETTING_PROXY_HTTP_HOST,
- "/system/http_proxy/host",
- "org.openoffice.Inet/Settings/ooInetHTTPProxyName",
- "string",
- sal_False,
- sal_False,
- SETTING_PROXY_MODE
- },
-
- {
- SETTING_PROXY_HTTP_PORT,
- "/system/http_proxy/port",
- "org.openoffice.Inet/Settings/ooInetHTTPProxyPort",
- "int",
- sal_False,
- sal_False,
- SETTING_PROXY_MODE
- },
-
- {
- SETTING_PROXY_HTTPS_HOST,
- "/system/proxy/secure_host",
- "org.openoffice.Inet/Settings/ooInetHTTPSProxyName",
- "string",
- sal_False,
- sal_False,
- SETTING_PROXY_MODE
- },
-
- {
- SETTING_PROXY_HTTPS_PORT,
- "/system/proxy/secure_port",
- "org.openoffice.Inet/Settings/ooInetHTTPSProxyPort",
- "int",
- sal_False,
- sal_False,
- SETTING_PROXY_MODE
- },
-
- {
- SETTING_PROXY_FTP_HOST,
- "/system/proxy/ftp_host",
- "org.openoffice.Inet/Settings/ooInetFTPProxyName",
- "string",
- sal_False,
- sal_False,
- SETTING_PROXY_MODE
- },
-
- {
- SETTING_PROXY_FTP_PORT,
- "/system/proxy/ftp_port",
- "org.openoffice.Inet/Settings/ooInetFTPProxyPort",
- "int",
- sal_False,
- sal_False,
- SETTING_PROXY_MODE
- },
-
- {
- SETTING_NO_PROXY_FOR,
- "/system/http_proxy/ignore_hosts",
- "org.openoffice.Inet/Settings/ooInetNoProxy",
- "string",
- sal_False,
- sal_True,
- SETTING_PROXY_MODE
- },
-};
-
-// each entry should have an identifying ConfigurationSetting
-static const ConfigurationValue CommonConfigurationValuesList[] =
-{
- {
- SETTING_MAILER_PROGRAM,
- "/desktop/gnome/url-handlers/mailto/command",
- "org.openoffice.Office.Common/ExternalMailer/Program",
- "string",
- sal_False,
- sal_True,
- SETTINGS_LAST
- },
- {
- SETTING_SOURCEVIEWFONT_NAME,
- "/desktop/gnome/interface/monospace_font_name",
- "org.openoffice.Office.Common/Font/SourceViewFont/FontName",
- "string",
- sal_False,
- sal_True,
- SETTINGS_LAST
- },
- {
- SETTING_SOURCEVIEWFONT_HEIGHT,
- "/desktop/gnome/interface/monospace_font_name",
- "org.openoffice.Office.Common/Font/SourceViewFont/FontHeight",
- "short",
- sal_False,
- sal_True,
- SETTINGS_LAST
- },
-
-#ifdef ENABLE_LOCKDOWN
-
- {
- SETTING_USE_SYSTEM_FILE_DIALOG,
- "/apps/openoffice/use_system_file_dialog",
- "org.openoffice.Office.Common/Misc/UseSystemFileDialog",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_DISABLE_UI_CUSTOMIZATION,
- "/apps/openoffice/lockdown/disable_ui_customization",
- "org.openoffice.Office.Common/Misc/DisableUICustomization",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_PRINTING_MODIFIES_DOCUMENT,
- "/apps/openoffice/printing_modifies_doc",
- "org.openoffice.Office.Common/Print/PrintingModifiesDocument",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_SHOW_ICONS_IN_MENUS,
- "/apps/openoffice/show_menu_icons",
- "org.openoffice.Office.Common/View/Menu/ShowIconsInMenues",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_SHOW_INACTIVE_MENUITEMS,
- "/apps/openoffice/show_menu_inactive_items",
- "org.openoffice.Office.Common/View/Menu/DontHideDisabledEntry",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_SHOW_FONT_PREVIEW,
- "/apps/openoffice/show_font_preview",
- "org.openoffice.Office.Common/Font/View/ShowFontBoxWYSIWYG",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_SHOW_FONT_HISTORY,
- "/apps/openoffice/show_font_history",
- "org.openoffice.Office.Common/Font/View/History",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_ENABLE_OPENGL,
- "/apps/openoffice/use_opengl",
- "org.openoffice.Office.Common/_3D_Engine/OpenGL",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_OPTIMIZE_OPENGL,
- "/apps/openoffice/optimize_opengl",
- "org.openoffice.Office.Common/_3D_Engine/OpenGL_Faster",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_USE_SYSTEM_FONT,
- "/apps/openoffice/use_system_font",
- "org.openoffice.Office.Common/Accessibility/IsSystemFont",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_USE_FONT_ANTI_ALIASING,
- "/apps/openoffice/use_font_anti_aliasing",
- "org.openoffice.Office.Common/View/FontAntiAliasing/Enabled",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_FONT_ANTI_ALIASING_MIN_PIXEL,
- "/apps/openoffice/font_anti_aliasing_min_pixel",
- "org.openoffice.Office.Common/View/FontAntiAliasing/MinPixelHeight",
- "short",
- sal_False,
- sal_True,
- SETTINGS_LAST
- },
-
- {
- SETTING_WARN_CREATE_PDF,
- "/apps/openoffice/lockdown/warn_info_create_pdf",
- "org.openoffice.Office.Common/Security/Scripting/WarnCreatePDF",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_WARN_PRINT_DOC,
- "/apps/openoffice/lockdown/warn_info_printing",
- "org.openoffice.Office.Common/Security/Scripting/WarnPrintDoc",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_WARN_SAVEORSEND_DOC,
- "/apps/openoffice/lockdown/warn_info_saving",
- "org.openoffice.Office.Common/Security/Scripting/WarnSaveOrSendDoc",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_WARN_SIGN_DOC,
- "/apps/openoffice/lockdown/warn_info_signing",
- "org.openoffice.Office.Common/Security/Scripting/WarnSignDoc",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_REMOVE_PERSONAL_INFO,
- "/apps/openoffice/lockdown/remove_personal_info_on_save",
- "org.openoffice.Office.Common/Security/Scripting/RemovePersonalInfoOnSaving",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_RECOMMEND_PASSWORD,
- "/apps/openoffice/lockdown/recommend_password_on_save",
- "org.openoffice.Office.Common/Security/Scripting/RecommendPasswordProtection",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_UNDO_STEPS,
- "/apps/openoffice/undo_steps",
- "org.openoffice.Office.Common/Undo/Steps",
- "int",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_SYMBOL_SET,
- "/apps/openoffice/icon_size",
- "org.openoffice.Office.Common/Misc/SymbolSet",
- "short",
- sal_False,
- sal_True,
- SETTINGS_LAST
- },
-
- {
- SETTING_MACRO_SECURITY_LEVEL,
- "/apps/openoffice/lockdown/macro_security_level",
- "org.openoffice.Office.Common/Security/Scripting/MacroSecurityLevel",
- "int",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_CREATE_BACKUP,
- "/apps/openoffice/create_backup",
- "org.openoffice.Office.Common/Save/Document/CreateBackup",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
- {
- SETTING_WARN_ALIEN_FORMAT,
- "/apps/openoffice/warn_alien_format",
- "org.openoffice.Office.Common/Save/Document/WarnAlienFormat",
- "boolean",
- sal_False,
- sal_False,
- SETTINGS_LAST
- },
-
-#endif // ENABLE_LOCKDOWN
-
-};
-
-static const ConfigurationValue PathsConfigurationValuesList[] =
-{
- {
- SETTING_WORK_DIRECTORY,
- "/desktop/gnome/url-handlers/mailto/command", // dummy, needed for getTimestamp
- "org.openoffice.Office.Paths/Variables/Work",
- "string",
- sal_False,
- sal_True,
- SETTING_WORK_DIRECTORY, // so that the existence of the dir can be checked
- },
-};
-
-#ifdef ENABLE_LOCKDOWN
-static const char * SetupPreloadValuesList[] =
-{
- "/apps/openoffice",
- NULL
-};
-#endif // ENABLE_LOCKDOWN
-
-#ifdef ENABLE_LOCKDOWN
-static const char * RecoveryPreloadValuesList[] =
-{
- "/apps/openoffice",
- NULL
-};
-#endif // ENABLE_LOCKDOWN
-
-#ifdef ENABLE_LOCKDOWN
-static const char * UserProfilePreloadValuesList[] =
-{
- NULL
-};
-#endif // ENABLE_LOCKDOWN
-
-static const char * VCLPreloadValuesList[] =
-{
- "/desktop/gnome/interface",
-#ifdef ENABLE_LOCKDOWN
- "/desktop/gnome/lockdown",
-#endif // ENABLE_LOCKDOWN
- NULL
-};
-
-static const char * InetPreloadValuesList[] =
-{
- "/system/proxy",
- "/system/http_proxy/host",
- NULL
-};
-
-static const char * CommonPreloadValuesList[] =
-{
- "/desktop/gnome/url-handlers/mailto",
-#ifdef ENABLE_LOCKDOWN
- "/apps/openoffice/lockdown",
- "/apps/openoffice",
-#endif // ENABLE_LOCKDOWN
- NULL
-};
-
-static const char * PathsPreloadValuesList[] =
-{
- NULL
-};
-
-//==============================================================================
-
-/*
-void ONotificationThread::run()
-{
- mLoop= NULL;
- //Need to start a GMain loop for notifications to work
- mLoop=g_main_loop_new(g_main_context_default(),FALSE);
- g_main_loop_run(mLoop);
-} ;
-
-*/
-
-//------------------------------------------------------------------------------
-
-GconfBackend* GconfBackend::mInstance= 0;
-
-GconfBackend* GconfBackend::createInstance(const uno::Reference<uno::XComponentContext>& xContext)
-{
- if(mInstance == 0)
- {
- mInstance = new GconfBackend (xContext);
- }
-
- return mInstance;
-}
-
-//------------------------------------------------------------------------------
-
-GconfBackend::GconfBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException)
- : BackendBase(mMutex), m_xContext(xContext)
-// , mNotificationThread(NULL)
-
-
-{
-}
-
-//------------------------------------------------------------------------------
-
-GconfBackend::~GconfBackend(void) {
-
-
-// delete (mNotificationThread);
- GconfBackend::mClient = NULL;
-
+#include "sal/config.h"
+
+#include <cstddef>
+
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/beans/Optional.hpp"
+#include "com/sun/star/beans/PropertyVetoException.hpp"
+#include "com/sun/star/beans/UnknownPropertyException.hpp"
+#include "com/sun/star/beans/XPropertyChangeListener.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+#include "com/sun/star/beans/XPropertySetInfo.hpp"
+#include "com/sun/star/beans/XVetoableChangeListener.hpp"
+#include "com/sun/star/lang/IllegalArgumentException.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/lang/XMultiComponentFactory.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XCurrentContext.hpp"
+#include "cppuhelper/factory.hxx"
+#include "cppuhelper/implbase2.hxx"
+#include "cppuhelper/implementationentry.hxx"
+#include "cppuhelper/weak.hxx"
+#include "rtl/string.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+#include "uno/current_context.hxx"
+#include "uno/lbnames.h"
+
+#include "gconfaccess.hxx"
+#include "orbit.h"
+
+namespace {
+
+namespace css = com::sun::star;
+
+rtl::OUString SAL_CALL getServiceImplementationName() {
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.comp.configuration.backend.GconfBackend"));
}
-//------------------------------------------------------------------------------
-
-GConfClient* GconfBackend::mClient= 0;
-
-
-GConfClient* GconfBackend::getGconfClient()
-{
-
- if (mClient == NULL)
- {
- /* initialize glib object type library */
- g_type_init();
-
- GError* aError = NULL;
- if (!gconf_init(0, NULL, &aError))
- {
- rtl::OUStringBuffer msg;
- msg.appendAscii("GconfBackend:GconfLayer: Cannot Initialize Gconf connection - " );
- msg.appendAscii(aError->message);
-
- g_error_free(aError);
- aError = NULL;
- throw uno::RuntimeException(msg.makeStringAndClear(),NULL);
- }
-
- mClient = gconf_client_get_default();
- if (!mClient)
- {
- throw uno::RuntimeException(rtl::OUString::createFromAscii
- ("GconfBackend:GconfLayer: Cannot Initialize Gconf connection"),NULL);
- }
- }
-
- return mClient;
+css::uno::Sequence< rtl::OUString > SAL_CALL getServiceSupportedServiceNames() {
+ rtl::OUString name(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.backend.GconfBackend"));
+ return css::uno::Sequence< rtl::OUString >(&name, 1);
}
-//------------------------------------------------------------------------------
-
-uno::Reference<backend::XLayer> SAL_CALL GconfBackend::getLayer(
- const rtl::OUString& aComponent, const rtl::OUString& /*aTimestamp*/)
- throw (backend::BackendAccessException, lang::IllegalArgumentException)
-{
- uno::Reference<backend::XLayer> xLayer;
-
- if( aComponent.equalsAscii("org.openoffice.Office.Common" ) )
- {
- xLayer = new GconfLayer( m_xContext,
- CommonConfigurationValuesList,
- G_N_ELEMENTS( CommonConfigurationValuesList ),
- CommonPreloadValuesList );
- }
- else if( aComponent.equalsAscii("org.openoffice.Inet" ) )
- {
- xLayer = new GconfLayer( m_xContext,
- InetConfigurationValuesList,
- G_N_ELEMENTS( InetConfigurationValuesList ),
- InetPreloadValuesList );
- }
- else if( aComponent.equalsAscii("org.openoffice.VCL" ) )
- {
- xLayer = new GconfLayer( m_xContext,
- VCLConfigurationValuesList,
- G_N_ELEMENTS( VCLConfigurationValuesList ),
- VCLPreloadValuesList );
- }
- else if( aComponent.equalsAscii("org.openoffice.Office.Paths" ) )
- {
- xLayer = new GconfLayer( m_xContext,
- PathsConfigurationValuesList,
- G_N_ELEMENTS( PathsConfigurationValuesList ),
- PathsPreloadValuesList );
- }
+class Service:
+ public cppu::WeakImplHelper2<
+ css::lang::XServiceInfo, css::beans::XPropertySet >,
+ private boost::noncopyable
+{
+public:
+ Service();
+
+private:
+ virtual ~Service() {}
+
+ virtual rtl::OUString SAL_CALL getImplementationName()
+ throw (css::uno::RuntimeException)
+ { return getServiceImplementationName(); }
+
+ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName)
+ throw (css::uno::RuntimeException)
+ { return ServiceName == getSupportedServiceNames()[0]; }
+
+ virtual css::uno::Sequence< rtl::OUString > SAL_CALL
+ getSupportedServiceNames() throw (css::uno::RuntimeException)
+ { return getServiceSupportedServiceNames(); }
+
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
+ getPropertySetInfo() throw (css::uno::RuntimeException)
+ { return css::uno::Reference< css::beans::XPropertySetInfo >(); }
+
+ virtual void SAL_CALL setPropertyValue(
+ rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
+
+ virtual css::uno::Any SAL_CALL getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
+
+ virtual void SAL_CALL addPropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removePropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL addVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removeVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ bool enabled_;
+};
-#ifdef ENABLE_LOCKDOWN
- else if( aComponent.equalsAscii("org.openoffice.UserProfile" ) )
- {
- xLayer = new GconfLayer( m_xContext,
- UserProfileConfigurationValuesList,
- G_N_ELEMENTS( UserProfileConfigurationValuesList ),
- UserProfilePreloadValuesList );
- }
- else if( aComponent.equalsAscii("org.openoffice.Office.Recovery" ) )
- {
- xLayer = new GconfLayer( m_xContext,
- RecoveryConfigurationValuesList,
- G_N_ELEMENTS( RecoveryConfigurationValuesList ),
- RecoveryPreloadValuesList );
- }
- else if( aComponent.equalsAscii("org.openoffice.Setup" ) )
- {
- xLayer = new GconfLayer( m_xContext,
- SetupConfigurationValuesList,
- G_N_ELEMENTS( SetupConfigurationValuesList ),
- SetupPreloadValuesList );
+Service::Service(): enabled_(false) {
+ css::uno::Reference< css::uno::XCurrentContext > context(
+ css::uno::getCurrentContext());
+ if (context.is()) {
+ rtl::OUString desktop;
+ context->getValueByName(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("system.desktop-environment"))) >>=
+ desktop;
+ enabled_ = desktop.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("GNOME")) &&
+ ((orbit_major_version == 2 && orbit_minor_version >= 8) ||
+ orbit_major_version > 2);
+ // ORBit-2 versions < 2.8 cause a deadlock with the gtk+ VCL plugin
}
-#endif // ENABLE_LOCKDOWN
-
- return xLayer;
}
-//------------------------------------------------------------------------------
-
-uno::Reference<backend::XUpdatableLayer> SAL_CALL
-GconfBackend::getUpdatableLayer(const rtl::OUString& /*aComponent*/)
- throw (backend::BackendAccessException,lang::NoSupportException,
- lang::IllegalArgumentException)
+void Service::setPropertyValue(rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
{
- throw lang::NoSupportException( rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("GconfBackend: No Update Operation allowed, Read Only access") ),
- *this) ;
-}
-
-//------------------------------------------------------------------------------
-
-// currently not used
-#if 0
-static void
-keyChangedCallback(GConfClient* aClient,
- guint aID,
- GConfEntry* aEntry,
- gpointer aBackend)
-{
-
- OSL_TRACE("In KeyChangedCallback Function");
- rtl::OUString aGconfKey= rtl::OUString::createFromAscii(aEntry->key);
- GconfBackend * aGconfBe = (GconfBackend*) aBackend;
-
- aGconfBe->notifyListeners(aGconfKey);
-
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")),
+ static_cast< cppu::OWeakObject * >(this), -1);
}
-#endif
-//------------------------------------------------------------------------------
-
-void GconfBackend::notifyListeners(const rtl::OUString& /*aGconfKey*/)
+css::uno::Any Service::getPropertyValue(rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
{
-/*
- //look up associated component from Map using GconfKey
- KeyMappingTable::iterator aIter;
- rtl::OUString aComponent;
- for( aIter= mKeyMap.begin(); aIter != mKeyMap.end(); aIter++)
- {
- if (aIter->second.mGconfName == aGconfKey)
+ for (std::size_t i = 0; i < gconfaccess::nConfigurationValues; ++i) {
+ if (PropertyName.equalsAscii(
+ gconfaccess::ConfigurationValues[i].OOoConfItem))
{
- aComponent = aIter->first;
- break;
+ return css::uno::makeAny(
+ enabled_
+ ? gconfaccess::getValue(gconfaccess::ConfigurationValues[i])
+ : css::beans::Optional< css::uno::Any >());
}
-
- }
-
-
- //Need to store updated layer TimeStamp as Gconf library
- //has no access to TimeStamp via its api
- TimeValue aTimeValue ={0,0} ;
- osl_getSystemTime(&aTimeValue);
-
- oslDateTime aLayerTS;
- rtl::OUString aTimeStamp;
-
- if (osl_getDateTimeFromTimeValue(&aTimeValue, &aLayerTS)) {
- sal_Char asciiStamp [20] ;
-
- sprintf(asciiStamp, "%04d%02d%02d%02d%02d%02dZ",
- aLayerTS.Year, aLayerTS.Month, aLayerTS.Day,
- aLayerTS.Hours, aLayerTS.Minutes, aLayerTS.Seconds) ;
- aTimeStamp = rtl::OUString::createFromAscii(asciiStamp) ;
- }
-
-
- TSMappingTable::iterator aTSIter;
- aTSIter = mTSMap.find(aComponent);
- if (aTSIter == mTSMap.end())
- {
- mTSMap.insert(TSMappingTable::value_type(aComponent,aTimeStamp));
- }
- else
- {
- aTSIter->second = aTimeStamp;
-
}
- typedef ListenerList::iterator LLIter;
- typedef std::pair<LLIter, LLIter> BFRange;
- BFRange aRange = mListenerList.equal_range(aComponent);
- while (aRange.first != aRange.second)
- {
- LLIter cur = aRange.first++;
- backend::ComponentChangeEvent aEvent;
- aEvent.Component = aComponent;
- aEvent.Source = *this;
- cur->second->componentDataChanged(aEvent);
-
- }
-*/
+ throw css::beans::UnknownPropertyException(
+ PropertyName, static_cast< cppu::OWeakObject * >(this));
}
-
-//------------------------------------------------------------------------------
-void SAL_CALL GconfBackend::addChangesListener(
- const uno::Reference<backend::XBackendChangesListener>& xListener,
- const rtl::OUString& aComponent)
- throw (::com::sun::star::uno::RuntimeException)
-{
-/*
- osl::MutexGuard aGuard(mMutex);
-
- GConfClient* aClient = getGconfClient();
-
- ListenerList::iterator aIter;
- aIter = mListenerList.find(aComponent);
- if (aIter == mListenerList.end())
- {
- typedef KeyMappingTable::iterator KMTIter;
- typedef std::pair<KMTIter, KMTIter> BFRange;
-
- BFRange aRange = mKeyMap.equal_range(aComponent);
-
- while (aRange.first != aRange.second)
- {
- KMTIter cur = aRange.first++;
-
- sal_Int32 nIndex = cur->second.mGconfName.lastIndexOf('/');
- rtl::OUString aDirectory = cur->second.mGconfName.copy(0, nIndex);
- rtl::OString aDirectoryStr= rtl::OUStringToOString(aDirectory, RTL_TEXTENCODING_ASCII_US);
- GError* aError = NULL;
- gconf_client_add_dir(aClient,
- aDirectoryStr.getStr(),
- GCONF_CLIENT_PRELOAD_NONE,
- &aError);
-
- if(aError != NULL)
- {
- OSL_TRACE("GconfBackend:: Cannot register listener for Component %s",
- rtl::OUStringToOString(aComponent, RTL_TEXTENCODING_ASCII_US).getStr() );
- }
-
- rtl::OString aKey = rtl::OUStringToOString(cur->second.mGconfName,
- RTL_TEXTENCODING_ASCII_US);
-
- GConfClientNotifyFunc aNotifyFunc = &keyChangedCallback;
- sal_uInt32 aID = gconf_client_notify_add(
- aClient,
- aKey.getStr(),
- aNotifyFunc,
- this,
- NULL,
- &aError);
- if(aError != NULL)
- {
- OSL_TRACE("GconfBackend:: Cannot register listener for Component %s",
- rtl::OUStringToOString(aComponent, RTL_TEXTENCODING_ASCII_US).getStr() );
- }
-
-
-
- }
-
- }
-*/
-
-/*
- if (mNotificationThread == NULL)
- {
-
- mNotificationThread = new ONotificationThread();
-
- if ( mNotificationThread == NULL)
- {
- OSL_ENSURE(false,"Could not start Notification Thread ");
- }
- else
- {
- mNotificationThread->create();
- }
- }
-*/
- //Store listener in list
- mListenerList.insert(ListenerList::value_type(aComponent, xListener));
-
-
-}
-//------------------------------------------------------------------------------
-void SAL_CALL GconfBackend::removeChangesListener(
- const uno::Reference<backend::XBackendChangesListener>& /*xListener*/,
- const rtl::OUString& /*aComponent*/)
- throw (::com::sun::star::uno::RuntimeException)
+css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance(
+ css::uno::Reference< css::uno::XComponentContext > const &)
{
-/*
- osl::MutexGuard aGuard(mMutex);
- GConfClient* aClient = GconfBackend::getGconfClient();
- ListenerList::iterator aIter;
- aIter = mListenerList.find(aComponent);
- if (aIter == mListenerList.end())
- {
-
- OSL_TRACE("GconfBackend:: Cannot deregister listener for Component %s - Listner not registered",
- rtl::OUStringToOString(aComponent, RTL_TEXTENCODING_ASCII_US).getStr() );
-
- typedef KeyMappingTable::iterator KMTIter;
- typedef std::pair<KMTIter, KMTIter> BFRange;
-
- BFRange aRange = mKeyMap.equal_range(aComponent);
-
- while (aRange.first != aRange.second)
- {
- KMTIter cur = aRange.first++;
-
- sal_Int32 nIndex = cur->second.mGconfName.lastIndexOf('/');
- rtl::OUString aDirectory = cur->second.mGconfName.copy(0, nIndex);
- rtl::OString aDirectoryStr= rtl::OUStringToOString(aDirectory, RTL_TEXTENCODING_ASCII_US);
- GError* aError = NULL;
- gconf_client_remove_dir(aClient,
- aDirectoryStr.getStr(),
- &aError);
-
- if(aError != NULL)
- {
- OSL_TRACE("GconfBackend:: Cannot deRegister listener for Component %s",
- rtl::OUStringToOString(aComponent, RTL_TEXTENCODING_ASCII_US).getStr() );
- }
- }
- }
-*/
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL GconfBackend::getBackendName(void) {
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.configuration.backend.GconfBackend") );
+ return static_cast< cppu::OWeakObject * >(new Service);
}
-//------------------------------------------------------------------------------
+static cppu::ImplementationEntry const services[] = {
+ { &createInstance, &getServiceImplementationName,
+ &getServiceSupportedServiceNames, &cppu::createSingleComponentFactory, 0,
+ 0 },
+ { 0, 0, 0, 0, 0, 0 }
+};
-rtl::OUString SAL_CALL GconfBackend::getImplementationName(void)
- throw (uno::RuntimeException)
-{
- return getBackendName() ;
}
-//------------------------------------------------------------------------------
-
-uno::Sequence<rtl::OUString> SAL_CALL GconfBackend::getBackendServiceNames(void)
+extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
+ char const * pImplName, void * pServiceManager, void * pRegistryKey)
{
- uno::Sequence<rtl::OUString> aServices(1) ;
- aServices[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.GconfBackend")) ;
-
- return aServices ;
+ return cppu::component_getFactoryHelper(
+ pImplName, pServiceManager, pRegistryKey, services);
}
-//------------------------------------------------------------------------------
-
-sal_Bool SAL_CALL GconfBackend::supportsService(const rtl::OUString& aServiceName)
- throw (uno::RuntimeException)
+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL
+component_getImplementationEnvironment(
+ char const ** ppEnvTypeName, uno_Environment **)
{
- uno::Sequence< rtl::OUString > const svc = getBackendServiceNames();
-
- for(sal_Int32 i = 0; i < svc.getLength(); ++i )
- if(svc[i] == aServiceName)
- return true;
-
- return false;
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
}
-//------------------------------------------------------------------------------
-
-uno::Sequence<rtl::OUString>
-SAL_CALL GconfBackend::getSupportedServiceNames(void)
- throw (uno::RuntimeException)
+extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo(
+ void * pServiceManager, void * pRegistryKey)
{
- return getBackendServiceNames() ;
+ return component_writeInfoHelper(pServiceManager, pRegistryKey, services);
}
-
-// ---------------------------------------------------------------------------------------
-
-
diff --git a/shell/source/backends/gconfbe/gconfbackend.hxx b/shell/source/backends/gconfbe/gconfbackend.hxx
deleted file mode 100644
index 721586a80186..000000000000
--- a/shell/source/backends/gconfbe/gconfbackend.hxx
+++ /dev/null
@@ -1,225 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: gconfbackend.hxx,v $
- * $Revision: 1.8 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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 GCONFBACKEND_HXX_
-#define GCONFBACKEND_HXX_
-
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XSCHEMASUPPLIER_HPP_
-#include <com/sun/star/configuration/backend/XSingleLayerStratum.hpp>
-#endif
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-
-//#ifndef _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_
-//#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-//#endif // _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_
-#include <com/sun/star/configuration/InvalidBootstrapFileException.hpp>
-#include <com/sun/star/configuration/backend/CannotConnectException.hpp>
-#include <com/sun/star/configuration/backend/XBackendChangesNotifier.hpp>
-#include <cppuhelper/compbase3.hxx>
-
-#ifndef INCLUDED_MAP
-#include <map>
-#define INCLUDED_MAP
-#endif
-//#ifndef _VOS_THREAD_HXX_
-//#include <vos/thread.hxx>
-//#endif
-
-#include <gconf/gconf-client.h>
-
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-
-
-/** Structure containing the mapping between OOffice and Gconf keys.
- AlOO specifies whether the key is protected, if key is protected it
- can not be over riden in subsequent higher layers
-*/
-struct keyMapping
-{
- keyMapping(){};
- rtl::OUString mOOName;
- rtl::OUString mOOType;
- rtl::OUString mGconfName;
- sal_Bool mbProtected;
-};
-
-typedef keyMapping KeyMappingInfo;
-typedef std::multimap<rtl::OUString, KeyMappingInfo> KeyMappingTable;
-
-/*Time Stamp mapping table used to store timestamps of updated components
- when a notification is recieved. It is needed as you cannot access gconf key
- timestamps via the Gconf api */
-
-typedef std::multimap<rtl::OUString, rtl::OUString> TSMappingTable;
-
-//------------------------------------------------------------------------------
-
-/*
-class ONotificationThread: public vos::OThread
-{
-
-
-public:
- ONotificationThread()
- {}
-
- ~ONotificationThread()
- {
- g_main_loop_quit(mLoop);
- }
-
-private:
- virtual void SAL_CALL onTerminated()
- {
- delete this;
- }
-
- virtual void SAL_CALL run();
- GMainLoop* mLoop;
-};
-
-*/
-
-//------------------------------------------------------------------------------
-typedef cppu::WeakComponentImplHelper3<backend::XSingleLayerStratum,
- backend::XBackendChangesNotifier,
- lang::XServiceInfo> BackendBase ;
-
-/**
- Implements the SingleLayerStratum service for gconf access.
- */
-class GconfBackend : public BackendBase {
- public :
-
- static GconfBackend* createInstance(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XServiceInfo
- virtual rtl::OUString SAL_CALL getImplementationName( )
- throw (uno::RuntimeException) ;
-
- virtual sal_Bool SAL_CALL supportsService( const rtl::OUString& aServiceName )
- throw (uno::RuntimeException) ;
-
- virtual uno::Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames( )
- throw (uno::RuntimeException) ;
-
- /**
- Provides the implementation name.
-
- @return implementation name
- */
- static rtl::OUString SAL_CALL getBackendName(void) ;
-
- /**
- Provides the supported services names
-
- @return service names
- */
- static uno::Sequence<rtl::OUString> SAL_CALL getBackendServiceNames(void) ;
-
- /* returns a GconfClient */
- static GConfClient* getGconfClient();
-
- //XSingleLayerStratum
- virtual uno::Reference<backend::XLayer> SAL_CALL
- getLayer( const rtl::OUString& aLayerId, const rtl::OUString& aTimestamp )
- throw (backend::BackendAccessException, lang::IllegalArgumentException) ;
-
- virtual uno::Reference<backend::XUpdatableLayer> SAL_CALL
- getUpdatableLayer( const rtl::OUString& aLayerId )
- throw (backend::BackendAccessException, lang::NoSupportException,
- lang::IllegalArgumentException) ;
-
- // XBackendChangesNotifier
- virtual void SAL_CALL addChangesListener(
- const uno::Reference<backend::XBackendChangesListener>& xListener,
- const rtl::OUString& aComponent)
- throw (::com::sun::star::uno::RuntimeException);
-
-
- virtual void SAL_CALL removeChangesListener(
- const uno::Reference<backend::XBackendChangesListener>& xListener,
- const rtl::OUString& aComponent)
- throw (::com::sun::star::uno::RuntimeException);
-
- //Notify all listener of component change
- void notifyListeners(const rtl::OUString& aGconfKey);
-
- protected:
- /**
- Service constructor from a service factory.
-
- @param xContext component context
- */
- GconfBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException);
-
- /** Destructor */
- ~GconfBackend(void) ;
-
- private:
-
- typedef uno::Reference<backend::XBackendChangesListener> ListenerRef;
- typedef std::multimap<rtl::OUString,ListenerRef> ListenerList;
-
- /** Build Gconf/OO mapping table */
- void initializeMappingTable ();
-
-
- /** The component context */
- uno::Reference<uno::XComponentContext> m_xContext;
-
- /** Mutex for reOOurces protection */
- osl::Mutex mMutex ;
-
- KeyMappingTable mKeyMap;
-
- /** List of component TimeStamps */
- TSMappingTable mTSMap;
-
- static GconfBackend* mInstance;
-
- /** List of listener */
- ListenerList mListenerList;
-
- /**Connection to Gconf */
- static GConfClient* mClient;
-
-// ONotificationThread* mNotificationThread;
-} ;
-
-
-#endif // CONFIGMGR_LOCALBE_LOCALSINGLESTRATUM_HXX_
diff --git a/shell/source/backends/gconfbe/gconfbe.xml b/shell/source/backends/gconfbe/gconfbe.xml
deleted file mode 100644
index 55eea1c1f6c9..000000000000
--- a/shell/source/backends/gconfbe/gconfbe.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name>gconfbe</module-name>
- <component-description>
- <author> Oliver Braun </author>
- <name>com.sun.star.comp.configuration.backend.GconfBackend</name>
- <description> The </description>
- <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
- <language>c++</language>
- <status value="beta"/>
- <supported-service>com.sun.star.comp.configuration.backend.GconfBackend</supported-service>
- <service-dependency>...</service-dependency>
- <type>com.sun.star.configuration.backend.XBackendChangesListener</type>
- <type>com.sun.star.configuration.backend.XBackendChangesNotifier</type>
- <type>com.sun.star.configuration.backend.XLayerHandler</type>
- <type>com.sun.star.configuration.backend.XSingleLayerStratum</type>
- <type>com.sun.star.lang.XMultiComponentFactory</type>
- <type>com.sun.star.lang.XServiceInfo</type>
- <type>com.sun.star.lang.XSingleComponentFactory</type>
- <type>com.sun.star.lang.XTypeProvider</type>
- <type>com.sun.star.uno.TypeClass</type>
- <type>com.sun.star.uno.XAggregation</type>
- <type>com.sun.star.uno.XComponentContext</type>
- <type>com.sun.star.uno.XCurrentContext</type>
- <type>com.sun.star.uno.XWeak</type>
- <type>com.sun.star.registry.XRegistryKey</type>
- </component-description>
- <project-build-dependency>cppuhelper</project-build-dependency>
- <project-build-dependency>cppu</project-build-dependency>
- <project-build-dependency>sal</project-build-dependency>
- <runtime-module-dependency>cppuhelper3$(COM)</runtime-module-dependency>
- <runtime-module-dependency>cppu3</runtime-module-dependency>
- <runtime-module-dependency>sal3</runtime-module-dependency>
-</module-description>
diff --git a/shell/source/backends/gconfbe/gconfbecdef.cxx b/shell/source/backends/gconfbe/gconfbecdef.cxx
deleted file mode 100644
index ed20759faa7e..000000000000
--- a/shell/source/backends/gconfbe/gconfbecdef.cxx
+++ /dev/null
@@ -1,151 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: gconfbecdef.cxx,v $
- * $Revision: 1.11 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-#include "gconfbackend.hxx"
-#include <com/sun/star/registry/XRegistryKey.hpp>
-
-#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_HXX_
-#include <cppuhelper/implementationentry.hxx>
-#endif // _CPPUHELPER_IMPLEMENTATIONENTRY_HXX_
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <rtl/ustrbuf.hxx>
-
-#include "uno/current_context.hxx"
-#include <stdio.h>
-#include "orbit.h"
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-
-//==============================================================================
-
-static uno::Reference<uno::XInterface> SAL_CALL createGconfBackend(const uno::Reference<uno::XComponentContext>& xContext)
-{
- try {
- uno::Reference< uno::XCurrentContext > xCurrentContext(uno::getCurrentContext());
-
- if (xCurrentContext.is())
- {
- uno::Any aValue = xCurrentContext->getValueByName(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "system.desktop-environment" ) ) );
-
- rtl::OUString aDesktopEnvironment;
- if ( (aValue >>= aDesktopEnvironment) && (aDesktopEnvironment.equalsAscii("GNOME")) )
- {
- // ORBit-2 versions < 2.8 cause a deadlock with the gtk+ VCL plugin
- if ( (orbit_major_version >= 2) && (orbit_minor_version >= 8) )
- {
- return * GconfBackend::createInstance(xContext);
- }
- }
- }
-
- return uno::Reference<uno::XInterface>();
-
- } catch (uno::RuntimeException e) {
- return uno::Reference<uno::XInterface>();
- }
-
-}
-
-//==============================================================================
-
-static const cppu::ImplementationEntry kImplementations_entries[] =
-{
- {
- createGconfBackend,
- GconfBackend::getBackendName,
- GconfBackend::getBackendServiceNames,
- cppu::createSingleComponentFactory,
- NULL,
- 0
- },
- { NULL, NULL, NULL, NULL, NULL, 0 }
-} ;
-//------------------------------------------------------------------------------
-
-extern "C" void SAL_CALL component_getImplementationEnvironment(
- const sal_Char **aEnvTypeName,
- uno_Environment **/*aEnvironment*/) {
- *aEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ;
-}
-
-//------------------------------------------------------------------------------
-
-extern "C" sal_Bool SAL_CALL component_writeInfo(void */*pServiceManager*/,
- void *pRegistryKey) {
-
- using namespace ::com::sun::star::registry;
- if (pRegistryKey)
- {
- try
- {
- uno::Reference< XRegistryKey > xImplKey = static_cast< XRegistryKey* >( pRegistryKey )->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + GconfBackend::getBackendName()
- );
-
- // Register associated service names
- uno::Reference< XRegistryKey > xServicesKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES") )
- );
-
- uno::Sequence<rtl::OUString> sServiceNames = GconfBackend::getBackendServiceNames();
- for (sal_Int32 i = 0 ; i < sServiceNames.getLength() ; ++ i)
- xServicesKey->createKey(sServiceNames[i]);
-
- return sal_True;
- }
-
- catch( InvalidRegistryException& )
- {
- OSL_ENSURE(sal_False, "InvalidRegistryException caught");
- }
- }
-
- return sal_False;
-}
-
-//------------------------------------------------------------------------------
-
-extern "C" void *component_getFactory(const sal_Char *aImplementationName,
- void *aServiceManager,
- void *aRegistryKey) {
-
- return cppu::component_getFactoryHelper(
- aImplementationName,
- aServiceManager,
- aRegistryKey,
- kImplementations_entries) ;
-}
-//------------------------------------------------------------------------------
diff --git a/shell/source/backends/gconfbe/gconflayer.hxx b/shell/source/backends/gconfbe/gconflayer.hxx
deleted file mode 100644
index af9753b9179a..000000000000
--- a/shell/source/backends/gconfbe/gconflayer.hxx
+++ /dev/null
@@ -1,133 +0,0 @@
-#ifndef GCONFLAYER_HXX_
-#define GCONFLAYER_HXX_
-
-#include "gconfbackend.hxx"
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif // _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/util/XTimeStamped.hpp>
-#include <cppuhelper/implbase2.hxx>
-
-#define GCONF_PROXY_MODE_KEY "/system/proxy/mode"
-#define GCONF_AUTO_SAVE_KEY "/apps/openoffice/auto_save"
-
-enum ConfigurationSetting
-{
- SETTING_PROXY_MODE,
- SETTING_PROXY_HTTP_HOST,
- SETTING_PROXY_HTTP_PORT,
- SETTING_PROXY_HTTPS_HOST,
- SETTING_PROXY_HTTPS_PORT,
- SETTING_PROXY_FTP_HOST,
- SETTING_PROXY_FTP_PORT,
- SETTING_NO_PROXY_FOR,
- SETTING_ENABLE_ACCESSIBILITY,
- SETTING_MAILER_PROGRAM,
- SETTING_WORK_DIRECTORY,
- SETTING_SOURCEVIEWFONT_NAME,
- SETTING_SOURCEVIEWFONT_HEIGHT,
- SETTING_USER_GIVENNAME,
- SETTING_USER_SURNAME,
-
-#ifdef ENABLE_LOCKDOWN
-
- SETTING_DISABLE_PRINTING,
- SETTING_USE_SYSTEM_FILE_DIALOG,
- SETTING_DISABLE_UI_CUSTOMIZATION,
- SETTING_PRINTING_MODIFIES_DOCUMENT,
- SETTING_SHOW_ICONS_IN_MENUS,
- SETTING_SHOW_INACTIVE_MENUITEMS,
- SETTING_SHOW_FONT_PREVIEW,
- SETTING_SHOW_FONT_HISTORY,
- SETTING_ENABLE_OPENGL,
- SETTING_OPTIMIZE_OPENGL,
- SETTING_SAVE_DOCUMENT_WINDOWS,
- SETTING_SAVE_DOCUMENT_VIEW_INFO,
- SETTING_USE_SYSTEM_FONT,
- SETTING_USE_FONT_ANTI_ALIASING,
- SETTING_FONT_ANTI_ALIASING_MIN_PIXEL,
- SETTING_WARN_CREATE_PDF,
- SETTING_WARN_PRINT_DOC,
- SETTING_WARN_SAVEORSEND_DOC,
- SETTING_WARN_SIGN_DOC,
- SETTING_REMOVE_PERSONAL_INFO,
- SETTING_RECOMMEND_PASSWORD,
- SETTING_UNDO_STEPS,
- SETTING_SYMBOL_SET,
- SETTING_MACRO_SECURITY_LEVEL,
- SETTING_CREATE_BACKUP,
- SETTING_WARN_ALIEN_FORMAT,
- SETTING_AUTO_SAVE,
- SETTING_AUTO_SAVE_INTERVAL,
- SETTING_WRITER_DEFAULT_DOC_FORMAT,
- SETTING_IMPRESS_DEFAULT_DOC_FORMAT,
- SETTING_CALC_DEFAULT_DOC_FORMAT,
-
-#endif // ENABLE_LOCKDOWN
-
- SETTINGS_LAST
-};
-
-struct ConfigurationValue
-{
- const ConfigurationSetting nSettingId;
- const gchar *GconfItem;
- const char *OOoConfItem;
- const char *OOoConfValueType;
- const sal_Bool bLocked;
- const sal_Bool bNeedsTranslation;
- const ConfigurationSetting nDependsOn;
-};
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interface for the Gconf values mapped into
- the org.openoffice.* configuration component.
- */
-class GconfLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
-public :
- /**
- Constructor given the component context
-
- @param xContext The component context
- */
-
- GconfLayer( const uno::Reference<uno::XComponentContext>& xContext,
- const ConfigurationValue pConfigurationValuesList[],
- const sal_Int32 nConfigurationValues,
- const char * pPreloadValuesList[] );
-
- // XLayer
- virtual void SAL_CALL readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException );
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- protected:
-
- /** Destructor */
- ~GconfLayer(void) {}
-
-private :
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber;
- const ConfigurationValue* m_pConfigurationValuesList;
- const sal_Int32 m_nConfigurationValues;
- const char** m_pPreloadValuesList;
- } ;
-
-#endif // GCONFLAYER
diff --git a/shell/source/backends/gconfbe/makefile.mk b/shell/source/backends/gconfbe/makefile.mk
index 472db4b244a3..aae7af45b106 100644
--- a/shell/source/backends/gconfbe/makefile.mk
+++ b/shell/source/backends/gconfbe/makefile.mk
@@ -35,8 +35,7 @@ TARGET=gconfbe
LIBTARGET=NO
ENABLE_EXCEPTIONS=TRUE
-
-COMP1TYPELIST=$(TARGET)
+VISIBILITY_HIDDEN=TRUE
# --- Settings ---
@@ -69,9 +68,8 @@ PKGCONFIG_LIBS!:=-Wl,--export-dynamic $(PKGCONFIG_LIBS)
SLOFILES=\
- $(SLO)$/gconfbecdef.obj \
- $(SLO)$/gconfbackend.obj \
- $(SLO)$/gconflayer.obj
+ $(SLO)$/gconfaccess.obj \
+ $(SLO)$/gconfbackend.obj
SHL1NOCHECK=TRUE
SHL1TARGET=$(TARGET)1.uno
@@ -86,7 +84,6 @@ SHL1STDLIBS= \
SHL1STDLIBS+=$(PKGCONFIG_LIBS)
-SHL1VERSIONMAP=exports.map
SHL1DEF=$(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
diff --git a/shell/source/backends/kde4be/exports.map b/shell/source/backends/kde4be/exports.map
deleted file mode 100644
index ba501f9ae076..000000000000
--- a/shell/source/backends/kde4be/exports.map
+++ /dev/null
@@ -1,10 +0,0 @@
-UDK_3_0_0 {
- global:
- GetVersionInfo;
- component_getImplementationEnvironment;
- component_getFactory;
- component_writeInfo;
-
- local:
- *;
-};
diff --git a/shell/source/backends/kde4be/kde4access.cxx b/shell/source/backends/kde4be/kde4access.cxx
new file mode 100644
index 000000000000..888f5cdc82fe
--- /dev/null
+++ b/shell/source/backends/kde4be/kde4access.cxx
@@ -0,0 +1,321 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_shell.hxx"
+#include "sal/config.h"
+
+#include "QFont"
+#include "QString"
+#include "kemailsettings.h"
+#include "kglobalsettings.h"
+#include "kprotocolmanager.h"
+
+#include "com/sun/star/uno/Any.hxx"
+#include "cppu/unotype.hxx"
+#include "osl/diagnose.h"
+#include "osl/file.h"
+#include "rtl/string.h"
+#include "rtl/ustring.hxx"
+
+#include "kde4access.hxx"
+
+#define SPACE ' '
+#define COMMA ','
+#define SEMI_COLON ';'
+
+namespace kde4access {
+
+namespace {
+
+namespace css = com::sun::star ;
+namespace uno = css::uno ;
+
+}
+
+css::beans::Optional< css::uno::Any > getValue(rtl::OUString const & id) {
+ if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ExternalMailer"))) {
+ KEMailSettings aEmailSettings;
+ QString aClientProgram;
+ ::rtl::OUString sClientProgram;
+
+ aClientProgram = aEmailSettings.getSetting( KEMailSettings::ClientProgram );
+ if ( aClientProgram.isEmpty() )
+ aClientProgram = "kmail";
+ else
+ aClientProgram = aClientProgram.section(SPACE, 0, 0);
+ sClientProgram = (const sal_Unicode *) aClientProgram.utf16();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sClientProgram ) );
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight")))
+ {
+ QFont aFixedFont;
+ short nFontHeight;
+
+ aFixedFont = KGlobalSettings::fixedFont();
+ nFontHeight = aFixedFont.pointSize();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( nFontHeight ) );
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")))
+ {
+ QFont aFixedFont;
+ QString aFontName;
+ :: rtl::OUString sFontName;
+
+ aFixedFont = KGlobalSettings::fixedFont();
+ aFontName = aFixedFont.family();
+ sFontName = (const sal_Unicode *) aFontName.utf16();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sFontName ) );
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")))
+ {
+ /* does not make much sense without an accessibility bridge */
+ sal_Bool ATToolSupport = sal_False;
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( rtl::OUString::valueOf( ATToolSupport ) ) );
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")))
+ {
+ QString aDocumentsDir( KGlobalSettings::documentPath() );
+ rtl::OUString sDocumentsDir;
+ rtl::OUString sDocumentsURL;
+ if ( aDocumentsDir.endsWith(QChar('/')) )
+ aDocumentsDir.truncate ( aDocumentsDir.length() - 1 );
+ sDocumentsDir = (const sal_Unicode *) aDocumentsDir.utf16();
+ osl_getFileURLFromSystemPath( sDocumentsDir.pData, &sDocumentsURL.pData );
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sDocumentsURL ) );
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")))
+ {
+ QString aFTPProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aFTPProxy = KProtocolManager::proxyFor( "FTP" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aFTPProxy = KProtocolManager::proxyForUrl( KUrl("ftp://ftp.openoffice.org") );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aFTPProxy.isEmpty() )
+ {
+ KUrl aProxy(aFTPProxy);
+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().utf16();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sProxy ) );
+ }
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")))
+ {
+ QString aFTPProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aFTPProxy = KProtocolManager::proxyFor( "FTP" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aFTPProxy = KProtocolManager::proxyForUrl( KUrl("ftp://ftp.openoffice.org") );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aFTPProxy.isEmpty() )
+ {
+ KUrl aProxy(aFTPProxy);
+ sal_Int32 nPort = aProxy.port();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( nPort ) );
+ }
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")))
+ {
+ QString aHTTPProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aHTTPProxy = KProtocolManager::proxyForUrl( KUrl("http://http.openoffice.org") );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aHTTPProxy.isEmpty() )
+ {
+ KUrl aProxy(aHTTPProxy);
+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().utf16();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sProxy ) );
+ }
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")))
+ {
+ QString aHTTPProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aHTTPProxy = KProtocolManager::proxyForUrl( KUrl("http://http.openoffice.org") );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aHTTPProxy.isEmpty() )
+ {
+ KUrl aProxy(aHTTPProxy);
+ sal_Int32 nPort = aProxy.port();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( nPort ) );
+ }
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")))
+ {
+ QString aHTTPSProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aHTTPSProxy = KProtocolManager::proxyForUrl( KUrl("https://https.openoffice.org") );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aHTTPSProxy.isEmpty() )
+ {
+ KUrl aProxy(aHTTPSProxy);
+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().utf16();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sProxy ) );
+ }
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")))
+ {
+ QString aHTTPSProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aHTTPSProxy = KProtocolManager::proxyForUrl( KUrl("https://https.openoffice.org") );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aHTTPSProxy.isEmpty() )
+ {
+ KUrl aProxy(aHTTPSProxy);
+ sal_Int32 nPort = aProxy.port();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( nPort ) );
+ }
+ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy"))) {
+ QString aNoProxyFor;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+ aNoProxyFor = KProtocolManager::noProxyFor();
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aNoProxyFor.isEmpty() )
+ {
+ ::rtl::OUString sNoProxyFor;
+
+ aNoProxyFor = aNoProxyFor.replace( COMMA, SEMI_COLON );
+ sNoProxyFor = (const sal_Unicode *) aNoProxyFor.utf16();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sNoProxyFor ) );
+ }
+ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"))) {
+ int nProxyType;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+ nProxyType = 1;
+ break;
+ default: // No proxy is used
+ nProxyType = 0;
+ }
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( (sal_Int32) nProxyType ) );
+ } else {
+ OSL_ASSERT(false); // this cannot happen
+ }
+ return css::beans::Optional< css::uno::Any >();
+}
+
+}
diff --git a/shell/source/backends/kde4be/kde4access.hxx b/shell/source/backends/kde4be/kde4access.hxx
new file mode 100644
index 000000000000..2edd2f3a8686
--- /dev/null
+++ b/shell/source/backends/kde4be/kde4access.hxx
@@ -0,0 +1,49 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_SHELL_SOURCE_BACKENDS_KDE4BE_KDE4ACCESS_HXX
+#define INCLUDED_SHELL_SOURCE_BACKENDS_KDE4BE_KDE4ACCESS_HXX
+
+#include "sal/config.h"
+
+#include "com/sun/star/beans/Optional.hpp"
+
+namespace com { namespace sun { namespace star { namespace uno {
+ class Any;
+} } } }
+namespace rtl { class OUString; }
+
+namespace kde4access {
+
+com::sun::star::beans::Optional< com::sun::star::uno::Any > getValue(
+ rtl::OUString const & id);
+
+}
+
+#endif
diff --git a/shell/source/backends/kde4be/kde4backend.cxx b/shell/source/backends/kde4be/kde4backend.cxx
index 7eb093bf7217..e2f7e4c813f1 100644
--- a/shell/source/backends/kde4be/kde4backend.cxx
+++ b/shell/source/backends/kde4be/kde4backend.cxx
@@ -1,158 +1,260 @@
/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kde4backend.cxx,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
#include "precompiled_shell.hxx"
+#include "sal/config.h"
-#include "kde4backend.hxx"
-#include "kde4commonlayer.hxx"
-#include "kde4inetlayer.hxx"
-#include "kde4vcllayer.hxx"
-#include "kde4pathslayer.hxx"
+#include "kapplication.h"
-//------------------------------------------------------------------------------
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/beans/Optional.hpp"
+#include "com/sun/star/beans/PropertyVetoException.hpp"
+#include "com/sun/star/beans/UnknownPropertyException.hpp"
+#include "com/sun/star/beans/XPropertyChangeListener.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+#include "com/sun/star/beans/XPropertySetInfo.hpp"
+#include "com/sun/star/beans/XVetoableChangeListener.hpp"
+#include "com/sun/star/lang/IllegalArgumentException.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/lang/XMultiComponentFactory.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XCurrentContext.hpp"
+#include "cppuhelper/factory.hxx"
+#include "cppuhelper/implbase2.hxx"
+#include "cppuhelper/implementationentry.hxx"
+#include "cppuhelper/weak.hxx"
+#include "rtl/string.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+#include "uno/current_context.hxx"
+#include "uno/lbnames.h"
-KDEBackend* KDEBackend::mInstance= 0;
+#include "kde4access.hxx"
-KDEBackend* KDEBackend::createInstance(const uno::Reference<uno::XComponentContext>& xContext)
-{
- if (mInstance == 0)
- {
- mInstance = new KDEBackend (xContext);
- }
+namespace {
+
+namespace css = com::sun::star;
- return mInstance;
+rtl::OUString SAL_CALL getServiceImplementationName() {
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.comp.configuration.backend.KDE4Backend"));
}
-//------------------------------------------------------------------------------
+css::uno::Sequence< rtl::OUString > SAL_CALL getServiceSupportedServiceNames() {
+ rtl::OUString name(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.backend.KDE4Backend"));
+ return css::uno::Sequence< rtl::OUString >(&name, 1);
+}
-KDEBackend::KDEBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException)
- : BackendBase(mMutex), m_xContext(xContext)
+class Service:
+ public cppu::WeakImplHelper2<
+ css::lang::XServiceInfo, css::beans::XPropertySet >,
+ private boost::noncopyable
{
-}
+public:
+ Service();
-//------------------------------------------------------------------------------
+private:
+ virtual ~Service() {}
-KDEBackend::~KDEBackend(void)
-{
-}
+ virtual rtl::OUString SAL_CALL getImplementationName()
+ throw (css::uno::RuntimeException)
+ { return getServiceImplementationName(); }
-//------------------------------------------------------------------------------
+ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName)
+ throw (css::uno::RuntimeException)
+ { return ServiceName == getSupportedServiceNames()[0]; }
-uno::Reference<backend::XLayer> SAL_CALL KDEBackend::getLayer(
- const rtl::OUString& aComponent, const rtl::OUString& /* aTimestamp */)
- throw (backend::BackendAccessException, lang::IllegalArgumentException)
-{
- uno::Reference<backend::XLayer> xLayer;
+ virtual css::uno::Sequence< rtl::OUString > SAL_CALL
+ getSupportedServiceNames() throw (css::uno::RuntimeException)
+ { return getServiceSupportedServiceNames(); }
- if( aComponent.equalsAscii("org.openoffice.Office.Common" ) )
- {
- xLayer = new KDECommonLayer(m_xContext);
- }
- else if( aComponent.equalsAscii("org.openoffice.Inet" ) )
- {
- xLayer = new KDEInetLayer(m_xContext);
- }
- else if( aComponent.equalsAscii("org.openoffice.VCL" ) )
- {
- xLayer = new KDEVCLLayer(m_xContext);
- }
- else if( aComponent.equalsAscii("org.openoffice.Office.Paths" ) )
- {
- xLayer = new KDEPathsLayer(m_xContext);
- }
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
+ getPropertySetInfo() throw (css::uno::RuntimeException)
+ { return css::uno::Reference< css::beans::XPropertySetInfo >(); }
- return xLayer;
-}
+ virtual void SAL_CALL setPropertyValue(
+ rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
-//------------------------------------------------------------------------------
+ virtual css::uno::Any SAL_CALL getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
-uno::Reference<backend::XUpdatableLayer> SAL_CALL
-KDEBackend::getUpdatableLayer(const rtl::OUString& /* aComponent */)
- throw (backend::BackendAccessException,lang::NoSupportException,
- lang::IllegalArgumentException)
-{
- throw lang::NoSupportException( rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("KDEBackend: No Update Operation allowed, Read Only access") ),
- *this) ;
-}
+ virtual void SAL_CALL addPropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
-//------------------------------------------------------------------------------
+ virtual void SAL_CALL removePropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
-rtl::OUString SAL_CALL KDEBackend::getBackendName(void)
-{
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.configuration.backend.KDE4Backend") );
-}
+ virtual void SAL_CALL addVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
-//------------------------------------------------------------------------------
+ virtual void SAL_CALL removeVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
-rtl::OUString SAL_CALL KDEBackend::getImplementationName(void)
- throw (uno::RuntimeException)
-{
- return getBackendName() ;
-}
+ bool enabled_;
+};
-//------------------------------------------------------------------------------
+Service::Service(): enabled_(false) {
+ css::uno::Reference< css::uno::XCurrentContext > context(
+ css::uno::getCurrentContext());
+ if (context.is()) {
+ rtl::OUString desktop;
+ context->getValueByName(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("system.desktop-environment"))) >>=
+ desktop;
+ enabled_ = desktop.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("KDE4")) &&
+ KApplication::kApplication() != 0;
+ }
+}
-uno::Sequence<rtl::OUString> SAL_CALL KDEBackend::getBackendServiceNames(void)
+void Service::setPropertyValue(rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
{
- uno::Sequence<rtl::OUString> aServices(1) ;
- aServices[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.KDE4Backend")) ;
-
- return aServices ;
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")),
+ static_cast< cppu::OWeakObject * >(this), -1);
}
-//------------------------------------------------------------------------------
+css::uno::Any Service::getPropertyValue(rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ExternalMailer")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetProxyType")))
+ {
+ return css::uno::makeAny(
+ enabled_
+ ? kde4access::getValue(PropertyName)
+ : css::beans::Optional< css::uno::Any >());
+ }
+ throw css::beans::UnknownPropertyException(
+ PropertyName, static_cast< cppu::OWeakObject * >(this));
+}
-sal_Bool SAL_CALL KDEBackend::supportsService(const rtl::OUString& aServiceName)
- throw (uno::RuntimeException)
+css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance(
+ css::uno::Reference< css::uno::XComponentContext > const &)
{
- uno::Sequence< rtl::OUString > const svc = getBackendServiceNames();
+ return static_cast< cppu::OWeakObject * >(new Service);
+}
- for(sal_Int32 i = 0; i < svc.getLength(); ++i )
- if(svc[i] == aServiceName)
- return true;
+static cppu::ImplementationEntry const services[] = {
+ { &createInstance, &getServiceImplementationName,
+ &getServiceSupportedServiceNames, &cppu::createSingleComponentFactory, 0,
+ 0 },
+ { 0, 0, 0, 0, 0, 0 }
+};
- return false;
}
-//------------------------------------------------------------------------------
+extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
+ char const * pImplName, void * pServiceManager, void * pRegistryKey)
+{
+ return cppu::component_getFactoryHelper(
+ pImplName, pServiceManager, pRegistryKey, services);
+}
-uno::Sequence<rtl::OUString>
-SAL_CALL KDEBackend::getSupportedServiceNames(void)
- throw (uno::RuntimeException)
+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL
+component_getImplementationEnvironment(
+ char const ** ppEnvTypeName, uno_Environment **)
{
- return getBackendServiceNames() ;
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
}
-// ---------------------------------------------------------------------------------------
+extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo(
+ void * pServiceManager, void * pRegistryKey)
+{
+ return component_writeInfoHelper(pServiceManager, pRegistryKey, services);
+}
diff --git a/shell/source/backends/kde4be/kde4backend.hxx b/shell/source/backends/kde4be/kde4backend.hxx
deleted file mode 100644
index 01599c41a74d..000000000000
--- a/shell/source/backends/kde4be/kde4backend.hxx
+++ /dev/null
@@ -1,123 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kde4backend.hxx,v $
- * $Revision: 1.4 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#pragma once
-
-#include <com/sun/star/configuration/backend/XSingleLayerStratum.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/configuration/InvalidBootstrapFileException.hpp>
-#include <com/sun/star/configuration/backend/CannotConnectException.hpp>
-#include <cppuhelper/compbase2.hxx>
-
-#ifndef INCLUDED_MAP
-#include <map>
-#define INCLUDED_MAP
-#endif
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-
-
-//------------------------------------------------------------------------------
-typedef cppu::WeakComponentImplHelper2<backend::XSingleLayerStratum,
- lang::XServiceInfo> BackendBase ;
-
-/**
- Implements the SingleLayerStratum service for KDE access.
- */
-class KDEBackend : public BackendBase {
- public :
-
- static KDEBackend* createInstance(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XServiceInfo
- virtual rtl::OUString SAL_CALL getImplementationName( )
- throw (uno::RuntimeException) ;
-
- virtual sal_Bool SAL_CALL supportsService( const rtl::OUString& aServiceName )
- throw (uno::RuntimeException) ;
-
- virtual uno::Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames( )
- throw (uno::RuntimeException) ;
-
- /**
- Provides the implementation name.
-
- @return implementation name
- */
- static rtl::OUString SAL_CALL getBackendName(void) ;
-
- /**
- Provides the supported services names
-
- @return service names
- */
- static uno::Sequence<rtl::OUString> SAL_CALL getBackendServiceNames(void) ;
-
- //XSingleLayerStratum
- virtual uno::Reference<backend::XLayer> SAL_CALL
- getLayer( const rtl::OUString& aLayerId, const rtl::OUString& aTimestamp )
- throw (backend::BackendAccessException, lang::IllegalArgumentException) ;
-
- virtual uno::Reference<backend::XUpdatableLayer> SAL_CALL
- getUpdatableLayer( const rtl::OUString& aLayerId )
- throw (backend::BackendAccessException, lang::NoSupportException,
- lang::IllegalArgumentException) ;
-
- protected:
- /**
- Service constructor from a service factory.
-
- @param xContext component context
- */
- KDEBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException);
-
- /** Destructor */
- ~KDEBackend(void) ;
-
- private:
-
- /** Build KDE/OO mapping table */
- void initializeMappingTable ();
-
-
- /** The component context */
- uno::Reference<uno::XComponentContext> m_xContext;
-
- /** Mutex for reOOurces protection */
- osl::Mutex mMutex ;
-
- static KDEBackend* mInstance;
-};
diff --git a/shell/source/backends/kde4be/kde4be.xml b/shell/source/backends/kde4be/kde4be.xml
deleted file mode 100644
index ea2d9be6dd6b..000000000000
--- a/shell/source/backends/kde4be/kde4be.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name>kde4be</module-name>
- <component-description>
- <author> Éric Bischoff </author>
- <name>com.sun.star.comp.configuration.backend.KDE4Backend</name>
- <description> The KDE4 configuration backend </description>
- <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
- <language>c++</language>
- <status value="beta"/>
- <supported-service>com.sun.star.comp.configuration.backend.KDE4Backend</supported-service>
- <service-dependency>...</service-dependency>
- <type>com.sun.star.configuration.backend.XBackendChangesListener</type>
- <type>com.sun.star.configuration.backend.XBackendChangesNotifier</type>
- <type>com.sun.star.configuration.backend.XLayerHandler</type>
- <type>com.sun.star.configuration.backend.XSingleLayerStratum</type>
- <type>com.sun.star.lang.XMultiComponentFactory</type>
- <type>com.sun.star.lang.XServiceInfo</type>
- <type>com.sun.star.lang.XSingleComponentFactory</type>
- <type>com.sun.star.lang.XTypeProvider</type>
- <type>com.sun.star.uno.TypeClass</type>
- <type>com.sun.star.uno.XAggregation</type>
- <type>com.sun.star.uno.XComponentContext</type>
- <type>com.sun.star.uno.XCurrentContext</type>
- <type>com.sun.star.uno.XWeak</type>
- <type>com.sun.star.registry.XRegistryKey</type>
- </component-description>
- <project-build-dependency>cppuhelper</project-build-dependency>
- <project-build-dependency>cppu</project-build-dependency>
- <project-build-dependency>sal</project-build-dependency>
- <runtime-module-dependency>cppuhelper3$(COM)</runtime-module-dependency>
- <runtime-module-dependency>cppu3</runtime-module-dependency>
- <runtime-module-dependency>sal3</runtime-module-dependency>
-</module-description>
diff --git a/shell/source/backends/kde4be/kde4becdef.cxx b/shell/source/backends/kde4be/kde4becdef.cxx
deleted file mode 100644
index da0d22ead22e..000000000000
--- a/shell/source/backends/kde4be/kde4becdef.cxx
+++ /dev/null
@@ -1,143 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kde4becdef.cxx,v $
- * $Revision: 1.8 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-#include "kde4backend.hxx"
-
-#include <kapplication.h>
-
-#include <cppuhelper/implementationentry.hxx>
-
-#include <com/sun/star/registry/XRegistryKey.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
-
-#include "uno/current_context.hxx"
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-
-//==============================================================================
-
-static uno::Reference<uno::XInterface> SAL_CALL createKDEBackend(const uno::Reference<uno::XComponentContext>& xContext)
-{
- try {
- uno::Reference< uno::XCurrentContext > xCurrentContext(uno::getCurrentContext());
-
- if (xCurrentContext.is())
- {
- uno::Any aValue = xCurrentContext->getValueByName(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "system.desktop-environment" ) ) );
-
- rtl::OUString aDesktopEnvironment;
- if ( (aValue >>= aDesktopEnvironment) && (aDesktopEnvironment.equalsAscii("KDE")) && (KApplication::kApplication() != NULL) )
- return * KDEBackend::createInstance(xContext);
- }
-
- return uno::Reference<uno::XInterface>();
-
- } catch (uno::RuntimeException e) {
- return uno::Reference<uno::XInterface>();
- }
-
-}
-
-//==============================================================================
-
-static const cppu::ImplementationEntry kImplementations_entries[] =
-{
- {
- createKDEBackend,
- KDEBackend::getBackendName,
- KDEBackend::getBackendServiceNames,
- cppu::createSingleComponentFactory,
- NULL,
- 0
- },
- { NULL, NULL, NULL, NULL, NULL, 0 }
-} ;
-//------------------------------------------------------------------------------
-
-extern "C" void SAL_CALL component_getImplementationEnvironment(
- const sal_Char **aEnvTypeName,
- uno_Environment **) {
- *aEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ;
-}
-
-//------------------------------------------------------------------------------
-
-extern "C" sal_Bool SAL_CALL component_writeInfo(void *,
- void *pRegistryKey) {
-
- using namespace ::com::sun::star::registry;
- if (pRegistryKey)
- {
- try
- {
- uno::Reference< XRegistryKey > xImplKey = static_cast< XRegistryKey* >( pRegistryKey )->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + KDEBackend::getBackendName()
- );
-
- // Register associated service names
- uno::Reference< XRegistryKey > xServicesKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES") )
- );
-
- uno::Sequence<rtl::OUString> sServiceNames = KDEBackend::getBackendServiceNames();
- for (sal_Int32 i = 0 ; i < sServiceNames.getLength() ; ++ i)
- xServicesKey->createKey(sServiceNames[i]);
-
- return sal_True;
- }
-
- catch( InvalidRegistryException& )
- {
- OSL_ENSURE(sal_False, "InvalidRegistryException caught");
- }
- }
-
- return sal_False;
-}
-
-//------------------------------------------------------------------------------
-
-extern "C" void *component_getFactory(const sal_Char *aImplementationName,
- void *aServiceManager,
- void *aRegistryKey) {
-
- return cppu::component_getFactoryHelper(
- aImplementationName,
- aServiceManager,
- aRegistryKey,
- kImplementations_entries) ;
-}
-//------------------------------------------------------------------------------
diff --git a/shell/source/backends/kde4be/kde4commonlayer.cxx b/shell/source/backends/kde4be/kde4commonlayer.cxx
deleted file mode 100644
index 1ce844672225..000000000000
--- a/shell/source/backends/kde4be/kde4commonlayer.cxx
+++ /dev/null
@@ -1,157 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kde4commonlayer.cxx,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-
-#include "kde4commonlayer.hxx"
-
-#include <kemailsettings.h>
-#include <kglobalsettings.h>
-
-#include <QFont>
-
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#include <com/sun/star/uno/Sequence.hxx>
-
-#define SPACE ' '
-
-//==============================================================================
-
-KDECommonLayer::KDECommonLayer(const uno::Reference<uno::XComponentContext>& xContext)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL KDECommonLayer::readData( const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException, lang::NullPointerException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- if( ! m_xLayerContentDescriber.is() )
- {
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"
- ) ), static_cast < backend::XLayer * > (this) );
- }
-
- uno::Sequence<backend::PropertyInfo> aPropInfoList(3);
- sal_Int32 nProperties = 0;
-
- // Email client settings
- KEMailSettings aEmailSettings;
- QString aClientProgram;
- ::rtl::OUString sClientProgram;
-
- aClientProgram = aEmailSettings.getSetting( KEMailSettings::ClientProgram );
- if ( aClientProgram.isEmpty() )
- aClientProgram = "kmail";
- else
- aClientProgram = aClientProgram.section(SPACE, 0, 0);
- sClientProgram = (const sal_Unicode *) aClientProgram.utf16();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Common/ExternalMailer/Program") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sClientProgram );
-
- // Source code font settings
- QFont aFixedFont;
- QString aFontName;
- :: rtl::OUString sFontName;
- short nFontHeight;
-
- aFixedFont = KGlobalSettings::fixedFont();
- aFontName = aFixedFont.family();
- sFontName = (const sal_Unicode *) aFontName.utf16();
- nFontHeight = aFixedFont.pointSize();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Common/Font/SourceViewFont/FontName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sFontName );
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Common/Font/SourceViewFont/FontHeight") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "short" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( nFontHeight );
-
- if( nProperties > 0 )
- {
- aPropInfoList.realloc(nProperties);
- m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList);
- }
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL KDECommonLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- // Return the value as timestamp to avoid regenerating the binary cache
- // on each office launch.
-
- KEMailSettings aEmailSettings;
- QString aClientProgram = aEmailSettings.getSetting( KEMailSettings::ClientProgram );
- aClientProgram = aClientProgram.section(SPACE, 0, 0);
-
- QString aFixedFont = KGlobalSettings::fixedFont().toString();
-
- ::rtl::OUString sTimeStamp,
- sep( RTL_CONSTASCII_USTRINGPARAM( "$" ) );
-
- sTimeStamp = (const sal_Unicode *) aClientProgram.utf16();
- sTimeStamp += sep;
- sTimeStamp += (const sal_Unicode *) aFixedFont.utf16();
-
- return sTimeStamp;
-}
diff --git a/shell/source/backends/kde4be/kde4commonlayer.hxx b/shell/source/backends/kde4be/kde4commonlayer.hxx
deleted file mode 100644
index 9ce4cd4dc962..000000000000
--- a/shell/source/backends/kde4be/kde4commonlayer.hxx
+++ /dev/null
@@ -1,51 +0,0 @@
-#pragma once
-
-#include "kde4backend.hxx"
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#include <com/sun/star/util/XTimeStamped.hpp>
-#include <cppuhelper/implbase2.hxx>
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interface for the KDE values mapped into
- the org.openoffice.Office.Common configuration component.
- */
-class KDECommonLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
-public :
- /**
- Constructor given the component context
-
- @param xContext The component context
- */
-
- KDECommonLayer(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XLayer
- virtual void SAL_CALL readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException) ;
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- protected:
-
- /** Destructor */
- ~KDECommonLayer(void) {}
-
- private :
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber ;
-};
diff --git a/shell/source/backends/kde4be/kde4inetlayer.cxx b/shell/source/backends/kde4be/kde4inetlayer.cxx
deleted file mode 100644
index bc661a093fb7..000000000000
--- a/shell/source/backends/kde4be/kde4inetlayer.cxx
+++ /dev/null
@@ -1,255 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kde4inetlayer.cxx,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-
-#include <kprotocolmanager.h>
-
-#include "kde4inetlayer.hxx"
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#include <com/sun/star/uno/Sequence.hxx>
-
-#define COMMA ','
-#define SEMI_COLON ';'
-
-//==============================================================================
-
-KDEInetLayer::KDEInetLayer(const uno::Reference<uno::XComponentContext>& xContext)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL KDEInetLayer::readData( const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException, lang::NullPointerException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- if( ! m_xLayerContentDescriber.is() )
- {
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"
- ) ), static_cast < backend::XLayer * > (this) );
- }
-
- uno::Sequence<backend::PropertyInfo> aPropInfoList(8);
- sal_Int32 nProperties = 0;
-
- switch ( KProtocolManager::proxyType() )
- {
- case KProtocolManager::ManualProxy: // Proxies are manually configured
- setProxy(aPropInfoList, nProperties, 1,
- KProtocolManager::noProxyFor(),
- KProtocolManager::proxyFor( "HTTP" ),
- KProtocolManager::proxyFor( "FTP" ),
- KProtocolManager::proxyFor( "HTTPS" ));
- break;
- case KProtocolManager::PACProxy: // A proxy configuration URL has been given
- case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
- case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
-// In such cases, the proxy address is not stored in KDE, but determined dynamically.
-// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
-// The best we can do here is to ask the current value for a given address.
- setProxy(aPropInfoList, nProperties, 1,
- KProtocolManager::noProxyFor(),
- KProtocolManager::proxyForUrl( KUrl("http://www.openoffice.org") ),
- KProtocolManager::proxyForUrl( KUrl("ftp://ftp.openoffice.org") ),
- KProtocolManager::proxyForUrl( KUrl("https://www.openoffice.org") ));
- break;
- default: // No proxy is used
- setProxy(aPropInfoList, nProperties, 0);
- }
-
- if ( nProperties > 0 )
- {
- aPropInfoList.realloc(nProperties);
- m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList);
- }
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL KDEInetLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- // Return the value as timestamp to avoid regenerating the binary cache
- // on each office launch.
-
- QString aProxyType, aNoProxyFor, aHTTPProxy, aHTTPSProxy, aFTPProxy;
-
- switch ( KProtocolManager::proxyType() )
- {
- case KProtocolManager::ManualProxy:
- aProxyType = '1';
- aNoProxyFor = KProtocolManager::noProxyFor();
- aHTTPProxy = KProtocolManager::proxyFor( "HTTP" );
- aHTTPProxy = KProtocolManager::proxyFor( "HTTPS" );
- aFTPProxy = KProtocolManager::proxyFor( "FTP" );
- break;
- case KProtocolManager::PACProxy:
- case KProtocolManager::WPADProxy:
- case KProtocolManager::EnvVarProxy:
- aProxyType = '1';
- aNoProxyFor = KProtocolManager::noProxyFor();
- aHTTPProxy = KProtocolManager::proxyForUrl( KUrl("http://www.openoffice.org") );
- aHTTPSProxy = KProtocolManager::proxyForUrl( KUrl("https://www.openoffice.org") );
- aFTPProxy = KProtocolManager::proxyForUrl( KUrl("ftp://ftp.openoffice.org") );
- break;
- default:
- aProxyType = '0';
- }
-
- ::rtl::OUString sTimeStamp,
- sep( RTL_CONSTASCII_USTRINGPARAM( "$" ) );
-
- sTimeStamp = (const sal_Unicode *) aProxyType.utf16();
- sTimeStamp += sep;
- sTimeStamp += (const sal_Unicode *) aNoProxyFor.utf16();
- sTimeStamp += sep;
- sTimeStamp += (const sal_Unicode *) aHTTPProxy.utf16();
- sTimeStamp += sep;
- sTimeStamp += (const sal_Unicode *) aHTTPSProxy.utf16();
- sTimeStamp += sep;
- sTimeStamp += (const sal_Unicode *) aFTPProxy.utf16();
-
- return sTimeStamp;
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL KDEInetLayer::setProxy
- (uno::Sequence<backend::PropertyInfo> &aPropInfoList, sal_Int32 &nProperties,
- int nProxyType, const QString &aNoProxy, const QString &aHTTPProxy, const QString &aFTPProxy, const QString &aHTTPSProxy ) const
-{
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetProxyType") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( (sal_Int32) nProxyType );
-
- if (nProxyType == 0) return;
-
- if ( !aNoProxy.isEmpty() )
- {
- QString aNoProxyFor(aNoProxy);
- ::rtl::OUString sNoProxyFor;
-
- aNoProxyFor = aNoProxyFor.replace( COMMA, SEMI_COLON );
- sNoProxyFor = (const sal_Unicode *) aNoProxyFor.utf16();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetNoProxy") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sNoProxyFor );
- }
-
- if ( !aHTTPProxy.isEmpty() )
- {
- KUrl aProxy(aHTTPProxy);
- ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().utf16();
- sal_Int32 nPort = aProxy.port();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sProxy );
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( nPort );
- }
-
- if ( !aHTTPSProxy.isEmpty() )
- {
- KUrl aProxy(aHTTPSProxy);
- ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().utf16();
- sal_Int32 nPort = aProxy.port();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPSProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sProxy );
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPSProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( nPort );
- }
-
- if ( !aFTPProxy.isEmpty() )
- {
- KUrl aProxy(aFTPProxy);
- ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().utf16();
- sal_Int32 nPort = aProxy.port();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetFTPProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sProxy );
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetFTPProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( nPort );
- }
-}
-
diff --git a/shell/source/backends/kde4be/kde4inetlayer.hxx b/shell/source/backends/kde4be/kde4inetlayer.hxx
deleted file mode 100644
index 64d00fec45fc..000000000000
--- a/shell/source/backends/kde4be/kde4inetlayer.hxx
+++ /dev/null
@@ -1,59 +0,0 @@
-#pragma once
-
-#include <QString>
-
-#include "kde4backend.hxx"
-
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#include <com/sun/star/util/XTimeStamped.hpp>
-#include <cppuhelper/implbase2.hxx>
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interface for the KDE values mapped into
- the org.openoffice.Inet configuration component.
- */
-class KDEInetLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
-public :
- /**
- Constructor given the component context
-
- @param xContext The component context
- */
-
- KDEInetLayer(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XLayer
- virtual void SAL_CALL readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException) ;
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- protected:
-
- /** Destructor */
- ~KDEInetLayer(void) {}
-
-private :
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber ;
-
- void SAL_CALL setProxy
- (uno::Sequence<backend::PropertyInfo> &aPropInfoList, sal_Int32 &nProperties,
- int nProxyType, const QString &aNoProxyfor = QString(),
- const QString &aHTTPProxy = QString(), const QString &aFTPProxy = QString(), const QString &aHTTPSProxy = QString()) const;
-};
diff --git a/shell/source/backends/kde4be/kde4pathslayer.cxx b/shell/source/backends/kde4be/kde4pathslayer.cxx
deleted file mode 100644
index 2511d0b57405..000000000000
--- a/shell/source/backends/kde4be/kde4pathslayer.cxx
+++ /dev/null
@@ -1,124 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kde4pathslayer.cxx,v $
- * $Revision: 1.5 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-
-#include "kde4pathslayer.hxx"
-
-#include <QString>
-#include <kglobalsettings.h>
-
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-
-#include <osl/security.hxx>
-#include <osl/file.hxx>
-#include <com/sun/star/uno/Sequence.hxx>
-
-#define SPACE ' '
-
-//==============================================================================
-
-KDEPathsLayer::KDEPathsLayer(const uno::Reference<uno::XComponentContext>& xContext)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL KDEPathsLayer::readData( const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException, lang::NullPointerException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- if( ! m_xLayerContentDescriber.is() )
- {
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"
- ) ), static_cast < backend::XLayer * > (this) );
- }
-
- uno::Sequence<backend::PropertyInfo> aPropInfoList(1);
- sal_Int32 nProperties = 0;
-
- QString aDocumentsDir( KGlobalSettings::documentPath() );
- rtl::OUString sDocumentsDir;
- rtl::OUString sDocumentsURL;
- if ( aDocumentsDir.endsWith(QChar('/')) )
- aDocumentsDir.truncate ( aDocumentsDir.length() - 1 );
- sDocumentsDir = (const sal_Unicode *) aDocumentsDir.utf16();
- osl_getFileURLFromSystemPath( sDocumentsDir.pData, &sDocumentsURL.pData );
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Paths/Variables/Work") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sDocumentsURL );
-
- if( nProperties > 0 )
- {
- aPropInfoList.realloc(nProperties);
- m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList);
- }
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL KDEPathsLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- // Return the value as timestamp to avoid regenerating the binary cache
- // on each office launch.
-
- ::rtl::OUString sTimeStamp,
- sep( RTL_CONSTASCII_USTRINGPARAM( "$" ) );
-
- QString aDocumentsDir;
- aDocumentsDir = KGlobalSettings::documentPath();
-
- sTimeStamp += (const sal_Unicode *) aDocumentsDir.utf16();
-
- return sTimeStamp;
-}
diff --git a/shell/source/backends/kde4be/kde4pathslayer.hxx b/shell/source/backends/kde4be/kde4pathslayer.hxx
deleted file mode 100644
index 40d31a73c4f9..000000000000
--- a/shell/source/backends/kde4be/kde4pathslayer.hxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kde4pathslayer.hxx,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#pragma once
-
-#include "kde4backend.hxx"
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#include <com/sun/star/util/XTimeStamped.hpp>
-
-#include <cppuhelper/implbase2.hxx>
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interface for the KDE values mapped into
- the org.openoffice.Office.Paths configuration component.
- */
-class KDEPathsLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
-public :
- /**
- Constructor given the component context
-
- @param xContext The component context
- */
-
- KDEPathsLayer(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XLayer
- virtual void SAL_CALL readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException) ;
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- protected:
-
- /** Destructor */
- ~KDEPathsLayer(void) {}
-
- private :
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber ;
-};
diff --git a/shell/source/backends/kde4be/kde4vcllayer.cxx b/shell/source/backends/kde4be/kde4vcllayer.cxx
deleted file mode 100644
index 780c3e4e7ce1..000000000000
--- a/shell/source/backends/kde4be/kde4vcllayer.cxx
+++ /dev/null
@@ -1,115 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kde4vcllayer.cxx,v $
- * $Revision: 1.5 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-
-#include "kde4vcllayer.hxx"
-
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#include <com/sun/star/uno/Sequence.hxx>
-
-//==============================================================================
-
-KDEVCLLayer::KDEVCLLayer(const uno::Reference<uno::XComponentContext>& xContext)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL KDEVCLLayer::readData( const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException, lang::NullPointerException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- if( ! m_xLayerContentDescriber.is() )
- {
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"
- ) ), static_cast < backend::XLayer * > (this) );
- }
-
- uno::Sequence<backend::PropertyInfo> aPropInfoList(1);
-
-/*
- Commenting out, does not make much sense without an accessibility bridge
-===========================================================================
-#if defined(QT_ACCESSIBILITY_SUPPORT)
-// Accessibility tools under Qt for UNIX are available starting with Qt 4.0
- int nVersionMajor = 0;
- const char *q = qVersion(); // "3.1.0" for example
- while ('0' <= *q && *q <= '9')
- nVersionMajor = nVersionMajor * 10 + *q++ - '0';
- sal_Bool ATToolSupport = (sal_Bool) (nVersionMajor >= 4);
-#else
- sal_Bool ATToolSupport = sal_False;
-#endif
-===========================================================================
- End of commented out section
-*/ sal_Bool ATToolSupport = sal_False;
-
- aPropInfoList[0].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.VCL/Settings/Accessibility/EnableATToolSupport") );
- aPropInfoList[0].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[0].Protected = sal_False;
- aPropInfoList[0].Value = uno::makeAny( rtl::OUString::valueOf( ATToolSupport ) );
-
- m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList);
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL KDEVCLLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- // Return the value as timestamp to avoid regenerating the binary cache
- // on each office launch.
-
- ::rtl::OUString sTimeStamp(
- RTL_CONSTASCII_USTRINGPARAM( "FALSE" ) );
-
- return sTimeStamp;
-}
diff --git a/shell/source/backends/kde4be/kde4vcllayer.hxx b/shell/source/backends/kde4be/kde4vcllayer.hxx
deleted file mode 100644
index 16036ee89122..000000000000
--- a/shell/source/backends/kde4be/kde4vcllayer.hxx
+++ /dev/null
@@ -1,53 +0,0 @@
-#pragma once
-
-#include "kde4backend.hxx"
-
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#include <com/sun/star/util/XTimeStamped.hpp>
-
-#include <cppuhelper/implbase2.hxx>
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interface for the KDE values mapped into
- the org.openoffice.VCL configuration component.
- */
-class KDEVCLLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
-public :
- /**
- Constructor given the component context
-
- @param xContext The component context
- */
-
- KDEVCLLayer(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XLayer
- virtual void SAL_CALL readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException) ;
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- protected:
-
- /** Destructor */
- ~KDEVCLLayer(void) {}
-
- private :
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber ;
-};
diff --git a/shell/source/backends/kde4be/makefile.mk b/shell/source/backends/kde4be/makefile.mk
index 6f92762e5ae1..560f06882c64 100644
--- a/shell/source/backends/kde4be/makefile.mk
+++ b/shell/source/backends/kde4be/makefile.mk
@@ -35,11 +35,7 @@ TARGET=kde4be
LIBTARGET=NO
ENABLE_EXCEPTIONS=TRUE
-
-COMP1TYPELIST=$(TARGET)
-COMPRDB=$(SOLARBINDIR)$/types.rdb
-UNOUCROUT=$(OUT)$/inc$/$(TARGET)
-INCPRE=$(UNOUCROUT)
+VISIBILITY_HIDDEN=TRUE
# --- Settings ---
@@ -64,12 +60,8 @@ CFLAGS+=$(KDE4_CFLAGS)
# --- Files ---
SLOFILES=\
- $(SLO)$/kde4backend.obj \
- $(SLO)$/kde4commonlayer.obj \
- $(SLO)$/kde4inetlayer.obj \
- $(SLO)$/kde4vcllayer.obj \
- $(SLO)$/kde4pathslayer.obj \
- $(SLO)$/kde4becdef.obj
+ $(SLO)$/kde4access.obj \
+ $(SLO)$/kde4backend.obj
SHL1NOCHECK=TRUE
SHL1TARGET=$(TARGET)1.uno
@@ -82,8 +74,7 @@ SHL1STDLIBS= \
$(CPPULIB) \
$(SALLIB) \
$(KDE4_LIBS) -lkio
-
-SHL1VERSIONMAP=exports.map
+
SHL1DEF=$(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
diff --git a/shell/source/backends/kdebe/exports.map b/shell/source/backends/kdebe/exports.map
deleted file mode 100644
index ba501f9ae076..000000000000
--- a/shell/source/backends/kdebe/exports.map
+++ /dev/null
@@ -1,10 +0,0 @@
-UDK_3_0_0 {
- global:
- GetVersionInfo;
- component_getImplementationEnvironment;
- component_getFactory;
- component_writeInfo;
-
- local:
- *;
-};
diff --git a/shell/source/backends/kdebe/kdeaccess.cxx b/shell/source/backends/kdebe/kdeaccess.cxx
new file mode 100644
index 000000000000..dcb1df9c95b0
--- /dev/null
+++ b/shell/source/backends/kdebe/kdeaccess.cxx
@@ -0,0 +1,316 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#include "precompiled_shell.hxx"
+#include "sal/config.h"
+
+#include "com/sun/star/uno/Any.hxx"
+#include "cppu/unotype.hxx"
+#include "osl/diagnose.h"
+#include "osl/file.h"
+#include "rtl/string.h"
+#include "rtl/ustring.hxx"
+#include "vcl/kde_headers.h"
+
+#include "kdeaccess.hxx"
+
+#define SPACE ' '
+#define COMMA ','
+#define SEMI_COLON ';'
+
+namespace kdeaccess {
+
+namespace {
+
+namespace css = com::sun::star ;
+namespace uno = css::uno ;
+
+}
+
+css::beans::Optional< css::uno::Any > getValue(rtl::OUString const & id) {
+ if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ExternalMailer"))) {
+ KEMailSettings aEmailSettings;
+ QString aClientProgram;
+ ::rtl::OUString sClientProgram;
+
+ aClientProgram = aEmailSettings.getSetting( KEMailSettings::ClientProgram );
+ if ( aClientProgram.isEmpty() )
+ aClientProgram = "kmail";
+ else
+ aClientProgram = aClientProgram.section(SPACE, 0, 0);
+ sClientProgram = (const sal_Unicode *) aClientProgram.ucs2();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sClientProgram ) );
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight")))
+ {
+ QFont aFixedFont;
+ short nFontHeight;
+
+ aFixedFont = KGlobalSettings::fixedFont();
+ nFontHeight = aFixedFont.pointSize();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( nFontHeight ) );
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")))
+ {
+ QFont aFixedFont;
+ QString aFontName;
+ :: rtl::OUString sFontName;
+
+ aFixedFont = KGlobalSettings::fixedFont();
+ aFontName = aFixedFont.family();
+ sFontName = (const sal_Unicode *) aFontName.ucs2();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sFontName ) );
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")))
+ {
+ /* does not make much sense without an accessibility bridge */
+ sal_Bool ATToolSupport = sal_False;
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( rtl::OUString::valueOf( ATToolSupport ) ) );
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")))
+ {
+ QString aDocumentsDir( KGlobalSettings::documentPath() );
+ rtl::OUString sDocumentsDir;
+ rtl::OUString sDocumentsURL;
+ if ( aDocumentsDir.endsWith(QChar('/')) )
+ aDocumentsDir.truncate ( aDocumentsDir.length() - 1 );
+ sDocumentsDir = (const sal_Unicode *) aDocumentsDir.ucs2();
+ osl_getFileURLFromSystemPath( sDocumentsDir.pData, &sDocumentsURL.pData );
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sDocumentsURL ) );
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")))
+ {
+ QString aFTPProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aFTPProxy = KProtocolManager::proxyFor( "FTP" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aFTPProxy.isEmpty() )
+ {
+ KURL aProxy(aFTPProxy);
+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sProxy ) );
+ }
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")))
+ {
+ QString aFTPProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aFTPProxy = KProtocolManager::proxyFor( "FTP" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aFTPProxy.isEmpty() )
+ {
+ KURL aProxy(aFTPProxy);
+ sal_Int32 nPort = aProxy.port();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( nPort ) );
+ }
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")))
+ {
+ QString aHTTPProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aHTTPProxy.isEmpty() )
+ {
+ KURL aProxy(aHTTPProxy);
+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sProxy ) );
+ }
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")))
+ {
+ QString aHTTPProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aHTTPProxy = KProtocolManager::proxyFor( "HTTP" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aHTTPProxy = KProtocolManager::proxyForURL( "http://http.openoffice.org" );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aHTTPProxy.isEmpty() )
+ {
+ KURL aProxy(aHTTPProxy);
+ sal_Int32 nPort = aProxy.port();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( nPort ) );
+ }
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")))
+ {
+ QString aHTTPSProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aHTTPSProxy.isEmpty() )
+ {
+ KURL aProxy(aHTTPSProxy);
+ ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sProxy ) );
+ }
+ } else if (id.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")))
+ {
+ QString aHTTPSProxy;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ aHTTPSProxy = KProtocolManager::proxyFor( "HTTPS" );
+ break;
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+// In such cases, the proxy address is not stored in KDE, but determined dynamically.
+// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
+// The best we can do here is to ask the current value for a given address.
+ aHTTPSProxy = KProtocolManager::proxyForURL( "https://https.openoffice.org" );
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aHTTPSProxy.isEmpty() )
+ {
+ KURL aProxy(aHTTPSProxy);
+ sal_Int32 nPort = aProxy.port();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( nPort ) );
+ }
+ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy"))) {
+ QString aNoProxyFor;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+ aNoProxyFor = KProtocolManager::noProxyFor();
+ break;
+ default: // No proxy is used
+ break;
+ }
+ if ( !aNoProxyFor.isEmpty() )
+ {
+ ::rtl::OUString sNoProxyFor;
+
+ aNoProxyFor = aNoProxyFor.replace( COMMA, SEMI_COLON );
+ sNoProxyFor = (const sal_Unicode *) aNoProxyFor.ucs2();
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( sNoProxyFor ) );
+ }
+ } else if (id.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"))) {
+ int nProxyType;
+ switch ( KProtocolManager::proxyType() )
+ {
+ case KProtocolManager::ManualProxy: // Proxies are manually configured
+ case KProtocolManager::PACProxy: // A proxy configuration URL has been given
+ case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
+ case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
+ nProxyType = 1;
+ break;
+ default: // No proxy is used
+ nProxyType = 0;
+ }
+ return css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( (sal_Int32) nProxyType ) );
+ } else {
+ OSL_ASSERT(false); // this cannot happen
+ }
+ return css::beans::Optional< css::uno::Any >();
+}
+
+}
diff --git a/shell/source/backends/kdebe/kdeaccess.hxx b/shell/source/backends/kdebe/kdeaccess.hxx
new file mode 100644
index 000000000000..5e61f5a224e0
--- /dev/null
+++ b/shell/source/backends/kdebe/kdeaccess.hxx
@@ -0,0 +1,49 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
+#ifndef INCLUDED_SHELL_SOURCE_BACKENDS_KDEBE_KDEACCESS_HXX
+#define INCLUDED_SHELL_SOURCE_BACKENDS_KDEBE_KDEACCESS_HXX
+
+#include "sal/config.h"
+
+#include "com/sun/star/beans/Optional.hpp"
+
+namespace com { namespace sun { namespace star { namespace uno {
+ class Any;
+} } } }
+namespace rtl { class OUString; }
+
+namespace kdeaccess {
+
+com::sun::star::beans::Optional< com::sun::star::uno::Any > getValue(
+ rtl::OUString const & id);
+
+}
+
+#endif
diff --git a/shell/source/backends/kdebe/kdebackend.cxx b/shell/source/backends/kdebe/kdebackend.cxx
index 5f1ab4e7bc0d..743971a0d9e2 100644
--- a/shell/source/backends/kdebe/kdebackend.cxx
+++ b/shell/source/backends/kdebe/kdebackend.cxx
@@ -1,158 +1,259 @@
/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kdebackend.cxx,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* $RCSfile: code,v $
+*
+* $Revision: 1.4 $
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+************************************************************************/
+
#include "precompiled_shell.hxx"
+#include "sal/config.h"
-#include "kdebackend.hxx"
-#include "kdecommonlayer.hxx"
-#include "kdeinetlayer.hxx"
-#include "kdevcllayer.hxx"
-#include "kdepathslayer.hxx"
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/beans/Optional.hpp"
+#include "com/sun/star/beans/PropertyVetoException.hpp"
+#include "com/sun/star/beans/UnknownPropertyException.hpp"
+#include "com/sun/star/beans/XPropertyChangeListener.hpp"
+#include "com/sun/star/beans/XPropertySet.hpp"
+#include "com/sun/star/beans/XPropertySetInfo.hpp"
+#include "com/sun/star/beans/XVetoableChangeListener.hpp"
+#include "com/sun/star/lang/IllegalArgumentException.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/lang/XMultiComponentFactory.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/WrappedTargetException.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XCurrentContext.hpp"
+#include "cppuhelper/factory.hxx"
+#include "cppuhelper/implbase2.hxx"
+#include "cppuhelper/implementationentry.hxx"
+#include "cppuhelper/weak.hxx"
+#include "rtl/string.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+#include "uno/current_context.hxx"
+#include "uno/lbnames.h"
+#include "vcl/kde_headers.h"
-//------------------------------------------------------------------------------
+#include "kdeaccess.hxx"
-KDEBackend* KDEBackend::mInstance= 0;
+namespace {
-KDEBackend* KDEBackend::createInstance(const uno::Reference<uno::XComponentContext>& xContext)
-{
- if (mInstance == 0)
- {
- mInstance = new KDEBackend (xContext);
- }
+namespace css = com::sun::star;
- return mInstance;
+rtl::OUString SAL_CALL getServiceImplementationName() {
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.comp.configuration.backend.KDEBackend"));
}
-//------------------------------------------------------------------------------
+css::uno::Sequence< rtl::OUString > SAL_CALL getServiceSupportedServiceNames() {
+ rtl::OUString name(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.backend.KDEBackend"));
+ return css::uno::Sequence< rtl::OUString >(&name, 1);
+}
-KDEBackend::KDEBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException)
- : BackendBase(mMutex), m_xContext(xContext)
+class Service:
+ public cppu::WeakImplHelper2<
+ css::lang::XServiceInfo, css::beans::XPropertySet >,
+ private boost::noncopyable
{
-}
+public:
+ Service();
-//------------------------------------------------------------------------------
+private:
+ virtual ~Service() {}
-KDEBackend::~KDEBackend(void)
-{
-}
+ virtual rtl::OUString SAL_CALL getImplementationName()
+ throw (css::uno::RuntimeException)
+ { return getServiceImplementationName(); }
-//------------------------------------------------------------------------------
+ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName)
+ throw (css::uno::RuntimeException)
+ { return ServiceName == getSupportedServiceNames()[0]; }
-uno::Reference<backend::XLayer> SAL_CALL KDEBackend::getLayer(
- const rtl::OUString& aComponent, const rtl::OUString& /* aTimestamp */)
- throw (backend::BackendAccessException, lang::IllegalArgumentException)
-{
- uno::Reference<backend::XLayer> xLayer;
+ virtual css::uno::Sequence< rtl::OUString > SAL_CALL
+ getSupportedServiceNames() throw (css::uno::RuntimeException)
+ { return getServiceSupportedServiceNames(); }
- if( aComponent.equalsAscii("org.openoffice.Office.Common" ) )
- {
- xLayer = new KDECommonLayer(m_xContext);
- }
- else if( aComponent.equalsAscii("org.openoffice.Inet" ) )
- {
- xLayer = new KDEInetLayer(m_xContext);
- }
- else if( aComponent.equalsAscii("org.openoffice.VCL" ) )
- {
- xLayer = new KDEVCLLayer(m_xContext);
- }
- else if( aComponent.equalsAscii("org.openoffice.Office.Paths" ) )
- {
- xLayer = new KDEPathsLayer(m_xContext);
- }
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
+ getPropertySetInfo() throw (css::uno::RuntimeException)
+ { return css::uno::Reference< css::beans::XPropertySetInfo >(); }
- return xLayer;
-}
+ virtual void SAL_CALL setPropertyValue(
+ rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
-//------------------------------------------------------------------------------
+ virtual css::uno::Any SAL_CALL getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
-uno::Reference<backend::XUpdatableLayer> SAL_CALL
-KDEBackend::getUpdatableLayer(const rtl::OUString& /* aComponent */)
- throw (backend::BackendAccessException,lang::NoSupportException,
- lang::IllegalArgumentException)
-{
- throw lang::NoSupportException( rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("KDEBackend: No Update Operation allowed, Read Only access") ),
- *this) ;
-}
+ virtual void SAL_CALL addPropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
-//------------------------------------------------------------------------------
+ virtual void SAL_CALL removePropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
-rtl::OUString SAL_CALL KDEBackend::getBackendName(void)
-{
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.configuration.backend.KDEBackend") );
-}
+ virtual void SAL_CALL addVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
-//------------------------------------------------------------------------------
+ virtual void SAL_CALL removeVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
-rtl::OUString SAL_CALL KDEBackend::getImplementationName(void)
- throw (uno::RuntimeException)
-{
- return getBackendName() ;
-}
+ bool enabled_;
+};
-//------------------------------------------------------------------------------
+Service::Service(): enabled_(false) {
+ css::uno::Reference< css::uno::XCurrentContext > context(
+ css::uno::getCurrentContext());
+ if (context.is()) {
+ rtl::OUString desktop;
+ context->getValueByName(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("system.desktop-environment"))) >>=
+ desktop;
+ enabled_ = desktop.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("KDE")) &&
+ KApplication::kApplication() != 0;
+ }
+}
-uno::Sequence<rtl::OUString> SAL_CALL KDEBackend::getBackendServiceNames(void)
+void Service::setPropertyValue(rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
{
- uno::Sequence<rtl::OUString> aServices(1) ;
- aServices[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.KDEBackend")) ;
-
- return aServices ;
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")),
+ static_cast< cppu::OWeakObject * >(this), -1);
}
-//------------------------------------------------------------------------------
+css::uno::Any Service::getPropertyValue(rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ExternalMailer")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SourceViewFontName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy")) ||
+ PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetProxyType")))
+ {
+ return css::uno::makeAny(
+ enabled_
+ ? kdeaccess::getValue(PropertyName)
+ : css::beans::Optional< css::uno::Any >());
+ }
+ throw css::beans::UnknownPropertyException(
+ PropertyName, static_cast< cppu::OWeakObject * >(this));
+}
-sal_Bool SAL_CALL KDEBackend::supportsService(const rtl::OUString& aServiceName)
- throw (uno::RuntimeException)
+css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance(
+ css::uno::Reference< css::uno::XComponentContext > const &)
{
- uno::Sequence< rtl::OUString > const svc = getBackendServiceNames();
+ return static_cast< cppu::OWeakObject * >(new Service);
+}
- for(sal_Int32 i = 0; i < svc.getLength(); ++i )
- if(svc[i] == aServiceName)
- return true;
+static cppu::ImplementationEntry const services[] = {
+ { &createInstance, &getServiceImplementationName,
+ &getServiceSupportedServiceNames, &cppu::createSingleComponentFactory, 0,
+ 0 },
+ { 0, 0, 0, 0, 0, 0 }
+};
- return false;
}
-//------------------------------------------------------------------------------
+extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
+ char const * pImplName, void * pServiceManager, void * pRegistryKey)
+{
+ return cppu::component_getFactoryHelper(
+ pImplName, pServiceManager, pRegistryKey, services);
+}
-uno::Sequence<rtl::OUString>
-SAL_CALL KDEBackend::getSupportedServiceNames(void)
- throw (uno::RuntimeException)
+extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL
+component_getImplementationEnvironment(
+ char const ** ppEnvTypeName, uno_Environment **)
{
- return getBackendServiceNames() ;
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
}
-// ---------------------------------------------------------------------------------------
+extern "C" SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo(
+ void * pServiceManager, void * pRegistryKey)
+{
+ return component_writeInfoHelper(pServiceManager, pRegistryKey, services);
+}
diff --git a/shell/source/backends/kdebe/kdebackend.hxx b/shell/source/backends/kdebe/kdebackend.hxx
deleted file mode 100644
index 57cb2338a5bf..000000000000
--- a/shell/source/backends/kdebe/kdebackend.hxx
+++ /dev/null
@@ -1,128 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kdebackend.hxx,v $
- * $Revision: 1.4 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef KDEBACKEND_HXX_
-#define KDEBACKEND_HXX_
-
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XSCHEMASUPPLIER_HPP_
-#include <com/sun/star/configuration/backend/XSingleLayerStratum.hpp>
-#endif
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/configuration/InvalidBootstrapFileException.hpp>
-#include <com/sun/star/configuration/backend/CannotConnectException.hpp>
-#include <cppuhelper/compbase2.hxx>
-
-#ifndef INCLUDED_MAP
-#include <map>
-#define INCLUDED_MAP
-#endif
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-
-
-//------------------------------------------------------------------------------
-typedef cppu::WeakComponentImplHelper2<backend::XSingleLayerStratum,
- lang::XServiceInfo> BackendBase ;
-
-/**
- Implements the SingleLayerStratum service for KDE access.
- */
-class KDEBackend : public BackendBase {
- public :
-
- static KDEBackend* createInstance(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XServiceInfo
- virtual rtl::OUString SAL_CALL getImplementationName( )
- throw (uno::RuntimeException) ;
-
- virtual sal_Bool SAL_CALL supportsService( const rtl::OUString& aServiceName )
- throw (uno::RuntimeException) ;
-
- virtual uno::Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames( )
- throw (uno::RuntimeException) ;
-
- /**
- Provides the implementation name.
-
- @return implementation name
- */
- static rtl::OUString SAL_CALL getBackendName(void) ;
-
- /**
- Provides the supported services names
-
- @return service names
- */
- static uno::Sequence<rtl::OUString> SAL_CALL getBackendServiceNames(void) ;
-
- //XSingleLayerStratum
- virtual uno::Reference<backend::XLayer> SAL_CALL
- getLayer( const rtl::OUString& aLayerId, const rtl::OUString& aTimestamp )
- throw (backend::BackendAccessException, lang::IllegalArgumentException) ;
-
- virtual uno::Reference<backend::XUpdatableLayer> SAL_CALL
- getUpdatableLayer( const rtl::OUString& aLayerId )
- throw (backend::BackendAccessException, lang::NoSupportException,
- lang::IllegalArgumentException) ;
-
- protected:
- /**
- Service constructor from a service factory.
-
- @param xContext component context
- */
- KDEBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException);
-
- /** Destructor */
- ~KDEBackend(void) ;
-
- private:
-
- /** Build KDE/OO mapping table */
- void initializeMappingTable ();
-
-
- /** The component context */
- uno::Reference<uno::XComponentContext> m_xContext;
-
- /** Mutex for reOOurces protection */
- osl::Mutex mMutex ;
-
- static KDEBackend* mInstance;
-};
-
-#endif // CONFIGMGR_LOCALBE_LOCALSINGLESTRATUM_HXX_
diff --git a/shell/source/backends/kdebe/kdebe.xml b/shell/source/backends/kdebe/kdebe.xml
deleted file mode 100644
index edb1beb0698e..000000000000
--- a/shell/source/backends/kdebe/kdebe.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name>kdebe</module-name>
- <component-description>
- <author> Éric Bischoff </author>
- <name>com.sun.star.comp.configuration.backend.KDEBackend</name>
- <description> The KDE configuration backend </description>
- <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
- <language>c++</language>
- <status value="beta"/>
- <supported-service>com.sun.star.comp.configuration.backend.KDEBackend</supported-service>
- <service-dependency>...</service-dependency>
- <type>com.sun.star.configuration.backend.XBackendChangesListener</type>
- <type>com.sun.star.configuration.backend.XBackendChangesNotifier</type>
- <type>com.sun.star.configuration.backend.XLayerHandler</type>
- <type>com.sun.star.configuration.backend.XSingleLayerStratum</type>
- <type>com.sun.star.lang.XMultiComponentFactory</type>
- <type>com.sun.star.lang.XServiceInfo</type>
- <type>com.sun.star.lang.XSingleComponentFactory</type>
- <type>com.sun.star.lang.XTypeProvider</type>
- <type>com.sun.star.uno.TypeClass</type>
- <type>com.sun.star.uno.XAggregation</type>
- <type>com.sun.star.uno.XComponentContext</type>
- <type>com.sun.star.uno.XCurrentContext</type>
- <type>com.sun.star.uno.XWeak</type>
- <type>com.sun.star.registry.XRegistryKey</type>
- </component-description>
- <project-build-dependency>cppuhelper</project-build-dependency>
- <project-build-dependency>cppu</project-build-dependency>
- <project-build-dependency>sal</project-build-dependency>
- <runtime-module-dependency>cppuhelper3$(COM)</runtime-module-dependency>
- <runtime-module-dependency>cppu3</runtime-module-dependency>
- <runtime-module-dependency>sal3</runtime-module-dependency>
-</module-description>
diff --git a/shell/source/backends/kdebe/kdebecdef.cxx b/shell/source/backends/kdebe/kdebecdef.cxx
deleted file mode 100644
index 4ef90e992b03..000000000000
--- a/shell/source/backends/kdebe/kdebecdef.cxx
+++ /dev/null
@@ -1,143 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kdebecdef.cxx,v $
- * $Revision: 1.8 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-#include "kdebackend.hxx"
-#include <com/sun/star/registry/XRegistryKey.hpp>
-
-#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_HXX_
-#include <cppuhelper/implementationentry.hxx>
-#endif
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <vcl/kde_headers.h>
-
-#include "uno/current_context.hxx"
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-
-//==============================================================================
-
-static uno::Reference<uno::XInterface> SAL_CALL createKDEBackend(const uno::Reference<uno::XComponentContext>& xContext)
-{
- try {
- uno::Reference< uno::XCurrentContext > xCurrentContext(uno::getCurrentContext());
-
- if (xCurrentContext.is())
- {
- uno::Any aValue = xCurrentContext->getValueByName(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "system.desktop-environment" ) ) );
-
- rtl::OUString aDesktopEnvironment;
- if ( (aValue >>= aDesktopEnvironment) && (aDesktopEnvironment.equalsAscii("KDE")) && (KApplication::kApplication() != NULL) )
- return * KDEBackend::createInstance(xContext);
- }
-
- return uno::Reference<uno::XInterface>();
-
- } catch (uno::RuntimeException e) {
- return uno::Reference<uno::XInterface>();
- }
-
-}
-
-//==============================================================================
-
-static const cppu::ImplementationEntry kImplementations_entries[] =
-{
- {
- createKDEBackend,
- KDEBackend::getBackendName,
- KDEBackend::getBackendServiceNames,
- cppu::createSingleComponentFactory,
- NULL,
- 0
- },
- { NULL, NULL, NULL, NULL, NULL, 0 }
-} ;
-//------------------------------------------------------------------------------
-
-extern "C" void SAL_CALL component_getImplementationEnvironment(
- const sal_Char **aEnvTypeName,
- uno_Environment **) {
- *aEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ;
-}
-
-//------------------------------------------------------------------------------
-
-extern "C" sal_Bool SAL_CALL component_writeInfo(void *,
- void *pRegistryKey) {
-
- using namespace ::com::sun::star::registry;
- if (pRegistryKey)
- {
- try
- {
- uno::Reference< XRegistryKey > xImplKey = static_cast< XRegistryKey* >( pRegistryKey )->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + KDEBackend::getBackendName()
- );
-
- // Register associated service names
- uno::Reference< XRegistryKey > xServicesKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES") )
- );
-
- uno::Sequence<rtl::OUString> sServiceNames = KDEBackend::getBackendServiceNames();
- for (sal_Int32 i = 0 ; i < sServiceNames.getLength() ; ++ i)
- xServicesKey->createKey(sServiceNames[i]);
-
- return sal_True;
- }
-
- catch( InvalidRegistryException& )
- {
- OSL_ENSURE(sal_False, "InvalidRegistryException caught");
- }
- }
-
- return sal_False;
-}
-
-//------------------------------------------------------------------------------
-
-extern "C" void *component_getFactory(const sal_Char *aImplementationName,
- void *aServiceManager,
- void *aRegistryKey) {
-
- return cppu::component_getFactoryHelper(
- aImplementationName,
- aServiceManager,
- aRegistryKey,
- kImplementations_entries) ;
-}
-//------------------------------------------------------------------------------
diff --git a/shell/source/backends/kdebe/kdecommonlayer.cxx b/shell/source/backends/kdebe/kdecommonlayer.cxx
deleted file mode 100644
index d2347f7becdb..000000000000
--- a/shell/source/backends/kdebe/kdecommonlayer.cxx
+++ /dev/null
@@ -1,153 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kdecommonlayer.cxx,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-#include "kdecommonlayer.hxx"
-#include <vcl/kde_headers.h>
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <com/sun/star/uno/Sequence.hxx>
-
-#define SPACE ' '
-
-//==============================================================================
-
-KDECommonLayer::KDECommonLayer(const uno::Reference<uno::XComponentContext>& xContext)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL KDECommonLayer::readData( const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException, lang::NullPointerException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- if( ! m_xLayerContentDescriber.is() )
- {
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"
- ) ), static_cast < backend::XLayer * > (this) );
- }
-
- uno::Sequence<backend::PropertyInfo> aPropInfoList(3);
- sal_Int32 nProperties = 0;
-
- // Email client settings
- KEMailSettings aEmailSettings;
- QString aClientProgram;
- ::rtl::OUString sClientProgram;
-
- aClientProgram = aEmailSettings.getSetting( KEMailSettings::ClientProgram );
- if ( aClientProgram.isEmpty() )
- aClientProgram = "kmail";
- else
- aClientProgram = aClientProgram.section(SPACE, 0, 0);
- sClientProgram = (const sal_Unicode *) aClientProgram.ucs2();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Common/ExternalMailer/Program") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sClientProgram );
-
- // Source code font settings
- QFont aFixedFont;
- QString aFontName;
- :: rtl::OUString sFontName;
- short nFontHeight;
-
- aFixedFont = KGlobalSettings::fixedFont();
- aFontName = aFixedFont.family();
- sFontName = (const sal_Unicode *) aFontName.ucs2();
- nFontHeight = aFixedFont.pointSize();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Common/Font/SourceViewFont/FontName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sFontName );
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Common/Font/SourceViewFont/FontHeight") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "short" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( nFontHeight );
-
- if( nProperties > 0 )
- {
- aPropInfoList.realloc(nProperties);
- m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList);
- }
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL KDECommonLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- // Return the value as timestamp to avoid regenerating the binary cache
- // on each office launch.
-
- KEMailSettings aEmailSettings;
- QString aClientProgram = aEmailSettings.getSetting( KEMailSettings::ClientProgram );
- aClientProgram = aClientProgram.section(SPACE, 0, 0);
-
- QString aFixedFont = KGlobalSettings::fixedFont().toString();
-
- ::rtl::OUString sTimeStamp,
- sep( RTL_CONSTASCII_USTRINGPARAM( "$" ) );
-
- sTimeStamp = (const sal_Unicode *) aClientProgram.ucs2();
- sTimeStamp += sep;
- sTimeStamp += (const sal_Unicode *) aFixedFont.ucs2();
-
- return sTimeStamp;
-}
diff --git a/shell/source/backends/kdebe/kdecommonlayer.hxx b/shell/source/backends/kdebe/kdecommonlayer.hxx
deleted file mode 100644
index e61661589145..000000000000
--- a/shell/source/backends/kdebe/kdecommonlayer.hxx
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef KDECOMMONLAYER_HXX_
-#define KDECOMMONLAYER_HXX_
-
-#include "kdebackend.hxx"
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <com/sun/star/util/XTimeStamped.hpp>
-#include <cppuhelper/implbase2.hxx>
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interface for the KDE values mapped into
- the org.openoffice.Office.Common configuration component.
- */
-class KDECommonLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
-public :
- /**
- Constructor given the component context
-
- @param xContext The component context
- */
-
- KDECommonLayer(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XLayer
- virtual void SAL_CALL readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException) ;
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- protected:
-
- /** Destructor */
- ~KDECommonLayer(void) {}
-
- private :
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber ;
- } ;
-
-#endif // KDECOMMONLAYER
diff --git a/shell/source/backends/kdebe/kdeinetlayer.cxx b/shell/source/backends/kdebe/kdeinetlayer.cxx
deleted file mode 100644
index 78cc0f4ba06d..000000000000
--- a/shell/source/backends/kdebe/kdeinetlayer.cxx
+++ /dev/null
@@ -1,254 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kdeinetlayer.cxx,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-#include "kdeinetlayer.hxx"
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <com/sun/star/uno/Sequence.hxx>
-
-#define COMMA ','
-#define SEMI_COLON ';'
-
-//==============================================================================
-
-KDEInetLayer::KDEInetLayer(const uno::Reference<uno::XComponentContext>& xContext)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL KDEInetLayer::readData( const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException, lang::NullPointerException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- if( ! m_xLayerContentDescriber.is() )
- {
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"
- ) ), static_cast < backend::XLayer * > (this) );
- }
-
- uno::Sequence<backend::PropertyInfo> aPropInfoList(8);
- sal_Int32 nProperties = 0;
-
- switch ( KProtocolManager::proxyType() )
- {
- case KProtocolManager::ManualProxy: // Proxies are manually configured
- setProxy(aPropInfoList, nProperties, 1,
- KProtocolManager::noProxyFor(),
- KProtocolManager::proxyFor( "HTTP" ),
- KProtocolManager::proxyFor( "FTP" ),
- KProtocolManager::proxyFor( "HTTPS" ));
- break;
- case KProtocolManager::PACProxy: // A proxy configuration URL has been given
- case KProtocolManager::WPADProxy: // A proxy should be automatically discovered
- case KProtocolManager::EnvVarProxy: // Use the proxy values set through environment variables
-// In such cases, the proxy address is not stored in KDE, but determined dynamically.
-// The proxy address may depend on the requested address, on the time of the day, on the speed of the wind...
-// The best we can do here is to ask the current value for a given address.
- setProxy(aPropInfoList, nProperties, 1,
- KProtocolManager::noProxyFor(),
- KProtocolManager::proxyForURL( "http://www.openoffice.org" ),
- KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" ),
- KProtocolManager::proxyForURL( "https://www.openoffice.org" ));
- break;
- default: // No proxy is used
- setProxy(aPropInfoList, nProperties, 0);
- }
-
- if ( nProperties > 0 )
- {
- aPropInfoList.realloc(nProperties);
- m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList);
- }
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL KDEInetLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- // Return the value as timestamp to avoid regenerating the binary cache
- // on each office launch.
-
- QString aProxyType, aNoProxyFor, aHTTPProxy, aHTTPSProxy, aFTPProxy;
-
- switch ( KProtocolManager::proxyType() )
- {
- case KProtocolManager::ManualProxy:
- aProxyType = '1';
- aNoProxyFor = KProtocolManager::noProxyFor();
- aHTTPProxy = KProtocolManager::proxyFor( "HTTP" );
- aHTTPProxy = KProtocolManager::proxyFor( "HTTPS" );
- aFTPProxy = KProtocolManager::proxyFor( "FTP" );
- break;
- case KProtocolManager::PACProxy:
- case KProtocolManager::WPADProxy:
- case KProtocolManager::EnvVarProxy:
- aProxyType = '1';
- aNoProxyFor = KProtocolManager::noProxyFor();
- aHTTPProxy = KProtocolManager::proxyForURL( "http://www.openoffice.org" );
- aHTTPSProxy = KProtocolManager::proxyForURL( "https://www.openoffice.org" );
- aFTPProxy = KProtocolManager::proxyForURL( "ftp://ftp.openoffice.org" );
- break;
- default:
- aProxyType = '0';
- }
-
- ::rtl::OUString sTimeStamp,
- sep( RTL_CONSTASCII_USTRINGPARAM( "$" ) );
-
- sTimeStamp = (const sal_Unicode *) aProxyType.ucs2();
- sTimeStamp += sep;
- sTimeStamp += (const sal_Unicode *) aNoProxyFor.ucs2();
- sTimeStamp += sep;
- sTimeStamp += (const sal_Unicode *) aHTTPProxy.ucs2();
- sTimeStamp += sep;
- sTimeStamp += (const sal_Unicode *) aHTTPSProxy.ucs2();
- sTimeStamp += sep;
- sTimeStamp += (const sal_Unicode *) aFTPProxy.ucs2();
-
- return sTimeStamp;
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL KDEInetLayer::setProxy
- (uno::Sequence<backend::PropertyInfo> &aPropInfoList, sal_Int32 &nProperties,
- int nProxyType, const QString &aNoProxy, const QString &aHTTPProxy, const QString &aFTPProxy, const QString &aHTTPSProxy ) const
-{
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetProxyType") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( (sal_Int32) nProxyType );
-
- if (nProxyType == 0) return;
-
- if ( !aNoProxy.isEmpty() )
- {
- QString aNoProxyFor(aNoProxy);
- ::rtl::OUString sNoProxyFor;
-
- aNoProxyFor = aNoProxyFor.replace( COMMA, SEMI_COLON );
- sNoProxyFor = (const sal_Unicode *) aNoProxyFor.ucs2();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetNoProxy") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sNoProxyFor );
- }
-
- if ( !aHTTPProxy.isEmpty() )
- {
- KURL aProxy(aHTTPProxy);
- ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
- sal_Int32 nPort = aProxy.port();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sProxy );
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( nPort );
- }
-
- if ( !aHTTPSProxy.isEmpty() )
- {
- KURL aProxy(aHTTPSProxy);
- ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
- sal_Int32 nPort = aProxy.port();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPSProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sProxy );
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPSProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( nPort );
- }
-
- if ( !aFTPProxy.isEmpty() )
- {
- KURL aProxy(aFTPProxy);
- ::rtl::OUString sProxy = (const sal_Unicode *) aProxy.host().ucs2();
- sal_Int32 nPort = aProxy.port();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetFTPProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sProxy );
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetFTPProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( nPort );
- }
-}
-
diff --git a/shell/source/backends/kdebe/kdeinetlayer.hxx b/shell/source/backends/kdebe/kdeinetlayer.hxx
deleted file mode 100644
index 7e8053a67b7b..000000000000
--- a/shell/source/backends/kdebe/kdeinetlayer.hxx
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef KDEINETLAYER_HXX_
-#define KDEINETLAYER_HXX_
-
-#include "kdebackend.hxx"
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <com/sun/star/util/XTimeStamped.hpp>
-#include <cppuhelper/implbase2.hxx>
-#include <vcl/kde_headers.h>
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interface for the KDE values mapped into
- the org.openoffice.Inet configuration component.
- */
-class KDEInetLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
-public :
- /**
- Constructor given the component context
-
- @param xContext The component context
- */
-
- KDEInetLayer(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XLayer
- virtual void SAL_CALL readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException) ;
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- protected:
-
- /** Destructor */
- ~KDEInetLayer(void) {}
-
-private :
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber ;
-
- void SAL_CALL setProxy
- (uno::Sequence<backend::PropertyInfo> &aPropInfoList, sal_Int32 &nProperties,
- int nProxyType, const QString &aNoProxyfor = QString(),
- const QString &aHTTPProxy = QString(), const QString &aFTPProxy = QString(), const QString &aHTTPSProxy = QString()) const;
- } ;
-
-#endif // KDEINETLAYER
diff --git a/shell/source/backends/kdebe/kdepathslayer.cxx b/shell/source/backends/kdebe/kdepathslayer.cxx
deleted file mode 100644
index 34d85ee93d6d..000000000000
--- a/shell/source/backends/kdebe/kdepathslayer.cxx
+++ /dev/null
@@ -1,121 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kdepathslayer.cxx,v $
- * $Revision: 1.5 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-#include "kdepathslayer.hxx"
-#include <vcl/kde_headers.h>
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <osl/security.hxx>
-#include <osl/file.hxx>
-#include <com/sun/star/uno/Sequence.hxx>
-
-#define SPACE ' '
-
-//==============================================================================
-
-KDEPathsLayer::KDEPathsLayer(const uno::Reference<uno::XComponentContext>& xContext)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL KDEPathsLayer::readData( const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException, lang::NullPointerException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- if( ! m_xLayerContentDescriber.is() )
- {
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"
- ) ), static_cast < backend::XLayer * > (this) );
- }
-
- uno::Sequence<backend::PropertyInfo> aPropInfoList(1);
- sal_Int32 nProperties = 0;
-
- QString aDocumentsDir( KGlobalSettings::documentPath() );
- rtl::OUString sDocumentsDir;
- rtl::OUString sDocumentsURL;
- if ( aDocumentsDir.endsWith(QChar('/')) )
- aDocumentsDir.truncate ( aDocumentsDir.length() - 1 );
- sDocumentsDir = (const sal_Unicode *) aDocumentsDir.ucs2();
- osl_getFileURLFromSystemPath( sDocumentsDir.pData, &sDocumentsURL.pData );
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Paths/Variables/Work") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( sDocumentsURL );
-
- if( nProperties > 0 )
- {
- aPropInfoList.realloc(nProperties);
- m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList);
- }
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL KDEPathsLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- // Return the value as timestamp to avoid regenerating the binary cache
- // on each office launch.
-
- ::rtl::OUString sTimeStamp,
- sep( RTL_CONSTASCII_USTRINGPARAM( "$" ) );
-
- QString aDocumentsDir;
- aDocumentsDir = KGlobalSettings::documentPath();
-
- sTimeStamp += (const sal_Unicode *) aDocumentsDir.ucs2();
-
- return sTimeStamp;
-}
diff --git a/shell/source/backends/kdebe/kdepathslayer.hxx b/shell/source/backends/kdebe/kdepathslayer.hxx
deleted file mode 100644
index 5a3b365be277..000000000000
--- a/shell/source/backends/kdebe/kdepathslayer.hxx
+++ /dev/null
@@ -1,86 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kdepathslayer.hxx,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef KDEPATHSLAYER_HXX_
-#define KDEPATHSLAYER_HXX_
-
-#include "kdebackend.hxx"
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <com/sun/star/util/XTimeStamped.hpp>
-#include <cppuhelper/implbase2.hxx>
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interface for the KDE values mapped into
- the org.openoffice.Office.Paths configuration component.
- */
-class KDEPathsLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
-public :
- /**
- Constructor given the component context
-
- @param xContext The component context
- */
-
- KDEPathsLayer(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XLayer
- virtual void SAL_CALL readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException) ;
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- protected:
-
- /** Destructor */
- ~KDEPathsLayer(void) {}
-
- private :
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber ;
- } ;
-
-#endif // KDEPATHSLAYER
diff --git a/shell/source/backends/kdebe/kdevcllayer.cxx b/shell/source/backends/kdebe/kdevcllayer.cxx
deleted file mode 100644
index d657ea5054a6..000000000000
--- a/shell/source/backends/kdebe/kdevcllayer.cxx
+++ /dev/null
@@ -1,116 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: kdevcllayer.cxx,v $
- * $Revision: 1.5 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-#include "kdevcllayer.hxx"
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <com/sun/star/uno/Sequence.hxx>
-#include <vcl/kde_headers.h>
-
-//==============================================================================
-
-KDEVCLLayer::KDEVCLLayer(const uno::Reference<uno::XComponentContext>& xContext)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL KDEVCLLayer::readData( const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException, lang::NullPointerException,
- lang::WrappedTargetException, uno::RuntimeException)
-{
- if( ! m_xLayerContentDescriber.is() )
- {
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "Could not create com.sun.star.configuration.backend.LayerContentDescriber Service"
- ) ), static_cast < backend::XLayer * > (this) );
- }
-
- uno::Sequence<backend::PropertyInfo> aPropInfoList(1);
-
-/*
- Commenting out, does not make much sense without an accessibility bridge
-===========================================================================
-#if defined(QT_ACCESSIBILITY_SUPPORT)
-// Accessibility tools under Qt for UNIX are available starting with Qt 4.0
- int nVersionMajor = 0;
- const char *q = qVersion(); // "3.1.0" for example
- while ('0' <= *q && *q <= '9')
- nVersionMajor = nVersionMajor * 10 + *q++ - '0';
- sal_Bool ATToolSupport = (sal_Bool) (nVersionMajor >= 4);
-#else
- sal_Bool ATToolSupport = sal_False;
-#endif
-===========================================================================
- End of commented out section
-*/ sal_Bool ATToolSupport = sal_False;
-
- aPropInfoList[0].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.VCL/Settings/Accessibility/EnableATToolSupport") );
- aPropInfoList[0].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[0].Protected = sal_False;
- aPropInfoList[0].Value = uno::makeAny( rtl::OUString::valueOf( ATToolSupport ) );
-
- m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList);
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL KDEVCLLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- // Return the value as timestamp to avoid regenerating the binary cache
- // on each office launch.
-
- ::rtl::OUString sTimeStamp(
- RTL_CONSTASCII_USTRINGPARAM( "FALSE" ) );
-
- return sTimeStamp;
-}
diff --git a/shell/source/backends/kdebe/kdevcllayer.hxx b/shell/source/backends/kdebe/kdevcllayer.hxx
deleted file mode 100644
index 4b3a50e5c4c8..000000000000
--- a/shell/source/backends/kdebe/kdevcllayer.hxx
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef KDEVCLLAYER_HXX_
-#define KDEVCLLAYER_HXX_
-
-#include "kdebackend.hxx"
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <com/sun/star/util/XTimeStamped.hpp>
-#include <cppuhelper/implbase2.hxx>
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interface for the KDE values mapped into
- the org.openoffice.VCL configuration component.
- */
-class KDEVCLLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
-public :
- /**
- Constructor given the component context
-
- @param xContext The component context
- */
-
- KDEVCLLayer(const uno::Reference<uno::XComponentContext>& xContext);
-
- // XLayer
- virtual void SAL_CALL readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException) ;
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- protected:
-
- /** Destructor */
- ~KDEVCLLayer(void) {}
-
- private :
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber ;
- } ;
-
-#endif // KDEVCLLAYER
diff --git a/shell/source/backends/kdebe/makefile.mk b/shell/source/backends/kdebe/makefile.mk
index 8bc0b475be8e..289cf8263d14 100644
--- a/shell/source/backends/kdebe/makefile.mk
+++ b/shell/source/backends/kdebe/makefile.mk
@@ -35,11 +35,7 @@ TARGET=kdebe
LIBTARGET=NO
ENABLE_EXCEPTIONS=TRUE
-
-COMP1TYPELIST=$(TARGET)
-COMPRDB=$(SOLARBINDIR)$/types.rdb
-UNOUCROUT=$(OUT)$/inc$/$(TARGET)
-INCPRE=$(UNOUCROUT)
+VISIBILITY_HIDDEN=TRUE
# --- Settings ---
@@ -64,12 +60,8 @@ CFLAGS+=$(KDE_CFLAGS)
# --- Files ---
SLOFILES=\
- $(SLO)$/kdebackend.obj \
- $(SLO)$/kdecommonlayer.obj \
- $(SLO)$/kdeinetlayer.obj \
- $(SLO)$/kdevcllayer.obj \
- $(SLO)$/kdepathslayer.obj \
- $(SLO)$/kdebecdef.obj
+ $(SLO)$/kdeaccess.obj \
+ $(SLO)$/kdebackend.obj
SHL1NOCHECK=TRUE
SHL1TARGET=$(TARGET)1.uno
@@ -82,8 +74,7 @@ SHL1STDLIBS= \
$(CPPULIB) \
$(SALLIB) \
$(KDE_LIBS) -lkio
-
-SHL1VERSIONMAP=exports.map
+
SHL1DEF=$(MISC)$/$(SHL1TARGET).def
DEF1NAME=$(SHL1TARGET)
diff --git a/shell/source/backends/localebe/localebackend.cxx b/shell/source/backends/localebe/localebackend.cxx
index d8e2f05c0332..75544c6d7f05 100644
--- a/shell/source/backends/localebe/localebackend.cxx
+++ b/shell/source/backends/localebe/localebackend.cxx
@@ -32,9 +32,7 @@
#include "precompiled_shell.hxx"
#include "localebackend.hxx"
-#include "localelayer.hxx"
-#include <com/sun/star/configuration/backend/ComponentChangeEvent.hpp>
-#include <uno/current_context.hxx>
+#include <com/sun/star/beans/Optional.hpp>
#include <osl/time.h>
#include <stdio.h>
@@ -229,11 +227,7 @@ rtl::OUString ImplGetLocale(LCID lcid)
// -------------------------------------------------------------------------------
-LocaleBackend::LocaleBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException) :
- ::cppu::WeakImplHelper2 < backend::XSingleLayerStratum, lang::XServiceInfo > (),
- m_xContext(xContext)
-
+LocaleBackend::LocaleBackend()
{
}
@@ -245,11 +239,9 @@ LocaleBackend::~LocaleBackend(void)
//------------------------------------------------------------------------------
-LocaleBackend* LocaleBackend::createInstance(
- const uno::Reference<uno::XComponentContext>& xContext
-)
+LocaleBackend* LocaleBackend::createInstance()
{
- return new LocaleBackend(xContext);
+ return new LocaleBackend;
}
// ---------------------------------------------------------------------------------------
@@ -291,61 +283,45 @@ rtl::OUString LocaleBackend::getSystemLocale(void)
}
//------------------------------------------------------------------------------
-rtl::OUString LocaleBackend::createTimeStamp()
+void LocaleBackend::setPropertyValue(
+ rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
{
- // the time stamp is free text, so just returning the values here.
- return getLocale() + getUILocale() + getSystemLocale();
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")),
+ static_cast< cppu::OWeakObject * >(this), -1);
}
-//------------------------------------------------------------------------------
-
-uno::Reference<backend::XLayer> SAL_CALL LocaleBackend::getLayer(
- const rtl::OUString& aComponent, const rtl::OUString& /*aTimestamp*/)
- throw (backend::BackendAccessException, lang::IllegalArgumentException)
+css::uno::Any LocaleBackend::getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
{
-
- uno::Sequence<rtl::OUString> aComps( getSupportedComponents() );
- if( aComponent.equals( aComps[0]) )
+ if (PropertyName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Locale"))) {
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, css::uno::makeAny(getLocale())));
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("SystemLocale")))
{
- if( ! m_xSystemLayer.is() )
- {
- uno::Sequence<backend::PropertyInfo> aPropInfoList(3);
-
- aPropInfoList[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.System/L10N/UILocale") );
- aPropInfoList[0].Type = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[0].Protected = sal_False;
- aPropInfoList[0].Value = uno::makeAny( getUILocale() );
-
- aPropInfoList[1].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("org.openoffice.System/L10N/Locale") );
- aPropInfoList[1].Type = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "string" ));
- aPropInfoList[1].Protected = sal_False;
- aPropInfoList[1].Value = uno::makeAny( getLocale() );
-
- aPropInfoList[2].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("org.openoffice.System/L10N/SystemLocale") );
- aPropInfoList[2].Type = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "string" ));
- aPropInfoList[2].Protected = sal_False;
- aPropInfoList[2].Value = uno::makeAny( getSystemLocale() );
-
- m_xSystemLayer = new LocaleLayer(aPropInfoList, createTimeStamp(), m_xContext);
- }
-
- return m_xSystemLayer;
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, css::uno::makeAny(getSystemLocale())));
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("UILocale")))
+ {
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, css::uno::makeAny(getUILocale())));
+ } else {
+ throw css::beans::UnknownPropertyException(
+ PropertyName, static_cast< cppu::OWeakObject * >(this));
}
-
- return uno::Reference<backend::XLayer>();
-}
-
-//------------------------------------------------------------------------------
-
-uno::Reference<backend::XUpdatableLayer> SAL_CALL
-LocaleBackend::getUpdatableLayer(const rtl::OUString& /*aComponent*/)
- throw (backend::BackendAccessException,lang::NoSupportException,
- lang::IllegalArgumentException)
-{
- throw lang::NoSupportException(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "LocaleBackend: No Update Operation allowed, Read Only access") ),
- *this) ;
}
//------------------------------------------------------------------------------
@@ -366,10 +342,8 @@ rtl::OUString SAL_CALL LocaleBackend::getImplementationName(void)
uno::Sequence<rtl::OUString> SAL_CALL LocaleBackend::getBackendServiceNames(void)
{
- uno::Sequence<rtl::OUString> aServiceNameList(2);
+ uno::Sequence<rtl::OUString> aServiceNameList(1);
aServiceNameList[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.LocaleBackend")) ;
- aServiceNameList[1] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.PlatformBackend")) ;
-
return aServiceNameList ;
}
@@ -394,16 +368,3 @@ uno::Sequence<rtl::OUString> SAL_CALL LocaleBackend::getSupportedServiceNames(vo
{
return getBackendServiceNames() ;
}
-
-// ---------------------------------------------------------------------------------------
-
-uno::Sequence<rtl::OUString> SAL_CALL LocaleBackend::getSupportedComponents(void)
-{
- uno::Sequence<rtl::OUString> aSupportedComponentList(1);
- aSupportedComponentList[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.System" )
- );
-
- return aSupportedComponentList;
-}
-
diff --git a/shell/source/backends/localebe/localebackend.hxx b/shell/source/backends/localebe/localebackend.hxx
index 7546a0385cf0..954a2bba9a0a 100644
--- a/shell/source/backends/localebe/localebackend.hxx
+++ b/shell/source/backends/localebe/localebackend.hxx
@@ -31,10 +31,8 @@
#ifndef _FIXEDVALUEBACKEND_HXX_
#define _FIXEDVALUEBACKEND_HXX_
-#include <com/sun/star/configuration/backend/XSingleLayerStratum.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/configuration/backend/XBackendChangesNotifier.hpp>
#include <cppuhelper/implbase2.hxx>
#include <rtl/string.hxx>
@@ -42,19 +40,14 @@
namespace css = com::sun::star ;
namespace uno = css::uno ;
namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-
-/**
- Implements the SingleLayerStratum service.
- */
class LocaleBackend : public ::cppu::WeakImplHelper2 <
- backend::XSingleLayerStratum,
+ css::beans::XPropertySet,
lang::XServiceInfo > {
public :
- static LocaleBackend* createInstance(const uno::Reference<uno::XComponentContext>& xContext);
+ static LocaleBackend* createInstance();
// XServiceInfo
virtual rtl::OUString SAL_CALL
@@ -81,45 +74,70 @@ class LocaleBackend : public ::cppu::WeakImplHelper2 <
@return service names
*/
static uno::Sequence<rtl::OUString> SAL_CALL getBackendServiceNames(void) ;
- /**
- Provides the supported component nodes
-
- @return supported component nodes
- */
- static uno::Sequence<rtl::OUString> SAL_CALL getSupportedComponents(void) ;
-
- //XSingleLayerStratum
- virtual uno::Reference<backend::XLayer> SAL_CALL
- getLayer( const rtl::OUString& aLayerId, const rtl::OUString& aTimestamp )
- throw (backend::BackendAccessException,
- lang::IllegalArgumentException) ;
-
- virtual uno::Reference<backend::XUpdatableLayer> SAL_CALL
- getUpdatableLayer( const rtl::OUString& aLayerId )
- throw (backend::BackendAccessException,
- lang::NoSupportException,
- lang::IllegalArgumentException) ;
+
+ // XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
+ getPropertySetInfo() throw (css::uno::RuntimeException)
+ { return css::uno::Reference< css::beans::XPropertySetInfo >(); }
+
+ virtual void SAL_CALL setPropertyValue(
+ rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
+
+ virtual css::uno::Any SAL_CALL getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
+
+ virtual void SAL_CALL addPropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removePropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL addVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removeVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
protected:
/**
Service constructor from a service factory.
@param xContext component context
*/
- LocaleBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException);
+ LocaleBackend();
/** Destructor */
~LocaleBackend(void) ;
private:
-
- uno::Reference<uno::XComponentContext> m_xContext ;
- uno::Reference<backend::XLayer> m_xSystemLayer ;
-
- // Returns a time stamp in the appropriate format
- // for configuration layers.
- static rtl::OUString createTimeStamp(void);
-
// Returns the user locale
static rtl::OUString getLocale(void);
diff --git a/shell/source/backends/localebe/localebe.xml b/shell/source/backends/localebe/localebe.xml
index fb6823b43a05..3c22a4970881 100644
--- a/shell/source/backends/localebe/localebe.xml
+++ b/shell/source/backends/localebe/localebe.xml
@@ -10,7 +10,6 @@
<language>c++</language>
<status value="beta"/>
<supported-service>com.sun.star.comp.configuration.backend.LocaleBackend</supported-service>
- <supported-service>com.sun.star.comp.configuration.backend.PlatformBackend</supported-service>
<service-dependency>...</service-dependency>
<type>com.sun.star.configuration.backend.XBackendChangesListener</type>
<type>com.sun.star.configuration.backend.XBackendChangesNotifier</type>
diff --git a/shell/source/backends/localebe/localebecdef.cxx b/shell/source/backends/localebe/localebecdef.cxx
index c9211543a283..cefa6c8d542d 100644
--- a/shell/source/backends/localebe/localebecdef.cxx
+++ b/shell/source/backends/localebe/localebecdef.cxx
@@ -32,7 +32,6 @@
#include "precompiled_shell.hxx"
#include <localebackend.hxx>
-#include <com/sun/star/registry/XRegistryKey.hpp>
#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_HXX_
#include <cppuhelper/implementationentry.hxx>
@@ -42,14 +41,13 @@
namespace css = com::sun::star ;
namespace uno = css::uno ;
namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
//------------------------------------------------------------------------------
static uno::Reference<uno::XInterface> SAL_CALL createLocaleBackend(
- const uno::Reference<uno::XComponentContext>& xContext){
+ const uno::Reference<uno::XComponentContext>&){
- return * LocaleBackend::createInstance(xContext);
+ return * LocaleBackend::createInstance();
}
//------------------------------------------------------------------------------
@@ -77,41 +75,9 @@ extern "C" void SAL_CALL component_getImplementationEnvironment(
//------------------------------------------------------------------------------
-extern "C" sal_Bool SAL_CALL component_writeInfo(void * /*pServiceManager*/, void *pRegistryKey) {
-
- using namespace ::com::sun::star::registry;
- if (pRegistryKey)
- {
- try
- {
- uno::Reference< XRegistryKey > xImplKey = static_cast< XRegistryKey* >( pRegistryKey )->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + LocaleBackend::getBackendName()
- );
-
- // Register associated service names
- uno::Reference< XRegistryKey > xServicesKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES") )
- );
-
- uno::Sequence<rtl::OUString> sServiceNames = LocaleBackend::getBackendServiceNames();
- for (sal_Int32 i = 0 ; i < sServiceNames.getLength() ; ++ i)
- xServicesKey->createKey(sServiceNames[i]);
-
- // Register supported components
- uno::Reference<XRegistryKey> xComponentKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/DATA/SupportedComponents") )
- );
-
- xComponentKey->setAsciiListValue( LocaleBackend::getSupportedComponents() );
-
- return sal_True;
- }
- catch( InvalidRegistryException& )
- {
- OSL_ENSURE(sal_False, "InvalidRegistryException caught");
- }
- }
- return sal_False;
+extern "C" sal_Bool SAL_CALL component_writeInfo(void * pServiceManager, void *pRegistryKey) {
+ return cppu::component_writeInfoHelper(
+ pServiceManager, pRegistryKey, kImplementations_entries);
}
//------------------------------------------------------------------------------
diff --git a/shell/source/backends/localebe/localelayer.cxx b/shell/source/backends/localebe/localelayer.cxx
deleted file mode 100644
index 74253e9d9187..000000000000
--- a/shell/source/backends/localebe/localelayer.cxx
+++ /dev/null
@@ -1,88 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: localelayer.cxx,v $
- * $Revision: 1.6 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-#include "localelayer.hxx"
-
-//------------------------------------------------------------------------------
-
-LocaleLayer::LocaleLayer( const uno::Sequence<backend::PropertyInfo>& aPropInfoList,
- const rtl::OUString& aTimestamp,
- const uno::Reference<uno::XComponentContext>& xContext)
- : m_aTimestamp(aTimestamp), m_aPropInfoList(aPropInfoList)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL LocaleLayer::readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException)
-{
-
- if (m_xLayerContentDescriber.is())
- {
- m_xLayerContentDescriber->describeLayer(xHandler, m_aPropInfoList);
- }
- else
- {
- OSL_TRACE("Could not create com.sun.star.configuration.backend.LayerContentDescriber Service");
- }
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL LocaleLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- return m_aTimestamp;
-}
-
-//------------------------------------------------------------------------------
diff --git a/shell/source/backends/localebe/localelayer.hxx b/shell/source/backends/localebe/localelayer.hxx
deleted file mode 100644
index 69b305079d33..000000000000
--- a/shell/source/backends/localebe/localelayer.hxx
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifndef _LOCALELAYER_HXX_
-#define _LOCALELAYER_HXX_
-
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <com/sun/star/util/XTimeStamped.hpp>
-#include <com/sun/star/uno/Sequence.hxx>
-#include <cppuhelper/implbase2.hxx>
-
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interfaces for fixed values
- */
-
-class LocaleLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
- public :
- /**
- Constructor given the requested component name
-
- @param aPropInfoListyMap Gconf->OO key map
- @param aCompoentName Requested Component Name
- @param sTimestamp timestamp indicating last modifictaion
- */
- LocaleLayer(const uno::Sequence<backend::PropertyInfo>& aPropInfoList,
- const rtl::OUString& aTimestamp,
- const uno::Reference<uno::XComponentContext>& xContext);
-
- /** Destructor */
- ~LocaleLayer(void) {}
-
- // XLayer
- virtual void SAL_CALL readData(const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException) ;
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- private :
-
- rtl::OUString m_aTimestamp ;
- rtl::OUString m_aComponent ;
-
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber ;
- uno::Sequence<backend::PropertyInfo> m_aPropInfoList ;
-} ;
-
-#endif // _LOCALELAYER_HXX_
diff --git a/shell/source/backends/localebe/makefile.mk b/shell/source/backends/localebe/makefile.mk
index 76767264a831..f320b2978524 100644
--- a/shell/source/backends/localebe/makefile.mk
+++ b/shell/source/backends/localebe/makefile.mk
@@ -49,9 +49,8 @@ DLLPRE =
SLOFILES=\
$(SLO)$/localebecdef.obj \
- $(SLO)$/localebackend.obj \
- $(SLO)$/localelayer.obj
-
+ $(SLO)$/localebackend.obj
+
SHL1TARGET=$(TARGET)1.uno
SHL1OBJS=$(SLOFILES)
SHL1DEF=$(MISC)$/$(SHL1TARGET).def
diff --git a/shell/source/backends/macbe/macbackend.cxx b/shell/source/backends/macbe/macbackend.cxx
index 06589e4d6574..5c408e059da4 100644
--- a/shell/source/backends/macbe/macbackend.cxx
+++ b/shell/source/backends/macbe/macbackend.cxx
@@ -31,18 +31,140 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_shell.hxx"
+// For MAXHOSTNAMELEN constant
+#include <sys/param.h>
+
+#include <premac.h>
+#include <SystemConfiguration/SystemConfiguration.h>
+#include <Foundation/NSPathUtilities.h>
+#include <postmac.h>
+
#include "macbackend.hxx"
-#include "macbelayer.hxx"
-#include <com/sun/star/configuration/backend/ComponentChangeEvent.hpp>
-#include <uno/current_context.hxx>
-#define MACBE_INET_COMPONENT "org.openoffice.Inet"
-#define MACBE_PATHS_COMPONENT "org.openoffice.Office.Paths"
+#include "com/sun/star/beans/Optional.hpp"
+#include "rtl/ustrbuf.hxx"
+#include "osl/file.h"
+
+#define SPACE ' '
+#define SEMI_COLON ';'
+
+typedef struct
+{
+ rtl::OUString Server;
+ sal_Int32 Port;
+} ProxyEntry;
+
+typedef enum {
+ sHTTP,
+ sHTTPS,
+ sFTP
+} ServiceType;
+
+//------------------------------------------------------------------------
+// helper functions
+//------------------------------------------------------------------------
+
+namespace // private
+{
+
+/*
+ * Returns current proxy settings for selected service type (HTTP or
+ * FTP) as a C string (in the buffer specified by host and hostSize)
+ * and a port number.
+ */
+
+bool GetProxySetting(ServiceType sType, char *host, size_t hostSize, UInt16 *port)
+{
+ bool result;
+ CFDictionaryRef proxyDict;
+ CFNumberRef enableNum;
+ int enable;
+ CFStringRef hostStr;
+ CFNumberRef portNum;
+ int portInt;
+
+ proxyDict = SCDynamicStoreCopyProxies(NULL);
+
+ if (!proxyDict)
+ return false;
+
+ CFStringRef proxiesEnable;
+ CFStringRef proxiesProxy;
+ CFStringRef proxiesPort;
+
+ switch ( sType )
+ {
+ case sHTTP : proxiesEnable = kSCPropNetProxiesHTTPEnable;
+ proxiesProxy = kSCPropNetProxiesHTTPProxy;
+ proxiesPort = kSCPropNetProxiesHTTPPort;
+ break;
+ case sHTTPS: proxiesEnable = kSCPropNetProxiesHTTPSEnable;
+ proxiesProxy = kSCPropNetProxiesHTTPSProxy;
+ proxiesPort = kSCPropNetProxiesHTTPSPort;
+ break;
+ default: proxiesEnable = kSCPropNetProxiesFTPEnable;
+ proxiesProxy = kSCPropNetProxiesFTPProxy;
+ proxiesPort = kSCPropNetProxiesFTPPort;
+ break;
+ }
+ // Proxy enabled?
+ enableNum = (CFNumberRef) CFDictionaryGetValue( proxyDict,
+ proxiesEnable );
+
+ result = (enableNum != NULL) && (CFGetTypeID(enableNum) == CFNumberGetTypeID());
+
+ if (result)
+ result = CFNumberGetValue(enableNum, kCFNumberIntType, &enable) && (enable != 0);
+
+ // Proxy enabled -> get hostname
+ if (result)
+ {
+ hostStr = (CFStringRef) CFDictionaryGetValue( proxyDict,
+ proxiesProxy );
+
+ result = (hostStr != NULL) && (CFGetTypeID(hostStr) == CFStringGetTypeID());
+ }
+
+ if (result)
+ result = CFStringGetCString(hostStr, host, (CFIndex) hostSize, kCFStringEncodingASCII);
+
+ // Get proxy port
+ if (result)
+ {
+ portNum = (CFNumberRef) CFDictionaryGetValue( proxyDict,
+ proxiesPort );
+
+ result = (portNum != NULL) && (CFGetTypeID(portNum) == CFNumberGetTypeID());
+ }
+ else
+ {
+ CFRelease(proxyDict);
+ return false;
+ }
+
+ if (result)
+ result = CFNumberGetValue(portNum, kCFNumberIntType, &portInt);
+
+ if (result)
+ *port = (UInt16) portInt;
+
+ if (proxyDict)
+ CFRelease(proxyDict);
+
+ if (!result)
+ {
+ *host = 0;
+ *port = 0;
+ }
+
+ return result;
+}
-MacOSXBackend::MacOSXBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException) :
- ::cppu::WeakImplHelper2 < backend::XSingleLayerStratum, lang::XServiceInfo > (),
- m_xContext(xContext)
+} // end private namespace
+
+//------------------------------------------------------------------------------
+
+MacOSXBackend::MacOSXBackend()
{
}
@@ -54,46 +176,282 @@ MacOSXBackend::~MacOSXBackend(void)
//------------------------------------------------------------------------------
-MacOSXBackend* MacOSXBackend::createInstance(const uno::Reference<uno::XComponentContext>& xContext)
+MacOSXBackend* MacOSXBackend::createInstance()
{
- return new MacOSXBackend(xContext);
+ return new MacOSXBackend;
}
// ---------------------------------------------------------------------------------------
-uno::Reference<backend::XLayer> SAL_CALL MacOSXBackend::getLayer(const rtl::OUString& aComponent, const rtl::OUString& /*aTimestamp*/)
- throw (backend::BackendAccessException, lang::IllegalArgumentException)
-{
- if( aComponent.equalsAscii( MACBE_INET_COMPONENT ) )
- {
- if( ! m_xSystemLayer.is() )
- m_xSystemLayer = new MacOSXLayer( m_xContext );
+rtl::OUString CFStringToOUString(const CFStringRef sOrig) {
+ CFRetain(sOrig);
- return m_xSystemLayer;
- }
- else if( aComponent.equalsAscii( MACBE_PATHS_COMPONENT ) )
- {
- if( ! m_xPathLayer.is() )
- m_xPathLayer = new MacOSXPathLayer( m_xContext );
- return m_xPathLayer;
- }
+ CFIndex nStringLen = CFStringGetLength(sOrig)+1;
+
+ // Allocate a c string buffer
+ char sBuffer[nStringLen];
+
+ CFStringGetCString(sOrig, sBuffer, nStringLen, kCFStringEncodingASCII);
+
+ CFRelease(sOrig);
- return uno::Reference<backend::XLayer>();
+ return rtl::OUString::createFromAscii((sal_Char*)sBuffer);
}
-//------------------------------------------------------------------------------
+rtl::OUString GetOUString( NSString* pStr )
+{
+ if( ! pStr )
+ return rtl::OUString();
+ int nLen = [pStr length];
+ if( nLen == 0 )
+ return rtl::OUString();
+
+ rtl::OUStringBuffer aBuf( nLen+1 );
+ aBuf.setLength( nLen );
+ [pStr getCharacters: const_cast<sal_Unicode*>(aBuf.getStr())];
+ return aBuf.makeStringAndClear();
+}
-uno::Reference<backend::XUpdatableLayer> SAL_CALL
- MacOSXBackend::getUpdatableLayer(const rtl::OUString& /*aComponent*/)
- throw (backend::BackendAccessException,lang::NoSupportException,
- lang::IllegalArgumentException)
+void MacOSXBackend::setPropertyValue(
+ rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
{
- throw lang::NoSupportException(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "MacOSXBackend: No Update Operation allowed, Read Only access") ),
- *this);
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+}
- return NULL;
+css::uno::Any MacOSXBackend::getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("WorkPathVariable")))
+ {
+ rtl::OUString aDocDir;
+ NSArray* pPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, true );
+ if( pPaths && [pPaths count] > 0 )
+ {
+ aDocDir = GetOUString( [pPaths objectAtIndex: 0] );
+
+ rtl::OUString aDocURL;
+ if( aDocDir.getLength() > 0 &&
+ osl_getFileURLFromSystemPath( aDocDir.pData, &aDocURL.pData ) == osl_File_E_None )
+ {
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, css::uno::makeAny( aDocURL ) ) );
+ }
+ else
+ {
+ OSL_TRACE( "user documents list contains empty file path or conversion failed" );
+ }
+ }
+ else
+ {
+ OSL_TRACE( "Got nil or empty list of user document directories" );
+ }
+ return css::uno::makeAny(css::beans::Optional< css::uno::Any >());
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")))
+ {
+ ProxyEntry aFtpProxy;
+
+ char host[MAXHOSTNAMELEN];
+ UInt16 port;
+ bool retVal;
+
+ retVal = GetProxySetting(sFTP, host, 100, &port);
+
+ if (retVal)
+ {
+ aFtpProxy.Server = rtl::OUString::createFromAscii( host );
+ }
+
+ // ftp proxy name
+ if( aFtpProxy.Server.getLength() > 0 )
+ {
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( aFtpProxy.Server ) ) );
+ }
+ return css::uno::makeAny(css::beans::Optional< css::uno::Any >());
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")))
+ {
+ ProxyEntry aFtpProxy;
+
+ char host[MAXHOSTNAMELEN];
+ UInt16 port;
+ bool retVal;
+
+ retVal = GetProxySetting(sFTP, host, 100, &port);
+
+ if (retVal)
+ {
+ aFtpProxy.Port = port;
+ }
+
+ // ftp proxy port
+ if( aFtpProxy.Port > 0 )
+ {
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( aFtpProxy.Port ) ) );
+ }
+ return css::uno::makeAny(css::beans::Optional< css::uno::Any >());
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")))
+ {
+ ProxyEntry aHttpProxy;
+
+ char host[MAXHOSTNAMELEN];
+ UInt16 port;
+ bool retVal;
+
+ retVal = GetProxySetting(sHTTP, host, 100, &port);
+
+ if (retVal)
+ {
+ aHttpProxy.Server = rtl::OUString::createFromAscii( host );
+ }
+
+ // http proxy name
+ if( aHttpProxy.Server.getLength() > 0 )
+ {
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( aHttpProxy.Server ) ) );
+ }
+ return css::uno::makeAny(css::beans::Optional< css::uno::Any >());
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")))
+ {
+ ProxyEntry aHttpProxy;
+
+ char host[MAXHOSTNAMELEN];
+ UInt16 port;
+ bool retVal;
+
+ retVal = GetProxySetting(sHTTP, host, 100, &port);
+
+ if (retVal)
+ {
+ aHttpProxy.Port = port;
+ }
+
+ // http proxy port
+ if( aHttpProxy.Port > 0 )
+ {
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( aHttpProxy.Port ) ) );
+ }
+ return css::uno::makeAny(css::beans::Optional< css::uno::Any >());
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")))
+ {
+ ProxyEntry aHttpsProxy;
+
+ char host[MAXHOSTNAMELEN];
+ UInt16 port;
+ bool retVal;
+
+ retVal = GetProxySetting(sHTTPS, host, 100, &port);
+
+ if (retVal)
+ {
+ aHttpsProxy.Server = rtl::OUString::createFromAscii( host );
+ }
+
+ // https proxy name
+ if( aHttpsProxy.Server.getLength() > 0 )
+ {
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( aHttpsProxy.Server ) ) );
+ }
+ return css::uno::makeAny(css::beans::Optional< css::uno::Any >());
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")))
+ {
+ ProxyEntry aHttpsProxy;
+
+ char host[MAXHOSTNAMELEN];
+ UInt16 port;
+ bool retVal;
+
+ retVal = GetProxySetting(sHTTPS, host, 100, &port);
+
+ if (retVal)
+ {
+ aHttpsProxy.Port = port;
+ }
+
+ // https proxy port
+ if( aHttpsProxy.Port > 0 )
+ {
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( aHttpsProxy.Port ) ) );
+ }
+ return css::uno::makeAny(css::beans::Optional< css::uno::Any >());
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetProxyType")))
+ {
+ // override default for ProxyType, which is "0" meaning "No proxies".
+ sal_Int32 nProperties = 1;
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true, uno::makeAny( nProperties ) ) );
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy")))
+ {
+ rtl::OUString aProxyBypassList;
+
+ CFArrayRef rExceptionsList;
+ CFDictionaryRef rProxyDict = SCDynamicStoreCopyProxies(NULL);
+
+ if (!rProxyDict)
+ rExceptionsList = false;
+ else
+ rExceptionsList = (CFArrayRef) CFDictionaryGetValue(rProxyDict, kSCPropNetProxiesExceptionsList);
+
+ if (rExceptionsList)
+ {
+ for (CFIndex idx = 0; idx < CFArrayGetCount(rExceptionsList); idx++)
+ {
+ CFStringRef rException = (CFStringRef) CFArrayGetValueAtIndex(rExceptionsList, idx);
+
+ if (idx>0)
+ aProxyBypassList += rtl::OUString::createFromAscii( ";" );
+
+ aProxyBypassList += CFStringToOUString(rException);
+ }
+ }
+
+ if (rProxyDict)
+ CFRelease(rProxyDict);
+
+ // fill proxy bypass list
+ if( aProxyBypassList.getLength() > 0 )
+ {
+ return css::uno::makeAny(
+ css::beans::Optional< css::uno::Any >(
+ true,
+ uno::makeAny( aProxyBypassList.replace( SPACE, SEMI_COLON ) ) ) );
+ }
+ return css::uno::makeAny(css::beans::Optional< css::uno::Any >());
+ } else {
+ throw css::beans::UnknownPropertyException(
+ PropertyName, static_cast< cppu::OWeakObject * >(this));
+ }
}
//------------------------------------------------------------------------------
@@ -115,9 +473,8 @@ rtl::OUString SAL_CALL MacOSXBackend::getImplementationName(void)
uno::Sequence<rtl::OUString> SAL_CALL MacOSXBackend::getBackendServiceNames(void)
{
- uno::Sequence<rtl::OUString> aServiceNameList(2);
+ uno::Sequence<rtl::OUString> aServiceNameList(1);
aServiceNameList[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.MacOSXBackend"));
- aServiceNameList[1] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.PlatformBackend"));
return aServiceNameList;
}
@@ -143,15 +500,3 @@ uno::Sequence<rtl::OUString> SAL_CALL MacOSXBackend::getSupportedServiceNames(vo
{
return getBackendServiceNames();
}
-
-// ---------------------------------------------------------------------------------------
-
-uno::Sequence<rtl::OUString> SAL_CALL MacOSXBackend::getSupportedComponents(void)
-{
- uno::Sequence<rtl::OUString> aSupportedComponentList(2);
- aSupportedComponentList[0] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( MACBE_INET_COMPONENT ) );
- aSupportedComponentList[1] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( MACBE_PATHS_COMPONENT ) );
-
- return aSupportedComponentList;
-}
-
diff --git a/shell/source/backends/macbe/macbackend.hxx b/shell/source/backends/macbe/macbackend.hxx
index c25fe4296c0e..ef919f077cb1 100644
--- a/shell/source/backends/macbe/macbackend.hxx
+++ b/shell/source/backends/macbe/macbackend.hxx
@@ -31,10 +31,8 @@
#ifndef _MACBACKEND_HXX_
#define _MACBACKEND_HXX_
-#include <com/sun/star/configuration/backend/XSingleLayerStratum.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/configuration/backend/XBackendChangesNotifier.hpp>
#include <cppuhelper/implbase2.hxx>
#include <rtl/string.hxx>
@@ -44,18 +42,13 @@
namespace css = com::sun::star;
namespace uno = css::uno;
namespace lang = css::lang;
-namespace backend = css::configuration::backend;
-
-/**
- Implements the SingleLayerStratum service.
- */
-class MacOSXBackend : public ::cppu::WeakImplHelper2 <backend::XSingleLayerStratum, lang::XServiceInfo >
+class MacOSXBackend : public ::cppu::WeakImplHelper2 <css::beans::XPropertySet, lang::XServiceInfo >
{
public:
- static MacOSXBackend* createInstance(const uno::Reference<uno::XComponentContext>& xContext);
+ static MacOSXBackend* createInstance();
// XServiceInfo
virtual rtl::OUString SAL_CALL getImplementationName()
@@ -81,19 +74,56 @@ public:
*/
static uno::Sequence<rtl::OUString> SAL_CALL getBackendServiceNames(void);
- /**
- Provides the supported component nodes
-
- @return supported component nodes
- */
- static uno::Sequence<rtl::OUString> SAL_CALL getSupportedComponents(void);
-
- // XSingleLayerStratum
- virtual uno::Reference<backend::XLayer> SAL_CALL getLayer(const rtl::OUString& aLayerId, const rtl::OUString& aTimestamp)
- throw (backend::BackendAccessException, lang::IllegalArgumentException);
-
- virtual uno::Reference<backend::XUpdatableLayer> SAL_CALL getUpdatableLayer(const rtl::OUString& aLayerId)
- throw (backend::BackendAccessException, lang::NoSupportException, lang::IllegalArgumentException);
+ // XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
+ getPropertySetInfo() throw (css::uno::RuntimeException)
+ { return css::uno::Reference< css::beans::XPropertySetInfo >(); }
+
+ virtual void SAL_CALL setPropertyValue(
+ rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
+
+ virtual css::uno::Any SAL_CALL getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
+
+ virtual void SAL_CALL addPropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removePropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL addVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removeVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
protected:
@@ -102,18 +132,10 @@ protected:
@param xContext component context
*/
- MacOSXBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException);
+ MacOSXBackend();
/** Destructor */
~MacOSXBackend(void);
-
-private:
-
- uno::Reference<uno::XComponentContext> m_xContext;
- uno::Reference<backend::XLayer> m_xSystemLayer;
- uno::Reference<backend::XLayer> m_xPathLayer;
-
};
#endif // _MACBACKEND_HXX_
diff --git a/shell/source/backends/macbe/macbe.xml b/shell/source/backends/macbe/macbe.xml
index 85854250cfe3..7cee5bb14de5 100644
--- a/shell/source/backends/macbe/macbe.xml
+++ b/shell/source/backends/macbe/macbe.xml
@@ -10,7 +10,6 @@
<language>c++</language>
<status value="beta"/>
<supported-service>com.sun.star.comp.configuration.backend.MacOSXBackend</supported-service>
- <supported-service>com.sun.star.comp.configuration.backend.PlatformBackend</supported-service>
<service-dependency>...</service-dependency>
<type>com.sun.star.configuration.backend.XBackendChangesListener</type>
<type>com.sun.star.configuration.backend.XBackendChangesNotifier</type>
diff --git a/shell/source/backends/macbe/macbecdef.cxx b/shell/source/backends/macbe/macbecdef.cxx
index 22698eb91ec5..ef1d8a7e2382 100644
--- a/shell/source/backends/macbe/macbecdef.cxx
+++ b/shell/source/backends/macbe/macbecdef.cxx
@@ -42,14 +42,13 @@
namespace css = com::sun::star;
namespace uno = css::uno;
namespace lang = css::lang;
-namespace backend = css::configuration::backend;
//------------------------------------------------------------------------------
static uno::Reference<uno::XInterface> SAL_CALL createMacOSXBackend(
- const uno::Reference<uno::XComponentContext>& xContext)
+ const uno::Reference<uno::XComponentContext>&)
{
- return * MacOSXBackend::createInstance(xContext);
+ return * MacOSXBackend::createInstance();
}
//------------------------------------------------------------------------------
@@ -77,41 +76,9 @@ extern "C" void SAL_CALL component_getImplementationEnvironment(
//------------------------------------------------------------------------------
-extern "C" sal_Bool SAL_CALL component_writeInfo(void * /*pServiceManager*/, void *pRegistryKey) {
-
- using namespace ::com::sun::star::registry;
- if (pRegistryKey)
- {
- try
- {
- uno::Reference< XRegistryKey > xImplKey = static_cast< XRegistryKey* >( pRegistryKey )->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + MacOSXBackend::getBackendName()
- );
-
- // Register associated service names
- uno::Reference< XRegistryKey > xServicesKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES") )
- );
-
- uno::Sequence<rtl::OUString> sServiceNames = MacOSXBackend::getBackendServiceNames();
- for (sal_Int32 i = 0; i < sServiceNames.getLength(); ++ i)
- xServicesKey->createKey(sServiceNames[i]);
-
- // Register supported components
- uno::Reference<XRegistryKey> xComponentKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/DATA/SupportedComponents") )
- );
-
- xComponentKey->setAsciiListValue( MacOSXBackend::getSupportedComponents() );
-
- return sal_True;
- }
- catch( InvalidRegistryException& )
- {
- OSL_ENSURE(sal_False, "InvalidRegistryException caught");
- }
- }
- return sal_False;
+extern "C" sal_Bool SAL_CALL component_writeInfo(void * pServiceManager, void *pRegistryKey) {
+ return cppu::component_writeInfoHelper(
+ pServiceManager, pRegistryKey, kImplementations_entries);
}
//------------------------------------------------------------------------------
diff --git a/shell/source/backends/macbe/macbelayer.cxx b/shell/source/backends/macbe/macbelayer.cxx
deleted file mode 100644
index ea0d3cb63fb7..000000000000
--- a/shell/source/backends/macbe/macbelayer.cxx
+++ /dev/null
@@ -1,443 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: macbelayer.cxx,v $
- * $Revision: 1.6 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-
-// For MAXHOSTNAMELEN constant
-#include <sys/param.h>
-
-#include <premac.h>
-#include <SystemConfiguration/SystemConfiguration.h>
-#include <Foundation/NSPathUtilities.h>
-#include <postmac.h>
-
-#include "macbelayer.hxx"
-
-#include "rtl/ustrbuf.hxx"
-#include "osl/file.h"
-
-#define SPACE ' '
-#define SEMI_COLON ';'
-
-typedef struct
-{
- rtl::OUString Server;
- sal_Int32 Port;
-} ProxyEntry;
-
-typedef enum {
- sHTTP,
- sHTTPS,
- sFTP
-} ServiceType;
-
-//------------------------------------------------------------------------
-// helper functions
-//------------------------------------------------------------------------
-
-namespace // private
-{
-
-/*
- * Returns current proxy settings for selected service type (HTTP or
- * FTP) as a C string (in the buffer specified by host and hostSize)
- * and a port number.
- */
-
-bool GetProxySetting(ServiceType sType, char *host, size_t hostSize, UInt16 *port)
-{
- bool result;
- CFDictionaryRef proxyDict;
- CFNumberRef enableNum;
- int enable;
- CFStringRef hostStr;
- CFNumberRef portNum;
- int portInt;
-
- proxyDict = SCDynamicStoreCopyProxies(NULL);
-
- if (!proxyDict)
- return false;
-
- CFStringRef proxiesEnable;
- CFStringRef proxiesProxy;
- CFStringRef proxiesPort;
-
- switch ( sType )
- {
- case sHTTP : proxiesEnable = kSCPropNetProxiesHTTPEnable;
- proxiesProxy = kSCPropNetProxiesHTTPProxy;
- proxiesPort = kSCPropNetProxiesHTTPPort;
- break;
- case sHTTPS: proxiesEnable = kSCPropNetProxiesHTTPSEnable;
- proxiesProxy = kSCPropNetProxiesHTTPSProxy;
- proxiesPort = kSCPropNetProxiesHTTPSPort;
- break;
- default: proxiesEnable = kSCPropNetProxiesFTPEnable;
- proxiesProxy = kSCPropNetProxiesFTPProxy;
- proxiesPort = kSCPropNetProxiesFTPPort;
- break;
- }
- // Proxy enabled?
- enableNum = (CFNumberRef) CFDictionaryGetValue( proxyDict,
- proxiesEnable );
-
- result = (enableNum != NULL) && (CFGetTypeID(enableNum) == CFNumberGetTypeID());
-
- if (result)
- result = CFNumberGetValue(enableNum, kCFNumberIntType, &enable) && (enable != 0);
-
- // Proxy enabled -> get hostname
- if (result)
- {
- hostStr = (CFStringRef) CFDictionaryGetValue( proxyDict,
- proxiesProxy );
-
- result = (hostStr != NULL) && (CFGetTypeID(hostStr) == CFStringGetTypeID());
- }
-
- if (result)
- result = CFStringGetCString(hostStr, host, (CFIndex) hostSize, kCFStringEncodingASCII);
-
- // Get proxy port
- if (result)
- {
- portNum = (CFNumberRef) CFDictionaryGetValue( proxyDict,
- proxiesPort );
-
- result = (portNum != NULL) && (CFGetTypeID(portNum) == CFNumberGetTypeID());
- }
- else
- {
- CFRelease(proxyDict);
- return false;
- }
-
- if (result)
- result = CFNumberGetValue(portNum, kCFNumberIntType, &portInt);
-
- if (result)
- *port = (UInt16) portInt;
-
- if (proxyDict)
- CFRelease(proxyDict);
-
- if (!result)
- {
- *host = 0;
- *port = 0;
- }
-
- return result;
-}
-
-} // end private namespace
-
-//------------------------------------------------------------------------------
-
-MacOSXLayer::MacOSXLayer( const uno::Reference<uno::XComponentContext>& xContext)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString CFStringToOUString(const CFStringRef sOrig) {
- CFRetain(sOrig);
-
- CFIndex nStringLen = CFStringGetLength(sOrig)+1;
-
- // Allocate a c string buffer
- char sBuffer[nStringLen];
-
- CFStringGetCString(sOrig, sBuffer, nStringLen, kCFStringEncodingASCII);
-
- CFRelease(sOrig);
-
- return rtl::OUString::createFromAscii((sal_Char*)sBuffer);
-}
-
-void SAL_CALL MacOSXLayer::readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException)
-{
-
- if (m_xLayerContentDescriber.is())
- {
- rtl::OUString aProxyBypassList;
-
- CFArrayRef rExceptionsList;
- CFDictionaryRef rProxyDict = SCDynamicStoreCopyProxies(NULL);
-
- if (!rProxyDict)
- rExceptionsList = false;
- else
- rExceptionsList = (CFArrayRef) CFDictionaryGetValue(rProxyDict, kSCPropNetProxiesExceptionsList);
-
- if (rExceptionsList)
- {
- for (CFIndex idx = 0; idx < CFArrayGetCount(rExceptionsList); idx++)
- {
- CFStringRef rException = (CFStringRef) CFArrayGetValueAtIndex(rExceptionsList, idx);
-
- if (idx>0)
- aProxyBypassList += rtl::OUString::createFromAscii( ";" );
-
- aProxyBypassList += CFStringToOUString(rException);
- }
- }
-
- if (rProxyDict)
- CFRelease(rProxyDict);
-
- // override default for ProxyType, which is "0" meaning "No proxies".
- // CAUTION: if you add properties, please increase the sequence size here !
- uno::Sequence<backend::PropertyInfo> aPropInfoList(8);
- sal_Int32 nProperties = 1;
-
- aPropInfoList[0].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetProxyType") );
- aPropInfoList[0].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[0].Protected = sal_False;
- aPropInfoList[0].Value = uno::makeAny( nProperties );
-
- // fill proxy bypass list
- if( aProxyBypassList.getLength() > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetNoProxy") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aProxyBypassList.replace( SPACE, SEMI_COLON ) );
- }
-
- ProxyEntry aHttpProxy;
- ProxyEntry aHttpsProxy;
- ProxyEntry aFtpProxy;
-
- char host[MAXHOSTNAMELEN];
- UInt16 port;
- bool retVal;
-
- retVal = GetProxySetting(sHTTP, host, 100, &port);
-
- if (retVal)
- {
- aHttpProxy.Server = rtl::OUString::createFromAscii( host );
- aHttpProxy.Port = port;
- }
-
- retVal = GetProxySetting(sHTTPS, host, 100, &port);
-
- if (retVal)
- {
- aHttpsProxy.Server = rtl::OUString::createFromAscii( host );
- aHttpsProxy.Port = port;
- }
-
- retVal = GetProxySetting(sFTP, host, 100, &port);
-
- if (retVal)
- {
- aFtpProxy.Server = rtl::OUString::createFromAscii( host );
- aFtpProxy.Port = port;
- }
-
- // http proxy name
- if( aHttpProxy.Server.getLength() > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aHttpProxy.Server );
- }
-
- // http proxy port
- if( aHttpProxy.Port > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aHttpProxy.Port );
- }
-
- // https proxy name
- if( aHttpsProxy.Server.getLength() > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPSProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aHttpsProxy.Server );
- }
-
- // https proxy port
- if( aHttpsProxy.Port > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPSProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aHttpsProxy.Port );
- }
-
- // ftp proxy name
- if( aFtpProxy.Server.getLength() > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetFTPProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aFtpProxy.Server );
- }
-
- // ftp proxy port
- if( aFtpProxy.Port > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetFTPProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aFtpProxy.Port );
- }
-
- // resize the property info list appropriately
- aPropInfoList.realloc(nProperties);
-
- m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList);
- }
- else
- {
- OSL_TRACE("Could not create com.sun.star.configuration.backend.LayerContentDescriber Service");
- }
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL MacOSXLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- // FIXME: Always new timestamp!?
- rtl::OUString aTimestamp = rtl::OUString::valueOf( time(NULL) );
-
- return aTimestamp;
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString GetOUString( NSString* pStr )
-{
- if( ! pStr )
- return rtl::OUString();
- int nLen = [pStr length];
- if( nLen == 0 )
- return rtl::OUString();
-
- rtl::OUStringBuffer aBuf( nLen+1 );
- aBuf.setLength( nLen );
- [pStr getCharacters: const_cast<sal_Unicode*>(aBuf.getStr())];
- return aBuf.makeStringAndClear();
-}
-
-void SAL_CALL MacOSXPathLayer::readData(
- const uno::Reference<backend::XLayerHandler>& i_xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException)
-{
- if (m_xLayerContentDescriber.is())
- {
- rtl::OUString aDocDir;
- NSArray* pPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, true );
- if( pPaths && [pPaths count] > 0 )
- {
- aDocDir = GetOUString( [pPaths objectAtIndex: 0] );
-
- rtl::OUString aDocURL;
- if( aDocDir.getLength() > 0 &&
- osl_getFileURLFromSystemPath( aDocDir.pData, &aDocURL.pData ) == osl_File_E_None )
- {
- uno::Sequence<backend::PropertyInfo> aPropInfoList(1);
-
- aPropInfoList[0].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Office.Paths/Variables/Work" ) );
- aPropInfoList[0].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[0].Protected = sal_False;
- aPropInfoList[0].Value <<= aDocURL;
-
- m_xLayerContentDescriber->describeLayer(i_xHandler, aPropInfoList);
- }
- else
- {
- OSL_TRACE( "user documents list contains empty file path or conversion failed" );
- }
- }
- else
- {
- OSL_TRACE( "Got nil or empty list of user document directories" );
- }
- }
- else
- {
- OSL_TRACE("Could not create com.sun.star.configuration.backend.LayerContentDescriber Service");
- }
-}
-
diff --git a/shell/source/backends/macbe/macbelayer.hxx b/shell/source/backends/macbe/macbelayer.hxx
deleted file mode 100644
index a1f27148d1a3..000000000000
--- a/shell/source/backends/macbe/macbelayer.hxx
+++ /dev/null
@@ -1,104 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: macbelayer.hxx,v $
- * $Revision: 1.4 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef _MACBELAYER_HXX_
-#define _MACBELAYER_HXX_
-
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <com/sun/star/util/XTimeStamped.hpp>
-#include <com/sun/star/uno/Sequence.hxx>
-#include <cppuhelper/implbase2.hxx>
-
-namespace css = com::sun::star;
-namespace uno = css::uno;
-namespace lang = css::lang;
-namespace backend = css::configuration::backend;
-namespace util = css::util;
-
-/**
- Implementation of the XLayer interfaces for fixed values
- */
-
-class MacOSXLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
-public:
-
- /**
- Constructor given the requested component name
-
- @param aTimestamp timestamp indicating last modifictaion
- */
- MacOSXLayer(const uno::Reference<uno::XComponentContext>& xContext);
-
- /** Destructor */
- virtual ~MacOSXLayer(void) {}
-
- // XLayer
- virtual void SAL_CALL readData(const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException);
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
-protected:
-
- rtl::OUString m_aComponent;
-
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber;
-
-};
-
-class MacOSXPathLayer : public MacOSXLayer
-{
- public:
- MacOSXPathLayer(const uno::Reference<uno::XComponentContext>& i_xContext) :
- MacOSXLayer( i_xContext ) {}
- virtual ~MacOSXPathLayer() {}
-
- // XLayer
- virtual void SAL_CALL readData(const uno::Reference<backend::XLayerHandler>& i_xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException);
-};
-
-#endif // _MACBELAYER_HXX_
diff --git a/shell/source/backends/macbe/makefile.mk b/shell/source/backends/macbe/makefile.mk
index c8f6891d6f87..e2cfd3b3b211 100644
--- a/shell/source/backends/macbe/makefile.mk
+++ b/shell/source/backends/macbe/makefile.mk
@@ -58,8 +58,7 @@ CFLAGSCXX+=$(OBJCXXFLAGS)
SLOFILES= \
$(SLO)$/macbecdef.obj \
- $(SLO)$/macbackend.obj \
- $(SLO)$/macbelayer.obj
+ $(SLO)$/macbackend.obj
SHL1TARGET=$(TARGET)1.uno
SHL1OBJS=$(SLOFILES)
diff --git a/shell/source/backends/wininetbe/makefile.mk b/shell/source/backends/wininetbe/makefile.mk
index be43ecaded36..b26e3a252185 100644
--- a/shell/source/backends/wininetbe/makefile.mk
+++ b/shell/source/backends/wininetbe/makefile.mk
@@ -50,9 +50,8 @@ DLLPRE =
SLOFILES=\
$(SLO)$/wininetbecdef.obj \
- $(SLO)$/wininetbackend.obj \
- $(SLO)$/wininetlayer.obj
-
+ $(SLO)$/wininetbackend.obj
+
SHL1TARGET=$(TARGET)1.uno
SHL1OBJS=$(SLOFILES)
SHL1DEF=$(MISC)$/$(SHL1TARGET).def
diff --git a/shell/source/backends/wininetbe/wininetbackend.cxx b/shell/source/backends/wininetbe/wininetbackend.cxx
index 018560f4f762..8daa9d690c2b 100644
--- a/shell/source/backends/wininetbe/wininetbackend.cxx
+++ b/shell/source/backends/wininetbe/wininetbackend.cxx
@@ -31,76 +31,331 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_shell.hxx"
+#include "rtl/ustrbuf.hxx"
+
#include "wininetbackend.hxx"
-#include "wininetlayer.hxx"
-#include <com/sun/star/configuration/backend/ComponentChangeEvent.hpp>
-#include <uno/current_context.hxx>
+
+#if defined _MSC_VER
+#pragma warning(push, 1)
+#endif
+#include <windows.h>
+#include <wininet.h>
+#if defined _MSC_VER
+#pragma warning(pop)
+#endif
#define WININET_DLL_NAME "wininet.dll"
+#define EQUAL_SIGN '='
+#define COLON ':'
+#define SPACE ' '
+#define SEMI_COLON ';'
-WinInetBackend::WinInetBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException) :
- ::cppu::WeakImplHelper2 < backend::XSingleLayerStratum, lang::XServiceInfo > (),
- m_xContext(xContext)
-{
- m_hWinInetDll = LoadLibrary( WININET_DLL_NAME );
-}
+namespace {
-//------------------------------------------------------------------------------
+struct Library {
+ HMODULE module;
-WinInetBackend::~WinInetBackend(void)
-{
- if ( m_hWinInetDll )
- FreeLibrary( m_hWinInetDll );
-}
+ Library(HMODULE theModule): module(theModule) {}
-//------------------------------------------------------------------------------
+ ~Library() { if (module) FreeLibrary(module); }
+};
-WinInetBackend* WinInetBackend::createInstance(
- const uno::Reference<uno::XComponentContext>& xContext
-)
-{
- return new WinInetBackend(xContext);
}
-// ---------------------------------------------------------------------------------------
+typedef struct
+{
+ rtl::OUString Server;
+ rtl::OUString Port;
+} ProxyEntry;
+
+//------------------------------------------------------------------------
+// helper functions
+//------------------------------------------------------------------------
-uno::Reference<backend::XLayer> SAL_CALL WinInetBackend::getLayer(
- const rtl::OUString& aComponent, const rtl::OUString& /*aTimestamp*/)
- throw (backend::BackendAccessException, lang::IllegalArgumentException)
+namespace // private
{
+ ProxyEntry ReadProxyEntry(const rtl::OUString& aProxy, sal_Int32& i)
+ {
+ ProxyEntry aProxyEntry;
- if( aComponent.equals( getSupportedComponents()[0]) )
+ aProxyEntry.Server = aProxy.getToken( 0, COLON, i );
+ if ( i > -1 )
+ aProxyEntry.Port = aProxy.getToken( 0, COLON, i );
+
+ return aProxyEntry;
+ }
+
+ ProxyEntry FindProxyEntry(const rtl::OUString& aProxyList, const rtl::OUString& aType)
{
- if( ! m_xSystemLayer.is() && m_hWinInetDll )
+ sal_Int32 nIndex = 0;
+
+ do
{
- WinInetLayer::InternetQueryOption_Proc_T lpfnInternetQueryOption =
- reinterpret_cast< WinInetLayer::InternetQueryOption_Proc_T >(
- GetProcAddress( m_hWinInetDll, "InternetQueryOptionA" ) );
+ // get the next token, e.g. ftp=server:port
+ rtl::OUString nextToken = aProxyList.getToken( 0, SPACE, nIndex );
+
+ // split the next token again into the parts separated
+ // through '=', e.g. ftp=server:port -> ftp and server:port
+ sal_Int32 i = 0;
+ if( nextToken.indexOf( EQUAL_SIGN ) > -1 )
+ {
+ if( aType.equals( nextToken.getToken( 0, EQUAL_SIGN, i ) ) )
+ return ReadProxyEntry(nextToken, i);
+ }
+ else if( aType.getLength() == 0)
+ return ReadProxyEntry(nextToken, i);
+
+ } while ( nIndex >= 0 );
+
+ return ProxyEntry();
+ }
- if( lpfnInternetQueryOption )
- m_xSystemLayer = new WinInetLayer(lpfnInternetQueryOption, m_xContext);
- }
+} // end private namespace
+
+//------------------------------------------------------------------------------
+
+WinInetBackend::WinInetBackend()
+{
+ Library hWinInetDll( LoadLibrary( WININET_DLL_NAME ) );
+ if( hWinInetDll.module )
+ {
+ typedef BOOL ( WINAPI *InternetQueryOption_Proc_T )( HINTERNET, DWORD, LPVOID, LPDWORD );
- return m_xSystemLayer;
+ InternetQueryOption_Proc_T lpfnInternetQueryOption =
+ reinterpret_cast< InternetQueryOption_Proc_T >(
+ GetProcAddress( hWinInetDll.module, "InternetQueryOptionA" ) );
+ if (lpfnInternetQueryOption)
+ {
+ LPINTERNET_PROXY_INFO lpi = NULL;
+
+ // query for the neccessary space
+ DWORD dwLength = 0;
+ BOOL bRet = lpfnInternetQueryOption(
+ NULL,
+ INTERNET_OPTION_PROXY,
+ (LPVOID)lpi,
+ &dwLength );
+
+ // allocate sufficient space on the heap
+ // insufficient space on the heap results
+ // in a stack overflow exception, we assume
+ // this never happens, because of the relatively
+ // small amount of memory we need
+ // _alloca is nice because it is fast and we don't
+ // have to free the allocated memory, it will be
+ // automatically done
+ lpi = reinterpret_cast< LPINTERNET_PROXY_INFO >(
+ _alloca( dwLength ) );
+
+ bRet = lpfnInternetQueryOption(
+ NULL,
+ INTERNET_OPTION_PROXY,
+ (LPVOID)lpi,
+ &dwLength );
+
+ // if a proxy is disabled, InternetQueryOption returns
+ // an empty proxy list, so we don't have to check if
+ // proxy is enabled or not
+
+ rtl::OUString aProxyList = rtl::OUString::createFromAscii( lpi->lpszProxy );
+ rtl::OUString aProxyBypassList = rtl::OUString::createFromAscii( lpi->lpszProxyBypass );
+
+ // override default for ProxyType, which is "0" meaning "No proxies".
+ sal_Int32 nProperties = 1;
+
+ valueProxyType_.IsPresent = true;
+ valueProxyType_.Value <<= nProperties;
+
+ // fill proxy bypass list
+ if( aProxyBypassList.getLength() > 0 )
+ {
+ rtl::OUStringBuffer aReverseList;
+ sal_Int32 nIndex = 0;
+ do
+ {
+ rtl::OUString aToken = aProxyBypassList.getToken( 0, SPACE, nIndex );
+ if ( aProxyList.indexOf( aToken ) == -1 )
+ {
+ if ( aReverseList.getLength() )
+ {
+ aReverseList.insert( 0, sal_Unicode( SEMI_COLON ) );
+ aReverseList.insert( 0, aToken );
+ }
+ else
+ aReverseList = aToken;
+ }
+ }
+ while ( nIndex >= 0 );
+
+ aProxyBypassList = aReverseList.makeStringAndClear();
+
+ valueNoProxy_.IsPresent = true;
+ valueNoProxy_.Value <<= aProxyBypassList.replace( SPACE, SEMI_COLON );
+ }
+
+ if( aProxyList.getLength() > 0 )
+ {
+ //-------------------------------------------------
+ // this implementation follows the algorithm
+ // of the internet explorer
+ // if there are type-dependent proxy settings
+ // and type independent proxy settings in the
+ // registry the internet explorer chooses the
+ // type independent proxy for all settings
+ // e.g. imagine the following registry entry
+ // ftp=server:port;http=server:port;server:port
+ // the last token server:port is type independent
+ // so the ie chooses this proxy server
+
+ // if there is no port specified for a type independent
+ // server the ie uses the port of an http server if
+ // there is one and it has a port
+ //-------------------------------------------------
+
+ ProxyEntry aTypeIndepProxy = FindProxyEntry( aProxyList, rtl::OUString());
+ ProxyEntry aHttpProxy = FindProxyEntry( aProxyList, rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM( "http" ) ) );
+ ProxyEntry aHttpsProxy = FindProxyEntry( aProxyList, rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM( "https" ) ) );
+
+ ProxyEntry aFtpProxy = FindProxyEntry( aProxyList, rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM( "ftp" ) ) );
+
+ if( aTypeIndepProxy.Server.getLength() )
+ {
+ aHttpProxy.Server = aTypeIndepProxy.Server;
+ aHttpsProxy.Server = aTypeIndepProxy.Server;
+ aFtpProxy.Server = aTypeIndepProxy.Server;
+
+ if( aTypeIndepProxy.Port.getLength() )
+ {
+ aHttpProxy.Port = aTypeIndepProxy.Port;
+ aHttpsProxy.Port = aTypeIndepProxy.Port;
+ aFtpProxy.Port = aTypeIndepProxy.Port;
+ }
+ else
+ {
+ aFtpProxy.Port = aHttpProxy.Port;
+ aHttpsProxy.Port = aHttpProxy.Port;
+ }
+ }
+
+ // http proxy name
+ if( aHttpProxy.Server.getLength() > 0 )
+ {
+ valueHttpProxyName_.IsPresent = true;
+ valueHttpProxyName_.Value <<= aHttpProxy.Server;
+ }
+
+ // http proxy port
+ if( aHttpProxy.Port.getLength() > 0 )
+ {
+ valueHttpProxyPort_.IsPresent = true;
+ valueHttpProxyPort_.Value <<= aHttpProxy.Port.toInt32();
+ }
+
+ // https proxy name
+ if( aHttpsProxy.Server.getLength() > 0 )
+ {
+ valueHttpsProxyName_.IsPresent = true;
+ valueHttpsProxyName_.Value <<= aHttpsProxy.Server;
+ }
+
+ // https proxy port
+ if( aHttpsProxy.Port.getLength() > 0 )
+ {
+ valueHttpsProxyPort_.IsPresent = true;
+ valueHttpsProxyPort_.Value <<= aHttpsProxy.Port.toInt32();
+ }
+
+ // ftp proxy name
+ if( aFtpProxy.Server.getLength() > 0 )
+ {
+ valueFtpProxyName_.IsPresent = true;
+ valueFtpProxyName_.Value <<= aFtpProxy.Server;
+ }
+
+ // ftp proxy port
+ if( aFtpProxy.Port.getLength() > 0 )
+ {
+ valueFtpProxyPort_.IsPresent = true;
+ valueFtpProxyPort_.Value <<= aFtpProxy.Port.toInt32();
+ }
+ }
+ }
}
+}
- return uno::Reference<backend::XLayer>();
+//------------------------------------------------------------------------------
+
+WinInetBackend::~WinInetBackend(void)
+{
}
//------------------------------------------------------------------------------
-uno::Reference<backend::XUpdatableLayer> SAL_CALL
-WinInetBackend::getUpdatableLayer(const rtl::OUString& /*aComponent*/)
- throw (backend::BackendAccessException,lang::NoSupportException,
- lang::IllegalArgumentException)
+WinInetBackend* WinInetBackend::createInstance()
{
- throw lang::NoSupportException(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "WinInetBackend: No Update Operation allowed, Read Only access") ),
- *this) ;
+ return new WinInetBackend;
+}
+
+// ---------------------------------------------------------------------------------------
- return NULL;
+void WinInetBackend::setPropertyValue(
+ rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ throw css::lang::IllegalArgumentException(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")),
+ static_cast< cppu::OWeakObject * >(this), -1);
+}
+
+css::uno::Any WinInetBackend::getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
+ css::uno::RuntimeException)
+{
+ if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")))
+ {
+ return css::uno::makeAny(valueFtpProxyName_);
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")))
+ {
+ return css::uno::makeAny(valueFtpProxyPort_);
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")))
+ {
+ return css::uno::makeAny(valueHttpProxyName_);
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")))
+ {
+ return css::uno::makeAny(valueHttpProxyPort_);
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")))
+ {
+ return css::uno::makeAny(valueHttpsProxyName_);
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")))
+ {
+ return css::uno::makeAny(valueHttpsProxyPort_);
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy")))
+ {
+ return css::uno::makeAny(valueNoProxy_);
+ } else if (PropertyName.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("ooInetProxyType")))
+ {
+ return css::uno::makeAny(valueProxyType_);
+ } else {
+ throw css::beans::UnknownPropertyException(
+ PropertyName, static_cast< cppu::OWeakObject * >(this));
+ }
}
//------------------------------------------------------------------------------
@@ -121,9 +376,8 @@ rtl::OUString SAL_CALL WinInetBackend::getImplementationName(void)
uno::Sequence<rtl::OUString> SAL_CALL WinInetBackend::getBackendServiceNames(void)
{
- uno::Sequence<rtl::OUString> aServiceNameList(2);
+ uno::Sequence<rtl::OUString> aServiceNameList(1);
aServiceNameList[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.WinInetBackend")) ;
- aServiceNameList[1] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.PlatformBackend")) ;
return aServiceNameList ;
}
@@ -149,16 +403,3 @@ uno::Sequence<rtl::OUString> SAL_CALL WinInetBackend::getSupportedServiceNames(v
{
return getBackendServiceNames() ;
}
-
-// ---------------------------------------------------------------------------------------
-
-uno::Sequence<rtl::OUString> SAL_CALL WinInetBackend::getSupportedComponents(void)
-{
- uno::Sequence<rtl::OUString> aSupportedComponentList(1);
- aSupportedComponentList[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet" )
- );
-
- return aSupportedComponentList;
-}
-
diff --git a/shell/source/backends/wininetbe/wininetbackend.hxx b/shell/source/backends/wininetbe/wininetbackend.hxx
index c335fe005f12..d1ba7c59d2a4 100644
--- a/shell/source/backends/wininetbe/wininetbackend.hxx
+++ b/shell/source/backends/wininetbe/wininetbackend.hxx
@@ -31,38 +31,23 @@
#ifndef _FIXEDVALUEBACKEND_HXX_
#define _FIXEDVALUEBACKEND_HXX_
-#include <com/sun/star/configuration/backend/XSingleLayerStratum.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/beans/Optional.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/configuration/backend/XBackendChangesNotifier.hpp>
#include <cppuhelper/implbase2.hxx>
#include <rtl/string.hxx>
-#if defined _MSC_VER
-#pragma warning(push, 1)
-#endif
-#include <windows.h>
-#include <wininet.h>
-#if defined _MSC_VER
-#pragma warning(pop)
-#endif
-
namespace css = com::sun::star ;
namespace uno = css::uno ;
namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-
-/**
- Implements the SingleLayerStratum service.
- */
class WinInetBackend : public ::cppu::WeakImplHelper2 <
- backend::XSingleLayerStratum,
+ css::beans::XPropertySet,
lang::XServiceInfo > {
public :
- static WinInetBackend* createInstance(const uno::Reference<uno::XComponentContext>& xContext);
+ static WinInetBackend* createInstance();
// XServiceInfo
virtual rtl::OUString SAL_CALL
@@ -89,43 +74,86 @@ class WinInetBackend : public ::cppu::WeakImplHelper2 <
@return service names
*/
static uno::Sequence<rtl::OUString> SAL_CALL getBackendServiceNames(void) ;
- /**
- Provides the supported component nodes
-
- @return supported component nodes
- */
- static uno::Sequence<rtl::OUString> SAL_CALL getSupportedComponents(void) ;
-
- //XSingleLayerStratum
- virtual uno::Reference<backend::XLayer> SAL_CALL
- getLayer( const rtl::OUString& aLayerId, const rtl::OUString& aTimestamp )
- throw (backend::BackendAccessException,
- lang::IllegalArgumentException) ;
-
- virtual uno::Reference<backend::XUpdatableLayer> SAL_CALL
- getUpdatableLayer( const rtl::OUString& aLayerId )
- throw (backend::BackendAccessException,
- lang::NoSupportException,
- lang::IllegalArgumentException) ;
+
+ // XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
+ getPropertySetInfo() throw (css::uno::RuntimeException)
+ { return css::uno::Reference< css::beans::XPropertySetInfo >(); }
+
+ virtual void SAL_CALL setPropertyValue(
+ rtl::OUString const &, css::uno::Any const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::beans::PropertyVetoException,
+ css::lang::IllegalArgumentException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
+
+ virtual css::uno::Any SAL_CALL getPropertyValue(
+ rtl::OUString const & PropertyName)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException);
+
+ virtual void SAL_CALL addPropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removePropertyChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XPropertyChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL addVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removeVetoableChangeListener(
+ rtl::OUString const &,
+ css::uno::Reference< css::beans::XVetoableChangeListener > const &)
+ throw (
+ css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {}
+
protected:
/**
Service constructor from a service factory.
@param xContext component context
*/
- WinInetBackend(const uno::Reference<uno::XComponentContext>& xContext)
- throw (backend::BackendAccessException);
+ WinInetBackend();
/** Destructor */
~WinInetBackend(void) ;
private:
-
- uno::Reference<uno::XComponentContext> m_xContext ;
- uno::Reference<backend::XLayer> m_xSystemLayer ;
-
- // The wininet.dll module handle
- HMODULE m_hWinInetDll;
+ com::sun::star::beans::Optional< com::sun::star::uno::Any >
+ valueProxyType_;
+ com::sun::star::beans::Optional< com::sun::star::uno::Any >
+ valueNoProxy_;
+ com::sun::star::beans::Optional< com::sun::star::uno::Any >
+ valueHttpProxyName_;
+ com::sun::star::beans::Optional< com::sun::star::uno::Any >
+ valueHttpProxyPort_;
+ com::sun::star::beans::Optional< com::sun::star::uno::Any >
+ valueHttpsProxyName_;
+ com::sun::star::beans::Optional< com::sun::star::uno::Any >
+ valueHttpsProxyPort_;
+ com::sun::star::beans::Optional< com::sun::star::uno::Any >
+ valueFtpProxyName_;
+ com::sun::star::beans::Optional< com::sun::star::uno::Any >
+ valueFtpProxyPort_;
} ;
diff --git a/shell/source/backends/wininetbe/wininetbe.xml b/shell/source/backends/wininetbe/wininetbe.xml
index 42364deba3cb..1bf4bd2cd053 100644
--- a/shell/source/backends/wininetbe/wininetbe.xml
+++ b/shell/source/backends/wininetbe/wininetbe.xml
@@ -10,7 +10,6 @@
<language>c++</language>
<status value="beta"/>
<supported-service>com.sun.star.comp.configuration.backend.Win32Backend</supported-service>
- <supported-service>com.sun.star.comp.configuration.backend.PlatformBackend</supported-service>
<service-dependency>...</service-dependency>
<type>com.sun.star.configuration.backend.XBackendChangesListener</type>
<type>com.sun.star.configuration.backend.XBackendChangesNotifier</type>
diff --git a/shell/source/backends/wininetbe/wininetbecdef.cxx b/shell/source/backends/wininetbe/wininetbecdef.cxx
index ae8ad725da1c..6f696ce6fac2 100644
--- a/shell/source/backends/wininetbe/wininetbecdef.cxx
+++ b/shell/source/backends/wininetbe/wininetbecdef.cxx
@@ -42,14 +42,13 @@
namespace css = com::sun::star ;
namespace uno = css::uno ;
namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
//------------------------------------------------------------------------------
static uno::Reference<uno::XInterface> SAL_CALL createWinInetBackend(
- const uno::Reference<uno::XComponentContext>& xContext){
+ const uno::Reference<uno::XComponentContext>&){
- return * WinInetBackend::createInstance(xContext);
+ return * WinInetBackend::createInstance();
}
//------------------------------------------------------------------------------
@@ -77,41 +76,9 @@ extern "C" void SAL_CALL component_getImplementationEnvironment(
//------------------------------------------------------------------------------
-extern "C" sal_Bool SAL_CALL component_writeInfo(void * /*pServiceManager*/, void *pRegistryKey) {
-
- using namespace ::com::sun::star::registry;
- if (pRegistryKey)
- {
- try
- {
- uno::Reference< XRegistryKey > xImplKey = static_cast< XRegistryKey* >( pRegistryKey )->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + WinInetBackend::getBackendName()
- );
-
- // Register associated service names
- uno::Reference< XRegistryKey > xServicesKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES") )
- );
-
- uno::Sequence<rtl::OUString> sServiceNames = WinInetBackend::getBackendServiceNames();
- for (sal_Int32 i = 0 ; i < sServiceNames.getLength() ; ++ i)
- xServicesKey->createKey(sServiceNames[i]);
-
- // Register supported components
- uno::Reference<XRegistryKey> xComponentKey = xImplKey->createKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/DATA/SupportedComponents") )
- );
-
- xComponentKey->setAsciiListValue( WinInetBackend::getSupportedComponents() );
-
- return sal_True;
- }
- catch( InvalidRegistryException& )
- {
- OSL_ENSURE(sal_False, "InvalidRegistryException caught");
- }
- }
- return sal_False;
+extern "C" sal_Bool SAL_CALL component_writeInfo(void * pServiceManager, void *pRegistryKey) {
+ return cppu::component_writeInfoHelper(
+ pServiceManager, pRegistryKey, kImplementations_entries);
}
//------------------------------------------------------------------------------
diff --git a/shell/source/backends/wininetbe/wininetlayer.cxx b/shell/source/backends/wininetbe/wininetlayer.cxx
deleted file mode 100644
index d38bda5a1581..000000000000
--- a/shell/source/backends/wininetbe/wininetlayer.cxx
+++ /dev/null
@@ -1,377 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: wininetlayer.cxx,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General 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_shell.hxx"
-
-#ifndef _WININETLAYER_HXX_
-#include "wininetlayer.hxx"
-#endif
-
-#include <malloc.h>
-
-#include <rtl/ustrbuf.hxx>
-
-#define EQUAL_SIGN '='
-#define COLON ':'
-#define SPACE ' '
-#define SEMI_COLON ';'
-
-typedef struct
-{
- rtl::OUString Server;
- rtl::OUString Port;
-} ProxyEntry;
-
-//------------------------------------------------------------------------
-// helper functions
-//------------------------------------------------------------------------
-
-namespace // private
-{
- ProxyEntry ReadProxyEntry(const rtl::OUString& aProxy, sal_Int32& i)
- {
- ProxyEntry aProxyEntry;
-
- aProxyEntry.Server = aProxy.getToken( 0, COLON, i );
- if ( i > -1 )
- aProxyEntry.Port = aProxy.getToken( 0, COLON, i );
-
- return aProxyEntry;
- }
-
- ProxyEntry FindProxyEntry(const rtl::OUString& aProxyList, const rtl::OUString& aType)
- {
- sal_Int32 nIndex = 0;
-
- do
- {
- // get the next token, e.g. ftp=server:port
- rtl::OUString nextToken = aProxyList.getToken( 0, SPACE, nIndex );
-
- // split the next token again into the parts separated
- // through '=', e.g. ftp=server:port -> ftp and server:port
- sal_Int32 i = 0;
- if( nextToken.indexOf( EQUAL_SIGN ) > -1 )
- {
- if( aType.equals( nextToken.getToken( 0, EQUAL_SIGN, i ) ) )
- return ReadProxyEntry(nextToken, i);
- }
- else if( aType.getLength() == 0)
- return ReadProxyEntry(nextToken, i);
-
- } while ( nIndex >= 0 );
-
- return ProxyEntry();
- }
-
-} // end private namespace
-
-//------------------------------------------------------------------------------
-
-WinInetLayer::WinInetLayer( InternetQueryOption_Proc_T lpfnInternetQueryOption,
- const uno::Reference<uno::XComponentContext>& xContext)
- : m_lpfnInternetQueryOption(lpfnInternetQueryOption)
-{
- //Create instance of LayerContentDescriber Service
- rtl::OUString const k_sLayerDescriberService(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.configuration.backend.LayerDescriber"));
-
- typedef uno::Reference<backend::XLayerContentDescriber> LayerDescriber;
- uno::Reference< lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
- if( xServiceManager.is() )
- {
- m_xLayerContentDescriber = LayerDescriber::query(
- xServiceManager->createInstanceWithContext(k_sLayerDescriberService, xContext));
- }
- else
- {
- OSL_TRACE("Could not retrieve ServiceManager");
- }
-
-}
-
-//------------------------------------------------------------------------------
-
-void SAL_CALL WinInetLayer::readData(
- const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException)
-{
-
- if (m_xLayerContentDescriber.is() && m_lpfnInternetQueryOption)
- {
- LPINTERNET_PROXY_INFO lpi = NULL;
-
- // query for the neccessary space
- DWORD dwLength = 0;
- BOOL bRet = m_lpfnInternetQueryOption(
- NULL,
- INTERNET_OPTION_PROXY,
- (LPVOID)lpi,
- &dwLength );
-
- // allocate sufficient space on the heap
- // insufficient space on the heap results
- // in a stack overflow exception, we assume
- // this never happens, because of the relatively
- // small amount of memory we need
- // _alloca is nice because it is fast and we don't
- // have to free the allocated memory, it will be
- // automatically done
- lpi = reinterpret_cast< LPINTERNET_PROXY_INFO >(
- _alloca( dwLength ) );
-
- bRet = m_lpfnInternetQueryOption(
- NULL,
- INTERNET_OPTION_PROXY,
- (LPVOID)lpi,
- &dwLength );
-
- // if a proxy is disabled, InternetQueryOption returns
- // an empty proxy list, so we don't have to check if
- // proxy is enabled or not
-
- rtl::OUString aProxyList = rtl::OUString::createFromAscii( lpi->lpszProxy );
- rtl::OUString aProxyBypassList = rtl::OUString::createFromAscii( lpi->lpszProxyBypass );
-
- // override default for ProxyType, which is "0" meaning "No proxies".
- uno::Sequence<backend::PropertyInfo> aPropInfoList(8);
- sal_Int32 nProperties = 1;
-
- aPropInfoList[0].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetProxyType") );
- aPropInfoList[0].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[0].Protected = sal_False;
- aPropInfoList[0].Value = uno::makeAny( nProperties );
-
- // fill proxy bypass list
- if( aProxyBypassList.getLength() > 0 )
- {
- rtl::OUStringBuffer aReverseList;
- sal_Int32 nIndex = 0;
- do
- {
- rtl::OUString aToken = aProxyBypassList.getToken( 0, SPACE, nIndex );
- if ( aProxyList.indexOf( aToken ) == -1 )
- {
- if ( aReverseList.getLength() )
- {
- aReverseList.insert( 0, sal_Unicode( SEMI_COLON ) );
- aReverseList.insert( 0, aToken );
- }
- else
- aReverseList = aToken;
- }
- }
- while ( nIndex >= 0 );
-
- aProxyBypassList = aReverseList.makeStringAndClear();
-
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetNoProxy") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aProxyBypassList.replace( SPACE, SEMI_COLON ) );
- }
-
- if( aProxyList.getLength() > 0 )
- {
- //-------------------------------------------------
- // this implementation follows the algorithm
- // of the internet explorer
- // if there are type-dependent proxy settings
- // and type independent proxy settings in the
- // registry the internet explorer chooses the
- // type independent proxy for all settings
- // e.g. imagine the following registry entry
- // ftp=server:port;http=server:port;server:port
- // the last token server:port is type independent
- // so the ie chooses this proxy server
-
- // if there is no port specified for a type independent
- // server the ie uses the port of an http server if
- // there is one and it has a port
- //-------------------------------------------------
-
- ProxyEntry aTypeIndepProxy = FindProxyEntry( aProxyList, rtl::OUString());
- ProxyEntry aHttpProxy = FindProxyEntry( aProxyList, rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "http" ) ) );
- ProxyEntry aHttpsProxy = FindProxyEntry( aProxyList, rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "https" ) ) );
-
- ProxyEntry aFtpProxy = FindProxyEntry( aProxyList, rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "ftp" ) ) );
-
- if( aTypeIndepProxy.Server.getLength() )
- {
- aHttpProxy.Server = aTypeIndepProxy.Server;
- aHttpsProxy.Server = aTypeIndepProxy.Server;
- aFtpProxy.Server = aTypeIndepProxy.Server;
-
- if( aTypeIndepProxy.Port.getLength() )
- {
- aHttpProxy.Port = aTypeIndepProxy.Port;
- aHttpsProxy.Port = aTypeIndepProxy.Port;
- aFtpProxy.Port = aTypeIndepProxy.Port;
- }
- else
- {
- aFtpProxy.Port = aHttpProxy.Port;
- aHttpsProxy.Port = aHttpProxy.Port;
- }
- }
-
- // http proxy name
- if( aHttpProxy.Server.getLength() > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aHttpProxy.Server );
- }
-
- // http proxy port
- if( aHttpProxy.Port.getLength() > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aHttpProxy.Port.toInt32() );
- }
-
- // https proxy name
- if( aHttpsProxy.Server.getLength() > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPSProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aHttpsProxy.Server );
- }
-
- // https proxy port
- if( aHttpsProxy.Port.getLength() > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetHTTPSProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aHttpsProxy.Port.toInt32() );
- }
-
- // ftp proxy name
- if( aFtpProxy.Server.getLength() > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetFTPProxyName") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "string" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aFtpProxy.Server );
- }
-
- // ftp proxy port
- if( aFtpProxy.Port.getLength() > 0 )
- {
- aPropInfoList[nProperties].Name = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.Inet/Settings/ooInetFTPProxyPort") );
- aPropInfoList[nProperties].Type = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "int" ) );
- aPropInfoList[nProperties].Protected = sal_False;
- aPropInfoList[nProperties++].Value = uno::makeAny( aFtpProxy.Port.toInt32() );
- }
- }
-
- // resize the property info list appropriately
- aPropInfoList.realloc(nProperties);
-
- m_xLayerContentDescriber->describeLayer(xHandler, aPropInfoList);
- }
- else
- {
- OSL_TRACE("Could not create com.sun.star.configuration.backend.LayerContentDescriber Service");
- }
-}
-
-//------------------------------------------------------------------------------
-
-rtl::OUString SAL_CALL WinInetLayer::getTimestamp(void)
- throw (uno::RuntimeException)
-{
- rtl::OUString aTimestamp;
-
- if (m_lpfnInternetQueryOption)
- {
- LPINTERNET_PROXY_INFO lpi = NULL;
-
- // query for the neccessary space
- DWORD dwLength = 0;
- BOOL bRet = m_lpfnInternetQueryOption(
- NULL,
- INTERNET_OPTION_PROXY,
- (LPVOID)lpi,
- &dwLength );
-
- // allocate sufficient space on the heap
- // insufficient space on the heap results
- // in a stack overflow exception, we assume
- // this never happens, because of the relatively
- // small amount of memory we need
- // _alloca is nice because it is fast and we don't
- // have to free the allocated memory, it will be
- // automatically done
- lpi = reinterpret_cast< LPINTERNET_PROXY_INFO >(
- _alloca( dwLength ) );
-
- bRet = m_lpfnInternetQueryOption(
- NULL,
- INTERNET_OPTION_PROXY,
- (LPVOID)lpi,
- &dwLength );
-
- aTimestamp = rtl::OUString::createFromAscii( lpi->lpszProxy );
- aTimestamp += rtl::OUString::createFromAscii( lpi->lpszProxyBypass );
- }
-
- return aTimestamp;
-}
-
-//------------------------------------------------------------------------------
diff --git a/shell/source/backends/wininetbe/wininetlayer.hxx b/shell/source/backends/wininetbe/wininetlayer.hxx
deleted file mode 100644
index 761e174d1df5..000000000000
--- a/shell/source/backends/wininetbe/wininetlayer.hxx
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef _WinInetLayer_HXX_
-#define _WinInetLayer_HXX_
-
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/PropertyInfo.hpp>
-#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
-
-#ifndef _COM_SUN_STAR_CONFIGURATION_BACKEND_XLAYERCONTENTDESCIBER_HPP_
-#include <com/sun/star/configuration/backend/XLayerContentDescriber.hpp>
-#endif
-#include <com/sun/star/util/XTimeStamped.hpp>
-#include <com/sun/star/uno/Sequence.hxx>
-#include <cppuhelper/implbase2.hxx>
-
-#if defined _MSC_VER
-#pragma warning(push, 1)
-#endif
-#include <windows.h>
-#include <wininet.h>
-#if defined _MSC_VER
-#pragma warning(pop)
-#endif
-
-namespace css = com::sun::star ;
-namespace uno = css::uno ;
-namespace lang = css::lang ;
-namespace backend = css::configuration::backend ;
-namespace util = css::util ;
-
-/**
- Implementation of the XLayer interfaces for fixed values
- */
-
-class WinInetLayer : public cppu::WeakImplHelper2<backend::XLayer, util::XTimeStamped>
-{
- public :
- typedef BOOL ( WINAPI *InternetQueryOption_Proc_T )( HINTERNET, DWORD, LPVOID, LPDWORD );
-
- /**
- Constructor given the requested component name
-
- @param lpfnInternetQueryOption function pointer into wininet.dll
- @param aTimestamp timestamp indicating last modifictaion
- */
- WinInetLayer(InternetQueryOption_Proc_T lpfnInternetQueryOption,
- const uno::Reference<uno::XComponentContext>& xContext);
-
- /** Destructor */
- ~WinInetLayer(void) {}
-
- // XLayer
- virtual void SAL_CALL readData(const uno::Reference<backend::XLayerHandler>& xHandler)
- throw ( backend::MalformedDataException,
- lang::NullPointerException,
- lang::WrappedTargetException,
- uno::RuntimeException) ;
-
- // XTimeStamped
- virtual rtl::OUString SAL_CALL getTimestamp(void)
- throw (uno::RuntimeException);
-
- private :
-
- rtl::OUString m_aComponent ;
-
- uno::Reference<backend::XLayerContentDescriber> m_xLayerContentDescriber ;
-
- // The InternetQueryOption function pointer
- InternetQueryOption_Proc_T m_lpfnInternetQueryOption;
-} ;
-
-#endif // _WinInetLayer_HXX_
diff --git a/svx/prj/build.lst b/svx/prj/build.lst
index 56980702fb2d..ded1aed2c905 100644
--- a/svx/prj/build.lst
+++ b/svx/prj/build.lst
@@ -1,4 +1,4 @@
-sx svx : l10n connectivity xmloff linguistic jvmfwk avmedia configmgr ucb fileaccess drawinglayer NULL
+sx svx : l10n connectivity xmloff linguistic jvmfwk avmedia ucb fileaccess drawinglayer NULL
sx svx usr1 - all sx_mkout NULL
sx svx\inc nmake - all sx_inc NULL
sx svx\uiconfig\layout nmake - all sx_layout NULL
diff --git a/svx/source/cui/optsave.cxx b/svx/source/cui/optsave.cxx
index 29708444fe93..f8407a2a6be4 100644
--- a/svx/source/cui/optsave.cxx
+++ b/svx/source/cui/optsave.cxx
@@ -626,9 +626,17 @@ void SfxSaveTabPage::Reset( const SfxItemSet& )
aDocTypeLB.SelectEntryPos(0);
FilterHdl_Impl(&aDocTypeLB);
}
- catch(Exception& )
+ catch(Exception& e)
{
- DBG_ERROR("exception in FilterFactory access");
+ (void) e;
+ DBG_ERROR(
+ rtl::OUStringToOString(
+ (rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "exception in FilterFactory access: ")) +
+ e.Message),
+ RTL_TEXTENCODING_UTF8).
+ getStr());
}
pImpl->bInitialized = sal_True;
diff --git a/xmlhelp/source/cxxhelp/provider/databases.cxx b/xmlhelp/source/cxxhelp/provider/databases.cxx
index c0980017c2ed..a727ec82b70c 100644
--- a/xmlhelp/source/cxxhelp/provider/databases.cxx
+++ b/xmlhelp/source/cxxhelp/provider/databases.cxx
@@ -142,9 +142,6 @@ Databases::Databases( sal_Bool showBasic,
const com::sun::star::uno::Sequence< rtl::OUString >& imagesZipPaths,
const rtl::OUString& productName,
const rtl::OUString& productVersion,
- const rtl::OUString& vendorName,
- const rtl::OUString& vendorVersion,
- const rtl::OUString& vendorShort,
const rtl::OUString& styleSheet,
Reference< uno::XComponentContext > xContext )
: m_xContext( xContext ),
@@ -176,9 +173,7 @@ Databases::Databases( sal_Bool showBasic,
m_vReplacement[0] = productName;
m_vReplacement[1] = productVersion;
- m_vReplacement[2] = vendorName;
- m_vReplacement[3] = vendorVersion;
- m_vReplacement[4] = vendorShort;
+ // m_vReplacement[2...4] (vendorName/-Version/-Short) are empty strings
m_vReplacement[5] = productName;
m_vReplacement[6] = productVersion;
diff --git a/xmlhelp/source/cxxhelp/provider/databases.hxx b/xmlhelp/source/cxxhelp/provider/databases.hxx
index 87491c1b1e45..c1a236f9df72 100644
--- a/xmlhelp/source/cxxhelp/provider/databases.hxx
+++ b/xmlhelp/source/cxxhelp/provider/databases.hxx
@@ -192,9 +192,6 @@ namespace chelp {
const com::sun::star::uno::Sequence< rtl::OUString >& imagesZipPaths,
const rtl::OUString& productName,
const rtl::OUString& productVersion,
- const rtl::OUString& vendorName,
- const rtl::OUString& vendorVersion,
- const rtl::OUString& vendorShort,
const rtl::OUString& styleSheet,
com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > xContext );
@@ -294,9 +291,6 @@ namespace chelp {
rtl::OUString getProductName() const { return m_vReplacement[0]; }
rtl::OUString getProductVersion() const { return m_vReplacement[1]; }
- rtl::OUString getVendorName() const { return m_vReplacement[2]; }
- rtl::OUString getVendorVersion() const { return m_vReplacement[3]; }
- rtl::OUString getVendorShort() const { return m_vReplacement[4]; }
rtl::OUString expandURL( const rtl::OUString& aURL );
diff --git a/xmlhelp/source/cxxhelp/provider/provider.cxx b/xmlhelp/source/cxxhelp/provider/provider.cxx
index da5c4db374c1..d2f270452bcc 100644
--- a/xmlhelp/source/cxxhelp/provider/provider.cxx
+++ b/xmlhelp/source/cxxhelp/provider/provider.cxx
@@ -48,7 +48,6 @@
#include <com/sun/star/beans/PropertyAttribute.hpp>
#endif
#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/beans/PropertyState.hpp>
#include <com/sun/star/container/XContainer.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/container/XNameReplace.hpp>
@@ -312,9 +311,6 @@ void ContentProvider::init()
* now determing
* productname,
* productversion,
- * vendorname,
- * vendorversion,
- * vendorshort
*/
xHierAccess = getHierAccess( sProvider, "org.openoffice.Setup" );
@@ -334,20 +330,6 @@ void ContentProvider::init()
rtl::OUString::createFromAscii( " " ) +
setupextension );
- xHierAccess = getHierAccess( sProvider, "org.openoffice.Webtop.Common" );
- rtl::OUString vendorname(
- getKey( xHierAccess,"Product/ooName" ) );
-
- setupversion = rtl::OUString(
- getKey( xHierAccess,"Product/ooSetupVersion" ) );
- setupextension = rtl::OUString(
- getKey( xHierAccess,"Product/ooSetupExtension") );
- rtl::OUString vendorversion(
- setupversion +
- rtl::OUString::createFromAscii( " " ) +
- setupextension );
- rtl::OUString vendorshort = vendorname;
-
uno::Sequence< rtl::OUString > aImagesZipPaths( 2 );
xHierAccess = getHierAccess( sProvider, "org.openoffice.Office.Common" );
@@ -375,9 +357,6 @@ void ContentProvider::init()
aImagesZipPaths,
productname,
productversion,
- vendorname,
- vendorversion,
- vendorshort,
stylesheet,
xContext );
}
@@ -388,17 +367,6 @@ ContentProvider::getConfiguration() const
uno::Reference< lang::XMultiServiceFactory > sProvider;
if( m_xSMgr.is() )
{
- uno::Any aAny;
- aAny <<= rtl::OUString::createFromAscii( "plugin" );
- beans::PropertyValue aProp(
- rtl::OUString::createFromAscii( "servertype" ),
- -1,
- aAny,
- beans::PropertyState_DIRECT_VALUE );
-
- uno::Sequence< uno::Any > seq(1);
- seq[0] <<= aProp;
-
try
{
rtl::OUString sProviderService =
@@ -406,8 +374,7 @@ ContentProvider::getConfiguration() const
"com.sun.star.configuration.ConfigurationProvider" );
sProvider =
uno::Reference< lang::XMultiServiceFactory >(
- m_xSMgr->createInstanceWithArguments(
- sProviderService,seq ),
+ m_xSMgr->createInstance( sProviderService ),
uno::UNO_QUERY );
}
catch( const uno::Exception& )
diff --git a/xmlhelp/source/cxxhelp/provider/urlparameter.cxx b/xmlhelp/source/cxxhelp/provider/urlparameter.cxx
index c8685645c6fd..907da892ef1e 100644
--- a/xmlhelp/source/cxxhelp/provider/urlparameter.cxx
+++ b/xmlhelp/source/cxxhelp/provider/urlparameter.cxx
@@ -995,20 +995,11 @@ InputStreamTransformer::InputStreamTransformer( URLParameter* urlParam,
parString[last++] = "'css'";
parString[last++] = "vendorname";
- parString[last++] = rtl::OString('\'') +
- rtl::OString( pDatabases->getVendorName().getStr(),
- pDatabases->getVendorName().getLength(),
- RTL_TEXTENCODING_UTF8 ) + rtl::OString('\'');
+ parString[last++] = rtl::OString("''");
parString[last++] = "vendorversion";
- parString[last++] = rtl::OString('\'') +
- rtl::OString( pDatabases->getVendorVersion().getStr(),
- pDatabases->getVendorVersion().getLength(),
- RTL_TEXTENCODING_UTF8 ) + rtl::OString('\'');
+ parString[last++] = rtl::OString("''");
parString[last++] = "vendorshort";
- parString[last++] = rtl::OString('\'') +
- rtl::OString( pDatabases->getVendorShort().getStr(),
- pDatabases->getVendorShort().getLength(),
- RTL_TEXTENCODING_UTF8 ) + rtl::OString('\'');
+ parString[last++] = rtl::OString("''");
}
// Do we need to add extension path?
diff --git a/xmlhelp/source/treeview/tvread.cxx b/xmlhelp/source/treeview/tvread.cxx
index 62ec993e485d..1d6cb8a15900 100644
--- a/xmlhelp/source/treeview/tvread.cxx
+++ b/xmlhelp/source/treeview/tvread.cxx
@@ -682,22 +682,6 @@ ConfigData TVChildTarget::init( const Reference< XMultiServiceFactory >& xSMgr )
// replace anything like $(instpath);
subst( xSMgr,instPath );
-
- /**********************************************************************/
- /* reading Webtop.Common */
- /**********************************************************************/
-
- xHierAccess = getHierAccess( sProvider,
- "org.openoffice.Webtop.Common" );
- rtl::OUString vendorName( getKey( xHierAccess,"Product/ooName" ) );
-
- rtl::OUString setupversion( getKey( xHierAccess,"Product/ooSetupVersion" ) );
- rtl::OUString setupextension( getKey( xHierAccess,"Product/ooSetupExtension") );
- rtl::OUString vendorVersion( setupversion +
- rtl::OUString::createFromAscii( " " ) +
- setupextension );
- rtl::OUString vendorShort = vendorName;
-
/**********************************************************************/
/* reading setup */
/**********************************************************************/
@@ -706,8 +690,8 @@ ConfigData TVChildTarget::init( const Reference< XMultiServiceFactory >& xSMgr )
"org.openoffice.Setup" );
rtl::OUString productName( getKey( xHierAccess,"Product/ooName" ) );
- setupversion = getKey( xHierAccess,"Product/ooSetupVersion" );
- setupextension = rtl::OUString();
+ rtl::OUString setupversion( getKey( xHierAccess,"Product/ooSetupVersion" ) );
+ rtl::OUString setupextension;
utl::ConfigManager * mgr = utl::ConfigManager::GetConfigManager();
if (mgr != NULL) {
mgr->GetDirectConfigProperty(utl::ConfigManager::PRODUCTEXTENSION) >>=
@@ -800,9 +784,7 @@ ConfigData TVChildTarget::init( const Reference< XMultiServiceFactory >& xSMgr )
configData.m_vAdd[4] = 12;
configData.m_vReplacement[0] = productName;
configData.m_vReplacement[1] = productVersion;
- configData.m_vReplacement[2] = vendorName;
- configData.m_vReplacement[3] = vendorVersion;
- configData.m_vReplacement[4] = vendorShort;
+ // m_vReplacement[2...4] (vendorName/-Version/-Short) are empty strings
configData.system = system;
configData.locale = locale;