bump product version to 5.0.4.1
[LibreOffice.git] / svx / source / gallery2 / galini.cxx
blob0fbe1ba8625defa6c31a84b958124bf0206b1bd0
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
11 * The world's quickest and lamest .desktop / .ini file parser.
12 * Ideally the .thm file would move to a .desktop file in
13 * future.
16 #include <sal/config.h>
18 #include <unotools/streamwrap.hxx>
19 #include <unotools/ucbstreamhelper.hxx>
20 #include <unotools/tempfile.hxx>
21 #include <svx/gallery1.hxx>
22 #include <i18nlangtag/languagetag.hxx>
23 #include <unotools/syslocale.hxx>
24 #include <vcl/svapp.hxx>
25 #include <vcl/settings.hxx>
26 #include <boost/scoped_ptr.hpp>
28 OUString GalleryThemeEntry::ReadStrFromIni(const OUString &aKeyName )
30 boost::scoped_ptr<SvStream> pStrm(::utl::UcbStreamHelper::CreateStream(
31 GetStrURL().GetMainURL( INetURLObject::NO_DECODE ),
32 StreamMode::READ ));
34 const LanguageTag &rLangTag = Application::GetSettings().GetUILanguageTag();
36 ::std::vector< OUString > aFallbacks = rLangTag.getFallbackStrings( true);
38 OUString aResult;
39 sal_Int32 nRank = 42;
41 if( pStrm )
43 OString aLine;
44 while( pStrm->ReadLine( aLine ) )
46 OUString aKey;
47 OUString aLocale;
48 OUString aValue;
49 sal_Int32 n;
51 // comments
52 if( aLine.startsWith( "#" ) )
53 continue;
55 // a[en_US] = Bob
56 if( ( n = aLine.indexOf( '=' ) ) >= 1)
58 aKey = OStringToOUString(
59 aLine.copy( 0, n ).trim(), RTL_TEXTENCODING_ASCII_US );
60 aValue = OStringToOUString(
61 aLine.copy( n + 1 ).trim(), RTL_TEXTENCODING_UTF8 );
63 if( ( n = aKey.indexOf( '[' ) ) >= 1 )
65 aLocale = aKey.copy( n + 1 ).trim();
66 aKey = aKey.copy( 0, n ).trim();
67 if( (n = aLocale.indexOf( ']' ) ) >= 1 )
68 aLocale = aLocale.copy( 0, n ).trim();
71 SAL_INFO("svx", "ini file has '" << aKey << "' [ '" << aLocale << "' ] = '" << aValue << "'");
73 // grisly language matching, is this not available somewhere else?
74 if( aKey == aKeyName )
76 /* FIXME-BCP47: what is this supposed to do? */
77 n = 0;
78 OUString aLang = aLocale.replace('_','-');
79 for( std::vector< OUString >::const_iterator i = aFallbacks.begin();
80 i != aFallbacks.end(); ++i, ++n )
82 SAL_INFO( "svx", "compare '" << aLang << "' with '" << *i << "' rank " << nRank << " vs. " << n );
83 if( *i == aLang && n < nRank ) {
84 nRank = n; // try to get the most accurate match
85 aResult = aValue;
92 SAL_INFO( "svx", "readStrFromIni returns '" << aResult << "'");
93 return aResult;
96 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */