24#include <com/sun/star/container/XNameContainer.hpp>
25#include <com/sun/star/lang/Locale.hpp>
26#include <com/sun/star/lang/NoSupportException.hpp>
27#include <com/sun/star/linguistic2/ConversionDictionaryType.hpp>
28#include <com/sun/star/linguistic2/XConversionDictionaryList.hpp>
29#include <com/sun/star/uno/Reference.h>
30#include <com/sun/star/util/XFlushable.hpp>
56static OUString
GetConvDicMainURL( std::u16string_view rDicName, std::u16string_view rDirectoryURL )
74 public cppu::WeakImplHelper< css::container::XNameContainer >
76 std::vector< uno::Reference< XConversionDictionary > >
aConvDics;
90 virtual css::uno::Any SAL_CALL
getByName(
const OUString& aName )
override;
91 virtual css::uno::Sequence< OUString > SAL_CALL
getElementNames( )
override;
95 virtual void SAL_CALL
replaceByName(
const OUString& aName,
const css::uno::Any& aElement )
override;
98 virtual void SAL_CALL
insertByName(
const OUString& aName,
const css::uno::Any& aElement )
override;
99 virtual void SAL_CALL
removeByName(
const OUString& Name )
override;
103 void AddConvDics(
const OUString &rSearchDirPathURL,
const OUString &rExtension );
109 uno::Reference< XConversionDictionary >
GetByName( std::u16string_view rName );
111 const uno::Reference< XConversionDictionary >&
GetByIndex( sal_Int32 nIdx )
124 for (sal_Int32
i = 0;
i < nLen; ++
i)
126 uno::Reference< util::XFlushable > xFlush(
aConvDics[
i] , UNO_QUERY );
135 OSL_FAIL(
"flushing of conversion dictionary failed" );
142 std::u16string_view rName )
146 for (sal_Int32
i = 0;
i < nLen && nRes == -1; ++
i)
155 std::u16string_view rName )
157 uno::Reference< XConversionDictionary > xRes;
178 uno::Reference< XConversionDictionary > xRes(
GetByName( rName ) );
180 throw NoSuchElementException();
188 std::vector<OUString> aRes;
192 [](
const uno::Reference<XConversionDictionary>& rDic) { return rDic->getName(); });
204 const OUString& rName,
211 throw NoSuchElementException();
212 uno::Reference< XConversionDictionary > xNew;
214 if (!xNew.is() || xNew->getName() != rName)
215 throw IllegalArgumentException();
220 const OUString& rName,
221 const Any& rElement )
226 throw ElementExistException();
227 uno::Reference< XConversionDictionary > xNew;
229 if (!xNew.is() || xNew->getName() != rName)
230 throw IllegalArgumentException();
241 throw NoSuchElementException();
244 uno::Reference< XConversionDictionary > xDel =
aConvDics[nRplcIdx];
245 OUString
aName( xDel->getName() );
248 DBG_ASSERT( aObj.
GetProtocol() == INetProtocol::File,
"+HangulHanjaOptionsDialog::OkHdl(): non-file URLs cannot be deleted" );
254 uno::Reference< css::ucb::XCommandEnvironment >(),
268 const OUString &rSearchDirPathURL,
269 const OUString &rExtension )
274 for (
const OUString&
aURL : aDirCnt)
276 sal_Int32
nPos =
aURL.lastIndexOf(
'.');
277 OUString aExt(
aURL.copy(
nPos + 1).toAsciiLowerCase() );
278 OUString aSearchExt( rExtension.toAsciiLowerCase() );
279 if(aExt != aSearchExt)
291 uno::Reference < XConversionDictionary > xDic;
293 nConvType == ConversionDictionaryType::HANGUL_HANJA)
298 nConvType == ConversionDictionaryType::SCHINESE_TCHINESE)
300 xDic =
new ConvDic( aDicName, nLang, nConvType,
false,
aURL );
323 StaticConvDicList().clear();
361 for (
const OUString& rActiveConvDic : std::as_const(aOpt.
aActiveConvDics))
363 uno::Reference< XConversionDictionary > xDic =
366 xDic->setActive(
true );
371 uno::Reference< XConversionDictionary > xS2TDic =
373 uno::Reference< XConversionDictionary > xT2SDic =
376 xS2TDic->setActive(
true );
378 xT2SDic->setActive(
true );
393 const OUString& rName,
394 const Locale& rLocale,
395 sal_Int16 nConvDicType )
402 throw ElementExistException();
404 uno::Reference< XConversionDictionary > xRes;
407 nConvDicType == ConversionDictionaryType::HANGUL_HANJA)
409 xRes =
new HHConvDic( rName, aDicMainURL );
412 nConvDicType == ConversionDictionaryType::SCHINESE_TCHINESE)
414 xRes =
new ConvDic( rName, nLang, nConvDicType,
false, aDicMainURL );
418 throw NoSupportException();
420 xRes->setActive(
true );
426 const OUString& rText,
429 const Locale& rLocale,
430 sal_Int16 nConversionDictionaryType,
431 ConversionDirection eDirection,
432 sal_Int32 nTextConversionOptions )
436 std::vector< OUString > aRes;
438 bool bSupported =
false;
440 for (sal_Int32
i = 0;
i < nLen; ++
i)
442 const uno::Reference< XConversionDictionary > xDic(
GetNameContainer().GetByIndex(
i) );
443 bool bMatch = xDic.is() &&
444 xDic->getLocale() == rLocale &&
445 xDic->getConversionType() == nConversionDictionaryType;
446 bSupported |= bMatch;
447 if (bMatch && xDic->isActive())
451 eDirection, nTextConversionOptions ) );
452 aRes.insert( aRes.end(), aNewConv.begin(), aNewConv.end() );
457 throw NoSupportException();
463 const Locale& rLocale,
464 sal_Int16 nConversionDictionaryType,
465 ConversionDirection eDirection )
472 for (sal_Int32
i = 0;
i < nLen; ++
i)
474 const uno::Reference< XConversionDictionary > xDic(
GetNameContainer().GetByIndex(
i) );
476 xDic->getLocale() == rLocale &&
477 xDic->getConversionType() == nConversionDictionaryType)
479 sal_Int16 nC = xDic->getMaxCharCount( eDirection );
493 EventObject aEvtObj(
static_cast<XConversionDictionaryList *
>(
this) );
501 const uno::Reference< XEventListener >& rxListener )
509 const uno::Reference< XEventListener >& rxListener )
518 return "com.sun.star.lingu2.ConvDicList";
528 return {
"com.sun.star.linguistic2.ConversionDictionaryList" };
531extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
533 css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any>
const&)
535 return cppu::acquire(StaticConvDicList().
get());
virtual void AtExit() override
ConvDicNameContainer & GetNameContainer()
virtual css::uno::Reference< css::linguistic2::XConversionDictionary > SAL_CALL addNewDictionary(const OUString &aName, const css::lang::Locale &aLocale, sal_Int16 nConversionDictionaryType) override
rtl::Reference< ConvDicNameContainer > mxNameContainer
virtual void SAL_CALL dispose() override
virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > &xListener) override
virtual css::uno::Sequence< OUString > SAL_CALL queryConversions(const OUString &aText, sal_Int32 nStartPos, sal_Int32 nLength, const css::lang::Locale &aLocale, sal_Int16 nConversionDictionaryType, css::linguistic2::ConversionDirection eDirection, sal_Int32 nTextConversionOptions) override
virtual OUString SAL_CALL getImplementationName() override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual void SAL_CALL removeEventListener(const css::uno::Reference< css::lang::XEventListener > &aListener) override
::comphelper::OInterfaceContainerHelper3< css::lang::XEventListener > aEvtListeners
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
virtual sal_Int16 SAL_CALL queryMaxCharCount(const css::lang::Locale &aLocale, sal_Int16 nConversionDictionaryType, css::linguistic2::ConversionDirection eDirection) override
virtual css::uno::Reference< css::container::XNameContainer > SAL_CALL getDictionaryContainer() override
virtual ~ConvDicList() override
rtl::Reference< MyAppExitListener > mxExitListener
const uno::Reference< XConversionDictionary > & GetByIndex(sal_Int32 nIdx)
virtual void SAL_CALL removeByName(const OUString &Name) override
uno::Reference< XConversionDictionary > GetByName(std::u16string_view rName)
virtual css::uno::Any SAL_CALL getByName(const OUString &aName) override
sal_Int32 GetCount() const
virtual void SAL_CALL replaceByName(const OUString &aName, const css::uno::Any &aElement) override
virtual sal_Bool SAL_CALL hasByName(const OUString &aName) override
ConvDicNameContainer & operator=(const ConvDicNameContainer &)=delete
sal_Int32 GetIndexByName_Impl(std::u16string_view rName)
virtual sal_Bool SAL_CALL hasElements() override
ConvDicNameContainer(const ConvDicNameContainer &)=delete
virtual css::uno::Sequence< OUString > SAL_CALL getElementNames() override
std::vector< uno::Reference< XConversionDictionary > > aConvDics
virtual void SAL_CALL insertByName(const OUString &aName, const css::uno::Any &aElement) override
virtual css::uno::Type SAL_CALL getElementType() override
void AddConvDics(const OUString &rSearchDirPathURL, const OUString &rExtension)
void SetSmartProtocol(INetProtocol eTheSmartScheme)
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
OUString getBase(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true, DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
bool SetSmartURL(std::u16string_view rTheAbsURIRef, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8, FSysStyle eStyle=FSysStyle::Detect)
INetProtocol GetProtocol() const
bool Append(std::u16string_view rTheSegment, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
void GetOptions(SvtLinguOptions &rOptions) const
sal_Int32 addInterface(const css::uno::Reference< ListenerT > &rxIFace)
void disposeAndClear(const css::lang::EventObject &rEvt)
sal_Int32 removeInterface(const css::uno::Reference< ListenerT > &rxIFace)
css::uno::Type const & get()
css::uno::Any executeCommand(const OUString &rCommandName, const css::uno::Any &rCommandArgument)
static css::uno::Sequence< OUString > GetFolderContents(const OUString &rFolder, bool bFolder)
bool IsConvDic(const OUString &rFileURL, LanguageType &nLang, sal_Int16 &nConvType)
constexpr OUStringLiteral CONV_DIC_EXT
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * linguistic_ConvDicList_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
static OUString GetConvDicMainURL(std::u16string_view rDicName, std::u16string_view rDirectoryURL)
#define DBG_ASSERT(sCon, aError)
#define TOOLS_WARN_EXCEPTION(area, stream)
#define LANGUAGE_CHINESE_TRADITIONAL
#define LANGUAGE_CHINESE_SIMPLIFIED
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
Reference< XComponentContext > getProcessComponentContext()
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
OUString GetDictionaryWriteablePath()
osl::Mutex & GetLinguMutex()
! multi-thread safe mutex for all platforms !!
LanguageType LinguLocaleToLanguage(const css::lang::Locale &rLocale)
Convert Locale to LanguageType for legacy handling.
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
css::uno::Sequence< OUString > aActiveConvDics