00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
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 <algorithm>
00032 #include "WPXString.h"
00033 #include "WPXEncryption.h"
00034 #include "libwpd_types.h"
00035
00036
00037
00038 #ifdef _MSC_VER
00039 #include <minmax.h>
00040 #define LIBWPD_MIN min
00041 #define LIBWPD_MAX max
00042 #else
00043 #define LIBWPD_MIN std::min
00044 #define LIBWPD_MAX std::max
00045 #endif
00046
00047 #define WPD_CHECK_FILE_ERROR(v) if (v==EOF) { WPD_DEBUG_MSG(("X_CheckFileError: %d\n", __LINE__)); throw FileException(); }
00048 #define WPD_CHECK_FILE_SEEK_ERROR(v) if (v) { WPD_DEBUG_MSG(("X_CheckFileSeekError: %d\n", __LINE__)); throw FileException(); }
00049 #define WPD_CHECK_FILE_READ_ERROR(v,num_elements) if (v != num_elements) {\
00050 WPD_DEBUG_MSG(("X_CheckFileReadElementError: %d\n", __LINE__)); throw FileException(); }
00051
00052 #define DELETEP(m) if (m) { delete m; m = 0; }
00053
00054 #ifdef DEBUG
00055 #define WPD_DEBUG_MSG(M) printf M
00056 #else
00057 #define WPD_DEBUG_MSG(M)
00058 #endif
00059
00060 #define WPD_LE_GET_GUINT8(p) (*(uint8_t const *)(p))
00061 #define WPD_LE_GET_GUINT16(p) \
00062 (uint16_t)((((uint8_t const *)(p))[0] << 0) | \
00063 (((uint8_t const *)(p))[1] << 8))
00064 #define WPD_LE_GET_GUINT32(p) \
00065 (uint32_t)((((uint8_t const *)(p))[0] << 0) | \
00066 (((uint8_t const *)(p))[1] << 8) | \
00067 (((uint8_t const *)(p))[2] << 16) | \
00068 (((uint8_t const *)(p))[3] << 24))
00069
00070 #define WPD_BE_GET_GUINT8(p) (*(uint8_t const *)(p))
00071 #define WPD_BE_GET_GUINT16(p) \
00072 (uint16_t)((((uint8_t const *)(p))[1] << 0) | \
00073 (((uint8_t const *)(p))[0] << 8))
00074 #define WPD_BE_GET_GUINT32(p) \
00075 (uint32_t)((((uint8_t const *)(p))[3] << 0) | \
00076 (((uint8_t const *)(p))[2] << 8) | \
00077 (((uint8_t const *)(p))[1] << 16) | \
00078 (((uint8_t const *)(p))[0] << 24))
00079
00080 #define WPD_NUM_ELEMENTS(array) sizeof(array)/sizeof(array[0])
00081
00082
00083
00084 uint8_t readU8(WPXInputStream *input, WPXEncryption *encryption);
00085 uint16_t readU16(WPXInputStream *input, WPXEncryption *encryption, bool bigendian=false);
00086 uint32_t readU32(WPXInputStream *input, WPXEncryption *encryption, bool bigendian=false);
00087
00088 WPXString readPascalString(WPXInputStream *input, WPXEncryption *encryption);
00089 WPXString readCString(WPXInputStream *input, WPXEncryption *encryption);
00090
00091 void appendUCS4(WPXString &str, uint32_t ucs4);
00092
00093
00094
00095 int extendedCharacterWP6ToUCS4(uint8_t character, uint8_t characterSet,
00096 const uint32_t **chars);
00097
00098 int extendedCharacterWP5ToUCS4(uint8_t character, uint8_t characterSet,
00099 const uint32_t **chars);
00100
00101 int appleWorldScriptToUCS4(uint16_t character, const uint32_t **chars);
00102
00103 uint16_t fixedPointToWPUs(const uint32_t fixedPointNumber);
00104 double fixedPointToDouble(const uint32_t fixedPointNumber);
00105 double wpuToFontPointSize(const uint16_t wpuNumber);
00106
00107 enum WPXFileType { WP6_DOCUMENT, WP5_DOCUMENT, WP42_DOCUMENT, OTHER };
00108 enum WPXNumberingType { ARABIC, LOWERCASE, UPPERCASE, LOWERCASE_ROMAN, UPPERCASE_ROMAN };
00109 enum WPXNoteType { FOOTNOTE, ENDNOTE };
00110 enum WPXHeaderFooterType { HEADER, FOOTER };
00111 enum WPXHeaderFooterInternalType { HEADER_A, HEADER_B, FOOTER_A, FOOTER_B, DUMMY };
00112 enum WPXHeaderFooterOccurence { ODD, EVEN, ALL, NEVER };
00113 enum WPXPageNumberPosition { PAGENUMBER_POSITION_NONE = 0, PAGENUMBER_POSITION_TOP_LEFT, PAGENUMBER_POSITION_TOP_CENTER,
00114 PAGENUMBER_POSITION_TOP_RIGHT, PAGENUMBER_POSITION_TOP_LEFT_AND_RIGHT,
00115 PAGENUMBER_POSITION_BOTTOM_LEFT, PAGENUMBER_POSITION_BOTTOM_CENTER,
00116 PAGENUMBER_POSITION_BOTTOM_RIGHT, PAGENUMBER_POSITION_BOTTOM_LEFT_AND_RIGHT,
00117 PAGENUMBER_POSITION_TOP_INSIDE_LEFT_AND_RIGHT,
00118 PAGENUMBER_POSITION_BOTTOM_INSIDE_LEFT_AND_RIGHT };
00119
00120 enum WPXFormOrientation { PORTRAIT, LANDSCAPE };
00121 enum WPXTabAlignment { LEFT, RIGHT, CENTER, DECIMAL, BAR };
00122 enum WPXVerticalAlignment { TOP, MIDDLE, BOTTOM, FULL };
00123
00124 enum WPXTextColumnType { NEWSPAPER, NEWSPAPER_VERTICAL_BALANCE, PARALLEL, PARALLEL_PROTECT };
00125
00126 enum WPXSubDocumentType { WPX_SUBDOCUMENT_NONE, WPX_SUBDOCUMENT_HEADER_FOOTER, WPX_SUBDOCUMENT_NOTE, WPX_SUBDOCUMENT_TEXT_BOX, WPX_SUBDOCUMENT_COMMENT_ANNOTATION };
00127
00128
00129 #define WPX_EXTRA_LARGE_BIT 1
00130 #define WPX_VERY_LARGE_BIT 2
00131 #define WPX_LARGE_BIT 4
00132 #define WPX_SMALL_PRINT_BIT 8
00133 #define WPX_FINE_PRINT_BIT 16
00134 #define WPX_SUPERSCRIPT_BIT 32
00135 #define WPX_SUBSCRIPT_BIT 64
00136 #define WPX_OUTLINE_BIT 128
00137 #define WPX_ITALICS_BIT 256
00138 #define WPX_SHADOW_BIT 512
00139 #define WPX_REDLINE_BIT 1024
00140 #define WPX_DOUBLE_UNDERLINE_BIT 2048
00141 #define WPX_BOLD_BIT 4096
00142 #define WPX_STRIKEOUT_BIT 8192
00143 #define WPX_UNDERLINE_BIT 16384
00144 #define WPX_SMALL_CAPS_BIT 32768
00145 #define WPX_BLINK_BIT 65536
00146 #define WPX_REVERSEVIDEO_BIT 131072
00147
00148
00149 #define WPX_PARAGRAPH_JUSTIFICATION_LEFT 0x00
00150 #define WPX_PARAGRAPH_JUSTIFICATION_FULL 0x01
00151 #define WPX_PARAGRAPH_JUSTIFICATION_CENTER 0x02
00152 #define WPX_PARAGRAPH_JUSTIFICATION_RIGHT 0x03
00153 #define WPX_PARAGRAPH_JUSTIFICATION_FULL_ALL_LINES 0x04
00154 #define WPX_PARAGRAPH_JUSTIFICATION_DECIMAL_ALIGNED 0x05
00155
00156
00157 #define WPX_TABLE_POSITION_ALIGN_WITH_LEFT_MARGIN 0x00
00158 #define WPX_TABLE_POSITION_ALIGN_WITH_RIGHT_MARGIN 0x01
00159 #define WPX_TABLE_POSITION_CENTER_BETWEEN_MARGINS 0x02
00160 #define WPX_TABLE_POSITION_FULL 0x03
00161 #define WPX_TABLE_POSITION_ABSOLUTE_FROM_LEFT_MARGIN 0x04
00162
00163
00164 const uint8_t WPX_TABLE_CELL_LEFT_BORDER_OFF = 0x01;
00165 const uint8_t WPX_TABLE_CELL_RIGHT_BORDER_OFF = 0x02;
00166 const uint8_t WPX_TABLE_CELL_TOP_BORDER_OFF = 0x04;
00167 const uint8_t WPX_TABLE_CELL_BOTTOM_BORDER_OFF = 0x08;
00168
00169
00170 #define WPX_PAGE_BREAK 0x00
00171 #define WPX_SOFT_PAGE_BREAK 0x01
00172 #define WPX_COLUMN_BREAK 0x02
00173
00174
00175 #define WPX_LEFT 0x00
00176 #define WPX_RIGHT 0x01
00177 #define WPX_CENTER 0x02
00178 #define WPX_TOP 0x03
00179 #define WPX_BOTTOM 0x04
00180
00181 typedef struct _RGBSColor RGBSColor;
00182 struct _RGBSColor
00183 {
00184 _RGBSColor(uint8_t r, uint8_t g, uint8_t b, uint8_t s);
00185 _RGBSColor(uint16_t red, uint16_t green, uint16_t blue);
00186
00187 _RGBSColor();
00188 uint8_t m_r;
00189 uint8_t m_g;
00190 uint8_t m_b;
00191 uint8_t m_s;
00192 };
00193
00194 typedef struct _WPXColumnDefinition WPXColumnDefinition;
00195 struct _WPXColumnDefinition
00196 {
00197 _WPXColumnDefinition();
00198 double m_width;
00199 double m_leftGutter;
00200 double m_rightGutter;
00201 };
00202
00203 typedef struct _WPXColumnProperties WPXColumnProperties;
00204 struct _WPXColumnProperties
00205 {
00206 _WPXColumnProperties();
00207 uint32_t m_attributes;
00208 uint8_t m_alignment;
00209 };
00210
00211 typedef struct _WPXTabStop WPXTabStop;
00212 struct _WPXTabStop
00213 {
00214 _WPXTabStop(double position, WPXTabAlignment alignment, uint16_t leaderCharacter, uint8_t leaderNumSpaces);
00215 _WPXTabStop();
00216 double m_position;
00217 WPXTabAlignment m_alignment;
00218 uint16_t m_leaderCharacter;
00219 uint8_t m_leaderNumSpaces;
00220 };
00221
00222
00223
00224 class VersionException
00225 {
00226 };
00227
00228 class FileException
00229 {
00230 };
00231
00232 class ParseException
00233 {
00234 };
00235
00236 class GenericException
00237 {
00238 };
00239
00240 class UnsupportedEncryptionException
00241 {
00242 };
00243
00244 class SupportedEncryptionException
00245 {
00246 };
00247
00248 class WrongPasswordException
00249 {
00250 };
00251
00252
00253
00254 int _extractNumericValueFromRoman(const char romanChar);
00255 int _extractDisplayReferenceNumberFromBuf(const WPXString &buf, const WPXNumberingType listType);
00256 WPXNumberingType _extractWPXNumberingTypeFromBuf(const WPXString &buf, const WPXNumberingType putativeWPXNumberingType);
00257 WPXString _numberingTypeToString(WPXNumberingType t);
00258 extern const uint32_t macRomanCharacterMap[];
00259 WPXString doubleToString(const double value);
00260
00261 #endif