libwpd: libwpd_internal.h Source File documentation

Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

# libwpd_internal.h

Go to the documentation of this file.

    00001 /* libwpd
    00002  * Copyright (C) 2002 William Lachance (william.lachance@sympatico.ca)
    00003  * Copyright (C) 2002,2004 Marc Maurer (j.m.maurer@student.utwente.nl)
    00004  *
    00005  * This library is free software; you can redistribute it and/or
    00006  * modify it under the terms of the GNU Library General Public
    00007  * License as published by the Free Software Foundation; either
    00008  * version 2 of the License, or (at your option) any later version.
    00009  *
    00010  * This library is distributed in the hope that it will be useful,
    00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00013  * Library General Public License for more details.
    00014  *
    00015  * You should have received a copy of the GNU Library General Public
    00016  * License along with this library; if not, write to the Free Software
    00017  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
    00018  *
    00019  * For further information visit http://libwpd.sourceforge.net
    00020  */
    00021
    00022 /* "This product is not manufactured, approved, or supported by
    00023  * Corel Corporation or Corel Corporation Limited."
    00024  */
    00025
    00026 #ifndef LIBWPD_INTERNAL_H
    00027 #define LIBWPD_INTERNAL_H
    00028 #include "WPXStream.h"
    00029 #include <stdio.h>
    00030 #include <string>
    00031 #include "WPXString.h"
    00032
    00033 /* Various functions/defines that need not/should not be exported externally */
    00034
    00035 #define WPD_CHECK_FILE_ERROR(v) if (v==EOF) { WPD_DEBUG_MSG(("X_CheckFileError: %d\n", __LINE__)); throw FileException(); }
    00036 #define WPD_CHECK_FILE_SEEK_ERROR(v) if (v) { WPD_DEBUG_MSG(("X_CheckFileSeekError: %d\n", __LINE__)); throw FileException(); }
    00037 #define WPD_CHECK_FILE_READ_ERROR(v,num_elements) if (v != num_elements) {\
    00038  WPD_DEBUG_MSG(("X_CheckFileReadElementError: %d\n", __LINE__)); throw FileException(); }
    00039
    00040 #define DELETEP(m) if (m) { delete m; m = NULL; }
    00041
    00042 #ifdef DEBUG
    00043 #define WPD_DEBUG_MSG(M) printf M
    00044 #else
    00045 #define WPD_DEBUG_MSG(M)
    00046 #endif
    00047
    00048 #define WPD_LE_GET_GUINT8(p) (*(uint8_t const *)(p))
    00049 #define WPD_LE_GET_GUINT16(p)                             \
    00050         (uint16_t)((((uint8_t const *)(p))[0] << 0)  |    \
    00051                   (((uint8_t const *)(p))[1] << 8))
    00052 #define WPD_LE_GET_GUINT32(p) \
    00053         (uint32_t)((((uint8_t const *)(p))[0] << 0)  |    \
    00054                   (((uint8_t const *)(p))[1] << 8)  |    \
    00055                   (((uint8_t const *)(p))[2] << 16) |    \
    00056                   (((uint8_t const *)(p))[3] << 24))
    00057
    00058 #define WPD_BE_GET_GUINT8(p) (*(uint8_t const *)(p))
    00059 #define WPD_BE_GET_GUINT16(p)                           \
    00060         (uint16_t)((((uint8_t const *)(p))[1] << 0)  |    \
    00061                   (((uint8_t const *)(p))[0] << 8))
    00062 #define WPD_BE_GET_GUINT32(p)                           \
    00063         (uint32_t)((((uint8_t const *)(p))[3] << 0)  |    \
    00064                   (((uint8_t const *)(p))[2] << 8)  |    \
    00065                   (((uint8_t const *)(p))[1] << 16) |    \
    00066                   (((uint8_t const *)(p))[0] << 24))
    00067
    00068 // add more of these as needed for byteswapping
    00069 // (the 8-bit functions are just there to make things consistent)
    00070 int8_t read8(WPXInputStream *input);
    00071 uint8_t readU8(WPXInputStream *input);
    00072 uint16_t readU16(WPXInputStream *input, bool bigendian=false);
    00073 uint32_t readU32(WPXInputStream *input, bool bigendian=false);
    00074
    00075 std::string readPascalString(WPXInputStream *input);
    00076
    00077 void appendUCS4(WPXString &str, uint32_t ucs4);
    00078
    00079 // Various helper structures for the libwpd parser..
    00080
    00081 int extendedCharacterWP6ToUCS2(uint8_t character, uint8_t characterSet,
    00082                             const uint16_t **chars);
    00083
    00084 int extendedCharacterWP5ToUCS2(uint8_t character, uint8_t characterSet,
    00085                             const uint16_t **chars);
    00086
    00087 uint16_t fixedPointToWPUs(const uint32_t fixedPointNumber);
    00088
    00089 enum WPXFileType { WP6_DOCUMENT, WP5_DOCUMENT, WP42_DOCUMENT, OTHER };
    00090 enum WPXNumberingType { ARABIC, LOWERCASE, UPPERCASE, LOWERCASE_ROMAN, UPPERCASE_ROMAN };
    00091 enum WPXNoteType { FOOTNOTE, ENDNOTE };
    00092 enum WPXHeaderFooterType { HEADER, FOOTER };
    00093 enum WPXHeaderFooterOccurence { ODD, EVEN, ALL };
    00094 enum WPXFormOrientation { PORTRAIT, LANDSCAPE };
    00095 enum WPXTabAlignment { LEFT, RIGHT, CENTER, DECIMAL, BAR };
    00096 enum WPXVerticalAlignment { TOP, MIDDLE, BOTTOM, FULL };
    00097
    00098 enum WPXTextColumnType { NEWSPAPER, NEWSPAPER_VERTICAL_BALANCE, PARALLEL, PARALLEL_PROTECT };
    00099
    00100 // ATTRIBUTE bits
    00101 #define WPX_EXTRA_LARGE_BIT 1
    00102 #define WPX_VERY_LARGE_BIT 2
    00103 #define WPX_LARGE_BIT 4
    00104 #define WPX_SMALL_PRINT_BIT 8
    00105 #define WPX_FINE_PRINT_BIT 16
    00106 #define WPX_SUPERSCRIPT_BIT 32
    00107 #define WPX_SUBSCRIPT_BIT 64
    00108 #define WPX_OUTLINE_BIT 128
    00109 #define WPX_ITALICS_BIT 256
    00110 #define WPX_SHADOW_BIT 512
    00111 #define WPX_REDLINE_BIT 1024
    00112 #define WPX_DOUBLE_UNDERLINE_BIT 2048
    00113 #define WPX_BOLD_BIT 4096
    00114 #define WPX_STRIKEOUT_BIT 8192
    00115 #define WPX_UNDERLINE_BIT 16384
    00116 #define WPX_SMALL_CAPS_BIT 32768
    00117 #define WPX_BLINK_BIT 65536
    00118 #define WPX_REVERSEVIDEO_BIT 131072
    00119
    00120 // JUSTIFICATION bits.
    00121 #define WPX_PARAGRAPH_JUSTIFICATION_LEFT 0x00
    00122 #define WPX_PARAGRAPH_JUSTIFICATION_FULL 0x01
    00123 #define WPX_PARAGRAPH_JUSTIFICATION_CENTER 0x02
    00124 #define WPX_PARAGRAPH_JUSTIFICATION_RIGHT 0x03
    00125 #define WPX_PARAGRAPH_JUSTIFICATION_FULL_ALL_LINES 0x04
    00126 #define WPX_PARAGRAPH_JUSTIFICATION_DECIMAL_ALIGNED 0x05
    00127
    00128 // TABLE POSITION bits.
    00129 #define WPX_TABLE_POSITION_ALIGN_WITH_LEFT_MARGIN 0x00
    00130 #define WPX_TABLE_POSITION_ALIGN_WITH_RIGHT_MARGIN 0x01
    00131 #define WPX_TABLE_POSITION_CENTER_BETWEEN_MARGINS 0x02
    00132 #define WPX_TABLE_POSITION_FULL 0x03
    00133 #define WPX_TABLE_POSITION_ABSOLUTE_FROM_LEFT_MARGIN 0x04
    00134
    00135 // TABLE CELL BORDER bits
    00136 const uint8_t WPX_TABLE_CELL_LEFT_BORDER_OFF = 0x01;
    00137 const uint8_t WPX_TABLE_CELL_RIGHT_BORDER_OFF = 0x02;
    00138 const uint8_t WPX_TABLE_CELL_TOP_BORDER_OFF = 0x04;
    00139 const uint8_t WPX_TABLE_CELL_BOTTOM_BORDER_OFF = 0x08;
    00140
    00141 // BREAK bits
    00142 #define WPX_PAGE_BREAK 0x00
    00143 #define WPX_SOFT_PAGE_BREAK 0x01
    00144 #define WPX_COLUMN_BREAK 0x02
    00145
    00146 // Generic bits
    00147 #define WPX_LEFT 0x00
    00148 #define WPX_RIGHT 0x01
    00149 #define WPX_CENTER 0x02
    00150 #define WPX_TOP 0x03
    00151 #define WPX_BOTTOM 0x04
    00152
    00153 typedef struct _RGBSColor RGBSColor;
    00154 struct _RGBSColor
    00155 {
    00156         _RGBSColor(uint8_t r, uint8_t g, uint8_t b, uint8_t s);
    00157         _RGBSColor(uint16_t red, uint16_t green, uint16_t blue); // Construct
    00158         // RBBSColor from double precision RGB color used by WP3.x for Mac
    00159         _RGBSColor(); // initializes all values to 0
    00160         uint8_t m_r;
    00161         uint8_t m_g;
    00162         uint8_t m_b;
    00163         uint8_t m_s;
    00164 };
    00165
    00166 typedef struct _WPXColumnDefinition WPXColumnDefinition;
    00167 struct _WPXColumnDefinition
    00168 {
    00169         _WPXColumnDefinition(); // initializes all values to 0
    00170         float m_width;
    00171         float m_leftGutter;
    00172         float m_rightGutter;
    00173 };
    00174
    00175 typedef struct _WPXColumnProperties WPXColumnProperties;
    00176 struct _WPXColumnProperties
    00177 {
    00178         _WPXColumnProperties();
    00179         uint32_t m_attributes;
    00180         uint8_t m_alignment;
    00181 };
    00182
    00183 typedef struct _WPXTabStop WPXTabStop;
    00184 struct _WPXTabStop
    00185 {
    00186         _WPXTabStop(float position, WPXTabAlignment alignment, uint16_t leaderCharacter, uint8_t leaderNumSpaces);
    00187         _WPXTabStop();
    00188         float m_position;
    00189         WPXTabAlignment m_alignment;
    00190         uint16_t m_leaderCharacter;
    00191         uint8_t m_leaderNumSpaces;
    00192 };
    00193
    00194 // Various exceptions: libwpd does not propagate exceptions externally..
    00195
    00196 class VersionException
    00197 {
    00198         // needless to say, we could flesh this class out a bit
    00199 };
    00200
    00201 class FileException
    00202 {
    00203         // needless to say, we could flesh this class out a bit
    00204 };
    00205
    00206 class ParseException
    00207 {
    00208         // needless to say, we could flesh this class out a bit
    00209 };
    00210
    00211 class GenericException
    00212 {
    00213         // needless to say, we could flesh this class out a bit
    00214 };
    00215
    00216 class UnsupportedEncryptionException
    00217 {
    00218         // needless to say, we could flesh this class out a bit
    00219 };
    00220
    00221 // Various usefull, but cheesey functions
    00222
    00223 int _extractNumericValueFromRoman(const char romanChar);
    00224 int _extractDisplayReferenceNumberFromBuf(const WPXString &buf, const WPXNumberingType listType);
    00225 WPXNumberingType _extractWPXNumberingTypeFromBuf(const WPXString &buf, const WPXNumberingType putativeWPXNumberingType);
    00226 WPXString _numberingTypeToString(WPXNumberingType t);
    00227
    00228
    00229 #endif /* LIBWPD_INTERNAL_H */