diff options
author | skotti <skotti@wintermute> | 2009-10-27 14:57:42 +0100 |
---|---|---|
committer | skotti <skotti@wintermute> | 2009-10-27 14:57:42 +0100 |
commit | a32c335c3dcff3da622620e6f2aba8669c3692c2 (patch) | |
tree | 5f95d90a2f9066dfabb8dcc565329bd2391953e2 | |
parent | e92917d1bc75f095222ec757f0006b8ef6883a9b (diff) | |
parent | b8519a1c00b47e863f7e8499c7e14bf2099b2252 (diff) |
Merge latest DEV300 and CWS sb111
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 & 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 -> 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( + ®istry, 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("&")); + break; + case '"': + buf.appendAscii(RTL_CONSTASCII_STRINGPARAM(""")); + break; + case '\'': + buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("'")); + 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("	")); + i = j + 1; + break; + case '\x0A': + writeData(handle, convertToUtf8(value, i, j - i)); + writeData(handle, RTL_CONSTASCII_STRINGPARAM("
")); + i = j + 1; + break; + case '\x0D': + writeData(handle, convertToUtf8(value, i, j - i)); + writeData(handle, RTL_CONSTASCII_STRINGPARAM("
")); + i = j + 1; + break; + case '"': + writeData(handle, convertToUtf8(value, i, j - i)); + writeData(handle, RTL_CONSTASCII_STRINGPARAM(""")); + i = j + 1; + break; + case '&': + writeData(handle, convertToUtf8(value, i, j - i)); + writeData(handle, RTL_CONSTASCII_STRINGPARAM("&")); + i = j + 1; + break; + case '<': + writeData(handle, convertToUtf8(value, i, j - i)); + writeData(handle, RTL_CONSTASCII_STRINGPARAM("<")); + 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("
")); + i = j + 1; + } else if (c == '&') { + writeData(handle, convertToUtf8(value, i, j - i)); + writeData(handle, RTL_CONSTASCII_STRINGPARAM("&")); + i = j + 1; + } else if (c == '<') { + writeData(handle, convertToUtf8(value, i, j - i)); + writeData(handle, RTL_CONSTASCII_STRINGPARAM("<")); + 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(">")); + 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])>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" Disk Label (Face only)</value> + <value>C2166 Avery 3.5" 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" Diskette - Face Only</value> + <value>J400DK 3.5" 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" Diskette - Face Only</value> + <value>J8666 3.5" 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" Diskette - Face Only</value> + <value>J8766 3.5" 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" Diskette - Face Only</value> + <value>L300DK 3.5" 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" Diskette</value> + <value>L7663 5.25" 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" Diskette - Wraparound</value> + <value>L7664 3.5" 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" Diskette - Face Only</value> + <value>L7666 3.5" 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 & White</value> + <value>L7676 Full Face CD/DVD Labels - Black & 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" Diskette</value> + <value>J8766 3.5" 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" Diskette - Wraparound</value> + <value>L7664 3.5" 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" Diskette</value> + <value>L7666 3.5" 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" Diskette - White</value> + <value>5196 3-1/2" 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" Diskette - Red</value> + <value>5096 3-1/2" 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" Diskette - Blue</value> + <value>5896 3-1/2" 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" x 4"</value> + <value>74520 Name Badge Inserts - 3" x 4"</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" x 4"</value> + <value>74540 Name Badge Inserts - 3" x 4"</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" x 4"</value> + <value>74541 Name Badge Inserts - 3" x 4"</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" x 3 1/2"</value> + <value>74550 Name Badge Inserts - 2 1/4" x 3 1/2"</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" x 3"</value> + <value>74552 Name Badge Inserts - 2" x 3"</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" x 3"</value> + <value>74558 Name Badge Inserts - 2" x 3"</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" x 3 1/2"</value> + <value>74650 Name Badge Inserts - 2 1/4" x 3 1/2"</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" x 3 1/2"</value> + <value>74651 Name Badge Inserts - 2 1/4" x 3 1/2"</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" Diskette</value> + <value>8196 Ink Jet 3-1/2" 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" or 5/16"</value> + <value>11251 Clear Label/Index Maker Spine Label 1/4" or 5/16"</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" or 1/2"</value> + <value>11251 Clear Label/Index Maker Spine Label 3/8" or 1/2"</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" or 3/4"</value> + <value>11251 Clear Label/Index Maker Spine Label 5/8" or 3/4"</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" or Larger</value> + <value>11251 Clear Label/Index Maker Spine Label 1" 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" or 5/16"</value> + <value>11253 Clear Label/Index Maker Spine Label 1/4" or 5/16"</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" or 1/2"</value> + <value>11253 Clear Label/Index Maker Spine Label 3/8" or 1/2"</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" or 3/4"</value> + <value>11253 Clear Label/Index Maker Spine Label 5/8" or 3/4"</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" or Larger</value> + <value>11253 Clear Label/Index Maker Spine Label 1" 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"</value> + <value>Prof. Ready Index Spine Insert 1"</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"</value> + <value>Prof. Ready Index Spine Insert 1 1/2"</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"</value> + <value>Prof. Ready Index Spine Insert 2"</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"</value> + <value>Prof. Ready Index Spine Insert 3"</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"</value> + <value>Self Adhesive Index Tab 1"</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"</value> + <value>Self Adhesive Index Tab 1 1/2"</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"</value> + <value>Self Adhesive Index Tab 2"</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 'n Tab - 5 Tab</value> + <value>Protect '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 'n Tab - 8 Tab</value> + <value>Protect '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"</value> + <value>TitleFrames Asst.Spines Insert 1"</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"</value> + <value>TitleFrames Asst.Spines Insert 1 1/2"</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"</value> + <value>TitleFrames Asst.Spines Insert 2"</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"</value> + <value>TitleFrames Asst. Spines Insert 3"</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"</value> + <value>TitleFrames Cover - 1"</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"</value> + <value>TitleFrames Spine - 1"</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"</value> + <value>TitleFrames Cover - 1 1/2"</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"</value> + <value>TitleFrames Spine - 1 1/2"</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" Diskette-White</value> + <value>2186 3.5" 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 'Em 3.5" Diskette-Face Only Labels</value> + <value>6490 Remove 'Em 3.5" 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 'Em File Folder Labels</value> + <value>6466 Remove '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 'Em Address Labels</value> + <value>6460 Remove '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 'Em Shipping Labels</value> + <value>6464 Remove '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'em white laser 8 1/2" x 11"</value> + <value>6503 Remove'em white laser 8 1/2" x 11"</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" x 6" Card</value> + <value>8313 Glossy Photo Quality 4" x 6" 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" x 11" Card</value> + <value>8314 Glossy Photo Quality 8-1/2" x 11" 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" Diskette</value> + <value>4241 3-1/2" 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" Disk.</value> + <value>3677 Computer-Etiketten, für 3,5" 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" Disk.</value> + <value>3684 Computer-Etiketten, für 3,5" 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" Disk.</value> + <value>3685 Computer-Etiketten, für 3,5" 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" Disk.</value> + <value>3686 Computer-Etiketten, für 3,5" 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" Disk.</value> + <value>3687 Computer-Etiketten, für 3,5" 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; |