Fix for UBSan build
[platform/upstream/doxygen.git] / src / language.cpp
1 /******************************************************************************
2  *
3  * 
4  *
5  * Copyright (C) 1997-2012 by Dimitri van Heesch.
6  *
7  * Permission to use, copy, modify, and distribute this software and its
8  * documentation under the terms of the GNU General Public License is hereby 
9  * granted. No representations are made about the suitability of this software 
10  * for any purpose. It is provided "as is" without express or implied warranty.
11  * See the GNU General Public License for more details.
12  *
13  * Documents produced by Doxygen are derivative works derived from the
14  * input used in their production; they are not affected by this license.
15  *
16  */
17
18 #include "message.h"
19 #include "language.h"
20 #include "lang_cfg.h"
21 #include "translator.h"
22 #include "translatordecoder.h"
23 #include "translator_en.h"
24 #if !defined(ENGLISH_ONLY)
25 #include "translator_adapter.h"
26 #ifdef LANG_NL
27 #include "translator_nl.h"
28 #endif
29 #ifdef LANG_AM
30 #include "translator_am.h"
31 #endif
32 #ifdef LANG_SV
33 #include "translator_sv.h"
34 #endif
35 #ifdef LANG_CZ
36 #include "translator_cz.h"
37 #endif
38 #ifdef LANG_FR
39 #include "translator_fr.h"
40 #endif
41 #ifdef LANG_ID
42 #include "translator_id.h"
43 #endif
44 #ifdef LANG_IT
45 #include "translator_it.h"
46 #endif
47 #ifdef LANG_DE
48 #include "translator_de.h"
49 #endif
50 #ifdef LANG_JP
51 #include "translator_jp.h"
52 #endif
53 #ifdef LANG_JE
54 #include "translator_je.h"
55 #endif
56 #ifdef LANG_ES
57 #include "translator_es.h"
58 #endif
59 #ifdef LANG_EO
60 #include "translator_eo.h"
61 #endif
62 #ifdef LANG_FI
63 #include "translator_fi.h"
64 #endif
65 #ifdef LANG_RU
66 #include "translator_ru.h"
67 #endif
68 #ifdef LANG_HR
69 #include "translator_hr.h"
70 #endif
71 #ifdef LANG_PL
72 #include "translator_pl.h"
73 #endif
74 #ifdef LANG_PT
75 #include "translator_pt.h"
76 #endif
77 #ifdef LANG_HU
78 #include "translator_hu.h"
79 #endif
80 #ifdef LANG_KE
81 #include "translator_ke.h"
82 #endif
83 #ifdef LANG_KR
84 #include "translator_kr.h"
85 #endif
86 #ifdef LANG_RO
87 #include "translator_ro.h"
88 #endif
89 #ifdef LANG_SI
90 #include "translator_si.h"
91 #endif
92 #ifdef LANG_CN
93 #include "translator_cn.h"
94 #endif
95 #ifdef LANG_TW
96 #include "translator_tw.h"
97 #endif
98 #ifdef LANG_NO
99 #include "translator_no.h"
100 #endif
101 #ifdef LANG_BR
102 #include "translator_br.h"
103 #endif
104 #ifdef LANG_DK
105 #include "translator_dk.h"
106 #endif
107 #ifdef LANG_SK
108 #include "translator_sk.h"
109 #endif
110 #ifdef LANG_UA
111 #include "translator_ua.h"
112 #endif
113 #ifdef LANG_GR
114 #include "translator_gr.h"
115 #endif
116 #ifdef LANG_SR
117 #include "translator_sr.h"
118 #endif
119 #ifdef LANG_CA
120 #include "translator_ca.h"
121 #endif
122 //#ifdef LANG_JS
123 //#include "translator_js.h"
124 //#endif
125 #ifdef LANG_LT
126 #include "translator_lt.h"
127 #endif
128 #ifdef LANG_ZA
129 #include "translator_za.h"
130 #endif
131 #ifdef LANG_AR
132 #include "translator_ar.h"
133 #endif
134 #ifdef LANG_FA
135 #include "translator_fa.h"
136 #endif
137 #ifdef LANG_MK
138 #include "translator_mk.h"
139 #endif
140 #ifdef LANG_SC
141 #include "translator_sc.h"
142 #endif
143 #ifdef LANG_VI
144 #include "translator_vi.h"
145 #endif
146 #ifdef LANG_TR
147 #include "translator_tr.h"
148 #endif
149 #endif // !ENGLISH_ONLY
150
151 #define L_EQUAL(a) !stricmp(langName,a)
152
153 Translator *theTranslator=0;
154
155 static const char obsoleteMsg[] =
156         "---------\n"
157         "ERROR: The selected language is no longer supported!\n"
158         "If you want doxygen to produce output in this language \n"
159         "you are kindly requested to help bringing the documentation \n"
160         "up to date. Please read the development section of the manual \n"
161         "for more information or contact Petr Prikryl (Prikryl@skil.cz).\n"
162         "Thanks in advance!\n"
163         "---------\n";
164
165 bool setTranslator(const char *langName)
166 {
167   if (L_EQUAL("english"))
168   {
169     theTranslator=new TranslatorEnglish;
170   }
171 #if !defined(ENGLISH_ONLY)
172 #ifdef LANG_NL
173   else if (L_EQUAL("dutch"))
174   {
175     theTranslator=new TranslatorDutch;
176   }
177 #endif
178 #ifdef LANG_AM
179   else if (L_EQUAL("armenian"))
180   {
181     theTranslator=new TranslatorArmenian;
182   }
183 #endif
184 #ifdef LANG_SV
185   else if (L_EQUAL("swedish"))
186   {
187     theTranslator=new TranslatorDecoder(new TranslatorSwedish);
188   }
189 #endif
190 #ifdef LANG_CZ
191   else if (L_EQUAL("czech"))
192   {
193     theTranslator=new TranslatorCzech;
194   }
195 #endif
196 #ifdef LANG_FR  
197   else if (L_EQUAL("french"))
198   {
199     theTranslator=new TranslatorDecoder(new TranslatorFrench);
200   }
201 #endif
202 #ifdef LANG_ID  
203   else if (L_EQUAL("indonesian"))
204   {
205     theTranslator=new TranslatorDecoder(new TranslatorIndonesian);
206   }
207 #endif
208 #ifdef LANG_IT  
209   else if (L_EQUAL("italian"))
210   {
211     theTranslator=new TranslatorItalian;
212   }
213 #endif
214 #ifdef LANG_DE
215   else if (L_EQUAL("german"))
216   {
217     theTranslator=new TranslatorGerman;
218   }
219 #endif
220 #ifdef LANG_JP
221   else if (L_EQUAL("japanese"))
222   {
223     theTranslator=new TranslatorDecoder(new TranslatorJapanese);
224   }
225 #endif
226 #ifdef LANG_JE
227   else if (L_EQUAL("japanese-en"))
228   {
229     theTranslator=new TranslatorDecoder(new TranslatorJapaneseEn);
230   }
231 #endif
232 #ifdef LANG_ES
233   else if (L_EQUAL("spanish"))
234   {
235     theTranslator=new TranslatorSpanish;
236   }
237 #endif
238 #ifdef LANG_FI
239   else if (L_EQUAL("finnish"))
240   {
241     theTranslator=new TranslatorFinnish;
242   }
243 #endif
244 #ifdef LANG_RU
245   else if (L_EQUAL("russian"))
246   {
247     theTranslator=new TranslatorDecoder(new TranslatorRussian);
248   }
249 #endif
250 #ifdef LANG_HR
251   else if (L_EQUAL("croatian"))
252   {
253     theTranslator=new TranslatorCroatian;
254   }
255 #endif
256 #ifdef LANG_PL
257   else if (L_EQUAL("polish"))
258   {
259     theTranslator=new TranslatorPolish;
260   }
261 #endif
262 #ifdef LANG_PT
263   else if (L_EQUAL("portuguese"))
264   {
265     theTranslator=new TranslatorPortuguese;
266   }
267 #endif
268 #ifdef LANG_HU
269   else if (L_EQUAL("hungarian"))
270   {
271     theTranslator=new TranslatorDecoder(new TranslatorHungarian);
272   }
273 #endif
274 #ifdef LANG_KR
275   else if (L_EQUAL("korean"))
276   {
277     theTranslator=new TranslatorDecoder(new TranslatorKorean);
278   }
279 #endif
280 #ifdef LANG_KE
281   else if (L_EQUAL("korean-en"))
282   {
283     theTranslator=new TranslatorDecoder(new TranslatorKoreanEn);
284   }
285 #endif
286 #ifdef LANG_RO
287   else if (L_EQUAL("romanian"))
288   {
289     theTranslator=new TranslatorDecoder(new TranslatorRomanian);
290   }
291 #endif
292 #ifdef LANG_SI
293   else if (L_EQUAL("slovene"))
294   {
295     theTranslator=new TranslatorDecoder(new TranslatorSlovene);
296   }
297 #endif
298 #ifdef LANG_CN
299   else if (L_EQUAL("chinese"))
300   {
301     theTranslator=new TranslatorChinese;
302   }
303 #endif
304 #ifdef LANG_TW
305   else if (L_EQUAL("chinese-traditional"))
306   {
307     theTranslator=new TranslatorDecoder(new TranslatorChinesetraditional);
308   }
309 #endif
310 #ifdef LANG_NO
311   else if (L_EQUAL("norwegian"))
312   {
313     theTranslator=new TranslatorDecoder(new TranslatorNorwegian);
314   }
315 #endif
316 #ifdef LANG_BR
317   else if (L_EQUAL("brazilian"))
318   {
319     theTranslator=new TranslatorBrazilian;
320   }
321 #endif
322 #ifdef LANG_DK
323   else if (L_EQUAL("danish"))
324   {
325     theTranslator=new TranslatorDecoder(new TranslatorDanish);
326   }
327 #endif
328 #ifdef LANG_SK
329   else if (L_EQUAL("slovak"))
330   {
331     theTranslator=new TranslatorSlovak;
332   }
333 #endif
334 #ifdef LANG_UA
335   else if (L_EQUAL("ukrainian"))
336   {
337     theTranslator=new TranslatorDecoder(new TranslatorUkrainian);
338   }
339 #endif
340 #ifdef LANG_GR
341   else if (L_EQUAL("greek"))
342   {
343     theTranslator=new TranslatorGreek;
344   }
345 #endif
346 #ifdef LANG_SR
347   else if (L_EQUAL("serbian"))
348   {
349     theTranslator=new TranslatorDecoder(new TranslatorSerbian);
350   }
351 #endif
352 #ifdef LANG_SC
353   else if (L_EQUAL("serbian-cyrilic"))
354   {
355     theTranslator=new TranslatorSerbian;
356   }
357 #endif
358 #ifdef LANG_CA
359   else if (L_EQUAL("catalan"))
360   {
361     theTranslator=new TranslatorCatalan;
362   }
363 #endif
364 #ifdef LANG_LT
365   else if (L_EQUAL("lithuanian"))
366   {
367     theTranslator=new TranslatorDecoder(new TranslatorLithuanian);
368   }
369 #endif
370 #ifdef LANG_ZA
371   else if (L_EQUAL("afrikaans"))
372   {
373     theTranslator=new TranslatorDecoder(new TranslatorAfrikaans);
374   }
375 #endif
376 #ifdef LANG_AR
377   else if (L_EQUAL("arabic"))
378   {
379     theTranslator=new TranslatorDecoder(new TranslatorArabic);
380   }
381 #endif
382 #ifdef LANG_FA
383   else if (L_EQUAL("persian") || L_EQUAL("farsi"))
384   {
385     theTranslator=new TranslatorPersian;
386   }
387 #endif
388 #ifdef LANG_MK
389   else if (L_EQUAL("macedonian"))
390   {
391     theTranslator=new TranslatorMacedonian;
392   }
393 #endif
394 #ifdef LANG_VI
395   else if (L_EQUAL("vietnamese"))
396   {
397     theTranslator=new TranslatorVietnamese;
398   }
399 #endif
400 #ifdef LANG_TR
401   else if (L_EQUAL("turkish"))
402   {
403     theTranslator=new TranslatorTurkish;
404   }
405 #endif
406 #ifdef LANG_EO
407   else if (L_EQUAL("esperanto"))
408   {
409     theTranslator=new TranslatorEsperanto;
410   }
411 #endif
412 #endif // ENGLISH_ONLY
413   else // use the default language (i.e. english)
414   {
415     theTranslator=new TranslatorEnglish;
416     return FALSE;
417   }
418   
419   QCString msg = theTranslator->updateNeededMessage();
420   if (!msg.isEmpty()) err(msg);
421   return TRUE;
422 }