Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <config_locales.h>
21 :
22 : #include <com/sun/star/lang/XSingleServiceFactory.hpp>
23 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
24 : #include <com/sun/star/registry/XRegistryKey.hpp>
25 :
26 : #include <comphelper/processfactory.hxx>
27 : #include <cppuhelper/factory.hxx>
28 : #include <cppuhelper/weak.hxx>
29 : #include <osl/mutex.hxx>
30 :
31 : #include <servicename.hxx>
32 :
33 : #include <transliteration_body.hxx>
34 : #include <transliteration_OneToOne.hxx>
35 : #include <textToPronounce_zh.hxx>
36 : #include <numtotext_cjk.hxx>
37 : #include <numtochar.hxx>
38 : #include <texttonum.hxx>
39 : #include <chartonum.hxx>
40 :
41 : #include <calendarImpl.hxx>
42 : #include <calendar_gregorian.hxx>
43 : #include <calendar_hijri.hxx>
44 : #include <calendar_jewish.hxx>
45 :
46 : #include <breakiterator_cjk.hxx>
47 : #include <breakiterator_th.hxx>
48 :
49 : #include <indexentrysupplier.hxx>
50 : #include <indexentrysupplier_asian.hxx>
51 : #include <indexentrysupplier_ja_phonetic.hxx>
52 : #include <indexentrysupplier_common.hxx>
53 : #include <indexentrysupplier_default.hxx>
54 :
55 : #include <chaptercollator.hxx>
56 : #include <collator_unicode.hxx>
57 :
58 : #include <inputsequencechecker_th.hxx>
59 : #include <inputsequencechecker_hi.hxx>
60 :
61 : #include <textconversion.hxx>
62 :
63 : using namespace ::com::sun::star;
64 :
65 : #define IMPL_CREATEINSTANCE( ImplName ) \
66 : uno::Reference< uno::XInterface > \
67 : SAL_CALL ImplName##_CreateInstance( \
68 : SAL_UNUSED_PARAMETER const uno::Reference< \
69 : lang::XMultiServiceFactory >& ) \
70 : { \
71 : return uno::Reference < \
72 : uno::XInterface >( static_cast<cppu::OWeakObject*>( \
73 : new ImplName) ); \
74 : }
75 :
76 : #define IMPL_CREATEINSTANCE_CTX( ImplName ) \
77 : uno::Reference< uno::XInterface > \
78 : SAL_CALL ImplName##_CreateInstance( \
79 : const uno::Reference< \
80 : lang::XMultiServiceFactory >& rxMSF ) \
81 : { \
82 : return uno::Reference < \
83 : uno::XInterface >( static_cast<cppu::OWeakObject*>( \
84 : new ImplName( comphelper::getComponentContext(rxMSF) )) ); \
85 : }
86 :
87 : typedef uno::Reference<
88 : uno::XInterface > (SAL_CALL *FN_CreateInstance)(
89 : const uno::Reference<
90 : lang::XMultiServiceFactory >& );
91 :
92 : #define IMPL_TRANSLITERATION_ITEM( implName ) \
93 : { TRLT_SERVICELNAME_L10N, \
94 : TRLT_IMPLNAME_PREFIX #implName, \
95 : &implName##_CreateInstance }
96 :
97 :
98 :
99 : using namespace i18n;
100 :
101 : // At least for iOS it doesn't hurt if we have lots of functions here
102 : // generated by these lovely macros that get compiled, but then no
103 : // references to them thanks to the WITH_LOCALE ifdefs for the
104 : // aInstances table below. The -dead_strip linker option will take
105 : // care of not linking these functions in. Presumably the same holds
106 : // for Android, too, as we use -ffunction-sections and
107 : // -Wl,--gc_sections. It's mainly for iOS and Android that the
108 : // --with-locales option is intended anyway.
109 :
110 8 : IMPL_CREATEINSTANCE_CTX( IndexEntrySupplier )
111 0 : IMPL_CREATEINSTANCE_CTX( IndexEntrySupplier_asian )
112 0 : IMPL_CREATEINSTANCE_CTX( IndexEntrySupplier_ja_phonetic_alphanumeric_first_by_syllable )
113 0 : IMPL_CREATEINSTANCE_CTX( IndexEntrySupplier_ja_phonetic_alphanumeric_first_by_consonant )
114 0 : IMPL_CREATEINSTANCE_CTX( IndexEntrySupplier_ja_phonetic_alphanumeric_last_by_syllable )
115 0 : IMPL_CREATEINSTANCE_CTX( IndexEntrySupplier_ja_phonetic_alphanumeric_last_by_consonant )
116 5 : IMPL_CREATEINSTANCE_CTX( IndexEntrySupplier_Unicode )
117 230 : IMPL_CREATEINSTANCE_CTX( CalendarImpl )
118 228 : IMPL_CREATEINSTANCE( Calendar_gregorian )
119 0 : IMPL_CREATEINSTANCE( Calendar_hanja )
120 0 : IMPL_CREATEINSTANCE( Calendar_gengou )
121 1 : IMPL_CREATEINSTANCE( Calendar_ROC )
122 0 : IMPL_CREATEINSTANCE( Calendar_hijri )
123 0 : IMPL_CREATEINSTANCE( Calendar_jewish )
124 1 : IMPL_CREATEINSTANCE( Calendar_buddhist )
125 2 : IMPL_CREATEINSTANCE( BreakIterator_ja )
126 60 : IMPL_CREATEINSTANCE( BreakIterator_zh )
127 541 : IMPL_CREATEINSTANCE( BreakIterator_zh_TW )
128 0 : IMPL_CREATEINSTANCE( BreakIterator_ko )
129 1 : IMPL_CREATEINSTANCE( BreakIterator_th )
130 1 : IMPL_CREATEINSTANCE_CTX( ChapterCollator )
131 86 : IMPL_CREATEINSTANCE( Collator_Unicode )
132 :
133 0 : IMPL_CREATEINSTANCE( InputSequenceChecker_th )
134 0 : IMPL_CREATEINSTANCE( InputSequenceChecker_hi )
135 :
136 0 : IMPL_CREATEINSTANCE_CTX( TextConversion_ko )
137 2 : IMPL_CREATEINSTANCE_CTX( TextConversion_zh )
138 :
139 2 : IMPL_CREATEINSTANCE( Transliteration_u2l )
140 6 : IMPL_CREATEINSTANCE( Transliteration_l2u )
141 1 : IMPL_CREATEINSTANCE( Transliteration_sentencecase )
142 1 : IMPL_CREATEINSTANCE( Transliteration_titlecase )
143 1 : IMPL_CREATEINSTANCE( Transliteration_togglecase )
144 1 : IMPL_CREATEINSTANCE( hiraganaToKatakana )
145 0 : IMPL_CREATEINSTANCE( katakanaToHiragana )
146 0 : IMPL_CREATEINSTANCE( fullwidthToHalfwidth )
147 0 : IMPL_CREATEINSTANCE( halfwidthToFullwidth )
148 :
149 0 : IMPL_CREATEINSTANCE( smallToLarge_ja_JP)
150 0 : IMPL_CREATEINSTANCE( largeToSmall_ja_JP)
151 0 : IMPL_CREATEINSTANCE( ignoreTraditionalKanji_ja_JP)
152 0 : IMPL_CREATEINSTANCE( ignoreTraditionalKana_ja_JP)
153 0 : IMPL_CREATEINSTANCE( ignoreMinusSign_ja_JP)
154 0 : IMPL_CREATEINSTANCE( ignoreIterationMark_ja_JP)
155 0 : IMPL_CREATEINSTANCE( ignoreSeparator_ja_JP)
156 0 : IMPL_CREATEINSTANCE( ignoreZiZu_ja_JP)
157 0 : IMPL_CREATEINSTANCE( ignoreBaFa_ja_JP)
158 0 : IMPL_CREATEINSTANCE( ignoreTiJi_ja_JP)
159 0 : IMPL_CREATEINSTANCE( ignoreHyuByu_ja_JP)
160 0 : IMPL_CREATEINSTANCE( ignoreSeZe_ja_JP)
161 0 : IMPL_CREATEINSTANCE( ignoreIandEfollowedByYa_ja_JP)
162 0 : IMPL_CREATEINSTANCE( ignoreKiKuFollowedBySa_ja_JP)
163 0 : IMPL_CREATEINSTANCE( ignoreSize_ja_JP)
164 0 : IMPL_CREATEINSTANCE( ignoreProlongedSoundMark_ja_JP)
165 0 : IMPL_CREATEINSTANCE( ignoreMiddleDot_ja_JP)
166 0 : IMPL_CREATEINSTANCE( ignoreSpace_ja_JP)
167 25 : IMPL_CREATEINSTANCE( ignoreDiacritics_CTL)
168 25 : IMPL_CREATEINSTANCE( ignoreKashida_CTL)
169 :
170 0 : IMPL_CREATEINSTANCE( TextToChuyin_zh_TW )
171 0 : IMPL_CREATEINSTANCE( TextToPinyin_zh_CN )
172 :
173 0 : IMPL_CREATEINSTANCE( NumToCharLower_zh_CN )
174 0 : IMPL_CREATEINSTANCE( NumToCharUpper_zh_CN )
175 0 : IMPL_CREATEINSTANCE( NumToCharLower_zh_TW )
176 0 : IMPL_CREATEINSTANCE( NumToCharUpper_zh_TW )
177 0 : IMPL_CREATEINSTANCE( NumToCharHalfwidth )
178 0 : IMPL_CREATEINSTANCE( NumToCharFullwidth )
179 0 : IMPL_CREATEINSTANCE( NumToCharKanjiShort_ja_JP )
180 0 : IMPL_CREATEINSTANCE( NumToCharKanjiTraditional_ja_JP )
181 0 : IMPL_CREATEINSTANCE( NumToCharHangul_ko )
182 0 : IMPL_CREATEINSTANCE( NumToCharLower_ko )
183 0 : IMPL_CREATEINSTANCE( NumToCharUpper_ko )
184 0 : IMPL_CREATEINSTANCE( NumToCharIndic_ar )
185 0 : IMPL_CREATEINSTANCE( NumToCharEastIndic_ar )
186 0 : IMPL_CREATEINSTANCE( NumToCharIndic_hi )
187 0 : IMPL_CREATEINSTANCE( NumToChar_th )
188 :
189 0 : IMPL_CREATEINSTANCE( CharToNumLower_zh_CN )
190 0 : IMPL_CREATEINSTANCE( CharToNumUpper_zh_CN )
191 0 : IMPL_CREATEINSTANCE( CharToNumLower_zh_TW )
192 0 : IMPL_CREATEINSTANCE( CharToNumUpper_zh_TW )
193 0 : IMPL_CREATEINSTANCE( CharToNumFullwidth )
194 0 : IMPL_CREATEINSTANCE( CharToNumKanjiShort_ja_JP )
195 0 : IMPL_CREATEINSTANCE( CharToNumKanjiTraditional_ja_JP )
196 0 : IMPL_CREATEINSTANCE( CharToNumHangul_ko )
197 0 : IMPL_CREATEINSTANCE( CharToNumLower_ko )
198 0 : IMPL_CREATEINSTANCE( CharToNumUpper_ko )
199 0 : IMPL_CREATEINSTANCE( CharToNumIndic_ar )
200 0 : IMPL_CREATEINSTANCE( CharToNumEastIndic_ar )
201 0 : IMPL_CREATEINSTANCE( CharToNumIndic_hi )
202 0 : IMPL_CREATEINSTANCE( CharToNum_th )
203 :
204 0 : IMPL_CREATEINSTANCE( NumToTextLower_zh_CN )
205 0 : IMPL_CREATEINSTANCE( NumToTextUpper_zh_CN )
206 0 : IMPL_CREATEINSTANCE( NumToTextLower_zh_TW )
207 0 : IMPL_CREATEINSTANCE( NumToTextUpper_zh_TW )
208 0 : IMPL_CREATEINSTANCE( NumToTextFullwidth_zh_CN )
209 0 : IMPL_CREATEINSTANCE( NumToTextFullwidth_zh_TW )
210 0 : IMPL_CREATEINSTANCE( NumToTextFullwidth_ja_JP )
211 0 : IMPL_CREATEINSTANCE( NumToTextFullwidth_ko )
212 0 : IMPL_CREATEINSTANCE( NumToTextKanjiLongModern_ja_JP )
213 0 : IMPL_CREATEINSTANCE( NumToTextKanjiLongTraditional_ja_JP )
214 0 : IMPL_CREATEINSTANCE( NumToTextKanjiShortModern_ja_JP )
215 0 : IMPL_CREATEINSTANCE( NumToTextKanjiShortTraditional_ja_JP )
216 0 : IMPL_CREATEINSTANCE( NumToTextFormalHangul_ko )
217 0 : IMPL_CREATEINSTANCE( NumToTextFormalLower_ko )
218 0 : IMPL_CREATEINSTANCE( NumToTextFormalUpper_ko )
219 0 : IMPL_CREATEINSTANCE( NumToTextInformalHangul_ko )
220 0 : IMPL_CREATEINSTANCE( NumToTextInformalUpper_ko )
221 0 : IMPL_CREATEINSTANCE( NumToTextInformalLower_ko )
222 :
223 0 : IMPL_CREATEINSTANCE( TextToNumLower_zh_CN )
224 0 : IMPL_CREATEINSTANCE( TextToNumUpper_zh_CN )
225 0 : IMPL_CREATEINSTANCE( TextToNumLower_zh_TW )
226 0 : IMPL_CREATEINSTANCE( TextToNumUpper_zh_TW )
227 0 : IMPL_CREATEINSTANCE( TextToNumKanjiLongModern_ja_JP )
228 0 : IMPL_CREATEINSTANCE( TextToNumKanjiLongTraditional_ja_JP )
229 0 : IMPL_CREATEINSTANCE( TextToNumFormalHangul_ko )
230 0 : IMPL_CREATEINSTANCE( TextToNumFormalLower_ko )
231 0 : IMPL_CREATEINSTANCE( TextToNumFormalUpper_ko )
232 0 : IMPL_CREATEINSTANCE( TextToNumInformalHangul_ko )
233 0 : IMPL_CREATEINSTANCE( TextToNumInformalUpper_ko )
234 0 : IMPL_CREATEINSTANCE( TextToNumInformalLower_ko )
235 :
236 0 : IMPL_CREATEINSTANCE( NumToTextDate_zh )
237 0 : IMPL_CREATEINSTANCE( NumToTextAIUFullWidth_ja_JP )
238 0 : IMPL_CREATEINSTANCE( NumToTextAIUHalfWidth_ja_JP )
239 0 : IMPL_CREATEINSTANCE( NumToTextIROHAFullWidth_ja_JP )
240 0 : IMPL_CREATEINSTANCE( NumToTextIROHAHalfWidth_ja_JP )
241 0 : IMPL_CREATEINSTANCE( NumToTextCircledNumber )
242 0 : IMPL_CREATEINSTANCE( NumToTextHangulJamo_ko )
243 0 : IMPL_CREATEINSTANCE( NumToTextHangulSyllable_ko )
244 0 : IMPL_CREATEINSTANCE( NumToTextHangulCircledJamo_ko )
245 0 : IMPL_CREATEINSTANCE( NumToTextHangulCircledSyllable_ko )
246 0 : IMPL_CREATEINSTANCE( NumToTextTianGan_zh )
247 0 : IMPL_CREATEINSTANCE( NumToTextDiZi_zh )
248 :
249 0 : IMPL_CREATEINSTANCE( fullwidthKatakanaToHalfwidthKatakana )
250 0 : IMPL_CREATEINSTANCE( halfwidthKatakanaToFullwidthKatakana )
251 1 : IMPL_CREATEINSTANCE( fullwidthToHalfwidthLikeASC )
252 1 : IMPL_CREATEINSTANCE( halfwidthToFullwidthLikeJIS )
253 :
254 : static const struct InstancesArray {
255 : const sal_Char* pServiceNm;
256 : const sal_Char* pImplementationNm;
257 : FN_CreateInstance pFn;
258 : } aInstances[] = {
259 : { "com.sun.star.i18n.IndexEntrySupplier",
260 : "com.sun.star.i18n.IndexEntrySupplier",
261 : &IndexEntrySupplier_CreateInstance },
262 : { "com.sun.star.i18n.IndexEntrySupplier_asian",
263 : "com.sun.star.i18n.IndexEntrySupplier_asian",
264 : &IndexEntrySupplier_asian_CreateInstance },
265 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
266 : { "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric first)",
267 : "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric first)",
268 : &IndexEntrySupplier_ja_phonetic_alphanumeric_first_by_syllable_CreateInstance },
269 : { "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric last)",
270 : "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric last)",
271 : &IndexEntrySupplier_ja_phonetic_alphanumeric_last_by_syllable_CreateInstance },
272 : { "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric first) (grouped by syllable)",
273 : "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric first) (grouped by syllable)",
274 : &IndexEntrySupplier_ja_phonetic_alphanumeric_first_by_syllable_CreateInstance },
275 : { "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric first) (grouped by consonant)",
276 : "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric first) (grouped by consonant)",
277 : &IndexEntrySupplier_ja_phonetic_alphanumeric_first_by_consonant_CreateInstance },
278 : { "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric last) (grouped by syllable)",
279 : "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric last) (grouped by syllable)",
280 : &IndexEntrySupplier_ja_phonetic_alphanumeric_last_by_syllable_CreateInstance },
281 : { "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric last) (grouped by consonant)",
282 : "com.sun.star.i18n.IndexEntrySupplier_ja_phonetic (alphanumeric last) (grouped by consonant)",
283 : &IndexEntrySupplier_ja_phonetic_alphanumeric_last_by_consonant_CreateInstance },
284 : #endif
285 : { "com.sun.star.i18n.IndexEntrySupplier_Unicode",
286 : "com.sun.star.i18n.IndexEntrySupplier_Unicode",
287 : &IndexEntrySupplier_Unicode_CreateInstance },
288 : { "com.sun.star.i18n.LocaleCalendar",
289 : "com.sun.star.i18n.CalendarImpl",
290 : &CalendarImpl_CreateInstance },
291 : { "com.sun.star.i18n.LocaleCalendar2",
292 : "com.sun.star.i18n.CalendarImpl",
293 : &CalendarImpl_CreateInstance },
294 : { "com.sun.star.i18n.Calendar_gregorian",
295 : "com.sun.star.i18n.Calendar_gregorian",
296 : &Calendar_gregorian_CreateInstance },
297 : { "com.sun.star.i18n.Calendar_gengou",
298 : "com.sun.star.i18n.Calendar_gengou",
299 : &Calendar_gengou_CreateInstance },
300 : { "com.sun.star.i18n.Calendar_ROC",
301 : "com.sun.star.i18n.Calendar_ROC",
302 : &Calendar_ROC_CreateInstance },
303 : { "com.sun.star.i18n.Calendar_hanja_yoil",
304 : "com.sun.star.i18n.Calendar_hanja_yoil",
305 : &Calendar_hanja_CreateInstance },
306 : { "com.sun.star.i18n.Calendar_hanja",
307 : "com.sun.star.i18n.Calendar_hanja",
308 : &Calendar_hanja_CreateInstance },
309 : { "com.sun.star.i18n.Calendar_hijri",
310 : "com.sun.star.i18n.Calendar_hijri",
311 : &Calendar_hijri_CreateInstance },
312 : { "com.sun.star.i18n.Calendar_jewish",
313 : "com.sun.star.i18n.Calendar_jewish",
314 : &Calendar_jewish_CreateInstance },
315 : { "com.sun.star.i18n.Calendar_buddhist",
316 : "com.sun.star.i18n.Calendar_buddhist",
317 : &Calendar_buddhist_CreateInstance },
318 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
319 : { "com.sun.star.i18n.BreakIterator_ja",
320 : "com.sun.star.i18n.BreakIterator_ja",
321 : &BreakIterator_ja_CreateInstance },
322 : #endif
323 : #if WITH_LOCALE_ALL || WITH_LOCALE_zh
324 : { "com.sun.star.i18n.BreakIterator_zh",
325 : "com.sun.star.i18n.BreakIterator_zh",
326 : &BreakIterator_zh_CreateInstance },
327 : { "com.sun.star.i18n.BreakIterator_zh_TW",
328 : "com.sun.star.i18n.BreakIterator_zh_TW",
329 : &BreakIterator_zh_TW_CreateInstance },
330 : #endif
331 : #if WITH_LOCALE_ALL || WITH_LOCALE_ko
332 : { "com.sun.star.i18n.BreakIterator_ko",
333 : "com.sun.star.i18n.BreakIterator_ko",
334 : &BreakIterator_ko_CreateInstance },
335 : #endif
336 : #if WITH_LOCALE_ALL || WITH_LOCALE_th
337 : { "com.sun.star.i18n.BreakIterator_th",
338 : "com.sun.star.i18n.BreakIterator_th",
339 : &BreakIterator_th_CreateInstance },
340 : #endif
341 : { "com.sun.star.i18n.ChapterCollator",
342 : "com.sun.star.i18n.ChapterCollator",
343 : &ChapterCollator_CreateInstance },
344 : { "com.sun.star.i18n.Collator_Unicode",
345 : "com.sun.star.i18n.Collator_Unicode",
346 : &Collator_Unicode_CreateInstance },
347 : #if WITH_LOCALE_ALL || WITH_LOCALE_th
348 : { "com.sun.star.i18n.InputSequenceChecker_th",
349 : "com.sun.star.i18n.InputSequenceChecker_th",
350 : &InputSequenceChecker_th_CreateInstance },
351 : #endif
352 : #if WITH_LOCALE_ALL || WITH_LOCALE_hi
353 : { "com.sun.star.i18n.InputSequenceChecker_hi",
354 : "com.sun.star.i18n.InputSequenceChecker_hi",
355 : &InputSequenceChecker_hi_CreateInstance },
356 : #endif
357 : #if WITH_LOCALE_ALL || WITH_LOCALE_ko
358 : { "com.sun.star.i18n.TextConversion_ko",
359 : "com.sun.star.i18n.TextConversion_ko",
360 : &TextConversion_ko_CreateInstance },
361 : #endif
362 : #if WITH_LOCALE_ALL || WITH_LOCALE_zh
363 : { "com.sun.star.i18n.TextConversion_zh",
364 : "com.sun.star.i18n.TextConversion_zh",
365 : &TextConversion_zh_CreateInstance },
366 : #endif
367 : { TRLT_SERVICELNAME_L10N,
368 : TRLT_IMPLNAME_PREFIX "UPPERCASE_LOWERCASE",
369 : &Transliteration_u2l_CreateInstance },
370 : { TRLT_SERVICELNAME_L10N,
371 : TRLT_IMPLNAME_PREFIX "LOWERCASE_UPPERCASE",
372 : &Transliteration_l2u_CreateInstance },
373 : { TRLT_SERVICELNAME_L10N,
374 : TRLT_IMPLNAME_PREFIX "SENTENCE_CASE",
375 : &Transliteration_sentencecase_CreateInstance },
376 : { TRLT_SERVICELNAME_L10N,
377 : TRLT_IMPLNAME_PREFIX "TITLE_CASE",
378 : &Transliteration_titlecase_CreateInstance },
379 : { TRLT_SERVICELNAME_L10N,
380 : TRLT_IMPLNAME_PREFIX "TOGGLE_CASE",
381 : &Transliteration_togglecase_CreateInstance },
382 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
383 : { TRLT_SERVICELNAME_L10N,
384 : TRLT_IMPLNAME_PREFIX "HIRAGANA_KATAKANA",
385 : &hiraganaToKatakana_CreateInstance },
386 : { TRLT_SERVICELNAME_L10N,
387 : TRLT_IMPLNAME_PREFIX "KATAKANA_HIRAGANA",
388 : &katakanaToHiragana_CreateInstance },
389 : { TRLT_SERVICELNAME_L10N,
390 : TRLT_IMPLNAME_PREFIX "FULLWIDTH_HALFWIDTH",
391 : &fullwidthToHalfwidth_CreateInstance },
392 : { TRLT_SERVICELNAME_L10N,
393 : TRLT_IMPLNAME_PREFIX "HALFWIDTH_FULLWIDTH",
394 : &halfwidthToFullwidth_CreateInstance },
395 : #endif
396 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
397 : IMPL_TRANSLITERATION_ITEM (smallToLarge_ja_JP),
398 : IMPL_TRANSLITERATION_ITEM (largeToSmall_ja_JP),
399 : IMPL_TRANSLITERATION_ITEM (ignoreTraditionalKanji_ja_JP),
400 : IMPL_TRANSLITERATION_ITEM (ignoreTraditionalKana_ja_JP),
401 : IMPL_TRANSLITERATION_ITEM (ignoreMinusSign_ja_JP),
402 : IMPL_TRANSLITERATION_ITEM (ignoreIterationMark_ja_JP),
403 : IMPL_TRANSLITERATION_ITEM (ignoreSeparator_ja_JP),
404 : IMPL_TRANSLITERATION_ITEM (ignoreZiZu_ja_JP),
405 : IMPL_TRANSLITERATION_ITEM (ignoreBaFa_ja_JP),
406 : IMPL_TRANSLITERATION_ITEM (ignoreTiJi_ja_JP),
407 : IMPL_TRANSLITERATION_ITEM (ignoreHyuByu_ja_JP),
408 : IMPL_TRANSLITERATION_ITEM (ignoreSeZe_ja_JP),
409 : IMPL_TRANSLITERATION_ITEM (ignoreIandEfollowedByYa_ja_JP),
410 : IMPL_TRANSLITERATION_ITEM (ignoreKiKuFollowedBySa_ja_JP),
411 : IMPL_TRANSLITERATION_ITEM (ignoreSize_ja_JP),
412 : IMPL_TRANSLITERATION_ITEM (ignoreProlongedSoundMark_ja_JP),
413 : IMPL_TRANSLITERATION_ITEM (ignoreMiddleDot_ja_JP),
414 : IMPL_TRANSLITERATION_ITEM (ignoreSpace_ja_JP),
415 : #endif
416 : #if WITH_LOCALE_ALL || WITH_LOCALE_zh
417 : IMPL_TRANSLITERATION_ITEM (TextToPinyin_zh_CN),
418 : IMPL_TRANSLITERATION_ITEM (TextToChuyin_zh_TW),
419 : #endif
420 : IMPL_TRANSLITERATION_ITEM( ignoreDiacritics_CTL),
421 : IMPL_TRANSLITERATION_ITEM (ignoreKashida_CTL),
422 :
423 : #if WITH_LOCALE_ALL || WITH_LOCALE_zh
424 : IMPL_TRANSLITERATION_ITEM (NumToCharUpper_zh_CN),
425 : IMPL_TRANSLITERATION_ITEM (NumToCharLower_zh_CN),
426 : IMPL_TRANSLITERATION_ITEM (NumToCharUpper_zh_TW),
427 : IMPL_TRANSLITERATION_ITEM (NumToCharLower_zh_TW),
428 : #endif
429 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
430 : IMPL_TRANSLITERATION_ITEM (NumToCharHalfwidth),
431 : IMPL_TRANSLITERATION_ITEM (NumToCharFullwidth),
432 : IMPL_TRANSLITERATION_ITEM (NumToCharKanjiShort_ja_JP),
433 : IMPL_TRANSLITERATION_ITEM (NumToCharKanjiTraditional_ja_JP),
434 : #endif
435 : #if WITH_LOCALE_ALL || WITH_LOCALE_ko
436 : IMPL_TRANSLITERATION_ITEM (NumToCharLower_ko),
437 : IMPL_TRANSLITERATION_ITEM (NumToCharUpper_ko),
438 : IMPL_TRANSLITERATION_ITEM (NumToCharHangul_ko),
439 : #endif
440 : IMPL_TRANSLITERATION_ITEM (NumToCharIndic_ar),
441 : IMPL_TRANSLITERATION_ITEM (NumToCharEastIndic_ar),
442 : #if WITH_LOCALE_ALL || WITH_LOCALE_hi
443 : IMPL_TRANSLITERATION_ITEM (NumToCharIndic_hi),
444 : #endif
445 : #if WITH_LOCALE_ALL || WITH_LOCALE_th
446 : IMPL_TRANSLITERATION_ITEM (NumToChar_th),
447 : #endif
448 :
449 : #if WITH_LOCALE_ALL || WITH_LOCALE_zh
450 : IMPL_TRANSLITERATION_ITEM (CharToNumUpper_zh_CN),
451 : IMPL_TRANSLITERATION_ITEM (CharToNumLower_zh_CN),
452 : IMPL_TRANSLITERATION_ITEM (CharToNumUpper_zh_TW),
453 : IMPL_TRANSLITERATION_ITEM (CharToNumLower_zh_TW),
454 : #endif
455 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
456 : IMPL_TRANSLITERATION_ITEM (CharToNumFullwidth),
457 : IMPL_TRANSLITERATION_ITEM (CharToNumKanjiShort_ja_JP),
458 : IMPL_TRANSLITERATION_ITEM (CharToNumKanjiTraditional_ja_JP),
459 : #endif
460 : #if WITH_LOCALE_ALL || WITH_LOCALE_ko
461 : IMPL_TRANSLITERATION_ITEM (CharToNumLower_ko),
462 : IMPL_TRANSLITERATION_ITEM (CharToNumUpper_ko),
463 : IMPL_TRANSLITERATION_ITEM (CharToNumHangul_ko),
464 : #endif
465 : IMPL_TRANSLITERATION_ITEM (CharToNumIndic_ar),
466 : IMPL_TRANSLITERATION_ITEM (CharToNumEastIndic_ar),
467 : #if WITH_LOCALE_ALL || WITH_LOCALE_hi
468 : IMPL_TRANSLITERATION_ITEM (CharToNumIndic_hi),
469 : #endif
470 : #if WITH_LOCALE_ALL || WITH_LOCALE_th
471 : IMPL_TRANSLITERATION_ITEM (CharToNum_th),
472 : #endif
473 :
474 : #if WITH_LOCALE_ALL || WITH_LOCALE_zh
475 : IMPL_TRANSLITERATION_ITEM (NumToTextUpper_zh_CN),
476 : IMPL_TRANSLITERATION_ITEM (NumToTextLower_zh_CN),
477 : IMPL_TRANSLITERATION_ITEM (NumToTextUpper_zh_TW),
478 : IMPL_TRANSLITERATION_ITEM (NumToTextLower_zh_TW),
479 : IMPL_TRANSLITERATION_ITEM (NumToTextFullwidth_zh_CN),
480 : IMPL_TRANSLITERATION_ITEM (NumToTextFullwidth_zh_TW),
481 : #endif
482 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
483 : IMPL_TRANSLITERATION_ITEM (NumToTextFullwidth_ja_JP),
484 : #endif
485 : #if WITH_LOCALE_ALL || WITH_LOCALE_ko
486 : IMPL_TRANSLITERATION_ITEM (NumToTextFullwidth_ko),
487 : #endif
488 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
489 : IMPL_TRANSLITERATION_ITEM (NumToTextKanjiLongModern_ja_JP),
490 : IMPL_TRANSLITERATION_ITEM (NumToTextKanjiLongTraditional_ja_JP),
491 : IMPL_TRANSLITERATION_ITEM (NumToTextKanjiShortModern_ja_JP),
492 : IMPL_TRANSLITERATION_ITEM (NumToTextKanjiShortTraditional_ja_JP),
493 : #endif
494 : #if WITH_LOCALE_ALL || WITH_LOCALE_ko
495 : IMPL_TRANSLITERATION_ITEM (NumToTextInformalHangul_ko),
496 : IMPL_TRANSLITERATION_ITEM (NumToTextInformalLower_ko),
497 : IMPL_TRANSLITERATION_ITEM (NumToTextInformalUpper_ko),
498 : IMPL_TRANSLITERATION_ITEM (NumToTextFormalHangul_ko),
499 : IMPL_TRANSLITERATION_ITEM (NumToTextFormalLower_ko),
500 : IMPL_TRANSLITERATION_ITEM (NumToTextFormalUpper_ko),
501 : #endif
502 :
503 : #if WITH_LOCALE_ALL || WITH_LOCALE_zh
504 : IMPL_TRANSLITERATION_ITEM (TextToNumUpper_zh_CN),
505 : IMPL_TRANSLITERATION_ITEM (TextToNumLower_zh_CN),
506 : IMPL_TRANSLITERATION_ITEM (TextToNumUpper_zh_TW),
507 : IMPL_TRANSLITERATION_ITEM (TextToNumLower_zh_TW),
508 : #endif
509 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
510 : IMPL_TRANSLITERATION_ITEM (TextToNumKanjiLongModern_ja_JP),
511 : IMPL_TRANSLITERATION_ITEM (TextToNumKanjiLongTraditional_ja_JP),
512 : #endif
513 : #if WITH_LOCALE_ALL || WITH_LOCALE_ko
514 : IMPL_TRANSLITERATION_ITEM (TextToNumInformalHangul_ko),
515 : IMPL_TRANSLITERATION_ITEM (TextToNumInformalLower_ko),
516 : IMPL_TRANSLITERATION_ITEM (TextToNumInformalUpper_ko),
517 : IMPL_TRANSLITERATION_ITEM (TextToNumFormalHangul_ko),
518 : IMPL_TRANSLITERATION_ITEM (TextToNumFormalLower_ko),
519 : IMPL_TRANSLITERATION_ITEM (TextToNumFormalUpper_ko),
520 : #endif
521 :
522 : #if WITH_LOCALE_ALL || WITH_LOCALE_zh
523 : IMPL_TRANSLITERATION_ITEM (NumToTextDate_zh),
524 : #endif
525 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
526 : IMPL_TRANSLITERATION_ITEM (NumToTextAIUFullWidth_ja_JP),
527 : IMPL_TRANSLITERATION_ITEM (NumToTextAIUHalfWidth_ja_JP),
528 : IMPL_TRANSLITERATION_ITEM (NumToTextIROHAFullWidth_ja_JP),
529 : IMPL_TRANSLITERATION_ITEM (NumToTextIROHAHalfWidth_ja_JP),
530 : #endif
531 : IMPL_TRANSLITERATION_ITEM (NumToTextCircledNumber),
532 : #if WITH_LOCALE_ALL || WITH_LOCALE_ko
533 : IMPL_TRANSLITERATION_ITEM (NumToTextHangulJamo_ko),
534 : IMPL_TRANSLITERATION_ITEM (NumToTextHangulSyllable_ko),
535 : IMPL_TRANSLITERATION_ITEM (NumToTextHangulCircledJamo_ko),
536 : IMPL_TRANSLITERATION_ITEM (NumToTextHangulCircledSyllable_ko),
537 : #endif
538 : #if WITH_LOCALE_ALL || WITH_LOCALE_zh
539 : IMPL_TRANSLITERATION_ITEM (NumToTextTianGan_zh),
540 : IMPL_TRANSLITERATION_ITEM (NumToTextDiZi_zh),
541 : #endif
542 :
543 : #if WITH_LOCALE_ALL || WITH_LOCALE_ja
544 : { TRLT_SERVICELNAME_L10N,
545 : TRLT_IMPLNAME_PREFIX "FULLWIDTHKATAKANA_HALFWIDTHKATAKANA",
546 : &fullwidthKatakanaToHalfwidthKatakana_CreateInstance },
547 : { TRLT_SERVICELNAME_L10N,
548 : TRLT_IMPLNAME_PREFIX "HALFWIDTHKATAKANA_FULLWIDTHKATAKANA",
549 : &halfwidthKatakanaToFullwidthKatakana_CreateInstance },
550 : { TRLT_SERVICELNAME_L10N,
551 : TRLT_IMPLNAME_PREFIX "FULLWIDTH_HALFWIDTH_LIKE_ASC",
552 : &fullwidthToHalfwidthLikeASC_CreateInstance },
553 : { TRLT_SERVICELNAME_L10N,
554 : TRLT_IMPLNAME_PREFIX "HALFWIDTH_FULLWIDTH_LIKE_JIS",
555 : &halfwidthToFullwidthLikeJIS_CreateInstance },
556 : #endif
557 : // add here new services !!
558 : { 0, 0, 0 }
559 : };
560 :
561 :
562 : extern "C"
563 : {
564 :
565 168 : SAL_DLLPUBLIC_EXPORT void* SAL_CALL i18npool_component_getFactory( const sal_Char* sImplementationName, void* _pServiceManager, SAL_UNUSED_PARAMETER void* /*_pRegistryKey*/ )
566 : {
567 168 : void* pRet = NULL;
568 :
569 : lang::XMultiServiceFactory* pServiceManager =
570 168 : static_cast< lang::XMultiServiceFactory* >( _pServiceManager );
571 168 : uno::Reference< lang::XSingleServiceFactory > xFactory;
572 :
573 3462 : for( const InstancesArray* pArr = aInstances; pArr->pServiceNm; ++pArr )
574 : {
575 3462 : if( 0 == rtl_str_compare( sImplementationName, pArr->pImplementationNm ) )
576 : {
577 168 : uno::Sequence< OUString > aServiceNames(1);
578 336 : aServiceNames.getArray()[0] =
579 168 : OUString::createFromAscii( pArr->pServiceNm );
580 336 : xFactory = ::cppu::createSingleFactory(
581 : pServiceManager,
582 : OUString::createFromAscii( pArr->pImplementationNm ),
583 168 : *pArr->pFn, aServiceNames );
584 168 : break;
585 : }
586 : }
587 :
588 168 : if ( xFactory.is() )
589 : {
590 168 : xFactory->acquire();
591 168 : pRet = xFactory.get();
592 : }
593 :
594 168 : return pRet;
595 : }
596 :
597 : } // "C"
598 :
599 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|