1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#ifndef INCLUDED_L10NTOOLS_INC_PO_HXX
#define INCLUDED_L10NTOOLS_INC_PO_HXX
#include <fstream>
#include <memory>
#include <string_view>
#include <rtl/string.hxx>
class PoOfstream;
class PoIfstream;
class GenPoEntry;
/** Interface to use po entries in localization
PoEntry based on GenPoEntry class which stores attributes
of general po entry(see po.cxx). It makes easy to get/set
all information needed to localize one english(US) string.
It contains some basic checkings and some string
transformations between po string and string used by
localization tools.
*/
class PoEntry
{
private:
std::unique_ptr<GenPoEntry> m_pGenPo;
bool m_bIsInitialized;
public:
friend class PoOfstream;
friend class PoIfstream;
enum TYPE { TTEXT, TQUICKHELPTEXT, TTITLE };
enum Exception { NOSOURCFILE, NORESTYPE, NOGROUPID, NOSTRING, WRONGHELPTEXT };
PoEntry();
PoEntry( std::string_view rSourceFile, std::string_view rResType, std::string_view rGroupId,
std::string_view rLocalId, std::string_view rHelpText, const OString& rText,
const TYPE eType );
~PoEntry();
PoEntry( const PoEntry& rPo );
PoEntry& operator=( const PoEntry& rPo );
PoEntry& operator=( PoEntry&& rPo ) noexcept;
OString const & getSourceFile() const; ///< Get name of file from which entry is extracted
OString getGroupId() const;
OString getLocalId() const;
OString getResourceType() const; ///< Get the type of component from which entry is extracted
TYPE getType() const; ///< Get the type of entry
OString const & getMsgCtxt() const;
OString const & getMsgId() const;
OString const & getMsgStr() const;
bool isFuzzy() const;
/// Check whether po-s belong to the same localization component
static bool IsInSameComp(const PoEntry& rPo1,const PoEntry& rPo2);
static OString genKeyId(const OString& rGenerator);
};
/** Interface to work with header of po/pot files
This class stores information which is in header of
a po file. It's main function to generate header to
template po files(pot).
*/
class PoHeader
{
private:
std::unique_ptr<GenPoEntry> m_pGenPo;
bool m_bIsInitialized;
public:
friend class PoOfstream;
friend class PoIfstream;
PoHeader( std::string_view rExtSrc ); ///< Template Constructor
PoHeader( std::string_view rExtSrc, const OString& rPoHeaderMsgStr );
~PoHeader();
PoHeader(const PoHeader&) = delete;
PoHeader& operator=(const PoHeader&) = delete;
};
/// Interface to write po entry to files as output streams
class PoOfstream
{
private:
std::ofstream m_aOutPut;
bool m_bIsAfterHeader;
public:
enum OpenMode { TRUNC, APP };
PoOfstream();
PoOfstream(const OString& rFileName, OpenMode aMode );
~PoOfstream();
PoOfstream(const PoOfstream&) = delete;
PoOfstream& operator=(const PoOfstream&) = delete;
bool isOpen() const { return m_aOutPut.is_open(); }
void open(const OString& rFileName, OpenMode aMode = TRUNC );
void close();
void writeHeader(const PoHeader& rHeader);
void writeEntry(const PoEntry& rPo);
};
/// Interface to read po entry from files as input streams
class PoIfstream
{
private:
std::ifstream m_aInPut;
bool m_bEof;
public:
class Exception final : public std::exception { };
PoIfstream();
PoIfstream( const OString& rFileName );
~PoIfstream();
PoIfstream(const PoIfstream&) = delete;
PoIfstream& operator=(const PoIfstream&) = delete;
bool isOpen() const { return m_aInPut.is_open(); }
bool eof() const { return m_bEof; }
void open(const OString& rFileName);
void open(const OString& rFileName, OString& sPoHeader);
void close();
void readEntry(PoEntry& rPo);
};
#endif // INCLUDED_L10NTOOLS_INC_PO_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|