/* -*- 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 . */ #ifndef INCLUDED_SC_INC_TOKEN_HXX #define INCLUDED_SC_INC_TOKEN_HXX #include <memory> #include <vector> #include <formula/opcode.hxx> #include "refdata.hxx" #include "scdllapi.h" #include <formula/token.hxx> #include "calcmacros.hxx" #include "types.hxx" // Matrix token constants. #define MATRIX_TOKEN_HAS_RANGE 1 class ScJumpMatrix; class ScMatrix; struct ScSheetLimits; typedef ::std::vector< ScComplexRefData > ScRefList; #if DEBUG_FORMULA_COMPILER void DumpToken(formula::FormulaToken const & rToken); #endif /** If rTok1 and rTok2 both are SingleRef or DoubleRef tokens, extend/merge ranges as needed for ocRange. @param rPos The formula's position, used to calculate absolute positions from relative references. @param bReuseDoubleRef If true, a DoubleRef token is reused if passed as rTok1 or rTok2, else a new DoubleRef token is created and returned. @return A reused or new'ed ScDoubleRefToken, or a NULL TokenRef if rTok1 or rTok2 are not of sv(Single|Double)Ref */ formula::FormulaTokenRef extendRangeReference( ScSheetLimits& rLimits, formula::FormulaToken & rTok1, formula::FormulaToken & rTok2, const ScAddress & rPos, bool bReuseDoubleRef ); class ScSingleRefToken final : public formula::FormulaToken { private: ScSheetLimits& mrSheetLimits; // don't use rtl::Reference to avoid ref-counting traffic ScSingleRefData aSingleRef; public: ScSingleRefToken( ScSheetLimits& rLimits, const ScSingleRefData& r, OpCode e = ocPush ) : FormulaToken( formula::svSingleRef, e ), mrSheetLimits(rLimits), aSingleRef( r ) {} virtual const ScSingleRefData* GetSingleRef() const override; virtual ScSingleRefData* GetSingleRef() override; virtual bool TextEqual( const formula::FormulaToken& rToken ) const override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScSingleRefToken(*this); } }; class ScDoubleRefToken final : public formula::FormulaToken { private: ScSheetLimits& mrSheetLimits; // don't use rtl::Reference to avoid ref-counting traffic ScComplexRefData aDoubleRef; public: ScDoubleRefToken( ScSheetLimits& rLimits, const ScComplexRefData& r, OpCode e = ocPush ) : FormulaToken( formula::svDoubleRef, e ), mrSheetLimits(rLimits), aDoubleRef( r ) {} virtual const ScSingleRefData* GetSingleRef() const override; virtual ScSingleRefData* GetSingleRef() override; virtual const ScComplexRefData* GetDoubleRef() const override; virtual ScComplexRefData* GetDoubleRef() override; virtual const ScSingleRefData* GetSingleRef2() const override; virtual ScSingleRefData* GetSingleRef2() override; virtual bool TextEqual( const formula::FormulaToken& rToken ) const override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScDoubleRefToken(*this); } }; class ScMatrixToken final : public formula::FormulaToken { private: ScMatrixRef const pMatrix; public: ScMatrixToken( const ScMatrixRef& p ); ScMatrixToken( const ScMatrixToken& ); virtual const ScMatrix* GetMatrix() const override; virtual ScMatrix* GetMatrix() override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScMatrixToken(*this); } }; /** * Token storing matrix that represents values in sheet range. It stores * both the values in matrix form, and the range address the matrix * represents. */ class ScMatrixRangeToken final : public formula::FormulaToken { ScMatrixRef const mpMatrix; ScComplexRefData maRef; public: ScMatrixRangeToken( const sc::RangeMatrix& rMat ); ScMatrixRangeToken( const ScMatrixRangeToken& ); virtual sal_uInt8 GetByte() const override; virtual const ScMatrix* GetMatrix() const override; virtual ScMatrix* GetMatrix() override; virtual const ScComplexRefData* GetDoubleRef() const override; virtual ScComplexRefData* GetDoubleRef() override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override; }; class ScExternalSingleRefToken final : public formula::FormulaToken { sal_uInt16 const mnFileId; svl::SharedString const maTabName; ScSingleRefData maSingleRef; public: ScExternalSingleRefToken( sal_uInt16 nFileId, const svl::SharedString& rTabName, const ScSingleRefData& r ); ScExternalSingleRefToken() = delete; virtual ~ScExternalSingleRefToken() override; ScExternalSingleRefToken(ScExternalSingleRefToken const &) = default; ScExternalSingleRefToken(ScExternalSingleRefToken &&) = default; ScExternalSingleRefToken & operator =(ScExternalSingleRefToken const &) = delete; // due to FormulaToken ScExternalSingleRefToken & operator =(ScExternalSingleRefToken &&) = delete; // due to FormulaToken virtual sal_uInt16 GetIndex() const override; virtual svl::SharedString GetString() const override; virtual const ScSingleRefData* GetSingleRef() const override; virtual ScSingleRefData* GetSingleRef() override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScExternalSingleRefToken(*this); } }; class ScExternalDoubleRefToken final : public formula::FormulaToken { sal_uInt16 const mnFileId; svl::SharedString const maTabName; // name of the first sheet ScComplexRefData maDoubleRef; public: ScExternalDoubleRefToken() = delete; ScExternalDoubleRefToken( sal_uInt16 nFileId, const svl::SharedString& rTabName, const ScComplexRefData& r ); virtual ~ScExternalDoubleRefToken() override; ScExternalDoubleRefToken(ScExternalDoubleRefToken const &) = default; ScExternalDoubleRefToken(ScExternalDoubleRefToken &&) = default; ScExternalDoubleRefToken & operator =(ScExternalDoubleRefToken const &) = delete; // due to FormulaToken ScExternalDoubleRefToken & operator =(ScExternalDoubleRefToken &&) = delete; // due to FormulaToken virtual sal_uInt16 GetIndex() const override; virtual svl::SharedString GetString() const override; virtual const ScSingleRefData* GetSingleRef() const override; virtual ScSingleRefData* GetSingleRef() override; virtual const ScSingleRefData* GetSingleRef2() const override; virtual ScSingleRefData* GetSingleRef2() override; virtual const ScComplexRefData* GetDoubleRef() const override; virtual ScComplexRefData* GetDoubleRef() override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScExternalDoubleRefToken(*this); } }; class ScExternalNameToken final : public formula::FormulaToken { sal_uInt16 const mnFileId; svl::SharedString const maName; public: ScExternalNameToken() = delete; ScExternalNameToken( sal_uInt16 nFileId, const svl::SharedString& rName ); virtual ~ScExternalNameToken() override; ScExternalNameToken(ScExternalNameToken const &) = default; ScExternalNameToken(ScExternalNameToken &&) = default; ScExternalNameToken & operator =(ScExternalNameToken const &) = delete; // due to FormulaToken ScExternalNameToken & operator =(ScExternalNameToken &&) = delete; // due to FormulaToken virtual sal_uInt16 GetIndex() const override; virtual svl::SharedString GetString() const override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScExternalNameToken(*this); } }; /** Special token to remember details of ocTableRef "structured references". */ class ScTableRefToken final : public formula::FormulaToken { public: enum Item { TABLE = 0, ALL = 1, HEADERS = 2, DATA = 4, TOTALS = 8, THIS_ROW = 16, HEADERS_DATA = HEADERS | DATA, DATA_TOTALS = DATA | TOTALS }; ScTableRefToken() = delete; ScTableRefToken( sal_uInt16 nIndex, Item eItem ); ScTableRefToken( const ScTableRefToken& r ); virtual ~ScTableRefToken() override; virtual sal_uInt16 GetIndex() const override; virtual void SetIndex( sal_uInt16 n ) override; virtual sal_Int16 GetSheet() const override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScTableRefToken(*this); } Item GetItem() const; void AddItem( Item ); void SetAreaRefRPN( formula::FormulaToken* pToken ); formula::FormulaToken* GetAreaRefRPN() const; private: formula::FormulaTokenRef mxAreaRefRPN; ///< resulting RPN area sal_uInt16 mnIndex; ///< index into table / database range collection Item meItem; }; // Only created from within the interpreter, no conversion from ScRawToken, // never added to ScTokenArray! class ScJumpMatrixToken final : public formula::FormulaToken { private: std::shared_ptr<ScJumpMatrix> mpJumpMatrix; public: ScJumpMatrixToken( std::shared_ptr<ScJumpMatrix> p ); ScJumpMatrixToken( const ScJumpMatrixToken & ); virtual ~ScJumpMatrixToken() override; virtual ScJumpMatrix* GetJumpMatrix() const override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScJumpMatrixToken(*this); } }; // Only created from within the interpreter, no conversion from ScRawToken, // never added to ScTokenArray! class ScRefListToken final : public formula::FormulaToken { private: ScRefList aRefList; bool const mbArrayResult; // whether RefList is an array result public: ScRefListToken() : FormulaToken( formula::svRefList ), mbArrayResult(false) {} explicit ScRefListToken( bool bArrayResult ) : FormulaToken( formula::svRefList ), mbArrayResult( bArrayResult ) {} bool IsArrayResult() const; virtual const ScRefList* GetRefList() const override; virtual ScRefList* GetRefList() override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScRefListToken(*this); } }; class ScEmptyCellToken final : public formula::FormulaToken { bool const bInherited :1; bool const bDisplayedAsString :1; public: explicit ScEmptyCellToken( bool bInheritedP, bool bDisplayAsString ) : FormulaToken( formula::svEmptyCell ), bInherited( bInheritedP ), bDisplayedAsString( bDisplayAsString ) {} bool IsInherited() const { return bInherited; } bool IsDisplayedAsString() const { return bDisplayedAsString; } virtual double GetDouble() const override; virtual svl::SharedString GetString() const override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScEmptyCellToken(*this); } }; /** Transports the result from the interpreter to the formula cell. */ class ScMatrixCellResultToken : public formula::FormulaToken { // No non-const access implemented, silence down unxsols4 complaining about // the public GetMatrix() hiding the one from FormulaToken. virtual ScMatrix* GetMatrix() override; protected: ScConstMatrixRef xMatrix; formula::FormulaConstTokenRef xUpperLeft; public: ScMatrixCellResultToken( const ScConstMatrixRef& pMat, const formula::FormulaToken* pUL ); ScMatrixCellResultToken( const ScMatrixCellResultToken& ); virtual ~ScMatrixCellResultToken() override; virtual double GetDouble() const override; virtual svl::SharedString GetString() const override; virtual const ScMatrix* GetMatrix() const override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override; formula::StackVar GetUpperLeftType() const { return xUpperLeft ? xUpperLeft->GetType() : formula::svUnknown; } const formula::FormulaConstTokenRef& GetUpperLeftToken() const { return xUpperLeft; } void Assign( const ScMatrixCellResultToken & r ); }; /** Stores the matrix result at the formula cell, additionally the range the matrix formula occupies. */ class ScMatrixFormulaCellToken final : public ScMatrixCellResultToken { private: SCROW nRows; SCCOL nCols; public: ScMatrixFormulaCellToken( SCCOL nC, SCROW nR, const ScConstMatrixRef& pMat, const formula::FormulaToken* pUL ); ScMatrixFormulaCellToken( SCCOL nC, SCROW nR ); ScMatrixFormulaCellToken( const ScMatrixFormulaCellToken& r ); virtual ~ScMatrixFormulaCellToken() override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScMatrixFormulaCellToken(*this); } void SetMatColsRows( SCCOL nC, SCROW nR ) { nRows = nR; nCols = nC; } void GetMatColsRows( SCCOL & nC, SCROW & nR ) const { nR = nRows; nC = nCols; } SCCOL GetMatCols() const { return nCols; } SCROW GetMatRows() const { return nRows; } /** Assign matrix result, keep matrix formula dimension. */ void Assign( const ScMatrixCellResultToken & r ); /** Assign any result, keep matrix formula dimension. If token is of type ScMatrixCellResultToken uses the appropriate Assign() call, other tokens are assigned to xUpperLeft and xMatrix will be assigned NULL. */ void Assign( const formula::FormulaToken & r ); /** Modify xUpperLeft if formula::svDouble, or create new formula::FormulaDoubleToken if not set yet. Does nothing if xUpperLeft is of different type! */ void SetUpperLeftDouble( double f); /** Reset matrix and upper left, keep matrix formula dimension. */ void ResetResult(); private: /** xUpperLeft is modifiable through SetUpperLeftDouble(), so clone it whenever an svDouble token is assigned to. */ void CloneUpperLeftIfNecessary(); }; class ScHybridCellToken final : public formula::FormulaToken { private: double const mfDouble; svl::SharedString const maString; OUString const maFormula; bool const mbEmptyDisplayedAsString; public: ScHybridCellToken( double f, const svl::SharedString & rStr, const OUString & rFormula, bool bEmptyDisplayedAsString ); const OUString& GetFormula() const { return maFormula; } bool IsEmptyDisplayedAsString() const { return mbEmptyDisplayedAsString; } virtual double GetDouble() const override; virtual svl::SharedString GetString() const override; virtual bool operator==( const formula::FormulaToken& rToken ) const override; virtual FormulaToken* Clone() const override { return new ScHybridCellToken(*this); } }; // Simplify argument passing to RefUpdate methods with ScSingleRefToken or // ScDoubleRefToken class SingleDoubleRefModifier { ScComplexRefData aDub; ScSingleRefData* pS; ScComplexRefData* pD; SingleDoubleRefModifier( const SingleDoubleRefModifier& ) = delete; SingleDoubleRefModifier& operator=( const SingleDoubleRefModifier& ) = delete; public: SingleDoubleRefModifier( formula::FormulaToken& rT ) { formula::StackVar eType = rT.GetType(); if ( eType == formula::svSingleRef || eType == formula::svExternalSingleRef ) { pS = rT.GetSingleRef(); aDub.Ref1 = aDub.Ref2 = *pS; pD = &aDub; } else { pS = nullptr; pD = rT.GetDoubleRef(); // coverity[uninit_member] - aDub intentionally not initialized, unnecessary because unused. } } SingleDoubleRefModifier( ScSingleRefData& rS ) { pS = &rS; aDub.Ref1 = aDub.Ref2 = *pS; pD = &aDub; } ~SingleDoubleRefModifier() { if ( pS ) *pS = (*pD).Ref1; } ScComplexRefData& Ref() { return *pD; } }; class SingleDoubleRefProvider { public: const ScSingleRefData& Ref1; const ScSingleRefData& Ref2; SingleDoubleRefProvider( const formula::FormulaToken& r ) : Ref1( *r.GetSingleRef() ), Ref2( (r.GetType() == formula::svDoubleRef || r.GetType() == formula::svExternalDoubleRef) ? r.GetDoubleRef()->Ref2 : Ref1 ) {} }; #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ <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'>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-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-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' selected='selected'>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/'>summary</a><a href='/cgit/lo/core/refs/?id=ed31a7c85a167d346cc203ac83cf53878c60101f'>refs</a><a class='active' href='/cgit/lo/core/log/svx/uiconfig/ui/formdatamenu.ui'>log</a><a href='/cgit/lo/core/tree/svx/uiconfig/ui/formdatamenu.ui?id=ed31a7c85a167d346cc203ac83cf53878c60101f'>tree</a><a href='/cgit/lo/core/commit/svx/uiconfig/ui/formdatamenu.ui?id=ed31a7c85a167d346cc203ac83cf53878c60101f'>commit</a><a href='/cgit/lo/core/diff/svx/uiconfig/ui/formdatamenu.ui?id=ed31a7c85a167d346cc203ac83cf53878c60101f'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit/lo/core/log/svx/uiconfig/ui/formdatamenu.ui'> <input type='hidden' name='id' value='ed31a7c85a167d346cc203ac83cf53878c60101f'/><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/?id=ed31a7c85a167d346cc203ac83cf53878c60101f'>root</a>/<a href='/cgit/lo/core/log/svx?id=ed31a7c85a167d346cc203ac83cf53878c60101f'>svx</a>/<a href='/cgit/lo/core/log/svx/uiconfig?id=ed31a7c85a167d346cc203ac83cf53878c60101f'>uiconfig</a>/<a href='/cgit/lo/core/log/svx/uiconfig/ui?id=ed31a7c85a167d346cc203ac83cf53878c60101f'>ui</a>/<a href='/cgit/lo/core/log/svx/uiconfig/ui/formdatamenu.ui?id=ed31a7c85a167d346cc203ac83cf53878c60101f'>formdatamenu.ui</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/svx/uiconfig/ui/formdatamenu.ui?id=ed31a7c85a167d346cc203ac83cf53878c60101f&showmsg=1'>Expand</a>)</th><th class='left'>Author</th></tr>