summaryrefslogtreecommitdiff
path: root/lingucomponent
diff options
context:
space:
mode:
Diffstat (limited to 'lingucomponent')
-rw-r--r--lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu30
-rw-r--r--lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx59
2 files changed, 37 insertions, 52 deletions
diff --git a/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu b/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu
deleted file mode 100644
index 6fa455d969b8..000000000000
--- a/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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-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>
- </node>
-</oor:component-data>
-
diff --git a/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx b/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx
index fb115f582f30..7152a6ff0880 100644
--- a/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx
+++ b/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx
@@ -56,8 +56,6 @@ using namespace com::sun::star::beans;
using namespace com::sun::star::lang;
using namespace com::sun::star::linguistic2;
-constexpr OUStringLiteral sDuden = u"duden";
-
namespace
{
constexpr size_t MAX_SUGGESTIONS_SIZE = 10;
@@ -297,6 +295,14 @@ 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())
@@ -330,35 +336,44 @@ 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;
+ }
- SvtLinguConfig aLinguCfg;
- uno::Sequence<OUString> aLocaleList;
-
- if (LanguageToolCfg::RestProtocol::get().value_or("") == sDuden)
+ OUString localeUrl = getLocaleListURL();
+ if (localeUrl.isEmpty())
{
- aLocaleList.realloc(3);
- aLocaleList.getArray()[0] = "de-DE";
- aLocaleList.getArray()[1] = "en-US";
- aLocaleList.getArray()[2] = "en-GB";
+ return m_aSuppLocales;
}
- else
- aLinguCfg.GetLocaleListFor("GrammarCheckers",
- "org.openoffice.lingu.LanguageToolGrammarChecker", aLocaleList);
+ 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);
- auto nLength = aLocaleList.getLength();
- m_aSuppLocales.realloc(nLength);
+ size_t length = root.size();
+ m_aSuppLocales.realloc(length);
auto pArray = m_aSuppLocales.getArray();
- auto pLocaleList = aLocaleList.getArray();
-
- for (auto i = 0; i < nLength; i++)
+ int i = 0;
+ for (auto it = root.begin(); it != root.end(); it++, i++)
{
- pArray[i] = LanguageTag::convertToLocale(pLocaleList[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;
}
-
return m_aSuppLocales;
}