/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #include <sal/config.h> #include <cassert> #include <com/sun/star/beans/NamedValue.hpp> #include <com/sun/star/container/NoSuchElementException.hpp> #include <com/sun/star/container/XHierarchicalNameAccess.hpp> #include <com/sun/star/container/XNamed.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> #include <com/sun/star/registry/InvalidRegistryException.hpp> #include <com/sun/star/registry/InvalidValueException.hpp> #include <com/sun/star/registry/RegistryKeyType.hpp> #include <com/sun/star/registry/RegistryValueType.hpp> #include <com/sun/star/registry/XRegistryKey.hpp> #include <com/sun/star/registry/XSimpleRegistry.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/Type.hxx> #include <com/sun/star/uno/TypeClass.hpp> #include <com/sun/star/uno/XComponentContext.hpp> #include <com/sun/star/uno/XInterface.hpp> #include <com/sun/star/util/XFlushable.hpp> #include <cppu/unotype.hxx> #include <cppuhelper/exc_hlp.hxx> #include <cppuhelper/implbase.hxx> #include <cppuhelper/supportsservice.hxx> #include <cppuhelper/weak.hxx> #include <osl/mutex.hxx> #include <rtl/ustring.hxx> #include <sal/types.h> namespace com::sun::star::util { class XFlushListener; } namespace configmgr::configuration_registry { namespace { class Service: public cppu::WeakImplHelper< css::lang::XServiceInfo, css::registry::XSimpleRegistry, css::util::XFlushable > { public: explicit Service(css::uno::Reference< css::uno::XComponentContext > const & context); private: Service(const Service&) = delete; Service& operator=(const Service&) = delete; virtual ~Service() override {} virtual OUString SAL_CALL getImplementationName() override { return "com.sun.star.comp.configuration.ConfigurationRegistry"; } virtual sal_Bool SAL_CALL supportsService(OUString const & ServiceName) override { return cppu::supportsService(this, ServiceName); } virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override { return { "com.sun.star.configuration.ConfigurationRegistry" }; } virtual OUString SAL_CALL getURL() override; virtual void SAL_CALL open( OUString const & rURL, sal_Bool bReadOnly, sal_Bool) override; virtual sal_Bool SAL_CALL isValid() override; virtual void SAL_CALL close() override; virtual void SAL_CALL destroy() override; virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL getRootKey() override; virtual sal_Bool SAL_CALL isReadOnly() override; virtual void SAL_CALL mergeKey(OUString const &, OUString const &) override; virtual void SAL_CALL flush() override; virtual void SAL_CALL addFlushListener( css::uno::Reference< css::util::XFlushListener > const &) override; virtual void SAL_CALL removeFlushListener( css::uno::Reference< css::util::XFlushListener > const &) override; void checkValid(); void checkValid_RuntimeException(); void doClose(); css::uno::Reference< css::lang::XMultiServiceFactory > provider_; osl::Mutex mutex_; css::uno::Reference< css::uno::XInterface > access_; OUString url_; bool readOnly_; friend class RegistryKey; }; class RegistryKey: public cppu::WeakImplHelper< css::registry::XRegistryKey > { public: RegistryKey(Service & service, css::uno::Any const & value): service_(service), value_(value) {} private: RegistryKey(const RegistryKey&) = delete; RegistryKey& operator=(const RegistryKey&) = delete; virtual ~RegistryKey() override {} virtual OUString SAL_CALL getKeyName() override; virtual sal_Bool SAL_CALL isReadOnly() override; virtual sal_Bool SAL_CALL isValid() override; virtual css::registry::RegistryKeyType SAL_CALL getKeyType( OUString const &) override; virtual css::registry::RegistryValueType SAL_CALL getValueType() override; virtual sal_Int32 SAL_CALL getLongValue() override; virtual void SAL_CALL setLongValue(sal_Int32) override; virtual css::uno::Sequence< sal_Int32 > SAL_CALL getLongListValue() override; virtual void SAL_CALL setLongListValue( css::uno::Sequence< sal_Int32 > const &) override; virtual OUString SAL_CALL getAsciiValue() override; virtual void SAL_CALL setAsciiValue(OUString const &) override; virtual css::uno::Sequence< OUString > SAL_CALL getAsciiListValue() override; virtual void SAL_CALL setAsciiListValue( css::uno::Sequence< OUString > const &) override; virtual OUString SAL_CALL getStringValue() override; virtual void SAL_CALL setStringValue(OUString const &) override; virtual css::uno::Sequence< OUString > SAL_CALL getStringListValue() override; virtual void SAL_CALL setStringListValue( css::uno::Sequence< OUString > const &) override; virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBinaryValue() override; virtual void SAL_CALL setBinaryValue(css::uno::Sequence< sal_Int8 > const &) override; virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL openKey( OUString const & aKeyName) override; virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL createKey(OUString const &) override; virtual void SAL_CALL closeKey() override; virtual void SAL_CALL deleteKey(OUString const &) override; virtual css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > > SAL_CALL openKeys() override; virtual css::uno::Sequence< OUString > SAL_CALL getKeyNames() override; virtual sal_Bool SAL_CALL createLink( OUString const &, OUString const &) override; virtual void SAL_CALL deleteLink(OUString const &) override; virtual OUString SAL_CALL getLinkTarget(OUString const &) override; virtual OUString SAL_CALL getResolvedName( OUString const & aKeyName) override; Service & service_; css::uno::Any value_; }; Service::Service( css::uno::Reference< css::uno::XComponentContext > const & context) : readOnly_(false) { assert(context.is()); try { provider_.set( context->getServiceManager()->createInstanceWithContext( "com.sun.star.configuration.DefaultProvider", context), css::uno::UNO_QUERY_THROW); } catch (css::uno::RuntimeException &) { throw; } catch (css::uno::Exception & e) { throw css::uno::DeploymentException( ("component context fails to supply service" " com.sun.star.configuration.DefaultProvider of type" " com.sun.star.lang.XMultiServiceFactory: " + e.Message), context); } } OUString Service::getURL() { osl::MutexGuard g(mutex_); checkValid_RuntimeException(); return url_; } void Service::open(OUString const & rURL, sal_Bool bReadOnly, sal_Bool) { //TODO: bCreate osl::MutexGuard g(mutex_); if (access_.is()) { doClose(); } css::uno::Sequence< css::uno::Any > args(1); args[0] <<= css::beans::NamedValue("nodepath", css::uno::Any(rURL)); try { access_ = provider_->createInstanceWithArguments( (bReadOnly ? OUString("com.sun.star.configuration.ConfigurationAccess") : OUString( "com.sun.star.configuration.ConfigurationUpdateAccess")), args); } catch (css::uno::RuntimeException &) { throw; } catch (css::uno::Exception & e) { css::uno::Any anyEx = cppu::getCaughtException(); throw css::lang::WrappedTargetRuntimeException( "com.sun.star.configuration.ConfigurationRegistry: open failed: " + e.Message, static_cast< cppu::OWeakObject * >(this), anyEx ); } url_ = rURL; readOnly_ = bReadOnly; } sal_Bool Service::isValid() { osl::MutexGuard g(mutex_); return access_.is(); } void Service::close() { osl::MutexGuard g(mutex_); checkValid(); doClose(); } void Service::destroy() { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } css::uno::Reference< css::registry::XRegistryKey > Service::getRootKey() { osl::MutexGuard g(mutex_); checkValid(); return new RegistryKey(*this, css::uno::Any(access_)); } sal_Bool Service::isReadOnly() { osl::MutexGuard g(mutex_); checkValid_RuntimeException(); return readOnly_; } void Service::mergeKey(OUString const &, OUString const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } void Service::flush() { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } void Service::addFlushListener( css::uno::Reference< css::util::XFlushListener > const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } void Service::removeFlushListener( css::uno::Reference< css::util::XFlushListener > const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } void Service::checkValid() { if (!access_.is()) { throw css::registry::InvalidRegistryException( "com.sun.star.configuration.ConfigurationRegistry: not valid", static_cast< cppu::OWeakObject * >(this)); } } void Service::checkValid_RuntimeException() { if (!access_.is()) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not valid", static_cast< cppu::OWeakObject * >(this)); } } void Service::doClose() { access_.clear(); } OUString RegistryKey::getKeyName() { osl::MutexGuard g(service_.mutex_); service_.checkValid_RuntimeException(); css::uno::Reference< css::container::XNamed > named; if (value_ >>= named) { return named->getName(); } throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } sal_Bool RegistryKey::isReadOnly() { osl::MutexGuard g(service_.mutex_); service_.checkValid_RuntimeException(); return service_.readOnly_; //TODO: read-only sub-nodes in update access? } sal_Bool RegistryKey::isValid() { return service_.isValid(); } css::registry::RegistryKeyType RegistryKey::getKeyType(OUString const &) { osl::MutexGuard g(service_.mutex_); service_.checkValid(); return css::registry::RegistryKeyType_KEY; } css::registry::RegistryValueType RegistryKey::getValueType() { osl::MutexGuard g(service_.mutex_); service_.checkValid(); css::uno::Type t(value_.getValueType()); switch (t.getTypeClass()) { case css::uno::TypeClass_LONG: return css::registry::RegistryValueType_LONG; case css::uno::TypeClass_STRING: return css::registry::RegistryValueType_STRING; case css::uno::TypeClass_SEQUENCE: if (t == cppu::UnoType< css::uno::Sequence< sal_Int8 > >::get()) { return css::registry::RegistryValueType_BINARY; } else if (t == cppu::UnoType< css::uno::Sequence< sal_Int32 > >::get()) { return css::registry::RegistryValueType_LONGLIST; } else if (t == cppu::UnoType< css::uno::Sequence< OUString > >::get()) { return css::registry::RegistryValueType_STRINGLIST; } [[fallthrough]]; default: return css::registry::RegistryValueType_NOT_DEFINED; } } sal_Int32 RegistryKey::getLongValue() { osl::MutexGuard g(service_.mutex_); service_.checkValid(); sal_Int32 v = 0; if (value_ >>= v) { return v; } throw css::registry::InvalidValueException( "com.sun.star.configuration.ConfigurationRegistry", static_cast< cppu::OWeakObject * >(this)); } void RegistryKey::setLongValue(sal_Int32) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } css::uno::Sequence< sal_Int32 > RegistryKey::getLongListValue() { osl::MutexGuard g(service_.mutex_); service_.checkValid(); css::uno::Sequence< sal_Int32 > v; if (value_ >>= v) { return v; } throw css::registry::InvalidValueException( "com.sun.star.configuration.ConfigurationRegistry", static_cast< cppu::OWeakObject * >(this)); } void RegistryKey::setLongListValue(css::uno::Sequence< sal_Int32 > const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } OUString RegistryKey::getAsciiValue() { osl::MutexGuard g(service_.mutex_); service_.checkValid(); OUString v; if (value_ >>= v) { return v; } throw css::registry::InvalidValueException( "com.sun.star.configuration.ConfigurationRegistry", static_cast< cppu::OWeakObject * >(this)); } void RegistryKey::setAsciiValue(OUString const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } css::uno::Sequence< OUString > RegistryKey::getAsciiListValue() { osl::MutexGuard g(service_.mutex_); service_.checkValid(); css::uno::Sequence< OUString > v; if (value_ >>= v) { return v; } throw css::registry::InvalidValueException( "com.sun.star.configuration.ConfigurationRegistry", static_cast< cppu::OWeakObject * >(this)); } void RegistryKey::setAsciiListValue(css::uno::Sequence< OUString > const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } OUString RegistryKey::getStringValue() { osl::MutexGuard g(service_.mutex_); service_.checkValid(); OUString v; if (value_ >>= v) { return v; } throw css::registry::InvalidValueException( "com.sun.star.configuration.ConfigurationRegistry", static_cast< cppu::OWeakObject * >(this)); } void RegistryKey::setStringValue(OUString const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } css::uno::Sequence< OUString > RegistryKey::getStringListValue() { osl::MutexGuard g(service_.mutex_); service_.checkValid(); css::uno::Sequence< OUString > v; if (value_ >>= v) { return v; } throw css::registry::InvalidValueException( "com.sun.star.configuration.ConfigurationRegistry", static_cast< cppu::OWeakObject * >(this)); } void RegistryKey::setStringListValue( css::uno::Sequence< OUString > const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } css::uno::Sequence< sal_Int8 > RegistryKey::getBinaryValue() { osl::MutexGuard g(service_.mutex_); service_.checkValid(); css::uno::Sequence< sal_Int8 > v; if (value_ >>= v) { return v; } throw css::registry::InvalidValueException( "com.sun.star.configuration.ConfigurationRegistry", static_cast< cppu::OWeakObject * >(this)); } void RegistryKey::setBinaryValue(css::uno::Sequence< sal_Int8 > const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } css::uno::Reference< css::registry::XRegistryKey > RegistryKey::openKey( OUString const & aKeyName) { osl::MutexGuard g(service_.mutex_); service_.checkValid_RuntimeException(); css::uno::Reference< css::container::XHierarchicalNameAccess > access; if (value_ >>= access) { try { return new RegistryKey( service_, access->getByHierarchicalName(aKeyName)); } catch (css::container::NoSuchElementException &) {} } return css::uno::Reference< css::registry::XRegistryKey >(); } css::uno::Reference< css::registry::XRegistryKey > RegistryKey::createKey( OUString const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } void RegistryKey::closeKey() { osl::MutexGuard g(service_.mutex_); service_.checkValid_RuntimeException(); } void RegistryKey::deleteKey(OUString const &) { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > > RegistryKey::openKeys() { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } css::uno::Sequence< OUString > RegistryKey::getKeyNames() { throw css::uno::RuntimeException( "com.sun.star.configuration.ConfigurationRegistry: not implemented", static_cast< cppu::OWeakObject * >(this)); } sal_Bool RegistryKey::createLink(OUString const &, OUString const &) { osl::MutexGuard g(service_.mutex_); service_.checkValid_RuntimeException(); return false; } void RegistryKey::deleteLink(OUString const &) { osl::MutexGuard g(service_.mutex_); service_.checkValid_RuntimeException(); } OUString RegistryKey::getLinkTarget(OUString const &) { osl::MutexGuard g(service_.mutex_); service_.checkValid_RuntimeException(); return OUString(); } OUString RegistryKey::getResolvedName(OUString const & aKeyName) { osl::MutexGuard g(service_.mutex_); service_.checkValid_RuntimeException(); return aKeyName; } } extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* com_sun_star_comp_configuration_ConfigurationRegistry_get_implementation( css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const&) { return cppu::acquire(static_cast< cppu::OWeakObject * >(new Service(context))); } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ ption value='feature/gtktiledviewer'>feature/gtktiledviewer</option> <option value='feature/ia2'>feature/ia2</option> <option value='feature/ia2.2'>feature/ia2.2</option> <option value='feature/ia2.3'>feature/ia2.3</option> <option value='feature/ia2.4'>feature/ia2.4</option> <option value='feature/ia2.5'>feature/ia2.5</option> <option value='feature/improvexlsximport'>feature/improvexlsximport</option> <option value='feature/instdirlinktargets'>feature/instdirlinktargets</option> <option value='feature/item_refactor2'>feature/item_refactor2</option> <option value='feature/jsdialogs'>feature/jsdialogs</option> <option value='feature/jssidebar'>feature/jssidebar</option> <option value='feature/lfrb-vcl-opengl'>feature/lfrb-vcl-opengl</option> <option value='feature/libffi'>feature/libffi</option> <option value='feature/lok-calc-rtl'>feature/lok-calc-rtl</option> <option value='feature/lok-clipboard'>feature/lok-clipboard</option> <option value='feature/lok_cellcursor'>feature/lok_cellcursor</option> <option value='feature/lok_dialog'>feature/lok_dialog</option> <option value='feature/lok_dialog-backport'>feature/lok_dialog-backport</option> <option value='feature/lok_dialog2'>feature/lok_dialog2</option> <option value='feature/lok_sofficemain'>feature/lok_sofficemain</option> <option value='feature/lok_sofficemain2'>feature/lok_sofficemain2</option> <option value='feature/mac-opengl-fixes'>feature/mac-opengl-fixes</option> <option value='feature/macOS-weld'>feature/macOS-weld</option> <option value='feature/mailmerge-toolbar'>feature/mailmerge-toolbar</option> <option value='feature/mar-updater'>feature/mar-updater</option> <option value='feature/mariadb'>feature/mariadb</option> <option value='feature/misc-vba-rework'>feature/misc-vba-rework</option> <option value='feature/mork'>feature/mork</option> <option value='feature/nativealpha'>feature/nativealpha</option> <option value='feature/notebookbar'>feature/notebookbar</option> <option value='feature/notes-refactoring'>feature/notes-refactoring</option> <option value='feature/ooxml-analyze'>feature/ooxml-analyze</option> <option value='feature/opengl-canvas-rework'>feature/opengl-canvas-rework</option> <option value='feature/opengl-transitions-rework'>feature/opengl-transitions-rework</option> <option value='feature/opengl-vcl-text'>feature/opengl-vcl-text</option> <option value='feature/orcus-continuous-integration'>feature/orcus-continuous-integration</option> <option value='feature/orcus-odf'>feature/orcus-odf</option> <option value='feature/orcus-odf-rebased'>feature/orcus-odf-rebased</option> <option value='feature/orcus-odf-rebased2'>feature/orcus-odf-rebased2</option> <option value='feature/orcus-rebased'>feature/orcus-rebased</option> <option value='feature/owncloud-provider-for-android'>feature/owncloud-provider-for-android</option> <option value='feature/pdfium-master'>feature/pdfium-master</option> <option value='feature/perfwork4'>feature/perfwork4</option> <option value='feature/perfwork5'>feature/perfwork5</option> <option value='feature/pivotcharts'>feature/pivotcharts</option> <option value='feature/print_revamp'>feature/print_revamp</option> <option value='feature/priorities'>feature/priorities</option> <option value='feature/profilesafemode'>feature/profilesafemode</option> <option value='feature/propose-master-cib'>feature/propose-master-cib</option> <option value='feature/pytable'>feature/pytable</option> <option value='feature/pyweb-wizard'>feature/pyweb-wizard</option> <option value='feature/qt5-win+mac'>feature/qt5-win+mac</option> <option value='feature/refactor-god-objects'>feature/refactor-god-objects</option> <option value='feature/rendercontext'>feature/rendercontext</option> <option value='feature/resolve-comments'>feature/resolve-comments</option> <option value='feature/scaling-geometry-provider'>feature/scaling-geometry-provider</option> <option value='feature/screenshotannotation'>feature/screenshotannotation</option> <option value='feature/sgexperiment'>feature/sgexperiment</option> <option value='feature/skia'>feature/skia</option> <option value='feature/slidehack'>feature/slidehack</option> <option value='feature/slidehack2'>feature/slidehack2</option> <option value='feature/slideshow_onlySprites'>feature/slideshow_onlySprites</option> <option value='feature/slideshowprimitives'>feature/slideshowprimitives</option> <option value='feature/sparklines'>feature/sparklines</option> <option value='feature/spellig_popup_SID'>feature/spellig_popup_SID</option> <option value='feature/stub_writer'>feature/stub_writer</option> <option value='feature/svg-export'>feature/svg-export</option> <option value='feature/svg-optimisations'>feature/svg-optimisations</option> <option value='feature/svg-optimisations-5-0'>feature/svg-optimisations-5-0</option> <option value='feature/sw-delete-undo-rework'>feature/sw-delete-undo-rework</option> <option value='feature/sw_redlinehide_4a_for_libreoffice-6-2'>feature/sw_redlinehide_4a_for_libreoffice-6-2</option> <option value='feature/sw_redlinehide_4b_for_libreoffice-6-2'>feature/sw_redlinehide_4b_for_libreoffice-6-2</option> <option value='feature/table-style'>feature/table-style</option> <option value='feature/table-style-rebased'>feature/table-style-rebased</option> <option value='feature/table_panel'>feature/table_panel</option> <option value='feature/table_rotated_text'>feature/table_rotated_text</option> <option value='feature/taggedPDF' selected='selected'>feature/taggedPDF</option> <option value='feature/template_manager_improvements'>feature/template_manager_improvements</option> <option value='feature/template_manager_improvements2'>feature/template_manager_improvements2</option> <option value='feature/themesupport'>feature/themesupport</option> <option value='feature/themesupport2'>feature/themesupport2</option> <option value='feature/tiled-editing'>feature/tiled-editing</option> <option value='feature/tscp3'>feature/tscp3</option> <option value='feature/unitver'>feature/unitver</option> <option value='feature/unocrsrptr'>feature/unocrsrptr</option> <option value='feature/unostyles'>feature/unostyles</option> <option value='feature/unostyles2'>feature/unostyles2</option> <option value='feature/unostyles3'>feature/unostyles3</option> <option value='feature/use-ogl-context-in-canvas'>feature/use-ogl-context-in-canvas</option> <option value='feature/vcl-opengl'>feature/vcl-opengl</option> <option value='feature/vcl-opengl-integration'>feature/vcl-opengl-integration</option> <option value='feature/vcl-opengl2'>feature/vcl-opengl2</option> <option value='feature/vclptr'>feature/vclptr</option> <option value='feature/vlc'>feature/vlc</option> <option value='feature/vlc-rb'>feature/vlc-rb</option> <option value='feature/vs2012'>feature/vs2012</option> <option value='feature/wasm'>feature/wasm</option> <option value='feature/window-iter'>feature/window-iter</option> <option value='feature/windows-cross-build'>feature/windows-cross-build</option> <option value='feature/windowsupdater'>feature/windowsupdater</option> <option value='feature/xtiledrenderable'>feature/xtiledrenderable</option> <option value='feature/yrs-demo'>feature/yrs-demo</option> <option value='libreoffice-24-2'>libreoffice-24-2</option> <option value='libreoffice-24-2-0'>libreoffice-24-2-0</option> <option value='libreoffice-24-2-1'>libreoffice-24-2-1</option> <option value='libreoffice-24-2-2'>libreoffice-24-2-2</option> <option value='libreoffice-24-2-3'>libreoffice-24-2-3</option> <option value='libreoffice-24-2-4'>libreoffice-24-2-4</option> <option value='libreoffice-24-2-5'>libreoffice-24-2-5</option> <option value='libreoffice-24-2-6'>libreoffice-24-2-6</option> <option value='libreoffice-24-2-7'>libreoffice-24-2-7</option> <option value='libreoffice-24-8'>libreoffice-24-8</option> <option value='libreoffice-24-8-0'>libreoffice-24-8-0</option> <option value='libreoffice-24-8-1'>libreoffice-24-8-1</option> <option value='libreoffice-24-8-2'>libreoffice-24-8-2</option> <option value='libreoffice-24-8-3'>libreoffice-24-8-3</option> <option value='libreoffice-24-8-4'>libreoffice-24-8-4</option> <option value='libreoffice-24-8-5'>libreoffice-24-8-5</option> <option value='libreoffice-24-8-6'>libreoffice-24-8-6</option> <option value='libreoffice-25-2'>libreoffice-25-2</option> <option value='libreoffice-25-2-0'>libreoffice-25-2-0</option> <option value='libreoffice-25-2-1'>libreoffice-25-2-1</option> <option value='libreoffice-25-2-2'>libreoffice-25-2-2</option> <option value='libreoffice-3-5'>libreoffice-3-5</option> <option value='libreoffice-3-5-0'>libreoffice-3-5-0</option> <option value='libreoffice-3-5-1'>libreoffice-3-5-1</option> <option value='libreoffice-3-5-2'>libreoffice-3-5-2</option> <option value='libreoffice-3-5-3'>libreoffice-3-5-3</option> <option value='libreoffice-3-5-4'>libreoffice-3-5-4</option> <option value='libreoffice-3-5-5'>libreoffice-3-5-5</option> <option value='libreoffice-3-5-6'>libreoffice-3-5-6</option> <option value='libreoffice-3-5-7'>libreoffice-3-5-7</option> <option value='libreoffice-3-6'>libreoffice-3-6</option> <option value='libreoffice-3-6-0'>libreoffice-3-6-0</option> <option value='libreoffice-3-6-1'>libreoffice-3-6-1</option> <option value='libreoffice-3-6-2'>libreoffice-3-6-2</option> <option value='libreoffice-3-6-3'>libreoffice-3-6-3</option> <option value='libreoffice-3-6-4'>libreoffice-3-6-4</option> <option value='libreoffice-3-6-5'>libreoffice-3-6-5</option> <option value='libreoffice-3-6-6'>libreoffice-3-6-6</option> <option value='libreoffice-3-6-7'>libreoffice-3-6-7</option> <option value='libreoffice-4-0'>libreoffice-4-0</option> <option value='libreoffice-4-0-0'>libreoffice-4-0-0</option> <option value='libreoffice-4-0-1'>libreoffice-4-0-1</option> <option value='libreoffice-4-0-2'>libreoffice-4-0-2</option> <option value='libreoffice-4-0-3'>libreoffice-4-0-3</option> <option value='libreoffice-4-0-4'>libreoffice-4-0-4</option> <option value='libreoffice-4-0-5'>libreoffice-4-0-5</option> <option value='libreoffice-4-0-6'>libreoffice-4-0-6</option> <option value='libreoffice-4-1'>libreoffice-4-1</option> <option value='libreoffice-4-1-0'>libreoffice-4-1-0</option> <option value='libreoffice-4-1-1'>libreoffice-4-1-1</option> <option value='libreoffice-4-1-2'>libreoffice-4-1-2</option> <option value='libreoffice-4-1-3'>libreoffice-4-1-3</option> <option value='libreoffice-4-1-4'>libreoffice-4-1-4</option> <option value='libreoffice-4-1-5'>libreoffice-4-1-5</option> <option value='libreoffice-4-1-6'>libreoffice-4-1-6</option> <option value='libreoffice-4-2'>libreoffice-4-2</option> <option value='libreoffice-4-2-0'>libreoffice-4-2-0</option> <option value='libreoffice-4-2-1'>libreoffice-4-2-1</option> <option value='libreoffice-4-2-2'>libreoffice-4-2-2</option> <option value='libreoffice-4-2-3'>libreoffice-4-2-3</option> <option value='libreoffice-4-2-4'>libreoffice-4-2-4</option> <option value='libreoffice-4-2-5'>libreoffice-4-2-5</option> <option value='libreoffice-4-2-6'>libreoffice-4-2-6</option> <option value='libreoffice-4-2-7'>libreoffice-4-2-7</option> <option value='libreoffice-4-2-8'>libreoffice-4-2-8</option> <option value='libreoffice-4-3'>libreoffice-4-3</option> <option value='libreoffice-4-3-0'>libreoffice-4-3-0</option> <option value='libreoffice-4-3-1'>libreoffice-4-3-1</option> <option value='libreoffice-4-3-2'>libreoffice-4-3-2</option> <option value='libreoffice-4-3-3'>libreoffice-4-3-3</option> <option value='libreoffice-4-3-4'>libreoffice-4-3-4</option> <option value='libreoffice-4-3-5'>libreoffice-4-3-5</option> <option value='libreoffice-4-3-6'>libreoffice-4-3-6</option> <option value='libreoffice-4-3-7'>libreoffice-4-3-7</option> <option value='libreoffice-4-4'>libreoffice-4-4</option> <option value='libreoffice-4-4-0'>libreoffice-4-4-0</option> <option value='libreoffice-4-4-1'>libreoffice-4-4-1</option> <option value='libreoffice-4-4-2'>libreoffice-4-4-2</option> <option value='libreoffice-4-4-3'>libreoffice-4-4-3</option> <option value='libreoffice-4-4-4'>libreoffice-4-4-4</option> <option value='libreoffice-4-4-5'>libreoffice-4-4-5</option> <option value='libreoffice-4-4-6'>libreoffice-4-4-6</option> <option value='libreoffice-4-4-7'>libreoffice-4-4-7</option> <option value='libreoffice-5-0'>libreoffice-5-0</option> <option value='libreoffice-5-0-0'>libreoffice-5-0-0</option> <option value='libreoffice-5-0-1'>libreoffice-5-0-1</option> <option value='libreoffice-5-0-2'>libreoffice-5-0-2</option> <option value='libreoffice-5-0-3'>libreoffice-5-0-3</option> <option value='libreoffice-5-0-4'>libreoffice-5-0-4</option> <option value='libreoffice-5-0-5'>libreoffice-5-0-5</option> <option value='libreoffice-5-0-6'>libreoffice-5-0-6</option> <option value='libreoffice-5-1'>libreoffice-5-1</option> <option value='libreoffice-5-1-0'>libreoffice-5-1-0</option> <option value='libreoffice-5-1-1'>libreoffice-5-1-1</option> <option value='libreoffice-5-1-2'>libreoffice-5-1-2</option> <option value='libreoffice-5-1-3'>libreoffice-5-1-3</option> <option value='libreoffice-5-1-4'>libreoffice-5-1-4</option> <option value='libreoffice-5-1-5'>libreoffice-5-1-5</option> <option value='libreoffice-5-1-6'>libreoffice-5-1-6</option> <option value='libreoffice-5-2'>libreoffice-5-2</option> <option value='libreoffice-5-2-0'>libreoffice-5-2-0</option> <option value='libreoffice-5-2-1'>libreoffice-5-2-1</option> <option value='libreoffice-5-2-2'>libreoffice-5-2-2</option> <option value='libreoffice-5-2-3'>libreoffice-5-2-3</option> <option value='libreoffice-5-2-4'>libreoffice-5-2-4</option> <option value='libreoffice-5-2-5'>libreoffice-5-2-5</option> <option value='libreoffice-5-2-6'>libreoffice-5-2-6</option> <option value='libreoffice-5-2-7'>libreoffice-5-2-7</option> <option value='libreoffice-5-3'>libreoffice-5-3</option> <option value='libreoffice-5-3-0'>libreoffice-5-3-0</option> <option value='libreoffice-5-3-1'>libreoffice-5-3-1</option> <option value='libreoffice-5-3-2'>libreoffice-5-3-2</option> <option value='libreoffice-5-3-3'>libreoffice-5-3-3</option> <option value='libreoffice-5-3-4'>libreoffice-5-3-4</option> <option value='libreoffice-5-3-5'>libreoffice-5-3-5</option> <option value='libreoffice-5-3-6'>libreoffice-5-3-6</option> <option value='libreoffice-5-3-7'>libreoffice-5-3-7</option> <option value='libreoffice-5-4'>libreoffice-5-4</option> <option value='libreoffice-5-4-0'>libreoffice-5-4-0</option> <option value='libreoffice-5-4-1'>libreoffice-5-4-1</option> <option value='libreoffice-5-4-2'>libreoffice-5-4-2</option> <option value='libreoffice-5-4-3'>libreoffice-5-4-3</option> <option value='libreoffice-5-4-4'>libreoffice-5-4-4</option> <option value='libreoffice-5-4-5'>libreoffice-5-4-5</option> <option value='libreoffice-5-4-6'>libreoffice-5-4-6</option> <option value='libreoffice-5-4-7'>libreoffice-5-4-7</option> <option value='libreoffice-6-0'>libreoffice-6-0</option> <option value='libreoffice-6-0-0'>libreoffice-6-0-0</option> <option value='libreoffice-6-0-1'>libreoffice-6-0-1</option> <option value='libreoffice-6-0-2'>libreoffice-6-0-2</option> <option value='libreoffice-6-0-3'>libreoffice-6-0-3</option> <option value='libreoffice-6-0-4'>libreoffice-6-0-4</option> <option value='libreoffice-6-0-5'>libreoffice-6-0-5</option> <option value='libreoffice-6-0-6'>libreoffice-6-0-6</option> <option value='libreoffice-6-0-7'>libreoffice-6-0-7</option> <option value='libreoffice-6-1'>libreoffice-6-1</option> <option value='libreoffice-6-1-0'>libreoffice-6-1-0</option> <option value='libreoffice-6-1-1'>libreoffice-6-1-1</option> <option value='libreoffice-6-1-2'>libreoffice-6-1-2</option> <option value='libreoffice-6-1-3'>libreoffice-6-1-3</option> <option value='libreoffice-6-1-4'>libreoffice-6-1-4</option> <option value='libreoffice-6-1-5'>libreoffice-6-1-5</option> <option value='libreoffice-6-1-6'>libreoffice-6-1-6</option> <option value='libreoffice-6-2'>libreoffice-6-2</option> <option value='libreoffice-6-2-0'>libreoffice-6-2-0</option> <option value='libreoffice-6-2-1'>libreoffice-6-2-1</option> <option value='libreoffice-6-2-2'>libreoffice-6-2-2</option> <option value='libreoffice-6-2-3'>libreoffice-6-2-3</option> <option value='libreoffice-6-2-4'>libreoffice-6-2-4</option> <option value='libreoffice-6-2-5'>libreoffice-6-2-5</option> <option value='libreoffice-6-2-6'>libreoffice-6-2-6</option> <option value='libreoffice-6-2-7'>libreoffice-6-2-7</option> <option value='libreoffice-6-2-8'>libreoffice-6-2-8</option> <option value='libreoffice-6-3'>libreoffice-6-3</option> <option value='libreoffice-6-3-0'>libreoffice-6-3-0</option> <option value='libreoffice-6-3-1'>libreoffice-6-3-1</option> <option value='libreoffice-6-3-2'>libreoffice-6-3-2</option> <option value='libreoffice-6-3-3'>libreoffice-6-3-3</option> <option value='libreoffice-6-3-4'>libreoffice-6-3-4</option> <option value='libreoffice-6-3-5'>libreoffice-6-3-5</option> <option value='libreoffice-6-3-6'>libreoffice-6-3-6</option> <option value='libreoffice-6-4'>libreoffice-6-4</option> <option value='libreoffice-6-4-0'>libreoffice-6-4-0</option> <option value='libreoffice-6-4-1'>libreoffice-6-4-1</option> <option value='libreoffice-6-4-2'>libreoffice-6-4-2</option> <option value='libreoffice-6-4-3'>libreoffice-6-4-3</option> <option value='libreoffice-6-4-4'>libreoffice-6-4-4</option> <option value='libreoffice-6-4-5'>libreoffice-6-4-5</option> <option value='libreoffice-6-4-6'>libreoffice-6-4-6</option> <option value='libreoffice-6-4-7'>libreoffice-6-4-7</option> <option value='libreoffice-7-0'>libreoffice-7-0</option> <option value='libreoffice-7-0-0'>libreoffice-7-0-0</option> <option value='libreoffice-7-0-1'>libreoffice-7-0-1</option> <option value='libreoffice-7-0-2'>libreoffice-7-0-2</option> <option value='libreoffice-7-0-3'>libreoffice-7-0-3</option> <option value='libreoffice-7-0-4'>libreoffice-7-0-4</option> <option value='libreoffice-7-0-5'>libreoffice-7-0-5</option> <option value='libreoffice-7-0-6'>libreoffice-7-0-6</option> <option value='libreoffice-7-1'>libreoffice-7-1</option> <option value='libreoffice-7-1-0'>libreoffice-7-1-0</option> <option value='libreoffice-7-1-1'>libreoffice-7-1-1</option> <option value='libreoffice-7-1-2'>libreoffice-7-1-2</option> <option value='libreoffice-7-1-3'>libreoffice-7-1-3</option> <option value='libreoffice-7-1-4'>libreoffice-7-1-4</option> <option value='libreoffice-7-1-5'>libreoffice-7-1-5</option> <option value='libreoffice-7-1-6'>libreoffice-7-1-6</option> <option value='libreoffice-7-1-7'>libreoffice-7-1-7</option> <option value='libreoffice-7-2'>libreoffice-7-2</option> <option value='libreoffice-7-2-0'>libreoffice-7-2-0</option> <option value='libreoffice-7-2-1'>libreoffice-7-2-1</option> <option value='libreoffice-7-2-2'>libreoffice-7-2-2</option> <option value='libreoffice-7-2-3'>libreoffice-7-2-3</option> <option value='libreoffice-7-2-5'>libreoffice-7-2-5</option> <option value='libreoffice-7-2-6'>libreoffice-7-2-6</option> <option value='libreoffice-7-2-7'>libreoffice-7-2-7</option> <option value='libreoffice-7-3'>libreoffice-7-3</option> <option value='libreoffice-7-3-0'>libreoffice-7-3-0</option> <option value='libreoffice-7-3-1'>libreoffice-7-3-1</option> <option value='libreoffice-7-3-2'>libreoffice-7-3-2</option> <option value='libreoffice-7-3-3'>libreoffice-7-3-3</option> <option value='libreoffice-7-3-4'>libreoffice-7-3-4</option> <option value='libreoffice-7-3-5'>libreoffice-7-3-5</option> <option value='libreoffice-7-3-6'>libreoffice-7-3-6</option> <option value='libreoffice-7-3-7'>libreoffice-7-3-7</option> <option value='libreoffice-7-4'>libreoffice-7-4</option> <option value='libreoffice-7-4-0'>libreoffice-7-4-0</option> <option value='libreoffice-7-4-1'>libreoffice-7-4-1</option> <option value='libreoffice-7-4-2'>libreoffice-7-4-2</option> <option value='libreoffice-7-4-3'>libreoffice-7-4-3</option> <option value='libreoffice-7-4-4'>libreoffice-7-4-4</option> <option value='libreoffice-7-4-6'>libreoffice-7-4-6</option> <option value='libreoffice-7-4-7'>libreoffice-7-4-7</option> <option value='libreoffice-7-5'>libreoffice-7-5</option> <option value='libreoffice-7-5-0'>libreoffice-7-5-0</option> <option value='libreoffice-7-5-1'>libreoffice-7-5-1</option> <option value='libreoffice-7-5-2'>libreoffice-7-5-2</option> <option value='libreoffice-7-5-3'>libreoffice-7-5-3</option> <option value='libreoffice-7-5-4'>libreoffice-7-5-4</option> <option value='libreoffice-7-5-5'>libreoffice-7-5-5</option> <option value='libreoffice-7-5-6'>libreoffice-7-5-6</option> <option value='libreoffice-7-5-7'>libreoffice-7-5-7</option> <option value='libreoffice-7-5-8'>libreoffice-7-5-8</option> <option value='libreoffice-7-5-9'>libreoffice-7-5-9</option> <option value='libreoffice-7-6'>libreoffice-7-6</option> <option value='libreoffice-7-6-0'>libreoffice-7-6-0</option> <option value='libreoffice-7-6-1'>libreoffice-7-6-1</option> <option value='libreoffice-7-6-2'>libreoffice-7-6-2</option> <option value='libreoffice-7-6-3'>libreoffice-7-6-3</option> <option value='libreoffice-7-6-4'>libreoffice-7-6-4</option> <option value='libreoffice-7-6-5'>libreoffice-7-6-5</option> <option value='libreoffice-7-6-6'>libreoffice-7-6-6</option> <option value='libreoffice-7-6-7'>libreoffice-7-6-7</option> <option value='master'>master</option> <option value='ports/macosx10.5/master'>ports/macosx10.5/master</option> <option value='private/Ashod/cd-5.3-3.2_import_unloaded'>private/Ashod/cd-5.3-3.2_import_unloaded</option> <option value='private/Ashod/cd-5.3-3.2_import_unloaded_share_GfxLink'>private/Ashod/cd-5.3-3.2_import_unloaded_share_GfxLink</option> <option value='private/Ashod/cd-5.3.3.2'>private/Ashod/cd-5.3.3.2</option> <option value='private/Ashod/cp-5.0-preinit'>private/Ashod/cp-5.0-preinit</option> <option value='private/Ashod/fast-calc-rendering'>private/Ashod/fast-calc-rendering</option> <option value='private/Ashod/pdfium'>private/Ashod/pdfium</option> <option value='private/Ashod/pdfium_on_master'>private/Ashod/pdfium_on_master</option> <option value='private/Ashod/pdfium_on_master_fixed'>private/Ashod/pdfium_on_master_fixed</option> <option value='private/EL-SHREIF/ui_logger'>private/EL-SHREIF/ui_logger</option> <option value='private/Minion3665/swf-export'>private/Minion3665/swf-export</option> <option value='private/Rosemary/change-tracking'>private/Rosemary/change-tracking</option> <option value='private/Sweetshark/killswclient'>private/Sweetshark/killswclient</option> <option value='private/Sweetshark/lessdepend'>private/Sweetshark/lessdepend</option> <option value='private/Sweetshark/multilistenerfix'>private/Sweetshark/multilistenerfix</option> <option value='private/ajrhunt/c4'>private/ajrhunt/c4</option> <option value='private/ajrhunt/cunit'>private/ajrhunt/cunit</option> <option value='private/ajrhunt/cunitdemo'>private/ajrhunt/cunitdemo</option> <option value='private/ajrhunt/firebird-improvement'>private/ajrhunt/firebird-improvement</option> <option value='private/bansan/chardraw'>private/bansan/chardraw</option> <option value='private/bubli/textboxchaining'>private/bubli/textboxchaining</option> <option value='private/hcvcastro/preinit'>private/hcvcastro/preinit</option> <option value='private/hcvcastro/undo-row-comment'>private/hcvcastro/undo-row-comment</option> <option value='private/jmux/armin-strip-before-squash'>private/jmux/armin-strip-before-squash</option> <option value='private/jmux/broken-static-win'>private/jmux/broken-static-win</option> <option value='private/jmux/current-reorga'>private/jmux/current-reorga</option> <option value='private/jmux/meson'>private/jmux/meson</option> <option value='private/jmux/meson-gsoc-2021'>private/jmux/meson-gsoc-2021</option> <option value='private/jmux/oss-fuzz'>private/jmux/oss-fuzz</option> <option value='private/jmux/oss-fuzz-wip'>private/jmux/oss-fuzz-wip</option> <option value='private/jmux/scheduler-fixes'>private/jmux/scheduler-fixes</option> <option value='private/jmux/shape.odt'>private/jmux/shape.odt</option> <option value='private/jmux/wasm-for-master'>private/jmux/wasm-for-master</option> <option value='private/jmux/wasm-tmp'>private/jmux/wasm-tmp</option> <option value='private/jmux/wasm_for_master_catchall'>private/jmux/wasm_for_master_catchall</option> <option value='private/jmux/win-arm64'>private/jmux/win-arm64</option> <option value='private/jmux/win-test-nohang'>private/jmux/win-test-nohang</option> <option value='private/juergen/Tests'>private/juergen/Tests</option> <option value='private/juergen/check-cjk'>private/juergen/check-cjk</option> <option value='private/kendy/condformat-api'>private/kendy/condformat-api</option> <option value='private/kendy/condformat-fdo82014'>private/kendy/condformat-fdo82014</option> <option value='private/kendy/mailmerge-04'>private/kendy/mailmerge-04</option> <option value='private/kendy/mailmerge-05'>private/kendy/mailmerge-05</option> <option value='private/kendy/swinterpreter'>private/kendy/swinterpreter</option> <option value='private/kendy/testcl'>private/kendy/testcl</option> <option value='private/khaledhosny/color-fonts'>private/khaledhosny/color-fonts</option> <option value='private/khaledhosny/vcl-cleanup-font'>private/khaledhosny/vcl-cleanup-font</option> <option value='private/kohei/chart-bugs'>private/kohei/chart-bugs</option> <option value='private/kohei/find-replace-all-perf'>private/kohei/find-replace-all-perf</option> <option value='private/kohei/headless-perf'>private/kohei/headless-perf</option> <option value='private/kohei/if-or-not-if-jump'>private/kohei/if-or-not-if-jump</option> <option value='private/kohei/sort-ref-update'>private/kohei/sort-ref-update</option> <option value='private/lfrb/opengl-vcl'>private/lfrb/opengl-vcl</option> <option value='private/lgodard/calc_notes_import_export'>private/lgodard/calc_notes_import_export</option> <option value='private/lgodard/tdf#117202'>private/lgodard/tdf#117202</option> <option value='private/llunak/mailmerge'>private/llunak/mailmerge</option> <option value='private/llunak/mailmerge_01'>private/llunak/mailmerge_01</option> <option value='private/llunak/mailmerge_02'>private/llunak/mailmerge_02</option> <option value='private/llunak/mailmerge_03'>private/llunak/mailmerge_03</option> <option value='private/llunak/munich_12587'>private/llunak/munich_12587</option> <option value='private/llunak/skia'>private/llunak/skia</option> <option value='private/lmamane/basetest'>private/lmamane/basetest</option> <option value='private/lmamane/for-julien2412'>private/lmamane/for-julien2412</option> <option value='private/lmamane/for-julien2412-master'>private/lmamane/for-julien2412-master</option> <option value='private/lmamane/tdf110997'>private/lmamane/tdf110997</option> <option value='private/lmamane/timedate-controls-nanosecond'>private/lmamane/timedate-controls-nanosecond</option> <option value='private/lmamane/validation'>private/lmamane/validation</option> <option value='private/mcecchetti/23H1/a11y/paragraph'>private/mcecchetti/23H1/a11y/paragraph</option> <option value='private/mcecchetti/accessibility/paragraph'>private/mcecchetti/accessibility/paragraph</option> <option value='private/mcecchetti/amd/pdf-export-jpeg'>private/mcecchetti/amd/pdf-export-jpeg</option> <option value='private/mcecchetti/bitmapcrc64'>private/mcecchetti/bitmapcrc64</option> <option value='private/mcecchetti/bitmapcrc64-5-0'>private/mcecchetti/bitmapcrc64-5-0</option> <option value='private/mcecchetti/calc-perf-unit-test'>private/mcecchetti/calc-perf-unit-test</option> <option value='private/mcecchetti/calc-unit-test'>private/mcecchetti/calc-unit-test</option> <option value='private/mcecchetti/gl-program-binary'>private/mcecchetti/gl-program-binary</option> <option value='private/mert/wip_deepl'>private/mert/wip_deepl</option> <option value='private/mikekaganski/multicolumn'>private/mikekaganski/multicolumn</option> <option value='private/mmeeks/aafixes44'>private/mmeeks/aafixes44</option> <option value='private/mmeeks/backports'>private/mmeeks/backports</option> <option value='private/mmeeks/binarydatacache'>private/mmeeks/binarydatacache</option> <option value='private/mmeeks/bitmapcrc64'>private/mmeeks/bitmapcrc64</option> <option value='private/mmeeks/copy-paste'>private/mmeeks/copy-paste</option> <option value='private/mmeeks/copypaste'>private/mmeeks/copypaste</option> <option value='private/mmeeks/cp-6.2-bits'>private/mmeeks/cp-6.2-bits</option> <option value='private/mmeeks/cp64merge'>private/mmeeks/cp64merge</option> <option value='private/mmeeks/currency-dropdown'>private/mmeeks/currency-dropdown</option> <option value='private/mmeeks/foo'>private/mmeeks/foo</option> <option value='private/mmeeks/formula-iterator'>private/mmeeks/formula-iterator</option> <option value='private/mmeeks/gldebug'>private/mmeeks/gldebug</option> <option value='private/mmeeks/hidpi-bits'>private/mmeeks/hidpi-bits</option> <option value='private/mmeeks/icontest'>private/mmeeks/icontest</option> <option value='private/mmeeks/opengl-backbuffer'>private/mmeeks/opengl-backbuffer</option> <option value='private/mmeeks/opengl-backbuffer2'>private/mmeeks/opengl-backbuffer2</option> <option value='private/mmeeks/sandbox'>private/mmeeks/sandbox</option> <option value='private/mmeeks/swapdatacontainer'>private/mmeeks/swapdatacontainer</option> <option value='private/mmeeks/vcl-opengl3'>private/mmeeks/vcl-opengl3</option> <option value='private/moggi/fix-opengl-context-problems'>private/moggi/fix-opengl-context-problems</option> <option value='private/moggi/improved-dxf-xls-export'>private/moggi/improved-dxf-xls-export</option> <option value='private/moggi/opengl-4-4-build-test'>private/moggi/opengl-4-4-build-test</option> <option value='private/moggi/opengl-preparation'>private/moggi/opengl-preparation</option> <option value='private/moggi/opengl-vcl-win'>private/moggi/opengl-vcl-win</option> <option value='private/moggi/orcus-improvements'>private/moggi/orcus-improvements</option> <option value='private/moggi/track-win-dc'>private/moggi/track-win-dc</option> <option value='private/moggi/ui-test'>private/moggi/ui-test</option> <option value='private/moggi/vcl-opengl3'>private/moggi/vcl-opengl3</option> <option value='private/mst/sw_fieldmarkhide'>private/mst/sw_fieldmarkhide</option> <option value='private/mst/sw_redlinehide'>private/mst/sw_redlinehide</option> <option value='private/mst/sw_redlinehide_2'>private/mst/sw_redlinehide_2</option> <option value='private/mst/sw_redlinehide_3'>private/mst/sw_redlinehide_3</option> <option value='private/mst/sw_redlinehide_4a'>private/mst/sw_redlinehide_4a</option> <option value='private/mst/sw_redlinehide_4b'>private/mst/sw_redlinehide_4b</option> <option value='private/pranavk/modernize_gtktiledviewer'>private/pranavk/modernize_gtktiledviewer</option> <option value='private/quwex/gsoc-box2d-experimental'>private/quwex/gsoc-box2d-experimental</option> <option value='private/quwex/notespane-search'>private/quwex/notespane-search</option> <option value='private/quwex/notespaneflat'>private/quwex/notespaneflat</option> <option value='private/quwex/notespanesquashed'>private/quwex/notespanesquashed</option> <option value='private/quwex/tdf59323'>private/quwex/tdf59323</option> <option value='private/s.mehrbrodt/colorpicker-backport'>private/s.mehrbrodt/colorpicker-backport</option> <option value='private/sweetshark/swdepend'>private/sweetshark/swdepend</option> <option value='private/tbsdy/clipping'>private/tbsdy/clipping</option> <option value='private/tbsdy/drawserverfontlayout'>private/tbsdy/drawserverfontlayout</option> <option value='private/tbsdy/emf'>private/tbsdy/emf</option> <option value='private/tbsdy/osl_getAllEnvironment'>private/tbsdy/osl_getAllEnvironment</option> <option value='private/tbsdy/outdev'>private/tbsdy/outdev</option> <option value='private/tbsdy/printinfomgr'>private/tbsdy/printinfomgr</option> <option value='private/tbsdy/workbench'>private/tbsdy/workbench</option> <option value='private/thb/libo-6-1+backports'>private/thb/libo-6-1+backports</option> <option value='private/thb/libreoffice-5-2+backports'>private/thb/libreoffice-5-2+backports</option> <option value='private/thb/sw_redlinehide-6-1'>private/thb/sw_redlinehide-6-1</option> <option value='private/thb/tdf149754'>private/thb/tdf149754</option> <option value='private/thb/wasm-upstreaming'>private/thb/wasm-upstreaming</option> <option value='private/timar/cp-6.2-centos7'>private/timar/cp-6.2-centos7</option> <option value='private/timar/fontconfigcrash'>private/timar/fontconfigcrash</option> <option value='private/timar/pythonupgrademsp'>private/timar/pythonupgrademsp</option> <option value='private/tml/Use-the-iOS-French-and-Italian-dictionaries-for-othe'>private/tml/Use-the-iOS-French-and-Italian-dictionaries-for-othe</option> <option value='private/tml/android-use-bionic-linker-copy'>private/tml/android-use-bionic-linker-copy</option> <option value='private/tml/android-use-faulty.lib'>private/tml/android-use-faulty.lib</option> <option value='private/tml/cp-6-4-28-1'>private/tml/cp-6-4-28-1</option> <option value='private/tml/fixwintext'>private/tml/fixwintext</option> <option value='private/tml/iculess'>private/tml/iculess</option> <option value='private/tml/lov-6.1.5.2'>private/tml/lov-6.1.5.2</option> <option value='private/tml/lov-6.2.1'>private/tml/lov-6.2.1</option> <option value='private/tml/lov-7.0.3.3'>private/tml/lov-7.0.3.3</option> <option value='private/tml/lov-7.0.4'>private/tml/lov-7.0.4</option> <option value='private/tml/lov-7.1.2'>private/tml/lov-7.1.2</option> <option value='private/tml/opencl-default-1'>private/tml/opencl-default-1</option> <option value='private/tvajngerl/staging'>private/tvajngerl/staging</option> <option value='ref/for/distro/collabora/cp-6.2'>ref/for/distro/collabora/cp-6.2</option> </select> <input type='submit' value='switch'/></form></td></tr> <tr><td class='sub'>LibreOffice 核心代码仓库</td><td class='sub right'>文档基金会</td></tr></table> <table class='tabs'><tr><td> <a href='/cgit/lo/core/?h=feature/taggedPDF'>summary</a><a href='/cgit/lo/core/refs/?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5'>refs</a><a class='active' href='/cgit/lo/core/log/oovbaapi/ooo/vba/word/WdUnits.idl?h=feature/taggedPDF'>log</a><a href='/cgit/lo/core/tree/oovbaapi/ooo/vba/word/WdUnits.idl?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5'>tree</a><a href='/cgit/lo/core/commit/oovbaapi/ooo/vba/word/WdUnits.idl?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5'>commit</a><a href='/cgit/lo/core/diff/oovbaapi/ooo/vba/word/WdUnits.idl?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit/lo/core/log/oovbaapi/ooo/vba/word/WdUnits.idl'> <input type='hidden' name='h' value='feature/taggedPDF'/><input type='hidden' name='id' value='573a473275ad7c76d0cada9b7e73d4923e7a79d5'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/cgit/lo/core/log/?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5'>root</a>/<a href='/cgit/lo/core/log/oovbaapi?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5'>oovbaapi</a>/<a href='/cgit/lo/core/log/oovbaapi/ooo?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5'>ooo</a>/<a href='/cgit/lo/core/log/oovbaapi/ooo/vba?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5'>vba</a>/<a href='/cgit/lo/core/log/oovbaapi/ooo/vba/word?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5'>word</a>/<a href='/cgit/lo/core/log/oovbaapi/ooo/vba/word/WdUnits.idl?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5'>WdUnits.idl</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/cgit/lo/core/log/oovbaapi/ooo/vba/word/WdUnits.idl?h=feature/taggedPDF&id=573a473275ad7c76d0cada9b7e73d4923e7a79d5&showmsg=1'>Expand</a>)</th><th class='left'>Author</th></tr>