include/unotools/lingucfg.hxx | 2 lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu | 30 +++++ lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx | 52 ++-------- postprocess/CustomTarget_registry.mk | 1 unotools/source/config/lingucfg.cxx | 21 ++++ 5 files changed, 67 insertions(+), 39 deletions(-)
New commits: commit a0865169ab62508a7b933ed4634defa57b25f7b7 Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Fri Feb 10 14:40:33 2023 +0100 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Fri Jul 7 12:01:49 2023 +0200 lok: remove duplicated locales for LanguageTool Change-Id: I8fd1632f36a6c2c2d61331d6ce5dbd3cce83e2a0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146776 Reviewed-by: Henry Castro <hcas...@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153961 Reviewed-by: Andras Timar <andras.ti...@collabora.com> Tested-by: Andras Timar <andras.ti...@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154155 Tested-by: Jenkins Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> diff --git a/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu b/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu index ce3d6033d0c2..6fa455d969b8 100644 --- a/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu +++ b/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu @@ -21,7 +21,7 @@ <node oor:name="GrammarCheckers"> <node oor:name="org.openoffice.lingu.LanguageToolGrammarChecker" oor:op="fuse"> <prop oor:name="Locales" oor:type="oor:string-list"> - <value>ar ast-ES be-BY br-FR ca-ES ca-ES-valencia zh-CN da-DK nl nl-BE en en-AU en-CA en-CA en-GB en-NZ en-ZA en-US fr gl-ES de de-AT de-DE de-DE de-CH el-GR ga-IE it ja-JP km-KH nb no fa pl-PL pt pt-AO pt-BR pt-MZ pt-PT ro-RO ru-RU de-DE-x-simple-language sk-SK sl-SI es es-AR sv tl-PH ta-IN uk-UA</value> + <value>ar ast-ES be-BY br-FR ca-ES ca-ES-valencia zh-CN da-DK nl nl-BE en en-AU en-CA en-GB en-NZ en-ZA en-US fr gl-ES de de-AT de-DE de-CH el-GR ga-IE it ja-JP km-KH nb no fa pl-PL pt pt-AO pt-BR pt-MZ pt-PT ro-RO ru-RU de-DE-x-simple-language sk-SK sl-SI es es-AR sv tl-PH ta-IN uk-UA</value> </prop> </node> </node> commit 81b0d9a951c9b15f4f1a76d45d0bd955b4dfc95b Author: Mert Tumer <mert.tu...@collabora.com> AuthorDate: Tue May 10 13:06:06 2022 +0300 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Fri Jul 7 12:01:40 2023 +0200 Load the locales from config file for languagetool Locales needs to be read again in the Preferences/Writing Aids section and since this is a network operation it can cause a problem. Better to list all the supported locales in the xcu and load it right away. Signed-off-by: Mert Tumer <mert.tu...@collabora.com> Change-Id: I2ced6789df2a1d6fa2996e2d6b7d2a18e266afac Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154154 Tested-by: Szymon Kłos <szymon.k...@collabora.com> Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> diff --git a/include/unotools/lingucfg.hxx b/include/unotools/lingucfg.hxx index 40797a372f33..c924d7898764 100644 --- a/include/unotools/lingucfg.hxx +++ b/include/unotools/lingucfg.hxx @@ -196,6 +196,8 @@ public: bool GetDictionaryEntry( const OUString &rNodeName, SvtLinguConfigDictionaryEntry &rDicEntry ) const; + bool GetLocaleListFor( const OUString &rSetName, const OUString &rSetEntry, css::uno::Sequence< OUString > &rLocaleList ) const; + css::uno::Sequence< OUString > GetDisabledDictionaries() const; std::vector< SvtLinguConfigDictionaryEntry > GetActiveDictionariesByFormat( std::u16string_view rFormatName ) const; diff --git a/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu b/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu new file mode 100644 index 000000000000..ce3d6033d0c2 --- /dev/null +++ b/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu @@ -0,0 +1,30 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!-- + * 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 . +--> +<oor:component-data oor:name="Linguistic" oor:package="org.openoffice.Office" xmlns:install="http://openoffice.org/2004/installation" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <node oor:name="ServiceManager"> + <node oor:name="GrammarCheckers"> + <node oor:name="org.openoffice.lingu.LanguageToolGrammarChecker" oor:op="fuse"> + <prop oor:name="Locales" oor:type="oor:string-list"> + <value>ar ast-ES be-BY br-FR ca-ES ca-ES-valencia zh-CN da-DK nl nl-BE en en-AU en-CA en-CA en-GB en-NZ en-ZA en-US fr gl-ES de de-AT de-DE de-DE de-CH el-GR ga-IE it ja-JP km-KH nb no fa pl-PL pt pt-AO pt-BR pt-MZ pt-PT ro-RO ru-RU de-DE-x-simple-language sk-SK sl-SI es es-AR sv tl-PH ta-IN uk-UA</value> + </prop> + </node> + </node> + </node> +</oor:component-data> + diff --git a/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx b/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx index 7152a6ff0880..246723172469 100644 --- a/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx +++ b/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx @@ -295,14 +295,6 @@ void parseProofreadingJSONResponse(ProofreadingResult& rResult, std::string&& aJ }); } -OUString getLocaleListURL() -{ - if (auto oURL = LanguageToolCfg::BaseURL::get()) - if (!oURL->isEmpty()) - return *oURL + "/languages"; - return {}; -} - OUString getCheckerURL() { if (auto oURL = LanguageToolCfg::BaseURL::get()) @@ -336,44 +328,26 @@ sal_Bool SAL_CALL LanguageToolGrammarChecker::hasLocale(const Locale& rLocale) uno::Sequence<Locale> SAL_CALL LanguageToolGrammarChecker::getLocales() { + osl::MutexGuard aGuard(linguistic::GetLinguMutex()); + if (m_aSuppLocales.hasElements()) return m_aSuppLocales; - if (!LanguageToolCfg::IsEnabled::get()) - { - return m_aSuppLocales; - } - OUString localeUrl = getLocaleListURL(); - if (localeUrl.isEmpty()) - { - return m_aSuppLocales; - } - tools::Long statusCode = 0; - std::string response = makeHttpRequest(localeUrl, HTTP_METHOD::HTTP_GET, OString(), statusCode); - if (statusCode != 200) - { - return m_aSuppLocales; - } - if (response.empty()) - { - return m_aSuppLocales; - } - boost::property_tree::ptree root; - std::stringstream aStream(response); - boost::property_tree::read_json(aStream, root); + SvtLinguConfig aLinguCfg; + uno::Sequence<OUString> aLocaleList; + aLinguCfg.GetLocaleListFor("GrammarCheckers", "org.openoffice.lingu.LanguageToolGrammarChecker", + aLocaleList); - size_t length = root.size(); - m_aSuppLocales.realloc(length); + auto nLength = aLocaleList.getLength(); + m_aSuppLocales.realloc(nLength); auto pArray = m_aSuppLocales.getArray(); - int i = 0; - for (auto it = root.begin(); it != root.end(); it++, i++) + auto pLocaleList = aLocaleList.getArray(); + + for (auto i = 0; i < nLength; i++) { - boost::property_tree::ptree& localeItem = it->second; - const std::string longCode = localeItem.get<std::string>("longCode"); - Locale aLocale = LanguageTag::convertToLocale( - OUString(longCode.c_str(), longCode.length(), RTL_TEXTENCODING_UTF8)); - pArray[i] = aLocale; + pArray[i] = LanguageTag::convertToLocale(pLocaleList[i]); } + return m_aSuppLocales; } diff --git a/postprocess/CustomTarget_registry.mk b/postprocess/CustomTarget_registry.mk index b0bc7a4320f2..9e235f098b25 100644 --- a/postprocess/CustomTarget_registry.mk +++ b/postprocess/CustomTarget_registry.mk @@ -116,6 +116,7 @@ postprocess_DEPS_lingucomponent := main postprocess_FILES_lingucomponent := \ $(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-hyphenator.xcu \ $(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-spellchecker.xcu \ + $(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu \ $(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-thesaurus.xcu \ postprocess_FILES_main := \ diff --git a/unotools/source/config/lingucfg.cxx b/unotools/source/config/lingucfg.cxx index 0b39db9172ef..af1eaee4aa9d 100644 --- a/unotools/source/config/lingucfg.cxx +++ b/unotools/source/config/lingucfg.cxx @@ -941,6 +941,27 @@ bool SvtLinguConfig::GetSupportedDictionaryFormatsFor( return bSuccess; } +bool SvtLinguConfig::GetLocaleListFor( const OUString &rSetName, const OUString &rSetEntry, css::uno::Sequence< OUString > &rLocaleList ) const +{ + if (rSetName.isEmpty() || rSetEntry.isEmpty()) + return false; + bool bSuccess = false; + try + { + uno::Reference< container::XNameAccess > xNA( GetMainUpdateAccess(), uno::UNO_QUERY_THROW ); + xNA.set( xNA->getByName("ServiceManager"), uno::UNO_QUERY_THROW ); + xNA.set( xNA->getByName( rSetName ), uno::UNO_QUERY_THROW ); + xNA.set( xNA->getByName( rSetEntry ), uno::UNO_QUERY_THROW ); + if (xNA->getByName( "Locales" ) >>= rLocaleList) + bSuccess = true; + DBG_ASSERT( rLocaleList.hasElements(), "Locale list is empty" ); + } + catch (uno::Exception &) + { + } + return bSuccess; +} + static bool lcl_GetFileUrlFromOrigin( OUString /*out*/ &rFileUrl, const OUString &rOrigin )