1 /* 2 This file is part of Lokalize 3 This file is based on the one from KBabel 4 5 SPDX-FileCopyrightText: 2007-2009 Nick Shaforostoff <shafff@ukr.net> 6 7 8 SPDX-License-Identifier: GPL-2.0-or-later WITH LicenseRef-Qt-Commercial-exception-1.0 9 */ 10 #ifndef GETTEXTIMPORTPLUGIN_H 11 #define GETTEXTIMPORTPLUGIN_H 12 13 #include "lokalize_debug.h" 14 15 #include "catalogfileplugin.h" 16 17 #include <QStringList> 18 #include <QTextStream> 19 20 class QTextCodec; 21 22 namespace GettextCatalog 23 { 24 25 class ExtraDataSaver 26 { 27 public: ExtraDataSaver()28 ExtraDataSaver() {} ~ExtraDataSaver()29 virtual ~ExtraDataSaver() {} operator()30 void operator()(const QString& comment) 31 { 32 extraData.append(comment); 33 } 34 QStringList extraData; 35 }; 36 37 class ExtraDataSkipSaver: public ExtraDataSaver 38 { 39 public: ExtraDataSkipSaver()40 ExtraDataSkipSaver() {} operator()41 void operator()(const QString&) {} 42 }; 43 44 /** 45 * The class for importing GNU gettext PO files. 46 * As an extra information, it stores the list of all obsolete entries. 47 * @short Gettext PO parser 48 */ 49 50 class GettextImportPlugin: public CatalogImportPlugin 51 { 52 public: 53 GettextImportPlugin(); 54 //GettextImportPlugin(ExtraDataSaver* extraDataSaver); 55 //~GettextImportPlugin(){delete _extraDataSaver;} 56 ConversionStatus load(QIODevice*) override; id()57 const QString id() 58 { 59 return "GNU gettext"; 60 } 61 62 private: 63 QTextCodec* codecForDevice(QIODevice* /*, bool* hadCodec*/); 64 ConversionStatus readEntryRaw(QTextStream& stream); 65 ConversionStatus readEntry(QTextStream& stream); 66 67 // description of the last read entry 68 QString _msgctxt; 69 QStringList _msgid; 70 QStringList _msgstr; 71 QString _comment; 72 bool _msgidMultiline; 73 bool _msgstrMultiline; 74 bool _gettextPluralForm; 75 bool _testBorked; 76 bool _obsolete; 77 bool _msgctxtPresent; 78 79 //ExtraDataSaver* _extraDataSaver; 80 81 QRegExp _rxMsgCtxt; 82 QRegExp _rxMsgId; 83 QRegExp _rxMsgIdPlural; 84 QRegExp _rxMsgIdPluralBorked; 85 QRegExp _rxMsgIdBorked; 86 QRegExp _rxMsgIdRemQuotes; 87 QRegExp _rxMsgLineRemEndQuote; 88 QRegExp _rxMsgLineRemStartQuote; 89 QRegExp _rxMsgLine; 90 QRegExp _rxMsgLineBorked; 91 QRegExp _rxMsgStr; 92 QRegExp _rxMsgStrOther; 93 QRegExp _rxMsgStrPluralStart; 94 QRegExp _rxMsgStrPluralStartBorked; 95 QRegExp _rxMsgStrPlural; 96 QRegExp _rxMsgStrPluralBorked; 97 QRegExp _rxMsgStrRemQuotes; 98 99 QString _obsoleteStart; 100 QString _msgctxtStart; 101 QString _bufferedLine; 102 }; 103 } 104 #endif 105