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