summaryrefslogtreecommitdiffstats
path: root/scribus/plugins/gettext/pdbim/pdbim.h
diff options
context:
space:
mode:
authorcraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
committercraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
commit7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch)
tree4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/plugins/gettext/pdbim/pdbim.h
downloadscribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz
scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz
scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/plugins/gettext/pdbim/pdbim.h')
-rw-r--r--scribus/plugins/gettext/pdbim/pdbim.h159
1 files changed, 159 insertions, 0 deletions
diff --git a/scribus/plugins/gettext/pdbim/pdbim.h b/scribus/plugins/gettext/pdbim/pdbim.h
new file mode 100644
index 0000000..d4e741f
--- /dev/null
+++ b/scribus/plugins/gettext/pdbim/pdbim.h
@@ -0,0 +1,159 @@
+/*
+For general Scribus (>=1.3.2) copyright and licensing information please refer
+to the COPYING file provided with the program. Following this notice may exist
+a copyright and/or license notice that predates the release of Scribus 1.3.2
+for which a new license (GPL+exception) is in place.
+*/
+#ifndef PDBIM_H
+#define PDBIM_H
+
+#include "pluginapi.h"
+
+class gtWriter;
+class gtParagraphStyle;
+class QString;
+class QStringList;
+
+extern "C" PLUGIN_API void GetText(QString filename, QString encoding, bool textOnly, gtWriter *writer);
+
+extern "C" PLUGIN_API QString FileFormatName();
+
+extern "C" PLUGIN_API QStringList FileExtensions();
+
+
+
+
+/*! \brief Abiword's internal data types */
+typedef unsigned int UT_uint32;
+typedef unsigned short UT_uint16;
+
+/*! \brief Define integral type Byte, Word, and DWord to match those on the
+Pilot being 8, 16, and 32 bits, respectively. Max 8-bit unsigned */
+typedef unsigned char Byte;
+typedef UT_uint16 Word;
+typedef UT_uint32 DWord;
+
+/*! \brief Pilots have a fixed 4K record size */
+#define RECORD_SIZE_MAX 4096
+#define BUFFER_SIZE 4096
+#define COUNT_BITS 3
+#define DISP_BITS 11
+#define DOC_CREATOR "REAd"
+#define DOC_TYPE "TEXt"
+/*! \brief 31 chars + 1 null terminator */
+#define dmDBNameLength 32
+
+/*! \brief PDB document header
+http://www.pyrite.org/doc_format.html
+version 2 bytes 0x0002 if data is compressed, 0x0001 if uncompressed
+spare 2 bytes purpose unknown (set to 0 on creation)
+length 4 bytes total length of text before compression
+records 2 bytes number of text records
+record_size 2 bytes maximum size of each record (usually 4096; see below)
+position 4 bytes currently viewed position in the document
+sizes 2*records bytes record size array
+78 bytes total
+*/
+typedef struct
+{
+ char name[ dmDBNameLength ];
+ Word attributes;
+ Word version;
+ DWord create_time;
+ DWord modify_time;
+ DWord backup_time;
+ DWord modificationNumber;
+ DWord appInfoID;
+ DWord sortInfoID;
+ char type[4];
+ char creator[4];
+ DWord id_seed;
+ DWord nextRecordList;
+ Word numRecords;
+} pdb_header;
+
+/*! \brief Some compilers pad structures out to DWord boundaries so using
+sizeof() doesn't give the intended result.
+*/
+#define PDB_HEADER_SIZE 78
+#define PDB_RECORD_HEADER_SIZE 8
+
+/*! \brief PDB Document record.
+16 bytes total. */
+typedef struct {
+ Word version; /* 1 = plain text, 2 = compressed */
+ Word reserved1;
+ DWord doc_size; /* in bytes, when uncompressed */
+ Word numRecords; /* text rec's only; = pdb_header.numRecords-1 */
+ Word rec_size; /* usually RECORD_SIZE_MAX */
+ DWord reserved2;
+} doc_record0;
+
+/*! \brief Binary buffer */
+typedef struct {
+ Byte buf[BUFFER_SIZE];
+ UT_uint32 len;
+ UT_uint32 position;
+} buffer;
+
+#define GET_Word(f,n) { fread( &n, 2, 1, f ); n = swap_Word ( n ); }
+#define GET_DWord(f,n) { fread( &n, 4, 1, f ); n = swap_DWord( n ); }
+
+/*! \brief An import filter for Palm Documents (PDB files).
+PDB documents are simple non-formatted texts in binary forms used
+mainly for e-books distribution.
+It's taken from Abiword's PDB import/export plugin http://www.abisource.com
+I've simplified the importer guts to fit special Scribus needs.
+\warning This plugin uses a very special low-level IO and memory operations.
+It uses big/little endian handling for bit related operations.
+Welcome in the "macro and gtk hell" ;)
+\note User should specify file encoding correctly.
+\author Copyright (C) 2001 AbiSource, Inc.
+\author Petr Vanek <petr@scribus.info>
+*/
+class PdbIm
+{
+public:
+ /*! \brief Parse and decode the PDB file
+ \param fname a file name of the document
+ \param enc user selected text encoding. See encoding attr.
+ \param w a reference to the gtWriter instance */
+ PdbIm(const QString& fname, const QString& enc, gtWriter *w);
+ ~PdbIm(){};
+ /*! \brief Write data into Scribus text frame.
+ User should specify encoding of the imported text - it's recoded here. */
+ void write();
+private:
+ //! \brief Binary buffer for extraction tasks
+ buffer *m_buf;
+ //! \brief Store the extracted text here
+ QString data;
+ //! \brief Name of the codec/encoding to recode
+ QString encoding;
+ //! \brief Imp plugin handler
+ gtWriter *writer;
+ //! \brief A "bit order" flag. True on little endian systems.
+ bool m_littlendian;
+ //! \brief A "document uses that strange compress algorithm" flag.
+ bool bCompressed;
+
+ /*! \brief Parse the PDB file.
+ \param fname a filename to open */
+ void loadFile(QString fname);
+ /*! \brief Learn which endian to use.
+ It fills the m_littlendian flag */
+ void selectSwap();
+ /*! \brief Recompute the binary value for given endian
+ \param r a binary Word
+ \retval Word a correct endian Word */
+ Word swap_Word(Word r);
+ /*! \brief Recompute the binary value for given endian
+ \param r a binary DWord
+ \retval DWord a correct endian Word */
+ DWord swap_DWord(DWord r);
+ /*! \brief PDB strange decompress algorithm implementation.
+ \param m_buf a reference to the current buffer */
+ void uncompress(buffer *m_buf);
+};
+
+#endif