diff options
| author | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
|---|---|---|
| committer | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
| commit | 7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch) | |
| tree | 4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/plugins/gettext/pdbim/pdbim.h | |
| download | scribus-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.h | 159 |
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 |
