summaryrefslogtreecommitdiffstats
path: root/i18npool/inc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
commit940b4d1848e8c70ab7642901a68594e8016caffc (patch)
treeeb72f344ee6c3d9b80a7ecc079ea79e9fba8676d /i18npool/inc
parentInitial commit. (diff)
downloadlibreoffice-upstream.tar.xz
libreoffice-upstream.zip
Adding upstream version 1:7.0.4.upstream/1%7.0.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--i18npool/inc/breakiteratorImpl.hxx128
-rw-r--r--i18npool/inc/breakiterator_cjk.hxx68
-rw-r--r--i18npool/inc/breakiterator_th.hxx56
-rw-r--r--i18npool/inc/breakiterator_unicode.hxx111
-rw-r--r--i18npool/inc/bullet.h325
-rw-r--r--i18npool/inc/calendarImpl.hxx110
-rw-r--r--i18npool/inc/calendar_gregorian.hxx201
-rw-r--r--i18npool/inc/calendar_hijri.hxx76
-rw-r--r--i18npool/inc/calendar_jewish.hxx47
-rw-r--r--i18npool/inc/cclass_unicode.hxx186
-rw-r--r--i18npool/inc/chaptercollator.hxx57
-rw-r--r--i18npool/inc/characterclassificationImpl.hxx100
-rw-r--r--i18npool/inc/chartonum.hxx55
-rw-r--r--i18npool/inc/collatorImpl.hxx111
-rw-r--r--i18npool/inc/collator_unicode.hxx75
-rw-r--r--i18npool/inc/defaultnumberingprovider.hxx96
-rw-r--r--i18npool/inc/indexentrysupplier.hxx93
-rw-r--r--i18npool/inc/indexentrysupplier_asian.hxx56
-rw-r--r--i18npool/inc/indexentrysupplier_common.hxx96
-rw-r--r--i18npool/inc/indexentrysupplier_default.hxx107
-rw-r--r--i18npool/inc/indexentrysupplier_ja_phonetic.hxx64
-rw-r--r--i18npool/inc/inputsequencechecker.hxx80
-rw-r--r--i18npool/inc/inputsequencechecker_hi.hxx45
-rw-r--r--i18npool/inc/inputsequencechecker_th.hxx45
-rw-r--r--i18npool/inc/localedata.hxx161
-rw-r--r--i18npool/inc/nativenumbersupplier.hxx87
-rw-r--r--i18npool/inc/numberformatcode.hxx73
-rw-r--r--i18npool/inc/numtochar.hxx56
-rw-r--r--i18npool/inc/numtotext_cjk.hxx71
-rw-r--r--i18npool/inc/ordinalsuffix.hxx55
-rw-r--r--i18npool/inc/servicename.hxx68
-rw-r--r--i18npool/inc/textToPronounce_zh.hxx73
-rw-r--r--i18npool/inc/textconversion.hxx163
-rw-r--r--i18npool/inc/textconversionImpl.hxx79
-rw-r--r--i18npool/inc/texttonum.hxx53
-rw-r--r--i18npool/inc/transliterationImpl.hxx114
-rw-r--r--i18npool/inc/transliteration_Ignore.hxx159
-rw-r--r--i18npool/inc/transliteration_Numeric.hxx61
-rw-r--r--i18npool/inc/transliteration_OneToOne.hxx116
-rw-r--r--i18npool/inc/transliteration_body.hxx105
-rw-r--r--i18npool/inc/transliteration_caseignore.hxx64
-rw-r--r--i18npool/inc/transliteration_commonclass.hxx106
-rw-r--r--i18npool/inc/unoscripttypedetector.hxx53
-rw-r--r--i18npool/inc/wtt.h68
-rw-r--r--i18npool/inc/xdictionary.hxx91
45 files changed, 4264 insertions, 0 deletions
diff --git a/i18npool/inc/breakiteratorImpl.hxx b/i18npool/inc/breakiteratorImpl.hxx
new file mode 100644
index 000000000..cc5bd31a2
--- /dev/null
+++ b/i18npool/inc/breakiteratorImpl.hxx
@@ -0,0 +1,128 @@
+/* -*- 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_I18NPOOL_INC_BREAKITERATORIMPL_HXX
+#define INCLUDED_I18NPOOL_INC_BREAKITERATORIMPL_HXX
+
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/i18n/XBreakIterator.hpp>
+#include <cppuhelper/implbase.hxx>
+
+#include <vector>
+
+namespace com::sun::star::uno { class XComponentContext; }
+
+namespace i18npool {
+
+
+
+class BreakIteratorImpl : public cppu::WeakImplHelper
+<
+ css::i18n::XBreakIterator,
+ css::lang::XServiceInfo
+>
+{
+public:
+ BreakIteratorImpl( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+ BreakIteratorImpl();
+ virtual ~BreakIteratorImpl() override;
+
+ virtual sal_Int32 SAL_CALL nextCharacters( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& rLocale, sal_Int16 nCharacterIteratorMode, sal_Int32 nCount,
+ sal_Int32& nDone ) override;
+ virtual sal_Int32 SAL_CALL previousCharacters( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 nCharacterIteratorMode, sal_Int32 nCount,
+ sal_Int32& nDone ) override;
+
+ virtual css::i18n::Boundary SAL_CALL previousWord( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType) override;
+ virtual css::i18n::Boundary SAL_CALL nextWord( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType) override;
+ virtual css::i18n::Boundary SAL_CALL getWordBoundary( const OUString& Text, sal_Int32 nPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType, sal_Bool bDirection ) override;
+
+ virtual sal_Bool SAL_CALL isBeginWord( const OUString& Text, sal_Int32 nPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType ) override;
+ virtual sal_Bool SAL_CALL isEndWord( const OUString& Text, sal_Int32 nPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType ) override;
+ virtual sal_Int16 SAL_CALL getWordType( const OUString& Text, sal_Int32 nPos,
+ const css::lang::Locale& nLocale ) override;
+
+ virtual sal_Int32 SAL_CALL beginOfSentence( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale ) override;
+ virtual sal_Int32 SAL_CALL endOfSentence( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale ) override;
+
+ virtual css::i18n::LineBreakResults SAL_CALL getLineBreak( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int32 nMinBreakPos,
+ const css::i18n::LineBreakHyphenationOptions& hOptions,
+ const css::i18n::LineBreakUserOptions& bOptions ) override;
+
+ virtual sal_Int16 SAL_CALL getScriptType( const OUString& Text, sal_Int32 nPos ) override;
+ virtual sal_Int32 SAL_CALL beginOfScript( const OUString& Text, sal_Int32 nStartPos,
+ sal_Int16 ScriptType ) override;
+ virtual sal_Int32 SAL_CALL endOfScript( const OUString& Text, sal_Int32 nStartPos,
+ sal_Int16 ScriptType ) override;
+ virtual sal_Int32 SAL_CALL previousScript( const OUString& Text, sal_Int32 nStartPos,
+ sal_Int16 ScriptType ) override;
+ virtual sal_Int32 SAL_CALL nextScript( const OUString& Text, sal_Int32 nStartPos,
+ sal_Int16 ScriptType ) override;
+
+ virtual sal_Int32 SAL_CALL beginOfCharBlock( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 CharType ) override;
+ virtual sal_Int32 SAL_CALL endOfCharBlock( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 CharType ) override;
+ virtual sal_Int32 SAL_CALL previousCharBlock( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 CharType ) override;
+ virtual sal_Int32 SAL_CALL nextCharBlock( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 CharType ) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+ static sal_Int16 getScriptClass(sal_uInt32 currentChar);
+protected:
+ css::i18n::Boundary result; // for word break iterator
+
+private:
+
+ struct lookupTableItem {
+ lookupTableItem(const css::lang::Locale& _aLocale, css::uno::Reference < XBreakIterator > const & _xBI) : aLocale(_aLocale), xBI(_xBI) {};
+ css::lang::Locale aLocale;
+ css::uno::Reference < XBreakIterator > xBI;
+ };
+ std::vector<lookupTableItem> lookupTable;
+ css::lang::Locale aLocale;
+ css::uno::Reference < XBreakIterator > xBI;
+ css::uno::Reference < css::uno::XComponentContext > m_xContext;
+
+ /// @throws css::uno::RuntimeException
+ bool createLocaleSpecificBreakIterator( const OUString& aLocaleName );
+ /// @throws css::uno::RuntimeException
+ css::uno::Reference < XBreakIterator > getLocaleSpecificBreakIterator( const css::lang::Locale& rLocale );
+
+};
+
+} // i18npool
+
+
+#endif // INCLUDED_I18NPOOL_INC_BREAKITERATORIMPL_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/breakiterator_cjk.hxx b/i18npool/inc/breakiterator_cjk.hxx
new file mode 100644
index 000000000..5b8e2693f
--- /dev/null
+++ b/i18npool/inc/breakiterator_cjk.hxx
@@ -0,0 +1,68 @@
+/* -*- 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_I18NPOOL_INC_BREAKITERATOR_CJK_HXX
+#define INCLUDED_I18NPOOL_INC_BREAKITERATOR_CJK_HXX
+
+#include "breakiterator_unicode.hxx"
+#include "xdictionary.hxx"
+
+#include <memory>
+
+namespace i18npool {
+
+
+class BreakIterator_CJK : public BreakIterator_Unicode
+{
+public:
+ BreakIterator_CJK();
+
+ css::i18n::Boundary SAL_CALL nextWord( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType) override;
+ css::i18n::Boundary SAL_CALL previousWord( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType) override;
+ css::i18n::Boundary SAL_CALL getWordBoundary( const OUString& Text, sal_Int32 nPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType, sal_Bool bDirection ) override;
+ css::i18n::LineBreakResults SAL_CALL getLineBreak( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int32 nMinBreakPos,
+ const css::i18n::LineBreakHyphenationOptions& hOptions,
+ const css::i18n::LineBreakUserOptions& bOptions ) override;
+
+protected:
+ std::unique_ptr<xdictionary> m_xDict;
+ OUString hangingCharacters;
+};
+
+#define BREAKITERATOR_CJK( lang ) \
+class BreakIterator_##lang final : public BreakIterator_CJK {\
+public:\
+ BreakIterator_##lang (); \
+};
+
+BREAKITERATOR_CJK( zh )
+BREAKITERATOR_CJK( zh_TW )
+BREAKITERATOR_CJK( ja )
+BREAKITERATOR_CJK( ko )
+
+#undef BREAKITERATOR__CJK
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_BREAKITERATOR_CJK_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/breakiterator_th.hxx b/i18npool/inc/breakiterator_th.hxx
new file mode 100644
index 000000000..c694e79e2
--- /dev/null
+++ b/i18npool/inc/breakiterator_th.hxx
@@ -0,0 +1,56 @@
+/* -*- 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_I18NPOOL_INC_BREAKITERATOR_TH_HXX
+#define INCLUDED_I18NPOOL_INC_BREAKITERATOR_TH_HXX
+
+#include "breakiterator_unicode.hxx"
+
+namespace i18npool {
+
+
+
+class BreakIterator_th final : public BreakIterator_Unicode
+{
+public:
+ BreakIterator_th();
+ virtual ~BreakIterator_th() override;
+ virtual sal_Int32 SAL_CALL previousCharacters(const OUString& text, sal_Int32 start,
+ const css::lang::Locale& nLocale, sal_Int16 nCharacterIteratorMode, sal_Int32 count,
+ sal_Int32& nDone) override;
+ virtual sal_Int32 SAL_CALL nextCharacters(const OUString& text, sal_Int32 start,
+ const css::lang::Locale& rLocale, sal_Int16 nCharacterIteratorMode, sal_Int32 count,
+ sal_Int32& nDone) override;
+ virtual css::i18n::LineBreakResults SAL_CALL getLineBreak( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int32 nMinBreakPos,
+ const css::i18n::LineBreakHyphenationOptions& hOptions,
+ const css::i18n::LineBreakUserOptions& bOptions ) override;
+
+private:
+ OUString cachedText; // for cell index
+ std::vector<sal_Int32> m_aNextCellIndex;
+ std::vector<sal_Int32> m_aPreviousCellIndex;
+
+ void makeIndex(const OUString& text, sal_Int32 pos);
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/breakiterator_unicode.hxx b/i18npool/inc/breakiterator_unicode.hxx
new file mode 100644
index 000000000..ebb193ea2
--- /dev/null
+++ b/i18npool/inc/breakiterator_unicode.hxx
@@ -0,0 +1,111 @@
+/* -*- 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_I18NPOOL_INC_BREAKITERATOR_UNICODE_HXX
+#define INCLUDED_I18NPOOL_INC_BREAKITERATOR_UNICODE_HXX
+
+#include "breakiteratorImpl.hxx"
+
+#include <unicode/brkiter.h>
+#include <unicode/utext.h>
+#include <memory>
+#include <unordered_map>
+
+namespace i18npool {
+
+#define LOAD_CHARACTER_BREAKITERATOR 0
+#define LOAD_WORD_BREAKITERATOR 1
+#define LOAD_SENTENCE_BREAKITERATOR 2
+#define LOAD_LINE_BREAKITERATOR 3
+
+
+
+class BreakIterator_Unicode : public BreakIteratorImpl
+{
+public:
+ BreakIterator_Unicode();
+ virtual ~BreakIterator_Unicode() override;
+
+ virtual sal_Int32 SAL_CALL previousCharacters( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 nCharacterIteratorMode, sal_Int32 nCount,
+ sal_Int32& nDone ) override;
+ virtual sal_Int32 SAL_CALL nextCharacters( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& rLocale, sal_Int16 nCharacterIteratorMode, sal_Int32 nCount,
+ sal_Int32& nDone ) override;
+
+ virtual css::i18n::Boundary SAL_CALL previousWord( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType) override;
+ virtual css::i18n::Boundary SAL_CALL nextWord( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType) override;
+ virtual css::i18n::Boundary SAL_CALL getWordBoundary( const OUString& Text, sal_Int32 nPos,
+ const css::lang::Locale& nLocale, sal_Int16 WordType, sal_Bool bDirection ) override;
+
+ virtual sal_Int32 SAL_CALL beginOfSentence( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale ) override;
+ virtual sal_Int32 SAL_CALL endOfSentence( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale ) override;
+
+ virtual css::i18n::LineBreakResults SAL_CALL getLineBreak( const OUString& Text, sal_Int32 nStartPos,
+ const css::lang::Locale& nLocale, sal_Int32 nMinBreakPos,
+ const css::i18n::LineBreakHyphenationOptions& hOptions,
+ const css::i18n::LineBreakUserOptions& bOptions ) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+protected:
+ const char *cBreakIterator, *lineRule;
+
+ /** Used as map value. */
+ struct BI_ValueData
+ {
+ OUString maICUText;
+ UText* mpUt;
+ std::shared_ptr< icu::BreakIterator > mpBreakIterator;
+
+ BI_ValueData() : mpUt(nullptr)
+ {
+ }
+ ~BI_ValueData()
+ {
+ utext_close(mpUt);
+ }
+ };
+
+ struct BI_Data
+ {
+ std::shared_ptr< BI_ValueData > mpValue;
+ OString maBIMapKey;
+ } character, sentence, line, *icuBI;
+ BI_Data words[4]; // 4 is css::i18n::WordType enumeration size
+
+ /// @throws css::uno::RuntimeException
+ void loadICUBreakIterator(const css::lang::Locale& rLocale,
+ sal_Int16 rBreakType, sal_Int16 rWordType, const char* name, const OUString& rText);
+
+public:
+ typedef std::unordered_map< OString, std::shared_ptr< BI_ValueData > > BIMap;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/bullet.h b/i18npool/inc/bullet.h
new file mode 100644
index 000000000..9852625b0
--- /dev/null
+++ b/i18npool/inc/bullet.h
@@ -0,0 +1,325 @@
+/* -*- 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 .
+ */
+
+namespace i18npool {
+
+static const sal_Unicode table_AIUFullWidth_ja_JP[] = {
+ 0x30A2, // KATAKANA LETTER A
+ 0x30A4, // KATAKANA LETTER I
+ 0x30A6, // KATAKANA LETTER U
+ 0x30A8, // KATAKANA LETTER E
+ 0x30AA, // KATAKANA LETTER O
+ 0x30AB, // KATAKANA LETTER KA
+ 0x30AD, // KATAKANA LETTER KI
+ 0x30AF, // KATAKANA LETTER KU
+ 0x30B1, // KATAKANA LETTER KE
+ 0x30B3, // KATAKANA LETTER KO
+ 0x30B5, // KATAKANA LETTER SA
+ 0x30B7, // KATAKANA LETTER SI
+ 0x30B9, // KATAKANA LETTER SU
+ 0x30BB, // KATAKANA LETTER SE
+ 0x30BD, // KATAKANA LETTER SO
+ 0x30BF, // KATAKANA LETTER TA
+ 0x30C1, // KATAKANA LETTER TI
+ 0x30C4, // KATAKANA LETTER TU
+ 0x30C6, // KATAKANA LETTER TE
+ 0x30C8, // KATAKANA LETTER TO
+ 0x30CA, // KATAKANA LETTER NA
+ 0x30CB, // KATAKANA LETTER NI
+ 0x30CC, // KATAKANA LETTER NU
+ 0x30CD, // KATAKANA LETTER NE
+ 0x30CE, // KATAKANA LETTER NO
+ 0x30CF, // KATAKANA LETTER HA
+ 0x30D2, // KATAKANA LETTER HI
+ 0x30D5, // KATAKANA LETTER HU
+ 0x30D8, // KATAKANA LETTER HE
+ 0x30DB, // KATAKANA LETTER HO
+ 0x30DE, // KATAKANA LETTER MA
+ 0x30DF, // KATAKANA LETTER MI
+ 0x30E0, // KATAKANA LETTER MU
+ 0x30E1, // KATAKANA LETTER ME
+ 0x30E2, // KATAKANA LETTER MO
+ 0x30E4, // KATAKANA LETTER YA
+ 0x30E6, // KATAKANA LETTER YU
+ 0x30E8, // KATAKANA LETTER YO
+ 0x30E9, // KATAKANA LETTER RA
+ 0x30EA, // KATAKANA LETTER RI
+ 0x30EB, // KATAKANA LETTER RU
+ 0x30EC, // KATAKANA LETTER RE
+ 0x30ED, // KATAKANA LETTER RO
+ 0x30EF, // KATAKANA LETTER WA
+ 0x30F2, // KATAKANA LETTER WO
+ 0x30F3 // KATAKANA LETTER N
+};
+
+static const sal_Unicode table_AIUHalfWidth_ja_JP[] = {
+ 0xFF71, // HALFWIDTH KATAKANA LETTER A
+ 0xFF72, // HALFWIDTH KATAKANA LETTER I
+ 0xFF73, // HALFWIDTH KATAKANA LETTER U
+ 0xFF74, // HALFWIDTH KATAKANA LETTER E
+ 0xFF75, // HALFWIDTH KATAKANA LETTER O
+ 0xFF76, // HALFWIDTH KATAKANA LETTER KA
+ 0xFF77, // HALFWIDTH KATAKANA LETTER KI
+ 0xFF78, // HALFWIDTH KATAKANA LETTER KU
+ 0xFF79, // HALFWIDTH KATAKANA LETTER KE
+ 0xFF7A, // HALFWIDTH KATAKANA LETTER KO
+ 0xFF7B, // HALFWIDTH KATAKANA LETTER SA
+ 0xFF7C, // HALFWIDTH KATAKANA LETTER SI
+ 0xFF7D, // HALFWIDTH KATAKANA LETTER SU
+ 0xFF7E, // HALFWIDTH KATAKANA LETTER SE
+ 0xFF7F, // HALFWIDTH KATAKANA LETTER SO
+ 0xFF80, // HALFWIDTH KATAKANA LETTER TA
+ 0xFF81, // HALFWIDTH KATAKANA LETTER TI
+ 0xFF82, // HALFWIDTH KATAKANA LETTER TU
+ 0xFF83, // HALFWIDTH KATAKANA LETTER TE
+ 0xFF84, // HALFWIDTH KATAKANA LETTER TO
+ 0xFF85, // HALFWIDTH KATAKANA LETTER NA
+ 0xFF86, // HALFWIDTH KATAKANA LETTER NI
+ 0xFF87, // HALFWIDTH KATAKANA LETTER NU
+ 0xFF88, // HALFWIDTH KATAKANA LETTER NE
+ 0xFF89, // HALFWIDTH KATAKANA LETTER NO
+ 0xFF8A, // HALFWIDTH KATAKANA LETTER HA
+ 0xFF8B, // HALFWIDTH KATAKANA LETTER HI
+ 0xFF8C, // HALFWIDTH KATAKANA LETTER HU
+ 0xFF8D, // HALFWIDTH KATAKANA LETTER HE
+ 0xFF8E, // HALFWIDTH KATAKANA LETTER HO
+ 0xFF8F, // HALFWIDTH KATAKANA LETTER MA
+ 0xFF90, // HALFWIDTH KATAKANA LETTER MI
+ 0xFF91, // HALFWIDTH KATAKANA LETTER MU
+ 0xFF92, // HALFWIDTH KATAKANA LETTER ME
+ 0xFF93, // HALFWIDTH KATAKANA LETTER MO
+ 0xFF94, // HALFWIDTH KATAKANA LETTER YA
+ 0xFF95, // HALFWIDTH KATAKANA LETTER YU
+ 0xFF96, // HALFWIDTH KATAKANA LETTER YO
+ 0xFF97, // HALFWIDTH KATAKANA LETTER RA
+ 0xFF98, // HALFWIDTH KATAKANA LETTER RI
+ 0xFF99, // HALFWIDTH KATAKANA LETTER RU
+ 0xFF9A, // HALFWIDTH KATAKANA LETTER RE
+ 0xFF9B, // HALFWIDTH KATAKANA LETTER RO
+ 0xFF9C, // HALFWIDTH KATAKANA LETTER WA
+ 0xFF66, // HALFWIDTH KATAKANA LETTER WO
+ 0xFF9D // HALFWIDTH KATAKANA LETTER N
+};
+
+static const sal_Unicode table_IROHAFullWidth_ja_JP[] = {
+ 0x30A4, // KATAKANA LETTER I
+ 0x30ED, // KATAKANA LETTER RO
+ 0x30CF, // KATAKANA LETTER HA
+ 0x30CB, // KATAKANA LETTER NI
+ 0x30DB, // KATAKANA LETTER HO
+ 0x30D8, // KATAKANA LETTER HE
+ 0x30C8, // KATAKANA LETTER TO
+ 0x30C1, // KATAKANA LETTER TI
+ 0x30EA, // KATAKANA LETTER RI
+ 0x30CC, // KATAKANA LETTER NU
+ 0x30EB, // KATAKANA LETTER RU
+ 0x30F2, // KATAKANA LETTER WO
+ 0x30EF, // KATAKANA LETTER WA
+ 0x30AB, // KATAKANA LETTER KA
+ 0x30E8, // KATAKANA LETTER YO
+ 0x30BF, // KATAKANA LETTER TA
+ 0x30EC, // KATAKANA LETTER RE
+ 0x30BD, // KATAKANA LETTER SO
+ 0x30C4, // KATAKANA LETTER TU
+ 0x30CD, // KATAKANA LETTER NE
+ 0x30CA, // KATAKANA LETTER NA
+ 0x30E9, // KATAKANA LETTER RA
+ 0x30E0, // KATAKANA LETTER MU
+ 0x30A6, // KATAKANA LETTER U
+ 0x30F0, // KATAKANA LETTER WI
+ 0x30CE, // KATAKANA LETTER NO
+ 0x30AA, // KATAKANA LETTER O
+ 0x30AF, // KATAKANA LETTER KU
+ 0x30E4, // KATAKANA LETTER YA
+ 0x30DE, // KATAKANA LETTER MA
+ 0x30B1, // KATAKANA LETTER KE
+ 0x30D5, // KATAKANA LETTER HU
+ 0x30B3, // KATAKANA LETTER KO
+ 0x30A8, // KATAKANA LETTER E
+ 0x30C6, // KATAKANA LETTER TE
+ 0x30A2, // KATAKANA LETTER A
+ 0x30B5, // KATAKANA LETTER SA
+ 0x30AD, // KATAKANA LETTER KI
+ 0x30E6, // KATAKANA LETTER YU
+ 0x30E1, // KATAKANA LETTER ME
+ 0x30DF, // KATAKANA LETTER MI
+ 0x30B7, // KATAKANA LETTER SI
+ 0x30F1, // KATAKANA LETTER WE
+ 0x30D2, // KATAKANA LETTER HI
+ 0x30E2, // KATAKANA LETTER MO
+ 0x30BB, // KATAKANA LETTER SE
+ 0x30B9, // KATAKANA LETTER SU
+ 0x30F3 // KATAKANA LETTER N
+};
+
+static const sal_Unicode table_IROHAHalfWidth_ja_JP[] = {
+ 0xFF72, // HALFWIDTH KATAKANA LETTER I
+ 0xFF9B, // HALFWIDTH KATAKANA LETTER RO
+ 0xFF8A, // HALFWIDTH KATAKANA LETTER HA
+ 0xFF86, // HALFWIDTH KATAKANA LETTER NI
+ 0xFF8E, // HALFWIDTH KATAKANA LETTER HO
+ 0xFF8D, // HALFWIDTH KATAKANA LETTER HE
+ 0xFF84, // HALFWIDTH KATAKANA LETTER TO
+ 0xFF81, // HALFWIDTH KATAKANA LETTER TI
+ 0xFF98, // HALFWIDTH KATAKANA LETTER RI
+ 0xFF87, // HALFWIDTH KATAKANA LETTER NU
+ 0xFF99, // HALFWIDTH KATAKANA LETTER RU
+ 0xFF66, // HALFWIDTH KATAKANA LETTER WO
+ 0xFF9C, // HALFWIDTH KATAKANA LETTER WA
+ 0xFF76, // HALFWIDTH KATAKANA LETTER KA
+ 0xFF96, // HALFWIDTH KATAKANA LETTER YO
+ 0xFF80, // HALFWIDTH KATAKANA LETTER TA
+ 0xFF9A, // HALFWIDTH KATAKANA LETTER RE
+ 0xFF7F, // HALFWIDTH KATAKANA LETTER SO
+ 0xFF82, // HALFWIDTH KATAKANA LETTER TU
+ 0xFF88, // HALFWIDTH KATAKANA LETTER NE
+ 0xFF85, // HALFWIDTH KATAKANA LETTER NA
+ 0xFF97, // HALFWIDTH KATAKANA LETTER RA
+ 0xFF91, // HALFWIDTH KATAKANA LETTER MU
+ 0xFF73, // HALFWIDTH KATAKANA LETTER U
+ 0x30F0, // KATAKANA LETTER WI
+ 0xFF89, // HALFWIDTH KATAKANA LETTER NO
+ 0xFF75, // HALFWIDTH KATAKANA LETTER O
+ 0xFF78, // HALFWIDTH KATAKANA LETTER KU
+ 0xFF94, // HALFWIDTH KATAKANA LETTER YA
+ 0xFF8F, // HALFWIDTH KATAKANA LETTER MA
+ 0xFF79, // HALFWIDTH KATAKANA LETTER KE
+ 0xFF8C, // HALFWIDTH KATAKANA LETTER HU
+ 0xFF7A, // HALFWIDTH KATAKANA LETTER KO
+ 0xFF74, // HALFWIDTH KATAKANA LETTER E
+ 0xFF83, // HALFWIDTH KATAKANA LETTER TE
+ 0xFF71, // HALFWIDTH KATAKANA LETTER A
+ 0xFF7B, // HALFWIDTH KATAKANA LETTER SA
+ 0xFF77, // HALFWIDTH KATAKANA LETTER KI
+ 0xFF95, // HALFWIDTH KATAKANA LETTER YU
+ 0xFF92, // HALFWIDTH KATAKANA LETTER ME
+ 0xFF90, // HALFWIDTH KATAKANA LETTER MI
+ 0xFF7C, // HALFWIDTH KATAKANA LETTER SI
+ 0x30F1, // KATAKANA LETTER WE
+ 0xFF8B, // HALFWIDTH KATAKANA LETTER HI
+ 0xFF93, // HALFWIDTH KATAKANA LETTER MO
+ 0xFF7E, // HALFWIDTH KATAKANA LETTER SE
+ 0xFF7D, // HALFWIDTH KATAKANA LETTER SU
+ 0xFF9D // HALFWIDTH KATAKANA LETTER N
+};
+
+static const sal_Unicode table_CircledNumber[] = {
+ 0x2460, // CIRCLED DIGIT ONE
+ 0x2461, // CIRCLED DIGIT TWO
+ 0x2462, // CIRCLED DIGIT THREE
+ 0x2463, // CIRCLED DIGIT FOUR
+ 0x2464, // CIRCLED DIGIT FIVE
+ 0x2465, // CIRCLED DIGIT SIX
+ 0x2466, // CIRCLED DIGIT SEVEN
+ 0x2467, // CIRCLED DIGIT EIGHT
+ 0x2468, // CIRCLED DIGIT NINE
+ 0x2469, // CIRCLED NUMBER TEN
+ 0x246A, // CIRCLED NUMBER ELEVEN
+ 0x246B, // CIRCLED NUMBER TWELVE
+ 0x246C, // CIRCLED NUMBER THIRTEEN
+ 0x246D, // CIRCLED NUMBER FOURTEEN
+ 0x246E, // CIRCLED NUMBER FIFTEEN
+ 0x246F, // CIRCLED NUMBER SIXTEEN
+ 0x2470, // CIRCLED NUMBER SEVENTEEN
+ 0x2471, // CIRCLED NUMBER EIGHTEEN
+ 0x2472, // CIRCLED NUMBER NINETEEN
+ 0x2473 // CIRCLED NUMBER TWENTY
+};
+
+static const sal_Unicode table_HangulJamo_ko[] = {
+ 0x3131, // HANGUL LETTER KIYEOK
+ 0x3134, // HANGUL LETTER NIEUN
+ 0x3137, // HANGUL LETTER TIKEUT
+ 0x3139, // HANGUL LETTER RIEUL
+ 0x3141, // HANGUL LETTER MIEUM
+ 0x3142, // HANGUL LETTER PIEUP
+ 0x3145, // HANGUL LETTER SIOS
+ 0x3147, // HANGUL LETTER IEUNG
+ 0x3148, // HANGUL LETTER CIEUC
+ 0x314A, // HANGUL LETTER CHIEUCH
+ 0x314B, // HANGUL LETTER KHIEUKH
+ 0x314C, // HANGUL LETTER THIEUTH
+ 0x314D, // HANGUL LETTER PHIEUPH
+ 0x314E // HANGUL LETTER HIEUH
+};
+
+static const sal_Unicode table_HangulSyllable_ko[] = {
+ 0xAC00, // HANGUL SYLLABLE GA
+ 0xB098, // HANGUL SYLLABLE NA
+ 0xB2E4, // HANGUL SYLLABLE DA
+ 0xB77C, // HANGUL SYLLABLE LA
+ 0xB9C8, // HANGUL SYLLABLE MA
+ 0xBC14, // HANGUL SYLLABLE BA
+ 0xC0AC, // HANGUL SYLLABLE SA
+ 0xC544, // HANGUL SYLLABLE A
+ 0xC790, // HANGUL SYLLABLE JA
+ 0xCC28, // HANGUL SYLLABLE CA
+ 0xCE74, // HANGUL SYLLABLE KA
+ 0xD0C0, // HANGUL SYLLABLE TA
+ 0xD30C, // HANGUL SYLLABLE PA
+ 0xD558 // HANGUL SYLLABLE HA
+
+};
+
+static const sal_Unicode table_HangulCircledJamo_ko[] = {
+ 0x3260, // CIRCLED HANGUL LETTER KIYEOK
+ 0x3261, // CIRCLED HANGUL LETTER NIEUN
+ 0x3262, // CIRCLED HANGUL LETTER TIKEUT
+ 0x3263, // CIRCLED HANGUL LETTER RIEUL
+ 0x3264, // CIRCLED HANGUL LETTER MIEUM
+ 0x3265, // CIRCLED HANGUL LETTER PIEUP
+ 0x3266, // CIRCLED HANGUL LETTER SIOS
+ 0x3267, // CIRCLED HANGUL LETTER IEUNG
+ 0x3268, // CIRCLED HANGUL LETTER CIEUC
+ 0x3269, // CIRCLED HANGUL LETTER CHIEUCH
+ 0x326A, // CIRCLED HANGUL LETTER KHIEUKH
+ 0x326B, // CIRCLED HANGUL LETTER THIEUTH
+ 0x326C, // CIRCLED HANGUL LETTER PHIEUPH
+ 0x326D // CIRCLED HANGUL LETTER HIEUH
+};
+
+
+static const sal_Unicode table_HangulCircledSyllable_ko[] = {
+ 0x326E, // CIRCLED HANGUL SYLLABLE GA
+ 0x326F, // CIRCLED HANGUL SYLLABLE NA
+ 0x3270, // CIRCLED HANGUL SYLLABLE DA
+ 0x3271, // CIRCLED HANGUL SYLLABLE LA
+ 0x3272, // CIRCLED HANGUL SYLLABLE MA
+ 0x3273, // CIRCLED HANGUL SYLLABLE BA
+ 0x3274, // CIRCLED HANGUL SYLLABLE SA
+ 0x3275, // CIRCLED HANGUL SYLLABLE A
+ 0x3276, // CIRCLED HANGUL SYLLABLE JA
+ 0x3277, // CIRCLED HANGUL SYLLABLE CA
+ 0x3278, // CIRCLED HANGUL SYLLABLE KA
+ 0x3279, // CIRCLED HANGUL SYLLABLE TA
+ 0x327A, // CIRCLED HANGUL SYLLABLE PA
+ 0x327B // CIRCLED HANGUL SYLLABLE HA
+};
+
+static const sal_Unicode table_TianGan_zh[] = {
+ 0x7532,0x4e59,0x4e19,0x4e01,0x620a,0x5df1,0x5e9a,0x8f9b,0x58ec,0x7678
+};
+
+static const sal_Unicode table_DiZi_zh[] = {
+ 0x5b50,0x4e11,0x5bc5,0x536f,0x8fb0,0x5df3,0x5348,0x672a,0x7533,0x9149,0x620c,0x4ea5
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/calendarImpl.hxx b/i18npool/inc/calendarImpl.hxx
new file mode 100644
index 000000000..971355051
--- /dev/null
+++ b/i18npool/inc/calendarImpl.hxx
@@ -0,0 +1,110 @@
+/* -*- 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_I18NPOOL_INC_CALENDARIMPL_HXX
+#define INCLUDED_I18NPOOL_INC_CALENDARIMPL_HXX
+
+#include <com/sun/star/i18n/XCalendar4.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <vector>
+
+namespace com::sun::star::uno { class XComponentContext; }
+
+
+
+namespace i18npool {
+
+class CalendarImpl : public cppu::WeakImplHelper
+<
+ css::i18n::XCalendar4,
+ css::lang::XServiceInfo
+>
+{
+public:
+
+ // Constructors
+ CalendarImpl();
+ CalendarImpl(const css::uno::Reference < css::uno::XComponentContext >& rxContext);
+
+ /**
+ * Destructor
+ */
+ virtual ~CalendarImpl() override;
+
+
+ // Methods
+ virtual void SAL_CALL loadDefaultCalendar(const css::lang::Locale& rLocale) override;
+ virtual void SAL_CALL loadCalendar(const OUString& uniqueID, const css::lang::Locale& rLocale) override;
+ virtual css::i18n::Calendar SAL_CALL getLoadedCalendar() override;
+ virtual css::uno::Sequence < OUString > SAL_CALL getAllCalendars(const css::lang::Locale& rLocale) override;
+ virtual OUString SAL_CALL getUniqueID() override;
+ virtual void SAL_CALL setDateTime(double fTimeInDays) override;
+ virtual double SAL_CALL getDateTime() override;
+ virtual void SAL_CALL setValue( sal_Int16 nFieldIndex, sal_Int16 nValue ) override;
+ virtual sal_Int16 SAL_CALL getValue(sal_Int16 nFieldIndex) override;
+ virtual sal_Bool SAL_CALL isValid() override;
+ virtual void SAL_CALL addValue(sal_Int16 nFieldIndex, sal_Int32 nAmount) override;
+ virtual sal_Int16 SAL_CALL getFirstDayOfWeek() override;
+ virtual void SAL_CALL setFirstDayOfWeek(sal_Int16 nDay) override;
+ virtual void SAL_CALL setMinimumNumberOfDaysForFirstWeek(sal_Int16 nDays) override;
+ virtual sal_Int16 SAL_CALL getMinimumNumberOfDaysForFirstWeek() override;
+ virtual sal_Int16 SAL_CALL getNumberOfMonthsInYear() override;
+ virtual sal_Int16 SAL_CALL getNumberOfDaysInWeek() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem > SAL_CALL getMonths() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem > SAL_CALL getDays() override;
+ virtual OUString SAL_CALL getDisplayName(sal_Int16 nCalendarDisplayIndex, sal_Int16 nIdx, sal_Int16 nNameType) override;
+
+ // Methods in XExtendedCalendar
+ virtual OUString SAL_CALL getDisplayString( sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode ) override;
+
+ // XCalendar3
+ virtual css::i18n::Calendar2 SAL_CALL getLoadedCalendar2() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem2 > SAL_CALL getDays2() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem2 > SAL_CALL getMonths2() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem2 > SAL_CALL getGenitiveMonths2() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem2 > SAL_CALL getPartitiveMonths2() override;
+
+ // XCalendar4
+ virtual void SAL_CALL setLocalDateTime(double TimeInDays) override;
+ virtual double SAL_CALL getLocalDateTime() override;
+ virtual void SAL_CALL loadDefaultCalendarTZ(const css::lang::Locale& rLocale, const OUString& rTimeZone) override;
+ virtual void SAL_CALL loadCalendarTZ(const OUString& uniqueID, const css::lang::Locale& rLocale, const OUString& rTimeZone) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence < OUString > SAL_CALL getSupportedServiceNames() override;
+
+private:
+ struct lookupTableItem {
+ lookupTableItem(const OUString& rCacheID, css::uno::Reference < css::i18n::XCalendar4 > const & _xCalendar)
+ : m_aCacheID(rCacheID), xCalendar(_xCalendar) {}
+ OUString m_aCacheID;
+ css::uno::Reference < css::i18n::XCalendar4 > xCalendar;
+ };
+ std::vector<lookupTableItem> lookupTable;
+ css::uno::Reference < css::uno::XComponentContext > m_xContext;
+ css::uno::Reference < css::i18n::XCalendar4 > xCalendar;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/calendar_gregorian.hxx b/i18npool/inc/calendar_gregorian.hxx
new file mode 100644
index 000000000..10bde05b2
--- /dev/null
+++ b/i18npool/inc/calendar_gregorian.hxx
@@ -0,0 +1,201 @@
+/* -*- 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_I18NPOOL_INC_CALENDAR_GREGORIAN_HXX
+#define INCLUDED_I18NPOOL_INC_CALENDAR_GREGORIAN_HXX
+
+#include "calendarImpl.hxx"
+
+#include <com/sun/star/i18n/CalendarFieldIndex.hpp>
+
+#include <unicode/calendar.h>
+#include <rtl/ref.hxx>
+
+#include <memory>
+
+namespace i18npool { class NativeNumberSupplierService; }
+
+
+
+namespace i18npool {
+
+const sal_uInt8 kDisplayEraForcedLongYear = 0x01;
+
+struct Era {
+ sal_Int32 year;
+ sal_Int32 month;
+ sal_Int32 day;
+ sal_uInt8 flags;
+};
+
+const sal_Int16 FIELD_INDEX_COUNT = css::i18n::CalendarFieldIndex::FIELD_COUNT2;
+
+class Calendar_gregorian : public CalendarImpl
+{
+public:
+
+ // Constructors
+ Calendar_gregorian();
+ Calendar_gregorian(const Era *_eraArray);
+ void init(const Era *_eraArray);
+ bool setTimeZone( const OUString& rTimeZone );
+
+ /**
+ * Destructor
+ */
+ virtual ~Calendar_gregorian() override;
+
+ // Methods in XCalendar
+ virtual void SAL_CALL loadCalendar(const OUString& uniqueID, const css::lang::Locale& rLocale) override;
+ virtual void SAL_CALL setDateTime(double fTimeInDays) override;
+ virtual double SAL_CALL getDateTime() override;
+ virtual void SAL_CALL setValue( sal_Int16 nFieldIndex, sal_Int16 nValue ) override;
+ virtual sal_Int16 SAL_CALL getValue(sal_Int16 nFieldIndex) override;
+ virtual void SAL_CALL addValue(sal_Int16 nFieldIndex, sal_Int32 nAmount) override;
+ virtual sal_Bool SAL_CALL isValid() override;
+ virtual css::i18n:: Calendar SAL_CALL getLoadedCalendar() override;
+ virtual OUString SAL_CALL getUniqueID() override;
+ virtual sal_Int16 SAL_CALL getFirstDayOfWeek() override;
+ virtual void SAL_CALL setFirstDayOfWeek(sal_Int16 nDay) override;
+ virtual void SAL_CALL setMinimumNumberOfDaysForFirstWeek(sal_Int16 nDays) override;
+ virtual sal_Int16 SAL_CALL getMinimumNumberOfDaysForFirstWeek() override;
+ virtual sal_Int16 SAL_CALL getNumberOfMonthsInYear() override;
+ virtual sal_Int16 SAL_CALL getNumberOfDaysInWeek() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem > SAL_CALL getMonths() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem > SAL_CALL getDays() override;
+ virtual OUString SAL_CALL getDisplayName(sal_Int16 nCalendarDisplayIndex, sal_Int16 nIdx, sal_Int16 nNameType) override;
+
+ // Methods in XExtendedCalendar
+ virtual OUString SAL_CALL getDisplayString( sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode ) override;
+
+ // XCalendar3
+ virtual css::i18n::Calendar2 SAL_CALL getLoadedCalendar2() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem2 > SAL_CALL getDays2() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem2 > SAL_CALL getMonths2() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem2 > SAL_CALL getGenitiveMonths2() override;
+ virtual css::uno::Sequence < css::i18n::CalendarItem2 > SAL_CALL getPartitiveMonths2() override;
+
+ // XCalendar4
+ virtual void SAL_CALL setLocalDateTime(double TimeInDays) override;
+ virtual double SAL_CALL getLocalDateTime() override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence < OUString > SAL_CALL getSupportedServiceNames() override;
+
+protected:
+ const Era *eraArray;
+ std::unique_ptr<icu::Calendar> body;
+ rtl::Reference<NativeNumberSupplierService> mxNatNum;
+ const char* cCalendar;
+ css::lang::Locale aLocale;
+ sal_uInt32 fieldSet;
+ sal_Int16 fieldValue[FIELD_INDEX_COUNT];
+ sal_Int16 fieldSetValue[FIELD_INDEX_COUNT];
+
+ /// @throws css::uno::RuntimeException
+ virtual void mapToGregorian();
+ /// @throws css::uno::RuntimeException
+ virtual void mapFromGregorian();
+ /// @throws css::uno::RuntimeException
+ void getValue();
+
+ /// @throws css::uno::RuntimeException
+ OUString getDisplayStringImpl( sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode, bool bEraMode );
+
+private:
+ css::i18n::Calendar2 aCalendar;
+
+ /** Submit fieldSetValue array according to fieldSet.
+
+ @throws css::uno::RuntimeException
+ */
+ void submitFields();
+ /** Set fields internally.
+
+ @throws css::uno::RuntimeException
+ */
+ void setValue();
+ /** Obtain combined field values for timezone offset (minutes+secondmillis)
+ in milliseconds and whether fields were set. */
+ bool getZoneOffset( sal_Int32 & o_nOffset ) const;
+ /** Obtain combined field values for DST offset (minutes+secondmillis) in
+ milliseconds and whether fields were set. */
+ bool getDSTOffset( sal_Int32 & o_nOffset ) const;
+ /** Used by getZoneOffset() and getDSTOffset(). Parent is
+ CalendarFieldIndex for offset in minutes, child is CalendarFieldIndex
+ for offset in milliseconds. */
+ bool getCombinedOffset( sal_Int32 & o_nOffset, sal_Int16 nParentFieldIndex, sal_Int16 nChildFieldIndex ) const;
+};
+
+
+
+class Calendar_hanja final : public Calendar_gregorian
+{
+public:
+ // Constructors
+ Calendar_hanja();
+ virtual void SAL_CALL loadCalendar(const OUString& uniqueID, const css::lang::Locale& rLocale) override;
+ virtual OUString SAL_CALL getDisplayName(sal_Int16 nCalendarDisplayIndex, sal_Int16 nIdx, sal_Int16 nNameType) override;
+};
+
+
+
+class Calendar_gengou final : public Calendar_gregorian
+{
+public:
+ // Constructors
+ Calendar_gengou();
+};
+
+
+
+class Calendar_ROC final : public Calendar_gregorian
+{
+public:
+ // Constructors
+ Calendar_ROC();
+};
+
+
+
+class Calendar_dangi final : public Calendar_gregorian
+{
+public:
+ // Constructors
+ Calendar_dangi();
+};
+
+
+
+class Calendar_buddhist final : public Calendar_gregorian
+{
+public:
+ // Constructors
+ Calendar_buddhist();
+
+ // Methods in XExtendedCalendar
+ virtual OUString SAL_CALL getDisplayString( sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode ) override;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/calendar_hijri.hxx b/i18npool/inc/calendar_hijri.hxx
new file mode 100644
index 000000000..f8511842d
--- /dev/null
+++ b/i18npool/inc/calendar_hijri.hxx
@@ -0,0 +1,76 @@
+/* -*- 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_I18NPOOL_INC_CALENDAR_HIJRI_HXX
+#define INCLUDED_I18NPOOL_INC_CALENDAR_HIJRI_HXX
+
+#include "calendar_gregorian.hxx"
+
+
+
+
+namespace i18npool {
+
+class Calendar_hijri final : public Calendar_gregorian
+{
+public:
+
+ // Constructors
+ Calendar_hijri();
+
+private:
+ void mapToGregorian() override;
+ void mapFromGregorian() override;
+
+ // radians per degree (pi/180)
+ static const double RadPerDeg;
+
+ // Synodic Period (mean time between 2 successive new moon: 29d, 12 hr, 44min, 3sec
+ static const double SynPeriod;
+
+ static const double SynMonth; // Solar days in a year/SynPeriod
+
+ // Julian day on Jan 1, 1900
+ static const double jd1900;
+
+ // Reference point: September 1984 25d 3h 10m UT. == 1405 Hijri == 1048 Synodial month from 1900
+ static const sal_Int32 SynRef;
+ static const sal_Int32 GregRef;
+
+ // Local time (Saudi Arabia)
+ static const double SA_TimeZone; // Time Zone
+
+ // Period between 1.30pm - 6:30pm
+ static const double EveningPeriod;
+
+ // "Leap" years
+ static const sal_Int32 LeapYear[];
+
+private:
+ static double NewMoon(sal_Int32 n);
+ static void getHijri(sal_Int32 *day, sal_Int32 *month, sal_Int32 *year);
+ static void ToGregorian(sal_Int32 *day, sal_Int32 *month, sal_Int32 *year);
+ static void getGregorianDay(sal_Int32 jd, sal_Int32 *pnDay, sal_Int32 *pnMonth, sal_Int32 *pnYear);
+ static sal_Int32 getJulianDay(sal_Int32 day, sal_Int32 month, sal_Int32 year);
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/calendar_jewish.hxx b/i18npool/inc/calendar_jewish.hxx
new file mode 100644
index 000000000..8a1e9f905
--- /dev/null
+++ b/i18npool/inc/calendar_jewish.hxx
@@ -0,0 +1,47 @@
+/* -*- 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_I18NPOOL_INC_CALENDAR_JEWISH_HXX
+#define INCLUDED_I18NPOOL_INC_CALENDAR_JEWISH_HXX
+
+#include "calendar_gregorian.hxx"
+
+
+
+
+namespace i18npool {
+
+class Calendar_jewish final : public Calendar_gregorian
+{
+public:
+ // Constructors
+ Calendar_jewish();
+
+ // Methods in XExtendedCalendar
+ virtual OUString SAL_CALL getDisplayString( sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode ) override;
+
+private:
+ void mapToGregorian() override;
+ void mapFromGregorian() override;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/cclass_unicode.hxx b/i18npool/inc/cclass_unicode.hxx
new file mode 100644
index 000000000..03a084b01
--- /dev/null
+++ b/i18npool/inc/cclass_unicode.hxx
@@ -0,0 +1,186 @@
+/* -*- 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_I18NPOOL_INC_CCLASS_UNICODE_HXX
+#define INCLUDED_I18NPOOL_INC_CCLASS_UNICODE_HXX
+
+#include <com/sun/star/i18n/XCharacterClassification.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+#include <o3tl/typed_flags_set.hxx>
+#include <memory>
+
+namespace com::sun::star::uno { class XComponentContext; }
+namespace com::sun::star::i18n { class XNativeNumberSupplier; }
+namespace com::sun::star::i18n { class XLocaleData5; }
+namespace i18npool { class Transliteration_casemapping; }
+
+
+/// Flag values of table.
+enum class ParserFlags : sal_uInt32 {
+ ILLEGAL = 0x00000000,
+ CHAR = 0x00000001,
+ CHAR_BOOL = 0x00000002,
+ CHAR_WORD = 0x00000004,
+ CHAR_VALUE = 0x00000008,
+ CHAR_STRING = 0x00000010,
+ CHAR_DONTCARE = 0x00000020,
+ BOOL = 0x00000040,
+ WORD = 0x00000080,
+ WORD_SEP = 0x00000100,
+ VALUE = 0x00000200,
+ VALUE_SEP = 0x00000400,
+ VALUE_EXP = 0x00000800,
+ VALUE_SIGN = 0x00001000,
+ VALUE_EXP_VALUE = 0x00002000,
+ VALUE_DIGIT = 0x00004000,
+ NAME_SEP = 0x20000000,
+ STRING_SEP = 0x40000000,
+ EXCLUDED = 0x80000000,
+};
+namespace o3tl {
+ template<> struct typed_flags<ParserFlags> : is_typed_flags<ParserFlags, 0xe0007fff> {};
+}
+
+
+namespace i18npool {
+
+class cclass_Unicode final : public cppu::WeakImplHelper < css::i18n::XCharacterClassification, css::lang::XServiceInfo >
+{
+public:
+ cclass_Unicode(const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+ virtual ~cclass_Unicode() override;
+
+ virtual OUString SAL_CALL toUpper( const OUString& Text, sal_Int32 nPos, sal_Int32 nCount,
+ const css::lang::Locale& rLocale ) override;
+ virtual OUString SAL_CALL toLower( const OUString& Text, sal_Int32 nPos, sal_Int32 nCount,
+ const css::lang::Locale& rLocale ) override;
+ virtual OUString SAL_CALL toTitle( const OUString& Text, sal_Int32 nPos, sal_Int32 nCount,
+ const css::lang::Locale& rLocale ) override;
+ virtual sal_Int16 SAL_CALL getType( const OUString& Text, sal_Int32 nPos ) override;
+ virtual sal_Int16 SAL_CALL getCharacterDirection( const OUString& Text, sal_Int32 nPos ) override;
+ virtual sal_Int16 SAL_CALL getScript( const OUString& Text, sal_Int32 nPos ) override;
+ virtual sal_Int32 SAL_CALL getCharacterType( const OUString& text, sal_Int32 nPos,
+ const css::lang::Locale& rLocale ) override;
+ virtual sal_Int32 SAL_CALL getStringType( const OUString& text, sal_Int32 nPos, sal_Int32 nCount,
+ const css::lang::Locale& rLocale ) override;
+ virtual css::i18n::ParseResult SAL_CALL parseAnyToken( const OUString& Text, sal_Int32 nPos,
+ const css::lang::Locale& rLocale, sal_Int32 nStartCharFlags, const OUString& userDefinedCharactersStart,
+ sal_Int32 nContCharFlags, const OUString& userDefinedCharactersCont ) override;
+ virtual css::i18n::ParseResult SAL_CALL parsePredefinedToken( sal_Int32 nTokenType, const OUString& Text,
+ sal_Int32 nPos, const css::lang::Locale& rLocale, sal_Int32 nStartCharFlags,
+ const OUString& userDefinedCharactersStart, sal_Int32 nContCharFlags,
+ const OUString& userDefinedCharactersCont ) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+private:
+ std::unique_ptr<Transliteration_casemapping> trans;
+
+// --- parser specific (implemented in cclass_unicode_parser.cxx) ---
+
+ enum ScanState
+ {
+ ssGetChar, // initial state; -> ssBounce, ssGetValue, ssRewindFromValue, ssGetWord, ssGetWordFirstChar, ssGetString, ssGetBool, ssStop
+ ssGetValue, // -> ssBounce, ssRewindFromValue, ssStopBack, ssGetWord
+ ssGetWord, // -> ssBounce, ssStop, ssStopBack
+ ssGetWordFirstChar, // -> ssBounce, ssGetWord, ssStop, ssStopBack
+ ssGetString, // -> ssBounce, ssStop
+ ssGetBool, // -> ssBounce, ssStop, ssStopBack
+ ssRewindFromValue, // -> ssBounce, ssGetValue, ssGetWord, ssGetWordFirstChar, ssGetString, ssGetBool, ssStop, ssIgnoreLeadingInRewind
+ ssIgnoreLeadingInRewind, // -> ssBounce, ssGetValue, ssRewindFromValue, ssGetWord, ssGetWordFirstChar, ssGetString, ssGetBool, ssStop
+ ssStopBack, // -> ssStop
+ ssBounce, // -> ssStopBack
+ ssStop
+ };
+
+ static const sal_uInt8 nDefCnt;
+ static const ParserFlags pDefaultParserTable[];
+ static const sal_Int32 pParseTokensType[];
+
+ /// If and where c occurs in pStr
+ static const sal_Unicode* StrChr( const sal_Unicode* pStr, sal_uInt32 c );
+
+
+ css::uno::Reference < css::uno::XComponentContext > m_xContext;
+
+ /// used for parser only
+ css::lang::Locale aParserLocale;
+ css::uno::Reference < css::i18n::XLocaleData5 > mxLocaleData;
+ css::uno::Reference < css::i18n::XNativeNumberSupplier > xNatNumSup;
+ OUString aStartChars;
+ OUString aContChars;
+ std::unique_ptr<ParserFlags[]> pTable;
+ std::unique_ptr<ParserFlags[]> pStart;
+ std::unique_ptr<ParserFlags[]> pCont;
+ sal_Int32 nStartTypes;
+ sal_Int32 nContTypes;
+ ScanState eState;
+ sal_Unicode cGroupSep;
+ sal_Unicode cDecimalSep;
+ sal_Unicode cDecimalSepAlt;
+
+ /// Get corresponding KParseTokens flag for a character
+ static sal_Int32 getParseTokensType(sal_uInt32 c, bool isFirst);
+
+ /// Access parser table flags.
+ ParserFlags getFlags(sal_uInt32 c);
+
+ /// Access parser flags via International and special definitions.
+ ParserFlags getFlagsExtended(sal_uInt32 c);
+
+ /// Access parser table flags for user defined start characters.
+ ParserFlags getStartCharsFlags( sal_uInt32 c );
+
+ /// Access parser table flags for user defined continuation characters.
+ ParserFlags getContCharsFlags( sal_Unicode c );
+
+ /// Setup parser table. Calls initParserTable() only if needed.
+ void setupParserTable( const css::lang::Locale& rLocale, sal_Int32 startCharTokenType,
+ const OUString& userDefinedCharactersStart, sal_Int32 contCharTokenType,
+ const OUString& userDefinedCharactersCont );
+
+ /// Init parser table.
+ void initParserTable( const css::lang::Locale& rLocale, sal_Int32 startCharTokenType,
+ const OUString& userDefinedCharactersStart, sal_Int32 contCharTokenType,
+ const OUString& userDefinedCharactersCont );
+
+ /// Destroy parser table.
+ void destroyParserTable();
+
+ /// Parse a text.
+ void parseText( css::i18n::ParseResult& r, const OUString& rText, sal_Int32 nPos,
+ sal_Int32 nTokenType = 0xffffffff );
+
+ /// Setup International class, new'ed only if different from existing.
+ void setupInternational( const css::lang::Locale& rLocale );
+
+ /// Implementation of getCharacterType() for one single character
+ static sal_Int32 getCharType( const OUString& Text, sal_Int32 *nPos, sal_Int32 increment);
+
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/chaptercollator.hxx b/i18npool/inc/chaptercollator.hxx
new file mode 100644
index 000000000..deb897a69
--- /dev/null
+++ b/i18npool/inc/chaptercollator.hxx
@@ -0,0 +1,57 @@
+/* -*- 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_I18NPOOL_INC_CHAPTERCOLLATOR_HXX
+#define INCLUDED_I18NPOOL_INC_CHAPTERCOLLATOR_HXX
+
+#include "collatorImpl.hxx"
+
+namespace com::sun::star::i18n { class XCharacterClassification; }
+
+namespace i18npool {
+
+// ----------------------------------------------------
+// class ChapterCollator
+// ----------------------------------------------------
+class ChapterCollator final : public CollatorImpl
+{
+public:
+ // Constructors
+ ChapterCollator( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+ // Destructor
+ virtual ~ChapterCollator() override;
+
+ sal_Int32 SAL_CALL compareSubstring( const OUString& s1, sal_Int32 off1, sal_Int32 len1,
+ const OUString& s2, sal_Int32 off2, sal_Int32 len2) override;
+ sal_Int32 SAL_CALL compareString( const OUString& s1, const OUString& s2) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+private:
+ // CharacterClassification Implementation
+ css::uno::Reference< css::i18n::XCharacterClassification > cclass;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/characterclassificationImpl.hxx b/i18npool/inc/characterclassificationImpl.hxx
new file mode 100644
index 000000000..34723ef74
--- /dev/null
+++ b/i18npool/inc/characterclassificationImpl.hxx
@@ -0,0 +1,100 @@
+/* -*- 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_I18NPOOL_INC_CHARACTERCLASSIFICATIONIMPL_HXX
+#define INCLUDED_I18NPOOL_INC_CHARACTERCLASSIFICATIONIMPL_HXX
+
+#include <com/sun/star/i18n/XCharacterClassification.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <vector>
+#include <memory>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+namespace com::sun::star::uno { class XComponentContext; }
+
+namespace i18npool {
+
+class CharacterClassificationImpl final : public cppu::WeakImplHelper
+<
+ css::i18n::XCharacterClassification,
+ css::lang::XServiceInfo
+>
+{
+public:
+
+ CharacterClassificationImpl( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+ virtual ~CharacterClassificationImpl() override;
+
+ virtual OUString SAL_CALL toUpper( const OUString& Text,
+ sal_Int32 nPos, sal_Int32 nCount, const css::lang::Locale& rLocale ) override;
+ virtual OUString SAL_CALL toLower( const OUString& Text,
+ sal_Int32 nPos, sal_Int32 nCount, const css::lang::Locale& rLocale ) override;
+ virtual OUString SAL_CALL toTitle( const OUString& Text, sal_Int32 nPos,
+ sal_Int32 nCount, const css::lang::Locale& rLocale ) override;
+ virtual sal_Int16 SAL_CALL getType( const OUString& Text, sal_Int32 nPos ) override;
+ virtual sal_Int16 SAL_CALL getCharacterDirection( const OUString& Text, sal_Int32 nPos ) override;
+ virtual sal_Int16 SAL_CALL getScript( const OUString& Text, sal_Int32 nPos ) override;
+ virtual sal_Int32 SAL_CALL getCharacterType( const OUString& text, sal_Int32 nPos,
+ const css::lang::Locale& rLocale ) override;
+ virtual sal_Int32 SAL_CALL getStringType( const OUString& text, sal_Int32 nPos,
+ sal_Int32 nCount, const css::lang::Locale& rLocale ) override;
+ virtual css::i18n::ParseResult SAL_CALL parseAnyToken( const OUString& Text, sal_Int32 nPos,
+ const css::lang::Locale& rLocale, sal_Int32 nStartCharFlags,
+ const OUString& userDefinedCharactersStart, sal_Int32 nContCharFlags,
+ const OUString& userDefinedCharactersCont ) override;
+ virtual css::i18n::ParseResult SAL_CALL parsePredefinedToken( sal_Int32 nTokenType,
+ const OUString& Text, sal_Int32 nPos, const css::lang::Locale& rLocale,
+ sal_Int32 nStartCharFlags, const OUString& userDefinedCharactersStart,
+ sal_Int32 nContCharFlags, const OUString& userDefinedCharactersCont ) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+private:
+ struct lookupTableItem {
+ lookupTableItem(const css::lang::Locale& rLocale, const OUString& rName,
+ css::uno::Reference < XCharacterClassification > const & rxCI) :
+ aLocale(rLocale), aName(rName), xCI(rxCI) {};
+ css::lang::Locale aLocale;
+ OUString aName;
+ css::uno::Reference < XCharacterClassification > xCI;
+ bool equals(const css::lang::Locale& rLocale) {
+ return aLocale.Language == rLocale.Language &&
+ aLocale.Country == rLocale.Country &&
+ aLocale.Variant == rLocale.Variant;
+ };
+ };
+ std::vector<std::unique_ptr<lookupTableItem>> lookupTable;
+ lookupTableItem *cachedItem;
+
+ css::uno::Reference < css::uno::XComponentContext > m_xContext;
+ css::uno::Reference < XCharacterClassification > xUCI;
+
+ /// @throws css::uno::RuntimeException
+ css::uno::Reference < XCharacterClassification > const & getLocaleSpecificCharacterClassification(const css::lang::Locale& rLocale);
+ bool createLocaleSpecificCharacterClassification(const OUString& serviceName, const css::lang::Locale& rLocale);
+
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/chartonum.hxx b/i18npool/inc/chartonum.hxx
new file mode 100644
index 000000000..d908334b8
--- /dev/null
+++ b/i18npool/inc/chartonum.hxx
@@ -0,0 +1,55 @@
+/* -*- 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_I18NPOOL_INC_CHARTONUM_HXX
+#define INCLUDED_I18NPOOL_INC_CHARTONUM_HXX
+
+#include "transliteration_Numeric.hxx"
+
+namespace i18npool {
+
+#define TRANSLITERATION_CHARTONUM( name ) \
+class CharToNum##name final : public transliteration_Numeric \
+{ \
+public: \
+ CharToNum##name (); \
+};
+
+TRANSLITERATION_CHARTONUM(Lower_zh_CN)
+TRANSLITERATION_CHARTONUM(Upper_zh_CN)
+TRANSLITERATION_CHARTONUM(Lower_zh_TW)
+TRANSLITERATION_CHARTONUM(Upper_zh_TW)
+TRANSLITERATION_CHARTONUM(Upper_ko)
+TRANSLITERATION_CHARTONUM(Hangul_ko)
+TRANSLITERATION_CHARTONUM(Lower_ko)
+TRANSLITERATION_CHARTONUM(KanjiShort_ja_JP)
+TRANSLITERATION_CHARTONUM(KanjiTraditional_ja_JP)
+TRANSLITERATION_CHARTONUM(Fullwidth)
+TRANSLITERATION_CHARTONUM(Indic_ar)
+TRANSLITERATION_CHARTONUM(EastIndic_ar)
+TRANSLITERATION_CHARTONUM(Indic_hi)
+TRANSLITERATION_CHARTONUM(_th)
+
+#undef TRANSLITERATION_CHARTONUM
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_CHARTONUM_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/collatorImpl.hxx b/i18npool/inc/collatorImpl.hxx
new file mode 100644
index 000000000..d56554264
--- /dev/null
+++ b/i18npool/inc/collatorImpl.hxx
@@ -0,0 +1,111 @@
+/* -*- 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_I18NPOOL_INC_COLLATORIMPL_HXX
+#define INCLUDED_I18NPOOL_INC_COLLATORIMPL_HXX
+
+#include <com/sun/star/uno/Reference.h>
+#include <com/sun/star/i18n/XCollator.hpp>
+#include <com/sun/star/lang/Locale.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+#include <vector>
+#include <memory>
+
+namespace com::sun::star::i18n { class XLocaleData5; }
+namespace com::sun::star::uno { class XComponentContext; }
+
+namespace i18npool {
+
+// ----------------------------------------------------
+// class CollatorImpl
+// ----------------------------------------------------
+class CollatorImpl : public cppu::WeakImplHelper
+<
+ css::i18n::XCollator,
+ css::lang::XServiceInfo
+>
+{
+public:
+
+ // Constructors
+ CollatorImpl( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+ // Destructor
+ virtual ~CollatorImpl() override;
+
+ virtual sal_Int32 SAL_CALL compareSubstring(const OUString& s1, sal_Int32 off1, sal_Int32 len1,
+ const OUString& s2, sal_Int32 off2, sal_Int32 len2) override;
+
+ virtual sal_Int32 SAL_CALL compareString( const OUString& s1,
+ const OUString& s2) override;
+
+ virtual sal_Int32 SAL_CALL loadDefaultCollator( const css::lang::Locale& rLocale, sal_Int32 collatorOptions) override;
+
+ virtual sal_Int32 SAL_CALL loadCollatorAlgorithm( const OUString& impl, const css::lang::Locale& rLocale,
+ sal_Int32 collatorOptions) override;
+
+ virtual void SAL_CALL loadCollatorAlgorithmWithEndUserOption( const OUString& impl, const css::lang::Locale& rLocale,
+ const css::uno::Sequence< sal_Int32 >& collatorOptions) override;
+
+ virtual css::uno::Sequence< OUString > SAL_CALL listCollatorAlgorithms( const css::lang::Locale& rLocale ) override;
+
+ virtual css::uno::Sequence< sal_Int32 > SAL_CALL listCollatorOptions( const OUString& collatorAlgorithmName ) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+protected:
+ css::lang::Locale nLocale;
+private:
+ struct lookupTableItem {
+ css::lang::Locale aLocale;
+ OUString algorithm;
+ OUString service;
+ css::uno::Reference < XCollator > xC;
+ lookupTableItem(const css::lang::Locale& rLocale, const OUString& _algorithm, const OUString& _service,
+ css::uno::Reference < XCollator > const & _xC) : aLocale(rLocale), algorithm(_algorithm), service(_service), xC(_xC) {}
+ bool equals(const css::lang::Locale& rLocale, const OUString& _algorithm) {
+ return aLocale.Language == rLocale.Language &&
+ aLocale.Country == rLocale.Country &&
+ aLocale.Variant == rLocale.Variant &&
+ algorithm == _algorithm;
+ }
+ };
+ std::vector<std::unique_ptr<lookupTableItem>> lookupTable;
+ lookupTableItem * cachedItem;
+
+ // Service Factory
+ css::uno::Reference < css::uno::XComponentContext > m_xContext;
+ // lang::Locale Data
+ css::uno::Reference < css::i18n::XLocaleData5 > mxLocaleData;
+
+ /// @throws css::uno::RuntimeException
+ bool createCollator(const css::lang::Locale& rLocale, const OUString& serviceName,
+ const OUString& rSortAlgorithm);
+ /// @throws css::uno::RuntimeException
+ void loadCachedCollator(const css::lang::Locale& rLocale, const OUString& rSortAlgorithm);
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/collator_unicode.hxx b/i18npool/inc/collator_unicode.hxx
new file mode 100644
index 000000000..3c9e9ee1d
--- /dev/null
+++ b/i18npool/inc/collator_unicode.hxx
@@ -0,0 +1,75 @@
+/* -*- 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_I18NPOOL_INC_COLLATOR_UNICODE_HXX
+#define INCLUDED_I18NPOOL_INC_COLLATOR_UNICODE_HXX
+
+#include <com/sun/star/i18n/XCollator.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <osl/module.h>
+
+#include <unicode/tblcoll.h>
+
+// ----------------------------------------------------
+// class Collator_Unicode
+// ----------------------------------------------------
+
+namespace i18npool {
+
+class Collator_Unicode final : public cppu::WeakImplHelper < css::i18n::XCollator, css::lang::XServiceInfo >
+{
+public:
+ // Constructors
+ Collator_Unicode();
+ // Destructor
+ virtual ~Collator_Unicode() override;
+
+ sal_Int32 SAL_CALL compareSubstring( const OUString& s1, sal_Int32 off1, sal_Int32 len1,
+ const OUString& s2, sal_Int32 off2, sal_Int32 len2) override;
+
+ sal_Int32 SAL_CALL compareString( const OUString& s1, const OUString& s2) override;
+
+ sal_Int32 SAL_CALL loadCollatorAlgorithm( const OUString& impl, const css::lang::Locale& rLocale,
+ sal_Int32 collatorOptions) override;
+
+
+ // following 4 methods are implemented in collatorImpl.
+ sal_Int32 SAL_CALL loadDefaultCollator( const css::lang::Locale&, sal_Int32) override {throw css::uno::RuntimeException();}
+ void SAL_CALL loadCollatorAlgorithmWithEndUserOption( const OUString&, const css::lang::Locale&,
+ const css::uno::Sequence< sal_Int32 >&) override {throw css::uno::RuntimeException();}
+ css::uno::Sequence< OUString > SAL_CALL listCollatorAlgorithms( const css::lang::Locale&) override {throw css::uno::RuntimeException();}
+ css::uno::Sequence< sal_Int32 > SAL_CALL listCollatorOptions( const OUString& ) override {throw css::uno::RuntimeException();}
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+private:
+ std::unique_ptr<icu::RuleBasedCollator> uca_base, collator;
+#ifndef DISABLE_DYNLOADING
+ oslModule hModule;
+#endif
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/defaultnumberingprovider.hxx b/i18npool/inc/defaultnumberingprovider.hxx
new file mode 100644
index 000000000..6dc0751f0
--- /dev/null
+++ b/i18npool/inc/defaultnumberingprovider.hxx
@@ -0,0 +1,96 @@
+/* -*- 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_I18NPOOL_INC_DEFAULTNUMBERINGPROVIDER_HXX
+#define INCLUDED_I18NPOOL_INC_DEFAULTNUMBERINGPROVIDER_HXX
+
+#include <com/sun/star/text/XDefaultNumberingProvider.hpp>
+#include <com/sun/star/text/XNumberingFormatter.hpp>
+#include <com/sun/star/text/XNumberingTypeInfo.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <rtl/ref.hxx>
+#include <map>
+
+namespace com::sun::star::container { class XHierarchicalNameAccess; }
+namespace com::sun::star::uno { class XComponentContext; }
+namespace i18npool {
+ class TransliterationImpl;
+ class NativeNumberSupplierService;
+ struct Supported_NumberingType;
+}
+
+namespace i18npool {
+
+class DefaultNumberingProvider final : public cppu::WeakImplHelper
+<
+ css::text::XDefaultNumberingProvider,
+ css::text::XNumberingFormatter,
+ css::text::XNumberingTypeInfo,
+ css::lang::XServiceInfo
+>
+{
+public:
+ DefaultNumberingProvider(
+ const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+ virtual ~DefaultNumberingProvider() override;
+
+ //XDefaultNumberingProvider
+ virtual css::uno::Sequence< css::uno::Reference<
+ css::container::XIndexAccess > > SAL_CALL
+ getDefaultOutlineNumberings( const css::lang::Locale& aLocale ) override;
+
+ virtual css::uno::Sequence< css::uno::Sequence<
+ css::beans::PropertyValue > > SAL_CALL
+ getDefaultContinuousNumberingLevels( const css::lang::Locale& aLocale ) override;
+
+ //XNumberingFormatter
+ virtual OUString SAL_CALL makeNumberingString(
+ const css::uno::Sequence<
+ css::beans::PropertyValue >& aProperties,
+ const css::lang::Locale& aLocale ) override;
+
+ //XNumberingTypeInfo
+ virtual css::uno::Sequence< sal_Int16 > SAL_CALL getSupportedNumberingTypes( ) override;
+ virtual sal_Int16 SAL_CALL getNumberingType( const OUString& NumberingIdentifier ) override;
+ virtual sal_Bool SAL_CALL hasNumberingType( const OUString& NumberingIdentifier ) override;
+ virtual OUString SAL_CALL getNumberingIdentifier( sal_Int16 NumberingType ) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+private:
+ css::uno::Reference < css::uno::XComponentContext > m_xContext;
+ css::uno::Reference < css::container::XHierarchicalNameAccess > xHierarchicalNameAccess;
+ rtl::Reference<TransliterationImpl> translit;
+ rtl::Reference<NativeNumberSupplierService> mxNatNum;
+ std::map<OUString, const Supported_NumberingType*> maSupportedTypesCache;
+
+ /// @throws css::uno::RuntimeException
+ OUString makeNumberingIdentifier( sal_Int16 index );
+ /// @throws css::uno::RuntimeException
+ bool isScriptFlagEnabled(const OUString& aName );
+};
+
+}
+
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/indexentrysupplier.hxx b/i18npool/inc/indexentrysupplier.hxx
new file mode 100644
index 000000000..6a441f3f9
--- /dev/null
+++ b/i18npool/inc/indexentrysupplier.hxx
@@ -0,0 +1,93 @@
+/* -*- 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_I18NPOOL_INC_INDEXENTRYSUPPLIER_HXX
+#define INCLUDED_I18NPOOL_INC_INDEXENTRYSUPPLIER_HXX
+
+#include <com/sun/star/i18n/XExtendedIndexEntrySupplier.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+namespace com::sun::star::uno { class XComponentContext; }
+
+namespace i18npool {
+
+
+
+class IndexEntrySupplier final : public cppu::WeakImplHelper
+<
+ css::i18n::XExtendedIndexEntrySupplier,
+ css::lang::XServiceInfo
+>
+{
+public:
+ IndexEntrySupplier( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+
+ // Methods
+ virtual css::uno::Sequence < css::lang::Locale > SAL_CALL getLocaleList() override;
+
+ virtual css::uno::Sequence < OUString > SAL_CALL getAlgorithmList(
+ const css::lang::Locale& rLocale ) override;
+
+ virtual sal_Bool SAL_CALL loadAlgorithm(
+ const css::lang::Locale& rLocale,
+ const OUString& SortAlgorithm, sal_Int32 collatorOptions ) override;
+
+ virtual sal_Bool SAL_CALL usePhoneticEntry(
+ const css::lang::Locale& rLocale ) override;
+
+ virtual OUString SAL_CALL getPhoneticCandidate( const OUString& IndexEntry,
+ const css::lang::Locale& rLocale ) override;
+
+ virtual OUString SAL_CALL getIndexKey( const OUString& IndexEntry,
+ const OUString& PhoneticEntry, const css::lang::Locale& rLocale ) override;
+
+ virtual sal_Int16 SAL_CALL compareIndexEntry( const OUString& IndexEntry1,
+ const OUString& PhoneticEntry1, const css::lang::Locale& rLocale1,
+ const OUString& IndexEntry2, const OUString& PhoneticEntry2,
+ const css::lang::Locale& rLocale2 ) override;
+
+ virtual OUString SAL_CALL getIndexCharacter( const OUString& IndexEntry,
+ const css::lang::Locale& rLocale, const OUString& SortAlgorithm ) override;
+
+ virtual OUString SAL_CALL getIndexFollowPageWord( sal_Bool MorePages,
+ const css::lang::Locale& rLocale ) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+private:
+ css::uno::Reference < css::i18n::XExtendedIndexEntrySupplier > xIES;
+ css::uno::Reference < css::uno::XComponentContext > m_xContext;
+ /// @throws css::uno::RuntimeException
+ bool createLocaleSpecificIndexEntrySupplier(const OUString& name);
+ /// @throws css::uno::RuntimeException
+ css::uno::Reference < css::i18n::XExtendedIndexEntrySupplier > const & getLocaleSpecificIndexEntrySupplier(
+ const css::lang::Locale& rLocale, const OUString& rSortAlgorithm);
+
+ css::lang::Locale aLocale;
+ OUString aSortAlgorithm;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/indexentrysupplier_asian.hxx b/i18npool/inc/indexentrysupplier_asian.hxx
new file mode 100644
index 000000000..a993d7f16
--- /dev/null
+++ b/i18npool/inc/indexentrysupplier_asian.hxx
@@ -0,0 +1,56 @@
+/* -*- 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_I18NPOOL_INC_INDEXENTRYSUPPLIER_ASIAN_HXX
+#define INCLUDED_I18NPOOL_INC_INDEXENTRYSUPPLIER_ASIAN_HXX
+
+#include "indexentrysupplier_common.hxx"
+#include <osl/module.h>
+
+namespace i18npool {
+
+
+
+
+class IndexEntrySupplier_asian final : public IndexEntrySupplier_Common {
+public:
+ IndexEntrySupplier_asian( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+ virtual ~IndexEntrySupplier_asian() override;
+
+ OUString SAL_CALL getIndexCharacter( const OUString& rIndexEntry,
+ const css::lang::Locale& rLocale, const OUString& rAlgorithm ) override;
+ OUString SAL_CALL getIndexKey( const OUString& rIndexEntry,
+ const OUString& rPhoneticEntry, const css::lang::Locale& rLocale) override;
+ sal_Int16 SAL_CALL compareIndexEntry(
+ const OUString& rIndexEntry1, const OUString& rPhoneticEntry1,
+ const css::lang::Locale& rLocale1,
+ const OUString& rIndexEntry2, const OUString& rPhoneticEntry2,
+ const css::lang::Locale& rLocale2 ) override;
+ OUString SAL_CALL getPhoneticCandidate( const OUString& rIndexEntry,
+ const css::lang::Locale& rLocale ) override;
+#ifndef DISABLE_DYNLOADING
+private:
+ oslModule hModule;
+#endif
+};
+
+}
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/indexentrysupplier_common.hxx b/i18npool/inc/indexentrysupplier_common.hxx
new file mode 100644
index 000000000..72685fda9
--- /dev/null
+++ b/i18npool/inc/indexentrysupplier_common.hxx
@@ -0,0 +1,96 @@
+/* -*- 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_I18NPOOL_INC_INDEXENTRYSUPPLIER_COMMON_HXX
+#define INCLUDED_I18NPOOL_INC_INDEXENTRYSUPPLIER_COMMON_HXX
+
+#include <com/sun/star/i18n/XExtendedIndexEntrySupplier.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <rtl/ref.hxx>
+
+namespace com::sun::star::uno { class XComponentContext; }
+namespace i18npool { class CollatorImpl; }
+
+namespace i18npool {
+
+
+
+
+class IndexEntrySupplier_Common : public cppu::WeakImplHelper
+<
+ css::i18n::XExtendedIndexEntrySupplier,
+ css::lang::XServiceInfo
+>
+{
+public:
+ IndexEntrySupplier_Common( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+ virtual ~IndexEntrySupplier_Common() override;
+
+ virtual css::uno::Sequence < css::lang::Locale > SAL_CALL getLocaleList() override;
+
+ virtual css::uno::Sequence < OUString > SAL_CALL getAlgorithmList(
+ const css::lang::Locale& rLocale ) override;
+
+ virtual sal_Bool SAL_CALL usePhoneticEntry(
+ const css::lang::Locale& rLocale ) override;
+
+ virtual OUString SAL_CALL getPhoneticCandidate( const OUString& IndexEntry,
+ const css::lang::Locale& rLocale ) override;
+
+ virtual sal_Bool SAL_CALL loadAlgorithm(
+ const css::lang::Locale& rLocale,
+ const OUString& SortAlgorithm, sal_Int32 collatorOptions ) override;
+
+ virtual OUString SAL_CALL getIndexKey( const OUString& IndexEntry,
+ const OUString& PhoneticEntry, const css::lang::Locale& rLocale ) override;
+
+ virtual sal_Int16 SAL_CALL compareIndexEntry( const OUString& IndexEntry1,
+ const OUString& PhoneticEntry1, const css::lang::Locale& rLocale1,
+ const OUString& IndexEntry2, const OUString& PhoneticEntry2,
+ const css::lang::Locale& rLocale2 ) override;
+
+ virtual OUString SAL_CALL getIndexCharacter( const OUString& rIndexEntry,
+ const css::lang::Locale& rLocale, const OUString& rSortAlgorithm ) override;
+
+ virtual OUString SAL_CALL getIndexFollowPageWord( sal_Bool MorePages,
+ const css::lang::Locale& rLocale ) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+protected:
+ const char * implementationName;
+ bool usePhonetic;
+ rtl::Reference<CollatorImpl>
+ collator;
+ css::lang::Locale aLocale;
+ OUString aAlgorithm;
+
+ /// @throws css::uno::RuntimeException
+ const OUString& getEntry( const OUString& IndexEntry,
+ const OUString& PhoneticEntry, const css::lang::Locale& rLocale );
+};
+
+}
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/indexentrysupplier_default.hxx b/i18npool/inc/indexentrysupplier_default.hxx
new file mode 100644
index 000000000..29fe3cdbf
--- /dev/null
+++ b/i18npool/inc/indexentrysupplier_default.hxx
@@ -0,0 +1,107 @@
+/* -*- 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_I18NPOOL_INC_INDEXENTRYSUPPLIER_DEFAULT_HXX
+#define INCLUDED_I18NPOOL_INC_INDEXENTRYSUPPLIER_DEFAULT_HXX
+
+#include "indexentrysupplier_common.hxx"
+
+#include <memory>
+
+namespace i18npool {
+
+class Index;
+
+
+
+class IndexEntrySupplier_Unicode final : public IndexEntrySupplier_Common {
+public:
+ IndexEntrySupplier_Unicode( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+ virtual ~IndexEntrySupplier_Unicode() override;
+
+ virtual sal_Bool SAL_CALL loadAlgorithm(
+ const css::lang::Locale& rLocale,
+ const OUString& SortAlgorithm, sal_Int32 collatorOptions ) override;
+
+ virtual OUString SAL_CALL getIndexKey( const OUString& IndexEntry,
+ const OUString& PhoneticEntry, const css::lang::Locale& rLocale ) override;
+
+ virtual sal_Int16 SAL_CALL compareIndexEntry( const OUString& IndexEntry1,
+ const OUString& PhoneticEntry1, const css::lang::Locale& rLocale1,
+ const OUString& IndexEntry2, const OUString& PhoneticEntry2,
+ const css::lang::Locale& rLocale2 ) override;
+
+ virtual OUString SAL_CALL getIndexCharacter( const OUString& rIndexEntry,
+ const css::lang::Locale& rLocale, const OUString& rSortAlgorithm ) override;
+
+private:
+ std::unique_ptr<Index> index;
+};
+
+struct IndexKey {
+ sal_Unicode key;
+ OUString mkey;
+ OUString desc;
+};
+
+class IndexTable
+{
+public:
+ IndexTable();
+ ~IndexTable();
+
+ void init(sal_Unicode start_, sal_Unicode end_, IndexKey const * keys, sal_Int16 key_count, Index *index);
+
+ sal_Unicode start;
+ sal_Unicode end;
+ sal_uInt8 *table;
+};
+
+#define MAX_KEYS 0xff
+#define MAX_TABLES 20
+
+class Index
+{
+public:
+ Index(const css::uno::Reference < css::uno::XComponentContext >& rxContext);
+ ~Index();
+
+ /// @throws css::uno::RuntimeException
+ void init(const css::lang::Locale& rLocale, const OUString& algorithm);
+
+ /// @throws css::uno::RuntimeException
+ void makeIndexKeys(const css::lang::Locale &rLocale, const OUString &algorithm);
+ sal_Int16 getIndexWeight(const OUString& rIndexEntry);
+ OUString getIndexDescription(const OUString& rIndexEntry);
+
+ IndexTable tables[MAX_TABLES];
+ sal_Int16 table_count;
+ IndexKey keys[MAX_KEYS];
+ sal_Int16 key_count;
+ sal_Int16 mkeys[MAX_KEYS];
+ sal_Int16 mkey_count;
+ OUString skipping_chars;
+ rtl::Reference<CollatorImpl> collator;
+ sal_Int16 compare(sal_Unicode c1, sal_Unicode c2);
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/indexentrysupplier_ja_phonetic.hxx b/i18npool/inc/indexentrysupplier_ja_phonetic.hxx
new file mode 100644
index 000000000..cced5597c
--- /dev/null
+++ b/i18npool/inc/indexentrysupplier_ja_phonetic.hxx
@@ -0,0 +1,64 @@
+/* -*- 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_I18NPOOL_INC_INDEXENTRYSUPPLIER_JA_PHONETIC_HXX
+#define INCLUDED_I18NPOOL_INC_INDEXENTRYSUPPLIER_JA_PHONETIC_HXX
+
+#include "indexentrysupplier_common.hxx"
+
+namespace i18npool {
+
+
+
+
+class IndexEntrySupplier_ja_phonetic : public IndexEntrySupplier_Common {
+public:
+ IndexEntrySupplier_ja_phonetic( const css::uno::Reference < css::uno::XComponentContext >& rxContext ) : IndexEntrySupplier_Common(rxContext) {
+ implementationName = "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic";
+ };
+ virtual OUString SAL_CALL getIndexCharacter( const OUString& rIndexEntry,
+ const css::lang::Locale& rLocale, const OUString& rSortAlgorithm ) override;
+ virtual OUString SAL_CALL getIndexKey( const OUString& IndexEntry,
+ const OUString& PhoneticEntry, const css::lang::Locale& rLocale ) override;
+ virtual sal_Int16 SAL_CALL compareIndexEntry( const OUString& IndexEntry1,
+ const OUString& PhoneticEntry1, const css::lang::Locale& rLocale1,
+ const OUString& IndexEntry2, const OUString& PhoneticEntry2,
+ const css::lang::Locale& rLocale2 ) override;
+};
+
+#define INDEXENTRYSUPPLIER_JA_PHONETIC( algorithm ) \
+class IndexEntrySupplier_##algorithm final : public IndexEntrySupplier_ja_phonetic {\
+public:\
+ IndexEntrySupplier_##algorithm (const css::uno::Reference < css::uno::XComponentContext >& rxContext) : IndexEntrySupplier_ja_phonetic (rxContext) {\
+ implementationName = "com.sun.star.i18n.IndexEntrySupplier_"#algorithm;\
+ };\
+ virtual sal_Bool SAL_CALL loadAlgorithm(\
+ const css::lang::Locale& rLocale,\
+ const OUString& SortAlgorithm, sal_Int32 collatorOptions ) override;\
+};
+
+INDEXENTRYSUPPLIER_JA_PHONETIC( ja_phonetic_alphanumeric_first_by_syllable )
+INDEXENTRYSUPPLIER_JA_PHONETIC( ja_phonetic_alphanumeric_first_by_consonant )
+INDEXENTRYSUPPLIER_JA_PHONETIC( ja_phonetic_alphanumeric_last_by_syllable )
+INDEXENTRYSUPPLIER_JA_PHONETIC( ja_phonetic_alphanumeric_last_by_consonant )
+
+}
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/inputsequencechecker.hxx b/i18npool/inc/inputsequencechecker.hxx
new file mode 100644
index 000000000..52963b3be
--- /dev/null
+++ b/i18npool/inc/inputsequencechecker.hxx
@@ -0,0 +1,80 @@
+/* -*- 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_I18NPOOL_INC_INPUTSEQUENCECHECKER_HXX
+#define INCLUDED_I18NPOOL_INC_INPUTSEQUENCECHECKER_HXX
+
+#include <cppuhelper/implbase.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/i18n/XExtendedInputSequenceChecker.hpp>
+
+#include <vector>
+#include <memory>
+
+namespace com::sun::star::uno { class XComponentContext; }
+
+namespace i18npool {
+
+
+
+class InputSequenceCheckerImpl : public cppu::WeakImplHelper
+<
+ css::i18n::XExtendedInputSequenceChecker,
+ css::lang::XServiceInfo
+>
+{
+public:
+ InputSequenceCheckerImpl( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+ InputSequenceCheckerImpl(const char *pServiceName);
+ virtual ~InputSequenceCheckerImpl() override;
+
+ virtual sal_Bool SAL_CALL checkInputSequence(const OUString& Text, sal_Int32 nStartPos,
+ sal_Unicode inputChar, sal_Int16 inputCheckMode) override;
+
+ virtual sal_Int32 SAL_CALL correctInputSequence(OUString& Text, sal_Int32 nStartPos,
+ sal_Unicode inputChar, sal_Int16 inputCheckMode) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+private:
+ const char *serviceName;
+
+ struct lookupTableItem {
+ lookupTableItem(const char* rLanguage, const css::uno::Reference < css::i18n::XExtendedInputSequenceChecker >& rxISC) :
+ aLanguage(rLanguage), xISC(rxISC) {}
+ const char* aLanguage;
+ css::uno::Reference < css::i18n::XExtendedInputSequenceChecker > xISC;
+ };
+ std::vector<std::unique_ptr<lookupTableItem>> lookupTable;
+ lookupTableItem *cachedItem;
+
+ css::uno::Reference < css::uno::XComponentContext > m_xContext;
+
+ /// @throws css::uno::RuntimeException
+ css::uno::Reference< css::i18n::XExtendedInputSequenceChecker >& getInputSequenceChecker(char const * rLanguage);
+ static char* getLanguageByScripType(sal_Unicode cChar, sal_Unicode nChar);
+};
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_INPUTSEQUENCECHECKER_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/inputsequencechecker_hi.hxx b/i18npool/inc/inputsequencechecker_hi.hxx
new file mode 100644
index 000000000..88cfc9801
--- /dev/null
+++ b/i18npool/inc/inputsequencechecker_hi.hxx
@@ -0,0 +1,45 @@
+/* -*- 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_I18NPOOL_INC_INPUTSEQUENCECHECKER_HI_HXX
+#define INCLUDED_I18NPOOL_INC_INPUTSEQUENCECHECKER_HI_HXX
+
+#include "inputsequencechecker.hxx"
+
+namespace i18npool {
+
+
+
+class InputSequenceChecker_hi final : public InputSequenceCheckerImpl
+{
+public:
+ InputSequenceChecker_hi();
+ virtual ~InputSequenceChecker_hi() override;
+
+ sal_Bool SAL_CALL checkInputSequence(const OUString& Text, sal_Int32 nStartPos,
+ sal_Unicode inputChar, sal_Int16 inputCheckMode) override;
+
+ sal_Int32 SAL_CALL correctInputSequence(OUString& Text, sal_Int32 nStartPos,
+ sal_Unicode inputChar, sal_Int16 inputCheckMode) override;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/inputsequencechecker_th.hxx b/i18npool/inc/inputsequencechecker_th.hxx
new file mode 100644
index 000000000..582bbd9ad
--- /dev/null
+++ b/i18npool/inc/inputsequencechecker_th.hxx
@@ -0,0 +1,45 @@
+/* -*- 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_I18NPOOL_INC_INPUTSEQUENCECHECKER_TH_HXX
+#define INCLUDED_I18NPOOL_INC_INPUTSEQUENCECHECKER_TH_HXX
+
+#include "inputsequencechecker.hxx"
+
+namespace i18npool {
+
+
+
+class InputSequenceChecker_th final : public InputSequenceCheckerImpl
+{
+public:
+ InputSequenceChecker_th();
+ virtual ~InputSequenceChecker_th() override;
+
+ sal_Bool SAL_CALL checkInputSequence(const OUString& Text, sal_Int32 nStartPos,
+ sal_Unicode inputChar, sal_Int16 inputCheckMode) override;
+
+ sal_Int32 SAL_CALL correctInputSequence(OUString& Text, sal_Int32 nStartPos,
+ sal_Unicode inputChar, sal_Int16 inputCheckMode) override;
+};
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_INPUTSEQUENCECHECKER_TH_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/localedata.hxx b/i18npool/inc/localedata.hxx
new file mode 100644
index 000000000..199333767
--- /dev/null
+++ b/i18npool/inc/localedata.hxx
@@ -0,0 +1,161 @@
+/* -*- 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_I18NPOOL_INC_LOCALEDATA_HXX
+#define INCLUDED_I18NPOOL_INC_LOCALEDATA_HXX
+
+#include <com/sun/star/i18n/XLocaleData5.hpp>
+
+
+#include <cppuhelper/implbase.hxx>
+
+#include <com/sun/star/uno/Sequence.h>
+#include <com/sun/star/i18n/Calendar.hpp>
+#include <com/sun/star/i18n/LocaleDataItem2.hpp>
+#include <com/sun/star/i18n/UnicodeScript.hpp>
+#include <rtl/ref.hxx>
+#include <rtl/ustring.hxx>
+#include <vector>
+#include <memory>
+#include <osl/module.hxx>
+
+
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+namespace com::sun::star::beans { struct PropertyValue; }
+namespace com::sun::star::container { class XIndexAccess; }
+namespace com::sun::star::i18n { struct Currency; }
+namespace com::sun::star::i18n { struct Currency2; }
+namespace com::sun::star::i18n { struct FormatElement; }
+namespace com::sun::star::lang { struct Locale; }
+
+struct LocaleDataLookupTableItem;
+
+namespace i18npool {
+
+class LocaleDataImpl final : public cppu::WeakImplHelper
+<
+ css::i18n::XLocaleData5,
+ css::lang::XServiceInfo
+>
+{
+public:
+ LocaleDataImpl();
+ virtual ~LocaleDataImpl() override;
+
+ static rtl::Reference<LocaleDataImpl> get() { return new LocaleDataImpl; }
+
+ static css::uno::Sequence< css::i18n::CalendarItem > downcastCalendarItems( const css::uno::Sequence< css::i18n::CalendarItem2 > & rCi );
+ static css::i18n::Calendar downcastCalendar( const css::i18n::Calendar2 & rC );
+
+ /** Generates a <Language>_<Country> or <Variant> (if Language=="qlt")
+ string suitable as part of service name with all '-' replaced by '_' */
+ static OUString getFirstLocaleServiceName( const css::lang::Locale & rLocale );
+ /** Generates fallback strings suitable as parts of service names,
+ excluding the one obtained via getFirstLocaleServiceName() */
+ static ::std::vector< OUString > getFallbackLocaleServiceNames( const css::lang::Locale & rLocale );
+
+ virtual css::i18n::LanguageCountryInfo SAL_CALL getLanguageCountryInfo( const css::lang::Locale& rLocale ) override;
+ virtual css::i18n::LocaleDataItem SAL_CALL getLocaleItem( const css::lang::Locale& rLocale ) override;
+ virtual css::uno::Sequence< css::i18n::Calendar2 > SAL_CALL getAllCalendars2( const css::lang::Locale& rLocale ) override;
+ virtual css::uno::Sequence< css::i18n::Calendar > SAL_CALL getAllCalendars( const css::lang::Locale& rLocale ) override;
+ virtual css::uno::Sequence< css::i18n::Currency > SAL_CALL getAllCurrencies( const css::lang::Locale& rLocale ) override;
+ virtual css::uno::Sequence< css::i18n::Currency2 > SAL_CALL getAllCurrencies2( const css::lang::Locale& rLocale ) override;
+ virtual css::uno::Sequence< css::i18n::FormatElement > SAL_CALL getAllFormats( const css::lang::Locale& rLocale ) override;
+ virtual css::uno::Sequence< css::i18n::Implementation > SAL_CALL getCollatorImplementations( const css::lang::Locale& rLocale ) override;
+ /// @throws css::uno::RuntimeException
+ OUString getCollatorRuleByAlgorithm( const css::lang::Locale& rLocale, const OUString& algorithm );
+ virtual css::uno::Sequence< OUString > SAL_CALL getTransliterations( const css::lang::Locale& rLocale ) override;
+ virtual css::i18n::ForbiddenCharacters SAL_CALL getForbiddenCharacters( const css::lang::Locale& rLocale ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getReservedWord( const css::lang::Locale& rLocale ) override ;
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence< OUString > getBreakIteratorRules( const css::lang::Locale& rLocale ) ;
+ virtual css::uno::Sequence< css::lang::Locale > SAL_CALL getAllInstalledLocaleNames() override;
+
+ virtual css::uno::Sequence< OUString > SAL_CALL getSearchOptions( const css::lang::Locale& rLocale ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getCollationOptions( const css::lang::Locale& rLocale ) override;
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > getContinuousNumberingLevels( const css::lang::Locale& rLocale );
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence< css::uno::Reference< css::container::XIndexAccess > > getOutlineNumberingLevels( const css::lang::Locale& rLocale );
+
+ // XLocaleData4
+ virtual css::uno::Sequence< OUString > SAL_CALL getDateAcceptancePatterns( const css::lang::Locale& rLocale ) override;
+
+ // XLocaleData5
+ virtual css::i18n::LocaleDataItem2 SAL_CALL getLocaleItem2( const css::lang::Locale& rLocale ) override;
+
+ // following methods are used by indexentry service
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence< OUString > getIndexAlgorithm( const css::lang::Locale& rLocale );
+ /// @throws css::uno::RuntimeException
+ OUString getDefaultIndexAlgorithm( const css::lang::Locale& rLocale );
+ /// @throws css::uno::RuntimeException
+ OUString getIndexKeysByAlgorithm( const css::lang::Locale& rLocale, const OUString& algorithm );
+ /// @throws css::uno::RuntimeException
+ OUString getIndexModuleByAlgorithm( const css::lang::Locale& rLocale, const OUString& algorithm );
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence< css::i18n::UnicodeScript > getUnicodeScripts( const css::lang::Locale& rLocale );
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence< OUString > getFollowPageWords( const css::lang::Locale& rLocale );
+ /// @throws css::uno::RuntimeException
+ bool hasPhonetic( const css::lang::Locale& rLocale );
+ /// @throws css::uno::RuntimeException
+ bool isPhonetic( const css::lang::Locale& rLocale, const OUString& algorithm );
+ /// @throws css::uno::RuntimeException
+ OUString getHangingCharacters( const css::lang::Locale& rLocale );
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+private:
+ ::std::unique_ptr< LocaleDataLookupTableItem > cachedItem;
+ css::i18n::Calendar2 ref_cal;
+ OUString ref_name;
+
+ /// @throws css::uno::RuntimeException
+ oslGenericFunction getFunctionSymbol( const css::lang::Locale& rLocale, const char* pFunction );
+ sal_Unicode ** getIndexArray(const css::lang::Locale& rLocale, sal_Int16& indexCount);
+ sal_Unicode ** getIndexArrayForAlgorithm(const css::lang::Locale& rLocale, const OUString& rAlgorithm);
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence< css::i18n::CalendarItem2 > &
+ getCalendarItemByName(const OUString& name,
+ const css::lang::Locale& rLocale,
+ const css::uno::Sequence< css::i18n::Calendar2 >& calendarsSeq,
+ sal_Int16 item);
+
+ /// Helper to obtain a sequence of days, months, gmonths or eras.
+ ///
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence< css::i18n::CalendarItem2 > getCalendarItems(
+ sal_Unicode const * const * const allCalendars,
+ sal_Int16 & rnOffset,
+ const sal_Int16 nWhichItem,
+ const sal_Int16 nCalendar,
+ const css::lang::Locale & rLocale,
+ const css::uno::Sequence< css::i18n::Calendar2 > & calendarsSeq );
+
+};
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_LOCALEDATA_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/nativenumbersupplier.hxx b/i18npool/inc/nativenumbersupplier.hxx
new file mode 100644
index 000000000..c452cb430
--- /dev/null
+++ b/i18npool/inc/nativenumbersupplier.hxx
@@ -0,0 +1,87 @@
+/* -*- 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_I18NPOOL_INC_NATIVENUMBERSUPPLIER_HXX
+#define INCLUDED_I18NPOOL_INC_NATIVENUMBERSUPPLIER_HXX
+
+#include <com/sun/star/i18n/XNativeNumberSupplier2.hpp>
+#include <com/sun/star/i18n/NativeNumberXmlAttributes.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+namespace com::sun::star::i18n { class XCharacterClassification; }
+
+namespace i18npool {
+
+// ----------------------------------------------------
+// class NativeNumberSupplierService
+// ----------------------------------------------------
+class NativeNumberSupplierService final : public cppu::WeakImplHelper
+<
+ css::i18n::XNativeNumberSupplier2,
+ css::lang::XServiceInfo
+>
+{
+public:
+ NativeNumberSupplierService(bool _useOffset = false) : useOffset(_useOffset) {}
+
+ // Methods
+ virtual OUString SAL_CALL getNativeNumberString( const OUString& aNumberString,
+ const css::lang::Locale& aLocale, sal_Int16 nNativeNumberMode ) override;
+
+ virtual sal_Bool SAL_CALL isValidNatNum( const css::lang::Locale& aLocale,
+ sal_Int16 nNativeNumberMode ) override;
+
+ virtual css::i18n::NativeNumberXmlAttributes SAL_CALL convertToXmlAttributes(
+ const css::lang::Locale& aLocale, sal_Int16 nNativeNumberMode ) override;
+
+ virtual sal_Int16 SAL_CALL convertFromXmlAttributes(
+ const css::i18n::NativeNumberXmlAttributes& aAttr ) override;
+
+ // XNativeNumberSupplier2
+ virtual OUString SAL_CALL getNativeNumberStringParams(
+ const OUString& rNumberString, const css::lang::Locale& rLocale,
+ sal_Int16 nNativeNumberMode, const OUString& rNativeNumberParams) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+ // following methods are not for XNativeNumberSupplier, they are for calling from transliterations
+ /// @throws css::uno::RuntimeException
+ OUString getNativeNumberString(const OUString& rNumberString,
+ const css::lang::Locale& rLocale,
+ sal_Int16 nNativeNumberMode,
+ css::uno::Sequence<sal_Int32>& offset,
+ const OUString& rNativeNumberParams = OUString());
+ /// @throws css::uno::RuntimeException
+ sal_Unicode getNativeNumberChar( const sal_Unicode inChar,
+ const css::lang::Locale& aLocale, sal_Int16 nNativeNumberMode ) ;
+
+private:
+ css::lang::Locale aLocale;
+ bool useOffset;
+ mutable css::uno::Reference< css::i18n::XCharacterClassification > xCharClass;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/numberformatcode.hxx b/i18npool/inc/numberformatcode.hxx
new file mode 100644
index 000000000..47055edb8
--- /dev/null
+++ b/i18npool/inc/numberformatcode.hxx
@@ -0,0 +1,73 @@
+/* -*- 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_I18NPOOL_INC_NUMBERFORMATCODE_HXX
+#define INCLUDED_I18NPOOL_INC_NUMBERFORMATCODE_HXX
+
+#include <cppuhelper/implbase.hxx>
+
+#include <com/sun/star/i18n/XNumberFormatCode.hpp>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+#include <deque>
+#include <utility>
+
+namespace com::sun::star::i18n { class XLocaleData5; }
+namespace com::sun::star::i18n { struct FormatElement; }
+namespace com::sun::star::uno { class XComponentContext; }
+
+class NumberFormatCodeMapper final : public cppu::WeakImplHelper
+<
+ css::i18n::XNumberFormatCode,
+ css::lang::XServiceInfo
+>
+{
+public:
+ NumberFormatCodeMapper( const css::uno::Reference <
+ css::uno::XComponentContext >& rxContext );
+ virtual ~NumberFormatCodeMapper() override;
+
+ virtual css::i18n::NumberFormatCode SAL_CALL getDefault( sal_Int16 nFormatType, sal_Int16 nFormatUsage, const css::lang::Locale& rLocale ) override;
+ virtual css::i18n::NumberFormatCode SAL_CALL getFormatCode( sal_Int16 nFormatIndex, const css::lang::Locale& rLocale ) override;
+ virtual css::uno::Sequence< css::i18n::NumberFormatCode > SAL_CALL getAllFormatCode( sal_Int16 nFormatUsage, const css::lang::Locale& rLocale ) override;
+ virtual css::uno::Sequence< css::i18n::NumberFormatCode > SAL_CALL getAllFormatCodes( const css::lang::Locale& rLocale ) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+private:
+ osl::Mutex maMutex;
+ css::uno::Reference < css::i18n::XLocaleData5 > m_xLocaleData;
+ typedef std::pair< css::lang::Locale, css::uno::Sequence< css::i18n::FormatElement > > FormatElementCacheItem;
+ std::deque < FormatElementCacheItem > m_aFormatElementCache;
+
+ const css::uno::Sequence< css::i18n::FormatElement >& getFormats( const css::lang::Locale& rLocale );
+ static OUString mapElementTypeShortToString(sal_Int16 formatType);
+ static sal_Int16 mapElementTypeStringToShort(const OUString& formatType);
+ static OUString mapElementUsageShortToString(sal_Int16 formatUsage);
+ static sal_Int16 mapElementUsageStringToShort(const OUString& formatUsage);
+};
+
+
+#endif // INCLUDED_I18NPOOL_INC_NUMBERFORMATCODE_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/numtochar.hxx b/i18npool/inc/numtochar.hxx
new file mode 100644
index 000000000..686d72d5c
--- /dev/null
+++ b/i18npool/inc/numtochar.hxx
@@ -0,0 +1,56 @@
+/* -*- 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_I18NPOOL_INC_NUMTOCHAR_HXX
+#define INCLUDED_I18NPOOL_INC_NUMTOCHAR_HXX
+
+#include "transliteration_Numeric.hxx"
+
+namespace i18npool {
+
+#define TRANSLITERATION_NUMTOCHAR( name ) \
+class NumToChar##name final : public transliteration_Numeric \
+{ \
+public: \
+ NumToChar##name (); \
+};
+
+TRANSLITERATION_NUMTOCHAR(Lower_zh_CN)
+TRANSLITERATION_NUMTOCHAR(Upper_zh_CN)
+TRANSLITERATION_NUMTOCHAR(Lower_zh_TW)
+TRANSLITERATION_NUMTOCHAR(Upper_zh_TW)
+TRANSLITERATION_NUMTOCHAR(Upper_ko)
+TRANSLITERATION_NUMTOCHAR(Hangul_ko)
+TRANSLITERATION_NUMTOCHAR(Lower_ko)
+TRANSLITERATION_NUMTOCHAR(KanjiShort_ja_JP)
+TRANSLITERATION_NUMTOCHAR(KanjiTraditional_ja_JP)
+TRANSLITERATION_NUMTOCHAR(Fullwidth)
+TRANSLITERATION_NUMTOCHAR(Indic_ar)
+TRANSLITERATION_NUMTOCHAR(EastIndic_ar)
+TRANSLITERATION_NUMTOCHAR(Indic_hi)
+TRANSLITERATION_NUMTOCHAR(_th)
+TRANSLITERATION_NUMTOCHAR(Halfwidth)
+
+#undef TRANSLITERATION_NUMTOCHAR
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_NUMTOCHAR_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/numtotext_cjk.hxx b/i18npool/inc/numtotext_cjk.hxx
new file mode 100644
index 000000000..56f7b5f02
--- /dev/null
+++ b/i18npool/inc/numtotext_cjk.hxx
@@ -0,0 +1,71 @@
+/* -*- 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_I18NPOOL_INC_NUMTOTEXT_CJK_HXX
+#define INCLUDED_I18NPOOL_INC_NUMTOTEXT_CJK_HXX
+
+#include "transliteration_Numeric.hxx"
+
+namespace i18npool {
+
+#define TRANSLITERATION_NUMTOTEXT_CJK( name ) \
+class NumToText##name final : public transliteration_Numeric \
+{ \
+public: \
+ NumToText##name (); \
+};
+
+TRANSLITERATION_NUMTOTEXT_CJK ( Lower_zh_CN )
+TRANSLITERATION_NUMTOTEXT_CJK ( Upper_zh_CN )
+TRANSLITERATION_NUMTOTEXT_CJK ( Lower_zh_TW )
+TRANSLITERATION_NUMTOTEXT_CJK ( Upper_zh_TW )
+TRANSLITERATION_NUMTOTEXT_CJK ( Fullwidth_zh_CN )
+TRANSLITERATION_NUMTOTEXT_CJK ( Fullwidth_zh_TW )
+TRANSLITERATION_NUMTOTEXT_CJK ( Fullwidth_ja_JP )
+TRANSLITERATION_NUMTOTEXT_CJK ( Fullwidth_ko )
+TRANSLITERATION_NUMTOTEXT_CJK ( Date_zh )
+TRANSLITERATION_NUMTOTEXT_CJK ( InformalLower_ko )
+TRANSLITERATION_NUMTOTEXT_CJK ( InformalUpper_ko )
+TRANSLITERATION_NUMTOTEXT_CJK ( InformalHangul_ko )
+TRANSLITERATION_NUMTOTEXT_CJK ( FormalLower_ko )
+TRANSLITERATION_NUMTOTEXT_CJK ( FormalUpper_ko )
+TRANSLITERATION_NUMTOTEXT_CJK ( FormalHangul_ko )
+TRANSLITERATION_NUMTOTEXT_CJK ( KanjiLongModern_ja_JP )
+TRANSLITERATION_NUMTOTEXT_CJK ( KanjiLongTraditional_ja_JP )
+TRANSLITERATION_NUMTOTEXT_CJK ( KanjiShortModern_ja_JP )
+TRANSLITERATION_NUMTOTEXT_CJK ( KanjiShortTraditional_ja_JP )
+TRANSLITERATION_NUMTOTEXT_CJK ( AIUFullWidth_ja_JP )
+TRANSLITERATION_NUMTOTEXT_CJK ( AIUHalfWidth_ja_JP )
+TRANSLITERATION_NUMTOTEXT_CJK ( IROHAFullWidth_ja_JP )
+TRANSLITERATION_NUMTOTEXT_CJK ( IROHAHalfWidth_ja_JP )
+TRANSLITERATION_NUMTOTEXT_CJK ( CircledNumber )
+TRANSLITERATION_NUMTOTEXT_CJK ( TianGan_zh )
+TRANSLITERATION_NUMTOTEXT_CJK ( DiZi_zh )
+TRANSLITERATION_NUMTOTEXT_CJK ( HangulJamo_ko )
+TRANSLITERATION_NUMTOTEXT_CJK ( HangulSyllable_ko )
+TRANSLITERATION_NUMTOTEXT_CJK ( HangulCircledJamo_ko )
+TRANSLITERATION_NUMTOTEXT_CJK ( HangulCircledSyllable_ko )
+
+#undef TRANSLITERATION_NUMTOTEXT
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_NUMTOTEXT_CJK_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/ordinalsuffix.hxx b/i18npool/inc/ordinalsuffix.hxx
new file mode 100644
index 000000000..65c41f51e
--- /dev/null
+++ b/i18npool/inc/ordinalsuffix.hxx
@@ -0,0 +1,55 @@
+/* -*- 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_I18NPOOL_INC_ORDINALSUFFIX_HXX
+#define INCLUDED_I18NPOOL_INC_ORDINALSUFFIX_HXX
+
+#include <com/sun/star/i18n/XOrdinalSuffix.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+namespace com::sun::star::lang { struct Locale; }
+
+namespace i18npool {
+
+class OrdinalSuffixService final : public cppu::WeakImplHelper
+<
+ css::i18n::XOrdinalSuffix,
+ css::lang::XServiceInfo
+>
+{
+ public:
+ OrdinalSuffixService();
+ virtual ~OrdinalSuffixService() override;
+
+ // XOrdinalSuffix
+ virtual css::uno::Sequence< OUString > SAL_CALL getOrdinalSuffix( sal_Int32 nNumber, const css::lang::Locale &rLocale ) override;
+
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence < OUString > SAL_CALL getSupportedServiceNames() override;
+
+};
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_ORDINALSUFFIX_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/servicename.hxx b/i18npool/inc/servicename.hxx
new file mode 100644
index 000000000..cbe187729
--- /dev/null
+++ b/i18npool/inc/servicename.hxx
@@ -0,0 +1,68 @@
+/* -*- 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 .
+ */
+/*
+Service Name
+ com.sun.star.i18n.Transliteration ... dispatching UNO object and generic methods
+ com.sun.star.i18n.Transliteration.u2l ... upper to lower
+ com.sun.star.i18n.Transliteration.l2u ... lower to upper
+ com.sun.star.i18n.Transliteration.caseignore ... case ignore
+ com.sun.star.i18n.Transliteration.l10n ... other
+
+ We have to adopt different service name for internal UNO objects.
+ Case related functionality vary depending on Locale.
+
+
+Implementation Name
+ For generic service: com.sun.star.i18n.Transliteration,
+ com.sun.star.i18n.Transliteration
+
+ com.sun.star.i18n.Transliteration.u2l
+ com.sun.star.i18n.Transliteration.l2u
+ com.sun.star.i18n.Transliteration.caseignore
+ For these there services above,
+
+ com.sun.star.i18n.Transliteration.ja_JP
+ ^^^^^
+ Locale name
+
+ For com.sun.star.i18n.l10n.Transliteration service,
+ com.sun.star.i18n.Transliteration.HALFWIDTH_FULLWIDTH,
+ com.sun.star.i18n.Transliteration.FULLWIDTH_HALFWIDTH,
+ com.sun.star.i18n.Transliteration.IGNORE_WIDTH,
+ com.sun.star.i18n.Transliteration.KATAKANA_HIRAGANA,
+ com.sun.star.i18n.Transliteration.HIRAGANA_KATAKANA,
+ com.sun.star.i18n.Transliteration.IGNORE_KANA,
+
+ ... These objects above can be used in every Locale context.
+
+*/
+
+
+#ifndef INCLUDED_I18NPOOL_INC_SERVICENAME_HXX
+#define INCLUDED_I18NPOOL_INC_SERVICENAME_HXX
+
+#define TRLT_SERVICELNAME "com.sun.star.i18n.Transliteration"
+#define TRLT_SERVICELNAME_L10N TRLT_SERVICELNAME ".l10n"
+
+#define TRLT_IMPLNAME_PREFIX "com.sun.star.i18n.Transliteration."
+// 1...5...901...5...901...5...901..4 --> 34
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/textToPronounce_zh.hxx b/i18npool/inc/textToPronounce_zh.hxx
new file mode 100644
index 000000000..ff01d6624
--- /dev/null
+++ b/i18npool/inc/textToPronounce_zh.hxx
@@ -0,0 +1,73 @@
+/* -*- 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 .
+ */
+
+#pragma once
+
+#include "transliteration_Ignore.hxx"
+#include <osl/module.hxx>
+
+namespace i18npool {
+
+class TextToPronounce_zh : public transliteration_Ignore
+{
+protected:
+#ifndef DISABLE_DYNLOADING
+ oslModule hModule;
+#endif
+ sal_uInt16 **idx;
+ const sal_Unicode* getPronounce(const sal_Unicode ch);
+
+public:
+#ifndef DISABLE_DYNLOADING
+ TextToPronounce_zh(const char* func_name);
+#else
+ TextToPronounce_zh(sal_uInt16 ** (*function)());
+#endif
+ virtual ~TextToPronounce_zh() override;
+
+ OUString
+ foldingImpl(const OUString & inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 > & offset, bool useOffset) override;
+
+ sal_Int16 SAL_CALL getType() override;
+
+ sal_Bool SAL_CALL
+ equals( const OUString & str1, sal_Int32 pos1, sal_Int32 nCount1, sal_Int32 & nMatch1, const OUString & str2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32 & nMatch2) override;
+
+ OUString SAL_CALL
+ transliterateChar2String( sal_Unicode inChar) override;
+
+ sal_Unicode SAL_CALL
+ transliterateChar2Char( sal_Unicode inChar) override;
+};
+
+#define TRANSLITERATION_TextToPronounce_zh( name ) \
+class name final : public TextToPronounce_zh \
+{ \
+public: \
+ name (); \
+};
+
+TRANSLITERATION_TextToPronounce_zh( TextToPinyin_zh_CN)
+TRANSLITERATION_TextToPronounce_zh( TextToChuyin_zh_TW)
+
+#undef TRANSLITERATION_TextToPronounce_zh
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/textconversion.hxx b/i18npool/inc/textconversion.hxx
new file mode 100644
index 000000000..efd9b587a
--- /dev/null
+++ b/i18npool/inc/textconversion.hxx
@@ -0,0 +1,163 @@
+/* -*- 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_I18NPOOL_INC_TEXTCONVERSION_HXX
+#define INCLUDED_I18NPOOL_INC_TEXTCONVERSION_HXX
+
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/i18n/XExtendedTextConversion.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <osl/module.h>
+
+namespace com::sun::star::linguistic2 { class XConversionDictionary; }
+namespace com::sun::star::linguistic2 { class XConversionDictionaryList; }
+namespace com::sun::star::uno { class XComponentContext; }
+
+namespace i18npool {
+
+
+
+class TextConversionService: public cppu::WeakImplHelper
+<
+ css::i18n::XExtendedTextConversion,
+ css::lang::XServiceInfo
+>
+{
+public:
+ TextConversionService(const char* pImplName);
+ virtual ~TextConversionService() override;
+ // Methods
+ virtual css::i18n::TextConversionResult SAL_CALL
+ getConversions( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions ) override = 0;
+ virtual OUString SAL_CALL
+ getConversion( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions ) override = 0;
+ virtual OUString SAL_CALL
+ getConversionWithOffset( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions, css::uno::Sequence< sal_Int32 >& offset ) override = 0;
+ virtual sal_Bool SAL_CALL
+ interactiveConversion(const css::lang::Locale& aLocale,
+ sal_Int16 nTextConversionType, sal_Int32 nTextConversionOptions ) override = 0;
+
+ //XServiceInfo
+ OUString SAL_CALL
+ getImplementationName() override;
+ sal_Bool SAL_CALL
+ supportsService(const OUString& ServiceName) override;
+ css::uno::Sequence< OUString > SAL_CALL
+ getSupportedServiceNames() override;
+private:
+ const char* implementationName;
+protected:
+#ifndef DISABLE_DYNLOADING
+ oslModule hModule;
+ oslGenericFunction getFunctionBySymbol(const char* func);
+#endif
+};
+
+// for Hangul2Hanja conversion
+typedef struct {
+ sal_Unicode code;
+ sal_Int16 address;
+ sal_Int16 count;
+} Hangul_Index;
+
+
+
+class TextConversion_ko final : public TextConversionService
+{
+public:
+ TextConversion_ko( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+
+ // Methods
+ css::i18n::TextConversionResult SAL_CALL
+ getConversions( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions ) override;
+ OUString SAL_CALL
+ getConversion( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions ) override;
+ OUString SAL_CALL
+ getConversionWithOffset( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions, css::uno::Sequence< sal_Int32 >& offset ) override;
+ sal_Bool SAL_CALL
+ interactiveConversion(const css::lang::Locale& aLocale,
+ sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions ) override;
+
+private:
+ // Hangul/Hanja system dictionary
+ css::uno::Reference < css::linguistic2::XConversionDictionary > xCD;
+ // Hangul/Hanja user defined dictionary list
+ css::uno::Reference < css::linguistic2::XConversionDictionaryList > xCDL;
+ sal_Int32 maxLeftLength;
+ sal_Int32 maxRightLength;
+ css::uno::Sequence< OUString >
+ getCharConversions(const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, bool toHanja);
+};
+
+
+
+
+// for SChines/TChinese word conversion
+typedef struct {
+ sal_Int16 count;
+} STC_WordIndex;
+
+class TextConversion_zh final : public TextConversionService
+{
+public:
+ TextConversion_zh( const css::uno::Reference < css::uno::XComponentContext >& rxContext );
+
+ // Methods
+ css::i18n::TextConversionResult SAL_CALL
+ getConversions( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions ) override;
+ OUString SAL_CALL
+ getConversion( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions ) override;
+ OUString SAL_CALL
+ getConversionWithOffset( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions, css::uno::Sequence< sal_Int32 >& offset ) override;
+ sal_Bool SAL_CALL
+ interactiveConversion(const css::lang::Locale& aLocale,
+ sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions ) override;
+private:
+ // user defined dictionary list
+ css::uno::Reference < css::linguistic2::XConversionDictionaryList > xCDL;
+ OUString getWordConversion(const OUString& aText,
+ sal_Int32 nStartPos, sal_Int32 nLength, bool toSChinese, sal_Int32 nConversionOptions, css::uno::Sequence <sal_Int32>& offset);
+ rtl:: OUString getCharConversion(const rtl:: OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, bool toSChinese, sal_Int32 nConversionOptions);
+ css::lang::Locale aLocale;
+};
+
+} // i18npool
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/textconversionImpl.hxx b/i18npool/inc/textconversionImpl.hxx
new file mode 100644
index 000000000..4a104f597
--- /dev/null
+++ b/i18npool/inc/textconversionImpl.hxx
@@ -0,0 +1,79 @@
+/* -*- 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_I18NPOOL_INC_TEXTCONVERSIONIMPL_HXX
+#define INCLUDED_I18NPOOL_INC_TEXTCONVERSIONIMPL_HXX
+
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/i18n/XExtendedTextConversion.hpp>
+#include <cppuhelper/implbase.hxx>
+
+namespace com::sun::star::uno { class XComponentContext; }
+
+namespace i18npool {
+
+
+
+class TextConversionImpl final : public cppu::WeakImplHelper
+<
+ css::i18n::XExtendedTextConversion,
+ css::lang::XServiceInfo
+>
+{
+public:
+ TextConversionImpl( const css::uno::Reference < css::uno::XComponentContext >& rxContext ) : m_xContext(rxContext) {};
+
+ // Methods
+ css::i18n::TextConversionResult SAL_CALL
+ getConversions( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions ) override;
+ OUString SAL_CALL
+ getConversion( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions ) override;
+ OUString SAL_CALL
+ getConversionWithOffset( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength,
+ const css::lang::Locale& aLocale, sal_Int16 nTextConversionType,
+ sal_Int32 nTextConversionOptions, css::uno::Sequence< sal_Int32 >& offset ) override;
+ sal_Bool SAL_CALL
+ interactiveConversion( const css::lang::Locale& aLocale,
+ sal_Int16 nTextConversionType, sal_Int32 nTextConversionOptions ) override;
+
+ //XServiceInfo
+ OUString SAL_CALL
+ getImplementationName() override;
+ sal_Bool SAL_CALL
+ supportsService(const OUString& ServiceName) override;
+ css::uno::Sequence< OUString > SAL_CALL
+ getSupportedServiceNames() override;
+private:
+ css::lang::Locale aLocale;
+ css::uno::Reference < css::i18n::XExtendedTextConversion > xTC;
+ css::uno::Reference < css::uno::XComponentContext > m_xContext;
+
+ /// @throws css::lang::NoSupportException
+ void getLocaleSpecificTextConversion( const css::lang::Locale& rLocale );
+};
+
+} // i18npool
+
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/texttonum.hxx b/i18npool/inc/texttonum.hxx
new file mode 100644
index 000000000..de8fa8295
--- /dev/null
+++ b/i18npool/inc/texttonum.hxx
@@ -0,0 +1,53 @@
+/* -*- 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_I18NPOOL_INC_TEXTTONUM_HXX
+#define INCLUDED_I18NPOOL_INC_TEXTTONUM_HXX
+
+#include "transliteration_Numeric.hxx"
+
+namespace i18npool {
+
+#define TRANSLITERATION_TEXTTONUM( name ) \
+class TextToNum##name final : public transliteration_Numeric \
+{ \
+public: \
+ TextToNum##name (); \
+};
+
+TRANSLITERATION_TEXTTONUM(Lower_zh_CN)
+TRANSLITERATION_TEXTTONUM(Upper_zh_CN)
+TRANSLITERATION_TEXTTONUM(Lower_zh_TW)
+TRANSLITERATION_TEXTTONUM(Upper_zh_TW)
+TRANSLITERATION_TEXTTONUM(InformalLower_ko)
+TRANSLITERATION_TEXTTONUM(InformalUpper_ko)
+TRANSLITERATION_TEXTTONUM(InformalHangul_ko)
+TRANSLITERATION_TEXTTONUM(FormalLower_ko)
+TRANSLITERATION_TEXTTONUM(FormalUpper_ko)
+TRANSLITERATION_TEXTTONUM(FormalHangul_ko)
+TRANSLITERATION_TEXTTONUM(KanjiLongModern_ja_JP)
+TRANSLITERATION_TEXTTONUM(KanjiLongTraditional_ja_JP)
+
+#undef TRANSLITERATION_TEXTTONUM
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_TEXTTONUM_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/transliterationImpl.hxx b/i18npool/inc/transliterationImpl.hxx
new file mode 100644
index 000000000..822ab835a
--- /dev/null
+++ b/i18npool/inc/transliterationImpl.hxx
@@ -0,0 +1,114 @@
+/* -*- 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_I18NPOOL_INC_TRANSLITERATIONIMPL_HXX
+#define INCLUDED_I18NPOOL_INC_TRANSLITERATIONIMPL_HXX
+
+#include <com/sun/star/i18n/XExtendedTransliteration.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <sal/types.h>
+
+namespace com::sun::star::i18n { class XLocaleData5; }
+namespace com::sun::star::uno { class XComponentContext; }
+
+namespace i18npool {
+
+class TransliterationImpl final : public cppu::WeakImplHelper
+<
+ css::i18n::XExtendedTransliteration,
+ css::lang::XServiceInfo
+>
+{
+public:
+ // Constructors
+ TransliterationImpl(const css::uno::Reference < css::uno::XComponentContext >& xContext);
+ // Destructor
+ virtual ~TransliterationImpl() override;
+
+ // Methods
+ virtual OUString SAL_CALL getName( ) override ;
+ virtual sal_Int16 SAL_CALL getType( ) override ;
+
+ virtual void SAL_CALL loadModule( css::i18n::TransliterationModules modName, const css::lang::Locale& rLocale ) override ;
+ virtual void SAL_CALL loadModuleNew( const css::uno::Sequence< css::i18n::TransliterationModulesNew >& modName,
+ const css::lang::Locale& rLocale ) override ;
+ virtual void SAL_CALL loadModuleByImplName( const OUString& implName,
+ const css::lang::Locale& rLocale ) override;
+ virtual void SAL_CALL loadModulesByImplNames(const css::uno::Sequence< OUString >& modNamelist,
+ const css::lang::Locale& rLocale) override;
+
+ virtual css::uno::Sequence< OUString > SAL_CALL getAvailableModules(
+ const css::lang::Locale& rLocale, sal_Int16 sType ) override;
+
+ virtual OUString SAL_CALL transliterate( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount,
+ css::uno::Sequence< sal_Int32 >& offset ) override ;
+
+ virtual OUString SAL_CALL folding( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount,
+ css::uno::Sequence< sal_Int32 >& offset ) override;
+
+ // Methods in XExtendedTransliteration
+ virtual OUString SAL_CALL transliterateString2String( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount ) override ;
+ virtual OUString SAL_CALL transliterateChar2String( sal_Unicode inChar ) override ;
+ virtual sal_Unicode SAL_CALL transliterateChar2Char( sal_Unicode inChar ) override ;
+
+ virtual sal_Bool SAL_CALL equals( const OUString& str1, sal_Int32 pos1, sal_Int32 nCount1,
+ sal_Int32& nMatch1, const OUString& str2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32& nMatch2 ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL transliterateRange( const OUString& str1,
+ const OUString& str2 ) override ;
+
+ virtual sal_Int32 SAL_CALL compareSubstring( const OUString& s1, sal_Int32 off1, sal_Int32 len1,
+ const OUString& s2, sal_Int32 off2, sal_Int32 len2) override;
+
+ virtual sal_Int32 SAL_CALL compareString( const OUString& s1, const OUString& s2) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+
+private:
+#define maxCascade 27
+ css::uno::Reference< css::i18n::XExtendedTransliteration > bodyCascade[maxCascade];
+ sal_Int16 numCascade;
+ bool caseignoreOnly;
+ css::uno::Reference< css::uno::XComponentContext > mxContext;
+ css::uno::Reference< css::i18n::XLocaleData5 > mxLocaledata;
+ css::uno::Reference< css::i18n::XExtendedTransliteration > caseignore;
+
+ /// @throws css::uno::RuntimeException
+ bool loadModuleByName( const OUString& implName,
+ css::uno::Reference<css::i18n::XExtendedTransliteration> & body, const css::lang::Locale& rLocale);
+
+ void clear();
+
+ /// @throws css::uno::RuntimeException
+ void loadBody( OUString const &implName,
+ css::uno::Reference< css::i18n::XExtendedTransliteration >& body );
+
+ /// @throws css::uno::RuntimeException
+ css::uno::Sequence< OUString > getRange(
+ const css::uno::Sequence< OUString > &inStrs,
+ sal_Int32 length, const sal_Int16 _nCascade);
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/transliteration_Ignore.hxx b/i18npool/inc/transliteration_Ignore.hxx
new file mode 100644
index 000000000..838c48d53
--- /dev/null
+++ b/i18npool/inc/transliteration_Ignore.hxx
@@ -0,0 +1,159 @@
+/* -*- 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_I18NPOOL_INC_TRANSLITERATION_IGNORE_HXX
+#define INCLUDED_I18NPOOL_INC_TRANSLITERATION_IGNORE_HXX
+
+#include "transliteration_commonclass.hxx"
+#include <unicode/translit.h>
+
+namespace i18nutil { class oneToOneMapping; }
+
+typedef sal_Unicode (*TransFunc)(const sal_Unicode);
+
+namespace i18npool {
+
+class transliteration_Ignore : public transliteration_commonclass
+{
+public:
+ virtual OUString
+ foldingImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+
+ // This method is shared.
+ sal_Bool SAL_CALL
+ equals( const OUString& str1, sal_Int32 pos1, sal_Int32 nCount1, sal_Int32& nMatch1,
+ const OUString& str2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32& nMatch2 ) override;
+
+ // This method is implemented in sub class if needed. Otherwise, the method implemented in this class will be used.
+ css::uno::Sequence< OUString > SAL_CALL
+ transliterateRange( const OUString& str1, const OUString& str2 ) override;
+
+
+ // Methods which are shared.
+ sal_Int16 SAL_CALL getType( ) override;
+
+ OUString
+ transliterateImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+
+ virtual sal_Unicode SAL_CALL
+ transliterateChar2Char( sal_Unicode inChar) override;
+
+ /// @throws css::uno::RuntimeException
+ static css::uno::Sequence< OUString >
+ transliterateRange( const OUString& str1, const OUString& str2, XTransliteration& t1, XTransliteration& t2 );
+
+ struct Mapping {
+ sal_Unicode previousChar;
+ sal_Unicode currentChar;
+ sal_Unicode replaceChar;
+ bool two2one;
+ };
+
+protected:
+ TransFunc func;
+ i18nutil::oneToOneMapping *table;
+ const Mapping *map;
+};
+
+#define TRANSLITERATION_IGNORE( name ) \
+class ignore##name final : public transliteration_Ignore {\
+public:\
+ ignore##name ();\
+};
+
+TRANSLITERATION_IGNORE(BaFa_ja_JP)
+TRANSLITERATION_IGNORE(HyuByu_ja_JP)
+TRANSLITERATION_IGNORE(SeZe_ja_JP)
+TRANSLITERATION_IGNORE(TiJi_ja_JP)
+TRANSLITERATION_IGNORE(MiddleDot_ja_JP)
+TRANSLITERATION_IGNORE(MinusSign_ja_JP)
+TRANSLITERATION_IGNORE(Separator_ja_JP)
+TRANSLITERATION_IGNORE(Space_ja_JP)
+TRANSLITERATION_IGNORE(TraditionalKana_ja_JP)
+TRANSLITERATION_IGNORE(TraditionalKanji_ja_JP)
+TRANSLITERATION_IGNORE(ZiZu_ja_JP)
+TRANSLITERATION_IGNORE(Kashida_CTL)
+
+class ignoreDiacritics_CTL final : public transliteration_Ignore
+{
+ icu::Transliterator* m_transliterator;
+
+public:
+ ignoreDiacritics_CTL();
+
+ OUString
+ foldingImpl(const OUString& rInStr, sal_Int32 nStartPos, sal_Int32 nCount, css::uno::Sequence<sal_Int32>& rOffset, bool useOffset) override;
+
+ sal_Unicode SAL_CALL
+ transliterateChar2Char(sal_Unicode nInChar) override;
+};
+
+#undef TRANSLITERATION_IGNORE
+
+#define TRANSLITERATION_IGNORE( name ) \
+class ignore##name final : public transliteration_Ignore {\
+public:\
+ ignore##name () {\
+ func = nullptr;\
+ table = nullptr;\
+ map = nullptr;\
+ transliterationName = "ignore"#name;\
+ implementationName = "com.sun.star.i18n.Transliteration.ignore"#name;\
+ };\
+ OUString foldingImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, \
+ css::uno::Sequence< sal_Int32 >& offset, bool useOffset) override; \
+};
+
+TRANSLITERATION_IGNORE(KiKuFollowedBySa_ja_JP)
+TRANSLITERATION_IGNORE(IandEfollowedByYa_ja_JP)
+TRANSLITERATION_IGNORE(IterationMark_ja_JP)
+TRANSLITERATION_IGNORE(ProlongedSoundMark_ja_JP)
+
+#undef TRANSLITERATION_IGNORE
+
+#define TRANSLITERATION_IGNORE( name ) \
+class ignore##name final : public transliteration_Ignore {\
+public:\
+ ignore##name () {\
+ func = nullptr;\
+ table = nullptr;\
+ map = nullptr;\
+ transliterationName = "ignore"#name;\
+ implementationName = "com.sun.star.i18n.Transliteration.ignore"#name;\
+ };\
+ OUString foldingImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, \
+ css::uno::Sequence< sal_Int32 >& offset, bool useOffset) override; \
+ using transliteration_Ignore::transliterateRange;\
+ css::uno::Sequence< OUString > SAL_CALL transliterateRange( const OUString& str1, \
+ const OUString& str2 ) override; \
+ sal_Unicode SAL_CALL \
+ transliterateChar2Char( sal_Unicode inChar) \
+ override;\
+};
+
+TRANSLITERATION_IGNORE(Kana)
+TRANSLITERATION_IGNORE(Width)
+TRANSLITERATION_IGNORE(Size_ja_JP)
+
+#undef TRANSLITERATION_IGNORE
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_TRANSLITERATION_IGNORE_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/transliteration_Numeric.hxx b/i18npool/inc/transliteration_Numeric.hxx
new file mode 100644
index 000000000..8ebf2a394
--- /dev/null
+++ b/i18npool/inc/transliteration_Numeric.hxx
@@ -0,0 +1,61 @@
+/* -*- 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_I18NPOOL_INC_TRANSLITERATION_NUMERIC_HXX
+#define INCLUDED_I18NPOOL_INC_TRANSLITERATION_NUMERIC_HXX
+
+#include "transliteration_commonclass.hxx"
+
+namespace i18npool {
+
+class transliteration_Numeric : public transliteration_commonclass {
+public:
+ virtual OUString
+ transliterateImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+
+ virtual sal_Unicode SAL_CALL
+ transliterateChar2Char( sal_Unicode inChar) override;
+
+ // Methods which are shared.
+ virtual sal_Int16 SAL_CALL getType( ) override;
+
+ virtual OUString
+ foldingImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+
+ virtual sal_Bool SAL_CALL
+ equals( const OUString& str1, sal_Int32 pos1, sal_Int32 nCount1, sal_Int32& nMatch1, const OUString& str2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32& nMatch2 ) override;
+
+ virtual css::uno::Sequence< OUString > SAL_CALL
+ transliterateRange( const OUString& str1, const OUString& str2 ) override;
+protected:
+ sal_Int16 nNativeNumberMode;
+ sal_Int16 tableSize;
+ const sal_Unicode* table;
+ bool recycleSymbol;
+private:
+ /// @throws css::uno::RuntimeException
+ OUString
+ transliterateBullet( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount,
+ css::uno::Sequence< sal_Int32 >& offset, bool useOffset );
+};
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_TRANSLITERATION_NUMERIC_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/transliteration_OneToOne.hxx b/i18npool/inc/transliteration_OneToOne.hxx
new file mode 100644
index 000000000..45a3f61a9
--- /dev/null
+++ b/i18npool/inc/transliteration_OneToOne.hxx
@@ -0,0 +1,116 @@
+/* -*- 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_I18NPOOL_INC_TRANSLITERATION_ONETOONE_HXX
+#define INCLUDED_I18NPOOL_INC_TRANSLITERATION_ONETOONE_HXX
+
+#include "transliteration_commonclass.hxx"
+
+namespace i18nutil { class oneToOneMapping; }
+
+namespace i18npool {
+
+typedef sal_Unicode (*TransFunc)(const sal_Unicode);
+
+class transliteration_OneToOne : public transliteration_commonclass
+{
+public:
+ OUString
+ transliterateImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+
+ sal_Unicode SAL_CALL
+ transliterateChar2Char( sal_Unicode inChar) override;
+
+ // Methods which are shared.
+ sal_Int16 SAL_CALL getType() override;
+
+ OUString
+ foldingImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+
+ sal_Bool SAL_CALL
+ equals( const OUString& str1, sal_Int32 pos1, sal_Int32 nCount1, sal_Int32& nMatch1,
+ const OUString& str2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32& nMatch2 ) override;
+
+ css::uno::Sequence< OUString > SAL_CALL
+ transliterateRange( const OUString& str1, const OUString& str2 ) override;
+
+protected:
+ TransFunc func;
+ i18nutil::oneToOneMapping *table;
+};
+
+#define TRANSLITERATION_ONETOONE( name ) \
+class name final : public transliteration_OneToOne \
+{ \
+public: \
+ name (); \
+ OUString \
+ transliterateImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) \
+ override; \
+ sal_Unicode SAL_CALL \
+ transliterateChar2Char( sal_Unicode inChar) \
+ override; \
+};
+
+TRANSLITERATION_ONETOONE( fullwidthToHalfwidth )
+TRANSLITERATION_ONETOONE( fullwidthKatakanaToHalfwidthKatakana )
+TRANSLITERATION_ONETOONE( fullwidthToHalfwidthLikeASC )
+
+class halfwidthToFullwidth final : public transliteration_OneToOne
+{
+public:
+ halfwidthToFullwidth();
+ OUString
+ transliterateImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+};
+class halfwidthKatakanaToFullwidthKatakana final : public transliteration_OneToOne
+{
+public:
+ halfwidthKatakanaToFullwidthKatakana();
+ OUString
+ transliterateImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+};
+class halfwidthToFullwidthLikeJIS final : public transliteration_OneToOne
+{
+public:
+ halfwidthToFullwidthLikeJIS();
+ OUString
+ transliterateImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+};
+
+#undef TRANSLITERATION_ONETOONE
+
+#define TRANSLITERATION_ONETOONE( name ) \
+class name final : public transliteration_OneToOne \
+{ \
+public: \
+ name (); \
+};
+
+TRANSLITERATION_ONETOONE(hiraganaToKatakana)
+TRANSLITERATION_ONETOONE(katakanaToHiragana)
+TRANSLITERATION_ONETOONE(largeToSmall_ja_JP)
+TRANSLITERATION_ONETOONE(smallToLarge_ja_JP)
+
+#undef TRANSLITERATION_ONETOONE
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_TRANSLITERATION_ONETOONE_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/transliteration_body.hxx b/i18npool/inc/transliteration_body.hxx
new file mode 100644
index 000000000..aea4cd795
--- /dev/null
+++ b/i18npool/inc/transliteration_body.hxx
@@ -0,0 +1,105 @@
+/* -*- 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_I18NPOOL_INC_TRANSLITERATION_BODY_HXX
+#define INCLUDED_I18NPOOL_INC_TRANSLITERATION_BODY_HXX
+
+#include "transliteration_commonclass.hxx"
+#include <i18nutil/casefolding.hxx>
+
+namespace i18npool {
+
+class Transliteration_body : public transliteration_commonclass
+{
+public:
+ Transliteration_body();
+
+ // Methods which are shared.
+ sal_Int16 SAL_CALL getType() override;
+
+ OUString transliterateImpl(const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount,
+ css::uno::Sequence< sal_Int32 >& offset, bool useOffset) override;
+
+ OUString SAL_CALL
+ transliterateChar2String( sal_Unicode inChar) override;
+
+ virtual sal_Unicode SAL_CALL
+ transliterateChar2Char( sal_Unicode inChar) override;
+
+ OUString foldingImpl(const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount,
+ css::uno::Sequence< sal_Int32 >& offset, bool useOffset) override;
+
+ sal_Bool SAL_CALL equals(
+ const OUString& str1, sal_Int32 pos1, sal_Int32 nCount1, sal_Int32& nMatch1,
+ const OUString& str2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32& nMatch2 ) override;
+
+ css::uno::Sequence< OUString > SAL_CALL transliterateRange( const OUString& str1,
+ const OUString& str2 ) override;
+
+protected:
+ MappingType nMappingType;
+};
+
+class Transliteration_u2l final : public Transliteration_body
+{
+public:
+ Transliteration_u2l();
+};
+
+class Transliteration_l2u final : public Transliteration_body
+{
+public:
+ Transliteration_l2u();
+};
+
+class Transliteration_casemapping final : public Transliteration_body
+{
+public:
+ Transliteration_casemapping();
+ void setMappingType(const MappingType rMappingType, const css::lang::Locale& rLocale );
+};
+
+class Transliteration_togglecase final : public Transliteration_body
+{
+public:
+ Transliteration_togglecase();
+};
+
+class Transliteration_titlecase final : public Transliteration_body
+{
+public:
+ Transliteration_titlecase();
+
+ virtual OUString transliterateImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount,
+ css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+};
+
+class Transliteration_sentencecase final : public Transliteration_body
+{
+public:
+ Transliteration_sentencecase();
+
+ virtual OUString transliterateImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount,
+ css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) override;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/transliteration_caseignore.hxx b/i18npool/inc/transliteration_caseignore.hxx
new file mode 100644
index 000000000..c16dfca46
--- /dev/null
+++ b/i18npool/inc/transliteration_caseignore.hxx
@@ -0,0 +1,64 @@
+/* -*- 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_I18NPOOL_INC_TRANSLITERATION_CASEIGNORE_HXX
+#define INCLUDED_I18NPOOL_INC_TRANSLITERATION_CASEIGNORE_HXX
+
+#include "transliteration_body.hxx"
+
+namespace i18npool {
+
+class Transliteration_caseignore final : public Transliteration_body
+{
+public:
+ Transliteration_caseignore();
+
+ // Methods which are shared.
+ sal_Int16 SAL_CALL getType() override;
+
+ void SAL_CALL loadModule( css::i18n::TransliterationModules modName, const css::lang::Locale& rLocale ) override;
+
+ css::uno::Sequence< OUString > SAL_CALL transliterateRange(
+ const OUString& str1, const OUString& str2 ) override;
+
+ sal_Bool SAL_CALL equals(
+ const OUString& str1, sal_Int32 pos1, sal_Int32 nCount1, sal_Int32& nMatch1,
+ const OUString& src2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32& nMatch2) override;
+
+ sal_Int32 SAL_CALL compareSubstring(
+ const OUString& s1, sal_Int32 off1, sal_Int32 len1,
+ const OUString& s2, sal_Int32 off2, sal_Int32 len2) override;
+
+ sal_Int32 SAL_CALL compareString(
+ const OUString& s1,
+ const OUString& s2) override;
+
+private:
+ /// @throws css::uno::RuntimeException
+ sal_Int32 compare(
+ const OUString& str1, sal_Int32 pos1, sal_Int32 nCount1, sal_Int32& nMatch1,
+ const OUString& str2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32& nMatch2);
+
+ TransliterationFlags moduleLoaded;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/transliteration_commonclass.hxx b/i18npool/inc/transliteration_commonclass.hxx
new file mode 100644
index 000000000..97f716c08
--- /dev/null
+++ b/i18npool/inc/transliteration_commonclass.hxx
@@ -0,0 +1,106 @@
+/* -*- 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_I18NPOOL_INC_TRANSLITERATION_COMMONCLASS_HXX
+#define INCLUDED_I18NPOOL_INC_TRANSLITERATION_COMMONCLASS_HXX
+
+#include <com/sun/star/i18n/XExtendedTransliteration.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <cppuhelper/implbase.hxx>
+#include <rtl/ustring.hxx>
+
+namespace i18npool {
+
+class transliteration_commonclass : public cppu::WeakImplHelper<
+ css::i18n::XExtendedTransliteration,
+ css::lang::XServiceInfo
+ >
+{
+public:
+ transliteration_commonclass();
+
+ // Methods which are shared.
+ void SAL_CALL
+ loadModule( css::i18n::TransliterationModules modName, const css::lang::Locale& rLocale ) override;
+
+ void SAL_CALL
+ loadModuleNew( const css::uno::Sequence< css::i18n::TransliterationModulesNew >& modName, const css::lang::Locale& rLocale ) override;
+
+ void SAL_CALL
+ loadModuleByImplName( const OUString& implName, const css::lang::Locale& rLocale ) override;
+
+ void SAL_CALL
+ loadModulesByImplNames(const css::uno::Sequence< OUString >& modNamelist, const css::lang::Locale& rLocale) override;
+
+ css::uno::Sequence< OUString > SAL_CALL
+ getAvailableModules( const css::lang::Locale& rLocale, sal_Int16 sType ) override;
+
+ // Methods which should be implemented in each transliteration module.
+ virtual OUString SAL_CALL getName() override;
+
+ virtual sal_Int16 SAL_CALL getType( ) override = 0;
+
+ virtual OUString SAL_CALL
+ transliterate( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset ) override final
+ { return transliterateImpl( inStr, startPos, nCount, offset, true ); }
+
+ virtual OUString SAL_CALL
+ folding( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset) override final
+ { return foldingImpl( inStr, startPos, nCount, offset, true ); }
+
+ // Methods in XExtendedTransliteration
+ virtual OUString SAL_CALL
+ transliterateString2String( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount ) override;
+ virtual OUString SAL_CALL
+ transliterateChar2String( sal_Unicode inChar) override;
+ virtual sal_Unicode SAL_CALL
+ transliterateChar2Char( sal_Unicode inChar ) override = 0;
+
+ virtual sal_Bool SAL_CALL
+ equals( const OUString& str1, sal_Int32 pos1, sal_Int32 nCount1, sal_Int32& nMatch1, const OUString& str2, sal_Int32 pos2, sal_Int32 nCount2, sal_Int32& nMatch2 ) override = 0;
+
+ virtual css::uno::Sequence< OUString > SAL_CALL
+ transliterateRange( const OUString& str1, const OUString& str2 ) override = 0;
+
+ virtual sal_Int32 SAL_CALL
+ compareSubstring( const OUString& s1, sal_Int32 off1, sal_Int32 len1, const OUString& s2, sal_Int32 off2, sal_Int32 len2) override;
+
+ virtual sal_Int32 SAL_CALL
+ compareString( const OUString& s1, const OUString& s2) override;
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+protected:
+ virtual OUString
+ transliterateImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) = 0;
+
+ virtual OUString
+ foldingImpl( const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, css::uno::Sequence< sal_Int32 >& offset, bool useOffset ) = 0;
+
+ css::lang::Locale aLocale;
+ const char* transliterationName;
+ const char* implementationName;
+};
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_TRANSLITERATION_COMMONCLASS_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/unoscripttypedetector.hxx b/i18npool/inc/unoscripttypedetector.hxx
new file mode 100644
index 000000000..2e1d3f2ff
--- /dev/null
+++ b/i18npool/inc/unoscripttypedetector.hxx
@@ -0,0 +1,53 @@
+/* -*- 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_I18NPOOL_INC_UNOSCRIPTTYPEDETECTOR_HXX
+#define INCLUDED_I18NPOOL_INC_UNOSCRIPTTYPEDETECTOR_HXX
+
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+#include <com/sun/star/i18n/XScriptTypeDetector.hpp>
+#include <cppuhelper/implbase.hxx>
+
+
+
+class UnoScriptTypeDetector final : public cppu::WeakImplHelper
+<
+ css::i18n::XScriptTypeDetector,
+ css::lang::XServiceInfo
+>
+{
+public:
+ // Methods
+ virtual sal_Int32 SAL_CALL beginOfScriptDirection( const OUString& Text, sal_Int32 nPos, sal_Int16 scriptDirection ) override;
+ virtual sal_Int32 SAL_CALL endOfScriptDirection( const OUString& Text, sal_Int32 nPos, sal_Int16 scriptDirection ) override;
+ virtual sal_Int16 SAL_CALL getScriptDirection( const OUString& Text, sal_Int32 nPos, sal_Int16 defaultScriptDirection ) override;
+ virtual sal_Int32 SAL_CALL beginOfCTLScriptType( const OUString& Text, sal_Int32 nPos ) override;
+ virtual sal_Int32 SAL_CALL endOfCTLScriptType( const OUString& Text, sal_Int32 nPos ) override;
+ virtual sal_Int16 SAL_CALL getCTLScriptType( const OUString& Text, sal_Int32 nPos ) override;
+
+
+ //XServiceInfo
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/wtt.h b/i18npool/inc/wtt.h
new file mode 100644
index 000000000..2e248f04b
--- /dev/null
+++ b/i18npool/inc/wtt.h
@@ -0,0 +1,68 @@
+/* -*- 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_I18NPOOL_INC_WTT_H
+#define INCLUDED_I18NPOOL_INC_WTT_H
+
+namespace i18npool {
+
+/*
+ * Thai character type definition.
+ */
+
+#define CT_CTRL 0 // Control character
+#define CT_NON 1 // Non-composible
+#define CT_CONS 2 // Consonant
+#define CT_LV 3 // Leading vowel
+#define CT_FV1 4 // Following vowel
+#define CT_FV2 5 // Following vowel
+#define CT_FV3 6
+#define CT_BV1 7 // Below vowel
+#define CT_BV2 8
+#define CT_BD 9 // Below diacritic
+#define CT_TONE 10 // Tone
+#define CT_AD1 11 // Above diacritic
+#define CT_AD2 12
+#define CT_AD3 13
+#define CT_AV1 14 // Above vowel
+#define CT_AV2 15
+#define CT_AV3 16
+
+#define MAX_CT 17
+
+static const sal_uInt16 thaiCT[128] = { // Thai character type
+ CT_NON, CT_CONS, CT_CONS, CT_CONS, CT_CONS,CT_CONS, CT_CONS, CT_CONS, //0E00
+ CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS,
+ CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, //0E10
+ CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS,
+ CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_FV3, CT_CONS, CT_FV3, CT_CONS, //0E20
+ CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_CONS, CT_NON,
+ CT_FV1, CT_AV2, CT_FV1, CT_FV1, CT_AV1, CT_AV3, CT_AV2, CT_AV3, //0E30
+ CT_BV1, CT_BV2, CT_BD, CT_NON, CT_NON, CT_NON, CT_NON, CT_NON,
+ CT_LV, CT_LV, CT_LV, CT_LV, CT_LV, CT_FV2, CT_NON, CT_AD2, //0E40
+ CT_TONE, CT_TONE, CT_TONE, CT_TONE, CT_AD1, CT_AD1, CT_AD3, CT_NON,
+ CT_NON, CT_NON, CT_NON, CT_NON, CT_NON, CT_NON, CT_NON, CT_NON, //0E50
+ CT_NON, CT_NON, CT_NON, CT_NON, CT_NON, CT_NON, CT_NON, CT_CTRL };
+
+#define getCharType(x) ((x >= 0x0E00 && x < 0x0E60) ? thaiCT[x - 0x0E00] : CT_NON)
+
+}
+
+#endif // INCLUDED_I18NPOOL_INC_WTT_H
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/i18npool/inc/xdictionary.hxx b/i18npool/inc/xdictionary.hxx
new file mode 100644
index 000000000..dbb07f756
--- /dev/null
+++ b/i18npool/inc/xdictionary.hxx
@@ -0,0 +1,91 @@
+/* -*- 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_I18NPOOL_INC_XDICTIONARY_HXX
+#define INCLUDED_I18NPOOL_INC_XDICTIONARY_HXX
+
+#include <sal/types.h>
+
+#include <com/sun/star/i18n/Boundary.hpp>
+
+namespace i18npool {
+
+#define CACHE_MAX 32 // max cache structure number
+#define DEFAULT_SIZE 256 // for boundary size, to avoid alloc and release memory
+
+// cache structure.
+struct WordBreakCache {
+ sal_Int32 length; // contents length saved here.
+ sal_Unicode *contents; // separated segment contents.
+ sal_Int32* wordboundary; // word boundaries in segments.
+ sal_Int32 size; // size of wordboundary
+
+ WordBreakCache();
+ bool equals(const sal_Unicode *str, css::i18n::Boundary const & boundary); // checking cached string
+};
+
+struct xdictionarydata
+{
+ const sal_uInt8 * existMark;
+ const sal_Int16 * index1;
+ const sal_Int32 * index2;
+ const sal_Int32 * lenArray;
+ const sal_Unicode* dataArea;
+ xdictionarydata() :
+ existMark( nullptr ),
+ index1( nullptr ),
+ index2( nullptr ),
+ lenArray( nullptr ),
+ dataArea( nullptr )
+ {
+ }
+};
+
+class xdictionary
+{
+private:
+ xdictionarydata data;
+ void initDictionaryData(const char *lang);
+
+ css::i18n::Boundary boundary;
+ bool japaneseWordBreak;
+
+public:
+ xdictionary(const char *lang);
+ ~xdictionary();
+ css::i18n::Boundary nextWord( const OUString& rText, sal_Int32 nPos, sal_Int16 wordType);
+ css::i18n::Boundary previousWord( const OUString& rText, sal_Int32 nPos, sal_Int16 wordType);
+ css::i18n::Boundary const & getWordBoundary( const OUString& rText, sal_Int32 nPos, sal_Int16 wordType, bool bDirection );
+ void setJapaneseWordBreak();
+
+private:
+ WordBreakCache cache[CACHE_MAX];
+ OUString segmentCachedString;
+ css::i18n::Boundary segmentCachedBoundary;
+
+ bool seekSegment(const OUString& rText, sal_Int32 pos, css::i18n::Boundary& boundary);
+ WordBreakCache& getCache(const sal_Unicode *text, css::i18n::Boundary const & boundary);
+ bool exists(const sal_uInt32 u);
+ sal_Int32 getLongestMatch(const sal_Unicode *text, sal_Int32 len);
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */