summaryrefslogtreecommitdiffstats
path: root/l10ntools/inc/po.hxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--l10ntools/inc/po.hxx152
1 files changed, 152 insertions, 0 deletions
diff --git a/l10ntools/inc/po.hxx b/l10ntools/inc/po.hxx
new file mode 100644
index 000000000..9b33d2b77
--- /dev/null
+++ b/l10ntools/inc/po.hxx
@@ -0,0 +1,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: */