/* -*- 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_TABPROTECTION_HXX #define INCLUDED_SC_INC_TABPROTECTION_HXX #include <sal/types.h> #include <com/sun/star/uno/Sequence.hxx> #include "global.hxx" #include "rangelst.hxx" #include <boost/shared_ptr.hpp> class ScDocument; class ScTableProtectionImpl; enum ScPasswordHash { PASSHASH_SHA1 = 0, PASSHASH_XL, PASSHASH_UNSPECIFIED }; class ScPassHashHelper { public: /** Check for the compatibility of all password hashes. If there is at * least one hash that needs to be regenerated, it returns true. If all * hash values are compatible with the specified hash type, then it * returns false. */ static bool needsPassHashRegen(const ScDocument& rDoc, ScPasswordHash eHash1, ScPasswordHash eHash2 = PASSHASH_UNSPECIFIED); static OUString getHashURI(ScPasswordHash eHash); static ScPasswordHash getHashTypeFromURI(const OUString& rURI); private: ScPassHashHelper(); ~ScPassHashHelper(); }; class SAL_NO_VTABLE ScPassHashProtectable { public: virtual ~ScPassHashProtectable() = 0; virtual bool isProtected() const = 0; virtual bool isProtectedWithPass() const = 0; virtual void setProtected(bool bProtected) = 0; virtual bool isPasswordEmpty() const = 0; virtual bool hasPasswordHash(ScPasswordHash eHash, ScPasswordHash eHash2 = PASSHASH_UNSPECIFIED) const = 0; virtual void setPassword(const OUString& aPassText) = 0; virtual ::com::sun::star::uno::Sequence<sal_Int8> getPasswordHash( ScPasswordHash eHash, ScPasswordHash eHas2 = PASSHASH_UNSPECIFIED) const = 0; virtual void setPasswordHash( const ::com::sun::star::uno::Sequence<sal_Int8>& aPassword, ScPasswordHash eHash = PASSHASH_SHA1, ScPasswordHash eHash2 = PASSHASH_UNSPECIFIED) = 0; virtual bool verifyPassword(const OUString& aPassText) const = 0; }; class SC_DLLPUBLIC ScDocProtection : public ScPassHashProtectable { public: enum Option { STRUCTURE = 0, WINDOWS, CONTENT, NONE ///< last item - used to resize the vector }; explicit ScDocProtection(); explicit ScDocProtection(const ScDocProtection& r); virtual ~ScDocProtection(); virtual bool isProtected() const SAL_OVERRIDE; virtual bool isProtectedWithPass() const SAL_OVERRIDE; virtual void setProtected(bool bProtected) SAL_OVERRIDE; virtual bool isPasswordEmpty() const SAL_OVERRIDE; virtual bool hasPasswordHash(ScPasswordHash eHash, ScPasswordHash eHash2 = PASSHASH_UNSPECIFIED) const SAL_OVERRIDE; virtual void setPassword(const OUString& aPassText) SAL_OVERRIDE; virtual ::com::sun::star::uno::Sequence<sal_Int8> getPasswordHash( ScPasswordHash eHash, ScPasswordHash eHash2 = PASSHASH_UNSPECIFIED) const SAL_OVERRIDE; virtual void setPasswordHash( const ::com::sun::star::uno::Sequence<sal_Int8>& aPassword, ScPasswordHash eHash = PASSHASH_SHA1, ScPasswordHash eHash2 = PASSHASH_UNSPECIFIED) SAL_OVERRIDE; virtual bool verifyPassword(const OUString& aPassText) const SAL_OVERRIDE; bool isOptionEnabled(Option eOption) const; void setOption(Option eOption, bool bEnabled); private: ::boost::shared_ptr<ScTableProtectionImpl> mpImpl; }; /** Container for the Excel EnhancedProtection feature. */ struct ScEnhancedProtection { ScRangeListRef maRangeList; sal_uInt32 mnAreserved; sal_uInt32 mnPasswordVerifier; OUString maTitle; ::std::vector< sal_uInt8 > maSecurityDescriptor; // imported as raw BIFF data OUString maSecurityDescriptorXML; // imported from OOXML // OOXML password definitions OUString maAlgorithmName; OUString maHashValue; OUString maSaltValue; sal_uInt32 mnSpinCount; ScEnhancedProtection() : mnAreserved(0), mnPasswordVerifier(0), mnSpinCount(0) {} bool hasSecurityDescriptor() const { return !maSecurityDescriptor.empty() || !maSecurityDescriptorXML.isEmpty(); } bool hasPassword() const { return mnPasswordVerifier != 0 || !maHashValue.isEmpty(); } }; /** sheet protection state container * * This class stores sheet's protection state: 1) whether the protection * is on, 2) password and/or password hash, and 3) any associated * protection options. This class is also used as a protection state * container for the undo/redo stack, in which case the password, hash and * the options need to be preserved even when the protection flag is * off. */ class SC_DLLPUBLIC ScTableProtection : public ScPassHashProtectable { public: enum Option { AUTOFILTER = 0, DELETE_COLUMNS, DELETE_ROWS, FORMAT_CELLS, FORMAT_COLUMNS, FORMAT_ROWS, INSERT_COLUMNS, INSERT_HYPERLINKS, INSERT_ROWS, OBJECTS, PIVOT_TABLES, SCENARIOS, SELECT_LOCKED_CELLS, SELECT_UNLOCKED_CELLS, SHEET, SORT, NONE ///< last item - used to resize the vector }; explicit ScTableProtection(); explicit ScTableProtection(const ScTableProtection& r); virtual ~ScTableProtection(); virtual bool isProtected() const SAL_OVERRIDE; virtual bool isProtectedWithPass() const SAL_OVERRIDE; virtual void setProtected(bool bProtected) SAL_OVERRIDE; virtual bool isPasswordEmpty() const SAL_OVERRIDE; virtual bool hasPasswordHash(ScPasswordHash eHash, ScPasswordHash eHash2 = PASSHASH_UNSPECIFIED) const SAL_OVERRIDE; virtual void setPassword(const OUString& aPassText) SAL_OVERRIDE; virtual ::com::sun::star::uno::Sequence<sal_Int8> getPasswordHash( ScPasswordHash eHash, ScPasswordHash eHash2 = PASSHASH_UNSPECIFIED) const SAL_OVERRIDE; virtual void setPasswordHash( const ::com::sun::star::uno::Sequence<sal_Int8>& aPassword, ScPasswordHash eHash = PASSHASH_SHA1, ScPasswordHash eHash2 = PASSHASH_UNSPECIFIED) SAL_OVERRIDE; virtual bool verifyPassword(const OUString& aPassText) const SAL_OVERRIDE; bool isOptionEnabled(Option eOption) const; void setOption(Option eOption, bool bEnabled); void setEnhancedProtection( const ::std::vector< ScEnhancedProtection > & rProt ); const ::std::vector< ScEnhancedProtection > & getEnhancedProtection() const; bool updateReference( UpdateRefMode, ScDocument*, const ScRange& rWhere, SCsCOL nDx, SCsROW nDy, SCsTAB nDz ); bool isBlockEditable( const ScRange& rRange ) const; bool isSelectionEditable( const ScRangeList& rRangeList ) const; private: ::boost::shared_ptr<ScTableProtectionImpl> mpImpl; }; #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ office-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> </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/translations/about/?h=co-21.06.24-1'>about</a><a href='/cgit/lo/translations/?h=co-21.06.24-1'>summary</a><a href='/cgit/lo/translations/refs/?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>refs</a><a href='/cgit/lo/translations/log/source/ss/sfx2?h=co-21.06.24-1'>log</a><a href='/cgit/lo/translations/tree/source/ss/sfx2?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>tree</a><a class='active' href='/cgit/lo/translations/commit/source/ss/sfx2?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>commit</a><a href='/cgit/lo/translations/diff/source/ss/sfx2?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit/lo/translations/log/source/ss/sfx2'> <input type='hidden' name='h' value='co-21.06.24-1'/><input type='hidden' name='id' value='eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'/><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/translations/commit/?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>root</a>/<a href='/cgit/lo/translations/commit/source?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>source</a>/<a href='/cgit/lo/translations/commit/source/ss?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>ss</a>/<a href='/cgit/lo/translations/commit/source/ss/sfx2?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>sfx2</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='h' value='co-21.06.24-1'/><input type='hidden' name='id' value='eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'> <tr><th>author</th><td>Andras Timar <atimar@suse.com></td><td class='right'>2013-04-15 16:44:07 +0200</td></tr> <tr><th>committer</th><td>Andras Timar <atimar@suse.com></td><td class='right'>2013-05-07 10:21:03 -0700</td></tr> <tr><th>commit</th><td colspan='2' class='sha1'><a href='/cgit/lo/translations/commit/source/ss/sfx2?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5</a> (<a href='/cgit/lo/translations/patch/source/ss/sfx2?id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>patch</a>)</td></tr> <tr><th>tree</th><td colspan='2' class='sha1'><a href='/cgit/lo/translations/tree/?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>f40632db40d999e6bce121cb7adff86266e3c212</a> /<a href='/cgit/lo/translations/tree/source/ss/sfx2?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>source/ss/sfx2</a></td></tr> <tr><th>parent</th><td colspan='2' class='sha1'><a href='/cgit/lo/translations/commit/source/ss/sfx2?h=co-21.06.24-1&id=3b967bbce7fae6b042bbbe5c2bf9fad14941192f'>3b967bbce7fae6b042bbbe5c2bf9fad14941192f</a> (<a href='/cgit/lo/translations/diff/source/ss/sfx2?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5&id2=3b967bbce7fae6b042bbbe5c2bf9fad14941192f'>diff</a>)</td></tr></table> <div class='commit-subject'>update non-Pootle languages (sh, sl, sr) for 4.0.3 </div><div class='commit-msg'>Change-Id: Ibfcf76f6f3aeb3e82dade3384e5bc16f2f2a5a42 </div><div class='diffstat-header'><a href='/cgit/lo/translations/diff/?h=co-21.06.24-1&id=eae8e2dc4358c21873a2472bcaa4fbbcea9ffaa5'>Diffstat</a> (limited to 'source/ss/sfx2')</div><table summary='diffstat' class='diffstat'></table><div class='diffstat-summary'>0 files changed, 0 insertions, 0 deletions</div><table summary='diff' class='diff'><tr><td></td></tr></table></div> <!-- class=content --> <div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit </a> (<a href='https://git-scm.com/'>git 2.34.1</a>) at 2025-03-05 22:17:37 +0000</div> </div> <!-- id=cgit --> </body> </html>