PageRenderTime 69ms CodeModel.GetById 37ms RepoModel.GetById 0ms app.codeStats 0ms

/PyQt-x11-gpl-snapshot-4.8.4-69c456457274/pylupdate/translator.h

https://github.com/ipatrol/pyqt4
C Header | 402 lines | 323 code | 37 blank | 42 comment | 4 complexity | c5237eacaf74a4333bc50189b0e1518a MD5 | raw file
  1. /**********************************************************************
  2. ** Copyright (C) 2002-2007 Detlev Offenbach <detlev@die-offenbachs.de>
  3. **
  4. ** This is a modified version of lupdate. The original is part of Qt-Linguist.
  5. ** The copyright of the original file can be found below.
  6. **
  7. ** This version is modified to handle python sources.
  8. **
  9. ** The file is provided AS IS with NO WARRANTY OF ANY KIND,
  10. ** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
  11. ** A PARTICULAR PURPOSE.
  12. ****************************************************************************/
  13. /****************************************************************************
  14. **
  15. ** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.
  16. **
  17. ** This file is part of the Qt Linguist of the Qt Toolkit.
  18. **
  19. ** Licensees holding a valid Qt License Agreement may use this file in
  20. ** accordance with the rights, responsibilities and obligations
  21. ** contained therein. Please consult your licensing agreement or
  22. ** contact sales@trolltech.com if any conditions of this licensing
  23. ** agreement are not clear to you.
  24. **
  25. ** Further information about Qt licensing is available at:
  26. ** http://www.trolltech.com/products/qt/licensing.html or by
  27. ** contacting info@trolltech.com.
  28. **
  29. ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  30. ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  31. **
  32. ****************************************************************************/
  33. #ifndef TRANSLATOR_H
  34. #define TRANSLATOR_H
  35. #include "QtCore/qobject.h"
  36. #include "QtCore/qbytearray.h"
  37. #include "QtCore/qstringlist.h"
  38. #include "QtCore/qlocale.h"
  39. #include <qtranslator.h>
  40. class TranslatorPrivate;
  41. #if !defined(QT_BEGIN_NAMESPACE)
  42. #define QT_BEGIN_NAMESPACE
  43. #define QT_END_NAMESPACE
  44. #endif
  45. QT_BEGIN_NAMESPACE
  46. template <typename T> class QList;
  47. QT_END_NAMESPACE
  48. class TranslatorMessage
  49. {
  50. public:
  51. TranslatorMessage();
  52. TranslatorMessage(const char * context, const char * sourceText,
  53. const char * comment,
  54. const QString &fileName,
  55. int lineNumber,
  56. const QStringList& translations = QStringList());
  57. TranslatorMessage(const TranslatorMessage & m);
  58. TranslatorMessage & operator=(const TranslatorMessage & m);
  59. uint hash() const { return h; }
  60. const char *context() const { return cx.isNull() ? 0 : cx.constData(); }
  61. const char *sourceText() const { return st.isNull() ? 0 : st.constData(); }
  62. const char *comment() const { return cm.isNull() ? 0 : cm.constData(); }
  63. inline void setTranslations(const QStringList &translations);
  64. QStringList translations() const { return m_translations; }
  65. void setTranslation(const QString &translation) { m_translations = QStringList(translation); }
  66. QString translation() const { return m_translations.value(0); }
  67. bool isTranslated() const { return m_translations.count() > 1 || !m_translations.value(0).isEmpty(); }
  68. enum Prefix { NoPrefix, Hash, HashContext, HashContextSourceText,
  69. HashContextSourceTextComment };
  70. void write(QDataStream & s, bool strip = false,
  71. Prefix prefix = HashContextSourceTextComment) const;
  72. Prefix commonPrefix(const TranslatorMessage&) const;
  73. bool operator==(const TranslatorMessage& m) const;
  74. bool operator!=(const TranslatorMessage& m) const
  75. { return !operator==(m); }
  76. bool operator<(const TranslatorMessage& m) const;
  77. bool operator<=(const TranslatorMessage& m) const
  78. { return !m.operator<(*this); }
  79. bool operator>(const TranslatorMessage& m) const
  80. { return m.operator<(*this); }
  81. bool operator>=(const TranslatorMessage& m) const
  82. { return !operator<(m); }
  83. QString fileName(void) const { return m_fileName; }
  84. void setFileName(const QString &fileName) { m_fileName = fileName; }
  85. int lineNumber(void) const { return m_lineNumber; }
  86. void setLineNumber(int lineNumber) { m_lineNumber = lineNumber; }
  87. bool isNull() const { return st.isNull() && m_lineNumber == -1 && m_translations.isEmpty(); }
  88. private:
  89. uint h;
  90. QByteArray cx;
  91. QByteArray st;
  92. QByteArray cm;
  93. QStringList m_translations;
  94. QString m_fileName;
  95. int m_lineNumber;
  96. enum Tag { Tag_End = 1, Tag_SourceText16, Tag_Translation, Tag_Context16,
  97. Tag_Hash, Tag_SourceText, Tag_Context, Tag_Comment,
  98. Tag_Obsolete1 };
  99. };
  100. Q_DECLARE_TYPEINFO(TranslatorMessage, Q_MOVABLE_TYPE);
  101. inline void TranslatorMessage::setTranslations(const QStringList &translations)
  102. { m_translations = translations; }
  103. class Translator : public QTranslator
  104. {
  105. Q_OBJECT
  106. public:
  107. explicit Translator(QObject *parent = 0);
  108. ~Translator();
  109. virtual TranslatorMessage findMessage(const char *context, const char *sourceText,
  110. const char *comment = 0,
  111. const QString &fileName = 0, int lineNumber = -1) const;
  112. virtual QString translate(const char *context, const char *sourceText,
  113. const char *comment = 0) const
  114. { return findMessage(context, sourceText, comment).translation(); }
  115. bool load(const QString & filename,
  116. const QString & directory = QString(),
  117. const QString & search_delimiters = QString(),
  118. const QString & suffix = QString());
  119. bool load(const uchar *data, int len);
  120. void clear();
  121. enum SaveMode { Everything, Stripped };
  122. bool save(const QString & filename, SaveMode mode = Everything);
  123. void insert(const TranslatorMessage&);
  124. inline void insert(const char *context, const char *sourceText, const QString &fileName, int lineNo, const QStringList &translations) {
  125. insert(TranslatorMessage(context, sourceText, "", fileName, lineNo, translations));
  126. }
  127. void remove(const TranslatorMessage&);
  128. inline void remove(const char *context, const char *sourceText) {
  129. remove(TranslatorMessage(context, sourceText, "", QLatin1String(""), -1));
  130. }
  131. bool contains(const char *context, const char *sourceText, const char * comment = 0) const;
  132. bool contains(const char *context, const char *comment, const QString &fileName, int lineNumber) const;
  133. void squeeze(SaveMode = Everything);
  134. void unsqueeze();
  135. QList<TranslatorMessage> messages() const;
  136. bool isEmpty() const;
  137. private:
  138. Q_DISABLE_COPY(Translator)
  139. TranslatorPrivate *d;
  140. };
  141. static const char * const japaneseStyleForms[] = { "Unique Form", 0 };
  142. static const char * const englishStyleForms[] = { "Singular", "Plural", 0 };
  143. static const char * const frenchStyleForms[] = { "Singular", "Plural", 0 };
  144. static const char * const latvianForms[] = { "Singular", "Plural", "Nullar", 0 };
  145. static const char * const irishStyleForms[] = { "Singular", "Dual", "Plural", 0 };
  146. static const char * const czechForms[] = { "Singular", "Dual", "Plural", 0 };
  147. static const char * const slovakForms[] = { "Singular", "Dual", "Plural", 0 };
  148. static const char * const macedonianForms[] = { "Singular", "Dual", "Plural", 0 };
  149. static const char * const lithuanianForms[] = { "Singular", "Dual", "Plural", 0 };
  150. static const char * const russianStyleForms[] = { "Singular", "Dual", "Plural", 0 };
  151. static const char * const polishForms[] = { "Singular", "Paucal", "Plural", 0 };
  152. static const char * const romanianForms[] =
  153. { "Singular", "Plural Form for 2 to 19", "Plural", 0 };
  154. static const char * const slovenianForms[] = { "Singular", "Dual", "Trial", "Plural", 0 };
  155. static const char * const malteseForms[] =
  156. { "Singular", "Plural Form for 2 to 10", "Plural Form for 11 to 19", "Plural", 0 };
  157. static const char * const welshForms[] =
  158. { "Nullar", "Singular", "Dual", "Sexal", "Plural", 0 };
  159. static const char * const arabicForms[] =
  160. { "Nullar", "Singular", "Dual", "Minority Plural", "Plural", "Plural Form for 100, 200, ...", 0 };
  161. #define EOL QLocale::C
  162. static const QLocale::Language japaneseStyleLanguages[] = {
  163. QLocale::Afan,
  164. QLocale::Armenian,
  165. QLocale::Bhutani,
  166. QLocale::Bislama,
  167. QLocale::Burmese,
  168. QLocale::Chinese,
  169. QLocale::FijiLanguage,
  170. QLocale::Guarani,
  171. QLocale::Hungarian,
  172. QLocale::Indonesian,
  173. QLocale::Japanese,
  174. QLocale::Javanese,
  175. QLocale::Korean,
  176. QLocale::Malay,
  177. QLocale::NauruLanguage,
  178. QLocale::Persian,
  179. QLocale::Sundanese,
  180. QLocale::Thai,
  181. QLocale::Tibetan,
  182. QLocale::Vietnamese,
  183. QLocale::Yoruba,
  184. QLocale::Zhuang,
  185. EOL
  186. };
  187. static const QLocale::Language englishStyleLanguages[] = {
  188. QLocale::Abkhazian,
  189. QLocale::Afar,
  190. QLocale::Afrikaans,
  191. QLocale::Albanian,
  192. QLocale::Amharic,
  193. QLocale::Assamese,
  194. QLocale::Aymara,
  195. QLocale::Azerbaijani,
  196. QLocale::Bashkir,
  197. QLocale::Basque,
  198. QLocale::Bengali,
  199. QLocale::Bihari,
  200. // Missing: Bokmal,
  201. QLocale::Bulgarian,
  202. QLocale::Cambodian,
  203. QLocale::Catalan,
  204. QLocale::Cornish,
  205. QLocale::Corsican,
  206. QLocale::Danish,
  207. QLocale::Dutch,
  208. QLocale::English,
  209. QLocale::Esperanto,
  210. QLocale::Estonian,
  211. QLocale::Faroese,
  212. QLocale::Finnish,
  213. // Missing: Friulian,
  214. QLocale::Frisian,
  215. QLocale::Galician,
  216. QLocale::Georgian,
  217. QLocale::German,
  218. QLocale::Greek,
  219. QLocale::Greenlandic,
  220. QLocale::Gujarati,
  221. QLocale::Hausa,
  222. QLocale::Hebrew,
  223. QLocale::Hindi,
  224. QLocale::Icelandic,
  225. QLocale::Interlingua,
  226. QLocale::Interlingue,
  227. QLocale::Italian,
  228. QLocale::Kannada,
  229. QLocale::Kashmiri,
  230. QLocale::Kazakh,
  231. QLocale::Kinyarwanda,
  232. QLocale::Kirghiz,
  233. QLocale::Kurdish,
  234. QLocale::Kurundi,
  235. QLocale::Laothian,
  236. QLocale::Latin,
  237. // Missing: Letzeburgesch,
  238. QLocale::Lingala,
  239. QLocale::Malagasy,
  240. QLocale::Malayalam,
  241. QLocale::Marathi,
  242. QLocale::Mongolian,
  243. // Missing: Nahuatl,
  244. QLocale::Nepali,
  245. // Missing: Northern Sotho,
  246. QLocale::Norwegian,
  247. QLocale::Nynorsk,
  248. QLocale::Occitan,
  249. QLocale::Oriya,
  250. QLocale::Pashto,
  251. QLocale::Portuguese,
  252. QLocale::Punjabi,
  253. QLocale::Quechua,
  254. QLocale::RhaetoRomance,
  255. QLocale::Sesotho,
  256. QLocale::Setswana,
  257. QLocale::Shona,
  258. QLocale::Sindhi,
  259. QLocale::Singhalese,
  260. QLocale::Siswati,
  261. QLocale::Somali,
  262. QLocale::Spanish,
  263. QLocale::Swahili,
  264. QLocale::Swedish,
  265. QLocale::Tagalog,
  266. QLocale::Tajik,
  267. QLocale::Tamil,
  268. QLocale::Tatar,
  269. QLocale::Telugu,
  270. QLocale::TongaLanguage,
  271. QLocale::Tsonga,
  272. QLocale::Turkish,
  273. QLocale::Turkmen,
  274. QLocale::Twi,
  275. QLocale::Uigur,
  276. QLocale::Uzbek,
  277. QLocale::Volapuk,
  278. QLocale::Wolof,
  279. QLocale::Xhosa,
  280. QLocale::Yiddish,
  281. QLocale::Zulu,
  282. EOL
  283. };
  284. static const QLocale::Language frenchStyleLanguages[] = {
  285. // keep synchronized with frenchStyleCountries
  286. QLocale::Breton,
  287. QLocale::French,
  288. QLocale::Portuguese,
  289. // Missing: Filipino,
  290. QLocale::Tigrinya,
  291. // Missing: Walloon
  292. EOL
  293. };
  294. static const QLocale::Language latvianLanguage[] = { QLocale::Latvian, EOL };
  295. static const QLocale::Language irishStyleLanguages[] = {
  296. QLocale::Divehi,
  297. QLocale::Gaelic,
  298. QLocale::Inuktitut,
  299. QLocale::Inupiak,
  300. QLocale::Irish,
  301. QLocale::Manx,
  302. QLocale::Maori,
  303. // Missing: Sami,
  304. QLocale::Samoan,
  305. QLocale::Sanskrit,
  306. EOL
  307. };
  308. static const QLocale::Language czechLanguage[] = { QLocale::Czech, EOL };
  309. static const QLocale::Language slovakLanguage[] = { QLocale::Slovak, EOL };
  310. static const QLocale::Language macedonianLanguage[] = { QLocale::Macedonian, EOL };
  311. static const QLocale::Language lithuanianLanguage[] = { QLocale::Lithuanian, EOL };
  312. static const QLocale::Language russianStyleLanguages[] = {
  313. QLocale::Bosnian,
  314. QLocale::Byelorussian,
  315. QLocale::Croatian,
  316. QLocale::Russian,
  317. QLocale::Serbian,
  318. QLocale::SerboCroatian,
  319. QLocale::Ukrainian,
  320. EOL
  321. };
  322. static const QLocale::Language polishLanguage[] = { QLocale::Polish, EOL };
  323. static const QLocale::Language romanianLanguages[] = {
  324. QLocale::Moldavian,
  325. QLocale::Romanian,
  326. EOL
  327. };
  328. static const QLocale::Language slovenianLanguage[] = { QLocale::Slovenian, EOL };
  329. static const QLocale::Language malteseLanguage[] = { QLocale::Maltese, EOL };
  330. static const QLocale::Language welshLanguage[] = { QLocale::Welsh, EOL };
  331. static const QLocale::Language arabicLanguage[] = { QLocale::Arabic, EOL };
  332. static const QLocale::Country frenchStyleCountries[] = {
  333. // keep synchronized with frenchStyleLanguages
  334. QLocale::AnyCountry,
  335. QLocale::AnyCountry,
  336. QLocale::Brazil,
  337. QLocale::AnyCountry
  338. };
  339. struct NumerusTableEntry {
  340. const char * const *forms;
  341. const QLocale::Language *languages;
  342. const QLocale::Country *countries;
  343. };
  344. static const NumerusTableEntry numerusTable[] = {
  345. { japaneseStyleForms, japaneseStyleLanguages, 0 },
  346. { englishStyleForms, englishStyleLanguages, 0 },
  347. { frenchStyleForms, frenchStyleLanguages, frenchStyleCountries },
  348. { latvianForms, latvianLanguage, 0 },
  349. { irishStyleForms, irishStyleLanguages, 0 },
  350. { czechForms, czechLanguage, 0 },
  351. { slovakForms, slovakLanguage, 0 },
  352. { macedonianForms, macedonianLanguage, 0 },
  353. { lithuanianForms, lithuanianLanguage, 0 },
  354. { russianStyleForms, russianStyleLanguages, 0 },
  355. { polishForms, polishLanguage, 0 },
  356. { romanianForms, romanianLanguages, 0 },
  357. { slovenianForms, slovenianLanguage, 0 },
  358. { malteseForms, malteseLanguage, 0 },
  359. { welshForms, welshLanguage, 0 },
  360. { arabicForms, arabicLanguage, 0 }
  361. };
  362. static const int NumerusTableSize = sizeof(numerusTable) / sizeof(numerusTable[0]);
  363. bool getNumerusInfo(QLocale::Language language, QLocale::Country country,
  364. QStringList *forms);
  365. #endif // TRANSLATOR_H