Index: trunk/src/base/PdfEncoding.cpp
===================================================================
--- trunk/src/base/PdfEncoding.cpp	(revision 1701)
+++ trunk/src/base/PdfEncoding.cpp	(working copy)
@@ -46,6 +46,8 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sstream>
+#include "PdfArray.h"
+#include "doc/PdfDifferenceEncoding.h"
 
 namespace PoDoFo {
 
@@ -775,6 +777,36 @@
 // -----------------------------------------------------
 // 
 // -----------------------------------------------------
+void PdfWinAnsiEncoding::AddToDictionary( PdfDictionary & rDictionary ) const
+{
+    PdfArray arDifferences;
+
+    for (int i = 0; i < 256; i++)
+    {
+        if (PdfWinAnsiEncoding::GetToUnicodeTable()[i] != this->GetToUnicodeTable()[i])
+        {
+            arDifferences.push_back(PdfObject((pdf_int64)i));
+            unsigned short shCode = this->GetToUnicodeTable()[i];
+#ifdef PODOFO_IS_LITTLE_ENDIAN
+            shCode = ((shCode & 0x00FF) << 8) | ((shCode & 0xFF00) >> 8);
+#endif
+            arDifferences.push_back( PdfDifferenceEncoding::UnicodeIDToName(shCode) );
+        }
+    }
+
+    if (!arDifferences.empty())
+    {
+        PdfDictionary dictEncoding;
+        dictEncoding.AddKey(PdfName("BaseEncoding"), PdfWinAnsiEncoding::GetName());
+        dictEncoding.AddKey(PdfName("Differences"), arDifferences);
+        rDictionary.AddKey(PdfName("Encoding"), dictEncoding);
+    }
+    else
+    {
+        PdfSimpleEncoding::AddToDictionary(rDictionary);
+    }
+}
+
 const pdf_utf16be* PdfWinAnsiEncoding::GetToUnicodeTable() const
 {
     return PdfWinAnsiEncoding::s_cEncoding;
@@ -2069,5 +2101,550 @@
     0x27BE,  // FE   # OPEN-OUTLINED RIGHTWARDS ARROW   # a191
     0x0000   // FF undefined
 };
- 
+
+// -----------------------------------------------------
+// PdfWin1250Encoding
+// See: http://www.microsoft.com/globaldev/reference/sbcs/1250.mspx
+// -----------------------------------------------------
+
+// -----------------------------------------------------
+// 
+// -----------------------------------------------------
+const pdf_utf16be PdfWin1250Encoding::s_cEncoding[256] = {
+    0x0000,  // NULL
+    0x0001,  // START OF HEADING
+    0x0002,  // START OF TEXT
+    0x0003,  // END OF TEXT
+    0x0004,  // END OF TRANSMISSION
+    0x0005,  // ENQUIRY
+    0x0006,  // ACKNOWLEDGE
+    0x0007,  // BELL
+    0x0008,  // BACKSPACE
+    0x0009,  // HORIZONTAL TABULATION
+    0x000A,  // LINE FEED
+    0x000B,  // VERTICAL TABULATION
+    0x000C,  // FORM FEED
+    0x000D,  // CARRIAGE RETURN
+    0x000E,  // SHIFT OUT
+    0x000F,  // SHIFT IN
+    0x0010,  // DATA LINK ESCAPE
+    0x0011,  // DEVICE CONTROL ONE
+    0x0012,  // DEVICE CONTROL TWO
+    0x0013,  // DEVICE CONTROL THREE
+    0x0014,  // DEVICE CONTROL FOUR
+    0x0015,  // NEGATIVE ACKNOWLEDGE
+    0x0016,  // SYNCHRONOUS IDLE
+    0x0017,  // END OF TRANSMISSION BLOCK
+    0x0018,  // CANCEL
+    0x0019,  // END OF MEDIUM
+    0x001A,  // SUBSTITUTE
+    0x001B,  // ESCAPE
+    0x001C,  // FILE SEPARATOR
+    0x001D,  // GROUP SEPARATOR
+    0x001E,  // RECORD SEPARATOR
+    0x001F,  // UNIT SEPARATOR
+    0x0020,  // SPACE
+    0x0021,  // EXCLAMATION MARK
+    0x0022,  // QUOTATION MARK
+    0x0023,  // NUMBER SIGN
+    0x0024,  // DOLLAR SIGN
+    0x0025,  // PERCENT SIGN
+    0x0026,  // AMPERSAND
+    0x0027,  // APOSTROPHE
+    0x0028,  // LEFT PARENTHESIS
+    0x0029,  // RIGHT PARENTHESIS
+    0x002A,  // ASTERISK
+    0x002B,  // PLUS SIGN
+    0x002C,  // COMMA
+    0x002D,  // HYPHEN-MINUS
+    0x002E,  // FULL STOP
+    0x002F,  // SOLIDUS
+    0x0030,  // DIGIT ZERO
+    0x0031,  // DIGIT ONE
+    0x0032,  // DIGIT TWO
+    0x0033,  // DIGIT THREE
+    0x0034,  // DIGIT FOUR
+    0x0035,  // DIGIT FIVE
+    0x0036,  // DIGIT SIX
+    0x0037,  // DIGIT SEVEN
+    0x0038,  // DIGIT EIGHT
+    0x0039,  // DIGIT NINE
+    0x003A,  // COLON
+    0x003B,  // SEMICOLON
+    0x003C,  // LESS-THAN SIGN
+    0x003D,  // EQUALS SIGN
+    0x003E,  // GREATER-THAN SIGN
+    0x003F,  // QUESTION MARK
+    0x0040,  // COMMERCIAL AT
+    0x0041,  // LATIN CAPITAL LETTER A
+    0x0042,  // LATIN CAPITAL LETTER B
+    0x0043,  // LATIN CAPITAL LETTER C
+    0x0044,  // LATIN CAPITAL LETTER D
+    0x0045,  // LATIN CAPITAL LETTER E
+    0x0046,  // LATIN CAPITAL LETTER F
+    0x0047,  // LATIN CAPITAL LETTER G
+    0x0048,  // LATIN CAPITAL LETTER H
+    0x0049,  // LATIN CAPITAL LETTER I
+    0x004A,  // LATIN CAPITAL LETTER J
+    0x004B,  // LATIN CAPITAL LETTER K
+    0x004C,  // LATIN CAPITAL LETTER L
+    0x004D,  // LATIN CAPITAL LETTER M
+    0x004E,  // LATIN CAPITAL LETTER N
+    0x004F,  // LATIN CAPITAL LETTER O
+    0x0050,  // LATIN CAPITAL LETTER P
+    0x0051,  // LATIN CAPITAL LETTER Q
+    0x0052,  // LATIN CAPITAL LETTER R
+    0x0053,  // LATIN CAPITAL LETTER S
+    0x0054,  // LATIN CAPITAL LETTER T
+    0x0055,  // LATIN CAPITAL LETTER U
+    0x0056,  // LATIN CAPITAL LETTER V
+    0x0057,  // LATIN CAPITAL LETTER W
+    0x0058,  // LATIN CAPITAL LETTER X
+    0x0059,  // LATIN CAPITAL LETTER Y
+    0x005A,  // LATIN CAPITAL LETTER Z
+    0x005B,  // LEFT SQUARE BRACKET
+    0x005C,  // REVERSE SOLIDUS
+    0x005D,  // RIGHT SQUARE BRACKET
+    0x005E,  // CIRCUMFLEX ACCENT
+    0x005F,  // LOW LINE
+    0x0060,  // GRAVE ACCENT
+    0x0061,  // LATIN SMALL LETTER A
+    0x0062,  // LATIN SMALL LETTER B
+    0x0063,  // LATIN SMALL LETTER C
+    0x0064,  // LATIN SMALL LETTER D
+    0x0065,  // LATIN SMALL LETTER E
+    0x0066,  // LATIN SMALL LETTER F
+    0x0067,  // LATIN SMALL LETTER G
+    0x0068,  // LATIN SMALL LETTER H
+    0x0069,  // LATIN SMALL LETTER I
+    0x006A,  // LATIN SMALL LETTER J
+    0x006B,  // LATIN SMALL LETTER K
+    0x006C,  // LATIN SMALL LETTER L
+    0x006D,  // LATIN SMALL LETTER M
+    0x006E,  // LATIN SMALL LETTER N
+    0x006F,  // LATIN SMALL LETTER O
+    0x0070,  // LATIN SMALL LETTER P
+    0x0071,  // LATIN SMALL LETTER Q
+    0x0072,  // LATIN SMALL LETTER R
+    0x0073,  // LATIN SMALL LETTER S
+    0x0074,  // LATIN SMALL LETTER T
+    0x0075,  // LATIN SMALL LETTER U
+    0x0076,  // LATIN SMALL LETTER V
+    0x0077,  // LATIN SMALL LETTER W
+    0x0078,  // LATIN SMALL LETTER X
+    0x0079,  // LATIN SMALL LETTER Y
+    0x007A,  // LATIN SMALL LETTER Z
+    0x007B,  // LEFT CURLY BRACKET
+    0x007C,  // VERTICAL LINE
+    0x007D,  // RIGHT CURLY BRACKET
+    0x007E,  // TILDE
+    0x007F,  // DELETE
+    0x20AC,  // EURO SIGN
+    0x0000,
+    0x201A,  // SINGLE LOW-9 QUOTATION MARK
+    0x0000,
+    0x201E,  // DOUBLE LOW-9 QUOTATION MARK
+    0x2026,  // HORIZONTAL ELLIPSIS
+    0x2020,  // DAGGER
+    0x2021,  // DOUBLE DAGGER
+    0x0000,
+    0x2030,  // PER MILLE SIGN
+    0x0160,  // LATIN CAPITAL LETTER S WITH CARON
+    0x2039,  // SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+    0x015A,  // LATIN CAPITAL LETTER S WITH ACUTE
+    0x0164,  // LATIN CAPITAL LETTER T WITH CARON
+    0x017D,  // LATIN CAPITAL LETTER Z WITH CARON
+    0x0179,  // LATIN CAPITAL LETTER Z WITH ACUTE
+    0x0000,
+    0x2018,  // LEFT SINGLE QUOTATION MARK
+    0x2019,  // RIGHT SINGLE QUOTATION MARK
+    0x201C,  // LEFT DOUBLE QUOTATION MARK
+    0x201D,  // RIGHT DOUBLE QUOTATION MARK
+    0x2022,  // BULLET
+    0x2013,  // EN DASH
+    0x2014,  // EM DASH
+    0x0000,
+    0x2122,  // TRADE MARK SIGN
+    0x0161,  // LATIN SMALL LETTER S WITH CARON
+    0x203A,  // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+    0x015B,  // LATIN SMALL LETTER S WITH ACUTE
+    0x0165,  // LATIN SMALL LETTER T WITH CARON
+    0x017E,  // LATIN SMALL LETTER Z WITH CARON
+    0x017A,  // LATIN SMALL LETTER Z WITH ACUTE
+    0x00A0,  // NO-BREAK SPACE
+    0x02C7,  // CARON
+    0x02D8,  // BREVE
+    0x0141,  // LATIN CAPITAL LETTER L WITH STROKE
+    0x00A4,  // CURRENCY SIGN
+    0x0104,  // LATIN CAPITAL LETTER A WITH OGONEK
+    0x00A6,  // BROKEN BAR
+    0x00A7,  // SECTION SIGN
+    0x00A8,  // DIAERESIS
+    0x00A9,  // COPYRIGHT SIGN
+    0x015E,  // LATIN CAPITAL LETTER S WITH CEDILLA
+    0x00AB,  // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x00AC,  // NOT SIGN
+    0x00AD,  // SOFT HYPHEN
+    0x00AE,  // REGISTERED SIGN
+    0x017B,  // LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x00B0,  // DEGREE SIGN
+    0x00B1,  // PLUS-MINUS SIGN
+    0x02DB,  // OGONEK
+    0x0142,  // LATIN SMALL LETTER L WITH STROKE
+    0x00B4,  // ACUTE ACCENT
+    0x00B5,  // MICRO SIGN
+    0x00B6,  // PILCROW SIGN
+    0x00B7,  // MIDDLE DOT
+    0x00B8,  // CEDILLA
+    0x0105,  // LATIN SMALL LETTER A WITH OGONEK
+    0x015F,  // LATIN SMALL LETTER S WITH CEDILLA
+    0x00BB,  // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+    0x013D,  // LATIN CAPITAL LETTER L WITH CARON
+    0x02DD,  // DOUBLE ACUTE ACCENT
+    0x013E,  // LATIN SMALL LETTER L WITH CARON
+    0x017C,  // LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x0154,  // LATIN CAPITAL LETTER R WITH ACUTE
+    0x00C1,  // LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2,  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x0102,  // LATIN CAPITAL LETTER A WITH BREVE
+    0x00C4,  // LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x0139,  // LATIN CAPITAL LETTER L WITH ACUTE
+    0x0106,  // LATIN CAPITAL LETTER C WITH ACUTE
+    0x00C7,  // LATIN CAPITAL LETTER C WITH CEDILLA
+    0x010C,  // LATIN CAPITAL LETTER C WITH CARON
+    0x00C9,  // LATIN CAPITAL LETTER E WITH ACUTE
+    0x0118,  // LATIN CAPITAL LETTER E WITH OGONEK
+    0x00CB,  // LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x011A,  // LATIN CAPITAL LETTER E WITH CARON
+    0x00CD,  // LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE,  // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x010E,  // LATIN CAPITAL LETTER D WITH CARON
+    0x0110,  // LATIN CAPITAL LETTER D WITH STROKE
+    0x0143,  // LATIN CAPITAL LETTER N WITH ACUTE
+    0x0147,  // LATIN CAPITAL LETTER N WITH CARON
+    0x00D3,  // LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4,  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x0150,  // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    0x00D6,  // LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7,  // MULTIPLICATION SIGN
+    0x0158,  // LATIN CAPITAL LETTER R WITH CARON
+    0x016E,  // LATIN CAPITAL LETTER U WITH RING ABOVE
+    0x00DA,  // LATIN CAPITAL LETTER U WITH ACUTE
+    0x0170,  // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    0x00DC,  // LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD,  // LATIN CAPITAL LETTER Y WITH ACUTE
+    0x0162,  // LATIN CAPITAL LETTER T WITH CEDILLA
+    0x00DF,  // LATIN SMALL LETTER SHARP S
+    0x0155,  // LATIN SMALL LETTER R WITH ACUTE
+    0x00E1,  // LATIN SMALL LETTER A WITH ACUTE
+    0x00E2,  // LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x0103,  // LATIN SMALL LETTER A WITH BREVE
+    0x00E4,  // LATIN SMALL LETTER A WITH DIAERESIS
+    0x013A,  // LATIN SMALL LETTER L WITH ACUTE
+    0x0107,  // LATIN SMALL LETTER C WITH ACUTE
+    0x00E7,  // LATIN SMALL LETTER C WITH CEDILLA
+    0x010D,  // LATIN SMALL LETTER C WITH CARON
+    0x00E9,  // LATIN SMALL LETTER E WITH ACUTE
+    0x0119,  // LATIN SMALL LETTER E WITH OGONEK
+    0x00EB,  // LATIN SMALL LETTER E WITH DIAERESIS
+    0x011B,  // LATIN SMALL LETTER E WITH CARON
+    0x00ED,  // LATIN SMALL LETTER I WITH ACUTE
+    0x00EE,  // LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x010F,  // LATIN SMALL LETTER D WITH CARON
+    0x0111,  // LATIN SMALL LETTER D WITH STROKE
+    0x0144,  // LATIN SMALL LETTER N WITH ACUTE
+    0x0148,  // LATIN SMALL LETTER N WITH CARON
+    0x00F3,  // LATIN SMALL LETTER O WITH ACUTE
+    0x00F4,  // LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x0151,  // LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    0x00F6,  // LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7,  // DIVISION SIGN
+    0x0159,  // LATIN SMALL LETTER R WITH CARON
+    0x016F,  // LATIN SMALL LETTER U WITH RING ABOVE
+    0x00FA,  // LATIN SMALL LETTER U WITH ACUTE
+    0x0171,  // LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    0x00FC,  // LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD,  // LATIN SMALL LETTER Y WITH ACUTE
+    0x0163,  // LATIN SMALL LETTER T WITH CEDILLA
+    0x02D9   // DOT ABOVE
+};
+
+const pdf_utf16be* PdfWin1250Encoding::GetToUnicodeTable() const
+{
+    return PdfWin1250Encoding::s_cEncoding;
+}
+
+// -----------------------------------------------------
+// PdfIso88592Encoding
+// See: http://unicode.org/Public/MAPPINGS/ISO8859/8859-2.TXT
+// -----------------------------------------------------
+
+// -----------------------------------------------------
+// 
+// -----------------------------------------------------
+
+const pdf_utf16be PdfIso88592Encoding::s_cEncoding[256] = {
+    0x0000,  // NULL
+    0x0001,  // START OF HEADING
+    0x0002,  // START OF TEXT
+    0x0003,  // END OF TEXT
+    0x0004,  // END OF TRANSMISSION
+    0x0005,  // ENQUIRY
+    0x0006,  // ACKNOWLEDGE
+    0x0007,  // BELL
+    0x0008,  // BACKSPACE
+    0x0009,  // HORIZONTAL TABULATION
+    0x000A,  // LINE FEED
+    0x000B,  // VERTICAL TABULATION
+    0x000C,  // FORM FEED
+    0x000D,  // CARRIAGE RETURN
+    0x000E,  // SHIFT OUT
+    0x000F,  // SHIFT IN
+    0x0010,  // DATA LINK ESCAPE
+    0x0011,  // DEVICE CONTROL ONE
+    0x0012,  // DEVICE CONTROL TWO
+    0x0013,  // DEVICE CONTROL THREE
+    0x0014,  // DEVICE CONTROL FOUR
+    0x0015,  // NEGATIVE ACKNOWLEDGE
+    0x0016,  // SYNCHRONOUS IDLE
+    0x0017,  // END OF TRANSMISSION BLOCK
+    0x0018,  // CANCEL
+    0x0019,  // END OF MEDIUM
+    0x001A,  // SUBSTITUTE
+    0x001B,  // ESCAPE
+    0x001C,  // FILE SEPARATOR
+    0x001D,  // GROUP SEPARATOR
+    0x001E,  // RECORD SEPARATOR
+    0x001F,  // UNIT SEPARATOR
+    0x0020,  // SPACE
+    0x0021,  // EXCLAMATION MARK
+    0x0022,  // QUOTATION MARK
+    0x0023,  // NUMBER SIGN
+    0x0024,  // DOLLAR SIGN
+    0x0025,  // PERCENT SIGN
+    0x0026,  // AMPERSAND
+    0x0027,  // APOSTROPHE
+    0x0028,  // LEFT PARENTHESIS
+    0x0029,  // RIGHT PARENTHESIS
+    0x002A,  // ASTERISK
+    0x002B,  // PLUS SIGN
+    0x002C,  // COMMA
+    0x002D,  // HYPHEN-MINUS
+    0x002E,  // FULL STOP
+    0x002F,  // SOLIDUS
+    0x0030,  // DIGIT ZERO
+    0x0031,  // DIGIT ONE
+    0x0032,  // DIGIT TWO
+    0x0033,  // DIGIT THREE
+    0x0034,  // DIGIT FOUR
+    0x0035,  // DIGIT FIVE
+    0x0036,  // DIGIT SIX
+    0x0037,  // DIGIT SEVEN
+    0x0038,  // DIGIT EIGHT
+    0x0039,  // DIGIT NINE
+    0x003A,  // COLON
+    0x003B,  // SEMICOLON
+    0x003C,  // LESS-THAN SIGN
+    0x003D,  // EQUALS SIGN
+    0x003E,  // GREATER-THAN SIGN
+    0x003F,  // QUESTION MARK
+    0x0040,  // COMMERCIAL AT
+    0x0041,  // LATIN CAPITAL LETTER A
+    0x0042,  // LATIN CAPITAL LETTER B
+    0x0043,  // LATIN CAPITAL LETTER C
+    0x0044,  // LATIN CAPITAL LETTER D
+    0x0045,  // LATIN CAPITAL LETTER E
+    0x0046,  // LATIN CAPITAL LETTER F
+    0x0047,  // LATIN CAPITAL LETTER G
+    0x0048,  // LATIN CAPITAL LETTER H
+    0x0049,  // LATIN CAPITAL LETTER I
+    0x004A,  // LATIN CAPITAL LETTER J
+    0x004B,  // LATIN CAPITAL LETTER K
+    0x004C,  // LATIN CAPITAL LETTER L
+    0x004D,  // LATIN CAPITAL LETTER M
+    0x004E,  // LATIN CAPITAL LETTER N
+    0x004F,  // LATIN CAPITAL LETTER O
+    0x0050,  // LATIN CAPITAL LETTER P
+    0x0051,  // LATIN CAPITAL LETTER Q
+    0x0052,  // LATIN CAPITAL LETTER R
+    0x0053,  // LATIN CAPITAL LETTER S
+    0x0054,  // LATIN CAPITAL LETTER T
+    0x0055,  // LATIN CAPITAL LETTER U
+    0x0056,  // LATIN CAPITAL LETTER V
+    0x0057,  // LATIN CAPITAL LETTER W
+    0x0058,  // LATIN CAPITAL LETTER X
+    0x0059,  // LATIN CAPITAL LETTER Y
+    0x005A,  // LATIN CAPITAL LETTER Z
+    0x005B,  // LEFT SQUARE BRACKET
+    0x005C,  // REVERSE SOLIDUS
+    0x005D,  // RIGHT SQUARE BRACKET
+    0x005E,  // CIRCUMFLEX ACCENT
+    0x005F,  // LOW LINE
+    0x0060,  // GRAVE ACCENT
+    0x0061,  // LATIN SMALL LETTER A
+    0x0062,  // LATIN SMALL LETTER B
+    0x0063,  // LATIN SMALL LETTER C
+    0x0064,  // LATIN SMALL LETTER D
+    0x0065,  // LATIN SMALL LETTER E
+    0x0066,  // LATIN SMALL LETTER F
+    0x0067,  // LATIN SMALL LETTER G
+    0x0068,  // LATIN SMALL LETTER H
+    0x0069,  // LATIN SMALL LETTER I
+    0x006A,  // LATIN SMALL LETTER J
+    0x006B,  // LATIN SMALL LETTER K
+    0x006C,  // LATIN SMALL LETTER L
+    0x006D,  // LATIN SMALL LETTER M
+    0x006E,  // LATIN SMALL LETTER N
+    0x006F,  // LATIN SMALL LETTER O
+    0x0070,  // LATIN SMALL LETTER P
+    0x0071,  // LATIN SMALL LETTER Q
+    0x0072,  // LATIN SMALL LETTER R
+    0x0073,  // LATIN SMALL LETTER S
+    0x0074,  // LATIN SMALL LETTER T
+    0x0075,  // LATIN SMALL LETTER U
+    0x0076,  // LATIN SMALL LETTER V
+    0x0077,  // LATIN SMALL LETTER W
+    0x0078,  // LATIN SMALL LETTER X
+    0x0079,  // LATIN SMALL LETTER Y
+    0x007A,  // LATIN SMALL LETTER Z
+    0x007B,  // LEFT CURLY BRACKET
+    0x007C,  // VERTICAL LINE
+    0x007D,  // RIGHT CURLY BRACKET
+    0x007E,  // TILDE
+    0x007F,  // DELETE
+    0x0080,  // <control>
+    0x0081,  // <control>
+    0x0082,  // <control>
+    0x0083,  // <control>
+    0x0084,  // <control>
+    0x0085,  // <control>
+    0x0086,  // <control>
+    0x0087,  // <control>
+    0x0088,  // <control>
+    0x0089,  // <control>
+    0x008A,  // <control>
+    0x008B,  // <control>
+    0x008C,  // <control>
+    0x008D,  // <control>
+    0x008E,  // <control>
+    0x008F,  // <control>
+    0x0090,  // <control>
+    0x0091,  // <control>
+    0x0092,  // <control>
+    0x0093,  // <control>
+    0x0094,  // <control>
+    0x0095,  // <control>
+    0x0096,  // <control>
+    0x0097,  // <control>
+    0x0098,  // <control>
+    0x0099,  // <control>
+    0x009A,  // <control>
+    0x009B,  // <control>
+    0x009C,  // <control>
+    0x009D,  // <control>
+    0x009E,  // <control>
+    0x009F,  // <control>
+    0x00A0,  // NO-BREAK SPACE
+    0x0104,  // LATIN CAPITAL LETTER A WITH OGONEK
+    0x02D8,  // BREVE
+    0x0141,  // LATIN CAPITAL LETTER L WITH STROKE
+    0x00A4,  // CURRENCY SIGN
+    0x013D,  // LATIN CAPITAL LETTER L WITH CARON
+    0x015A,  // LATIN CAPITAL LETTER S WITH ACUTE
+    0x00A7,  // SECTION SIGN
+    0x00A8,  // DIAERESIS
+    0x0160,  // LATIN CAPITAL LETTER S WITH CARON
+    0x015E,  // LATIN CAPITAL LETTER S WITH CEDILLA
+    0x0164,  // LATIN CAPITAL LETTER T WITH CARON
+    0x0179,  // LATIN CAPITAL LETTER Z WITH ACUTE
+    0x00AD,  // SOFT HYPHEN
+    0x017D,  // LATIN CAPITAL LETTER Z WITH CARON
+    0x017B,  // LATIN CAPITAL LETTER Z WITH DOT ABOVE
+    0x00B0,  // DEGREE SIGN
+    0x0105,  // LATIN SMALL LETTER A WITH OGONEK
+    0x02DB,  // OGONEK
+    0x0142,  // LATIN SMALL LETTER L WITH STROKE
+    0x00B4,  // ACUTE ACCENT
+    0x013E,  // LATIN SMALL LETTER L WITH CARON
+    0x015B,  // LATIN SMALL LETTER S WITH ACUTE
+    0x02C7,  // CARON
+    0x00B8,  // CEDILLA
+    0x0161,  // LATIN SMALL LETTER S WITH CARON
+    0x015F,  // LATIN SMALL LETTER S WITH CEDILLA
+    0x0165,  // LATIN SMALL LETTER T WITH CARON
+    0x017A,  // LATIN SMALL LETTER Z WITH ACUTE
+    0x02DD,  // DOUBLE ACUTE ACCENT
+    0x017E,  // LATIN SMALL LETTER Z WITH CARON
+    0x017C,  // LATIN SMALL LETTER Z WITH DOT ABOVE
+    0x0154,  // LATIN CAPITAL LETTER R WITH ACUTE
+    0x00C1,  // LATIN CAPITAL LETTER A WITH ACUTE
+    0x00C2,  // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+    0x0102,  // LATIN CAPITAL LETTER A WITH BREVE
+    0x00C4,  // LATIN CAPITAL LETTER A WITH DIAERESIS
+    0x0139,  // LATIN CAPITAL LETTER L WITH ACUTE
+    0x0106,  // LATIN CAPITAL LETTER C WITH ACUTE
+    0x00C7,  // LATIN CAPITAL LETTER C WITH CEDILLA
+    0x010C,  // LATIN CAPITAL LETTER C WITH CARON
+    0x00C9,  // LATIN CAPITAL LETTER E WITH ACUTE
+    0x0118,  // LATIN CAPITAL LETTER E WITH OGONEK
+    0x00CB,  // LATIN CAPITAL LETTER E WITH DIAERESIS
+    0x011A,  // LATIN CAPITAL LETTER E WITH CARON
+    0x00CD,  // LATIN CAPITAL LETTER I WITH ACUTE
+    0x00CE,  // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+    0x010E,  // LATIN CAPITAL LETTER D WITH CARON
+    0x0110,  // LATIN CAPITAL LETTER D WITH STROKE
+    0x0143,  // LATIN CAPITAL LETTER N WITH ACUTE
+    0x0147,  // LATIN CAPITAL LETTER N WITH CARON
+    0x00D3,  // LATIN CAPITAL LETTER O WITH ACUTE
+    0x00D4,  // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+    0x0150,  // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+    0x00D6,  // LATIN CAPITAL LETTER O WITH DIAERESIS
+    0x00D7,  // MULTIPLICATION SIGN
+    0x0158,  // LATIN CAPITAL LETTER R WITH CARON
+    0x016E,  // LATIN CAPITAL LETTER U WITH RING ABOVE
+    0x00DA,  // LATIN CAPITAL LETTER U WITH ACUTE
+    0x0170,  // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+    0x00DC,  // LATIN CAPITAL LETTER U WITH DIAERESIS
+    0x00DD,  // LATIN CAPITAL LETTER Y WITH ACUTE
+    0x0162,  // LATIN CAPITAL LETTER T WITH CEDILLA
+    0x00DF,  // LATIN SMALL LETTER SHARP S
+    0x0155,  // LATIN SMALL LETTER R WITH ACUTE
+    0x00E1,  // LATIN SMALL LETTER A WITH ACUTE
+    0x00E2,  // LATIN SMALL LETTER A WITH CIRCUMFLEX
+    0x0103,  // LATIN SMALL LETTER A WITH BREVE
+    0x00E4,  // LATIN SMALL LETTER A WITH DIAERESIS
+    0x013A,  // LATIN SMALL LETTER L WITH ACUTE
+    0x0107,  // LATIN SMALL LETTER C WITH ACUTE
+    0x00E7,  // LATIN SMALL LETTER C WITH CEDILLA
+    0x010D,  // LATIN SMALL LETTER C WITH CARON
+    0x00E9,  // LATIN SMALL LETTER E WITH ACUTE
+    0x0119,  // LATIN SMALL LETTER E WITH OGONEK
+    0x00EB,  // LATIN SMALL LETTER E WITH DIAERESIS
+    0x011B,  // LATIN SMALL LETTER E WITH CARON
+    0x00ED,  // LATIN SMALL LETTER I WITH ACUTE
+    0x00EE,  // LATIN SMALL LETTER I WITH CIRCUMFLEX
+    0x010F,  // LATIN SMALL LETTER D WITH CARON
+    0x0111,  // LATIN SMALL LETTER D WITH STROKE
+    0x0144,  // LATIN SMALL LETTER N WITH ACUTE
+    0x0148,  // LATIN SMALL LETTER N WITH CARON
+    0x00F3,  // LATIN SMALL LETTER O WITH ACUTE
+    0x00F4,  // LATIN SMALL LETTER O WITH CIRCUMFLEX
+    0x0151,  // LATIN SMALL LETTER O WITH DOUBLE ACUTE
+    0x00F6,  // LATIN SMALL LETTER O WITH DIAERESIS
+    0x00F7,  // DIVISION SIGN
+    0x0159,  // LATIN SMALL LETTER R WITH CARON
+    0x016F,  // LATIN SMALL LETTER U WITH RING ABOVE
+    0x00FA,  // LATIN SMALL LETTER U WITH ACUTE
+    0x0171,  // LATIN SMALL LETTER U WITH DOUBLE ACUTE
+    0x00FC,  // LATIN SMALL LETTER U WITH DIAERESIS
+    0x00FD,  // LATIN SMALL LETTER Y WITH ACUTE
+    0x0163,  // LATIN SMALL LETTER T WITH CEDILLA
+    0x02D9  // DOT ABOVE
+};
+
+const pdf_utf16be* PdfIso88592Encoding::GetToUnicodeTable() const
+{
+    return PdfIso88592Encoding::s_cEncoding;
+}
+
 }; /* namespace PoDoFo */
Index: trunk/src/base/PdfEncoding.h
===================================================================
--- trunk/src/base/PdfEncoding.h	(revision 1701)
+++ trunk/src/base/PdfEncoding.h	(working copy)
@@ -517,7 +517,10 @@
  * contents on PDF pages.
  *
  * It is also called CP-1252 encoding.
+ * This class may be used as base for derived encodings.
  *
+ * \see PdfWin1250Encoding
+ *
  * Do not allocate this class yourself, as allocations
  * might be expensive. Try using PdfFont::WinAnsiEncoding.
  *
@@ -547,6 +550,17 @@
      */
     virtual const pdf_utf16be* GetToUnicodeTable() const;
 
+    /** Add this encoding object to a dictionary
+     *  usually be adding an /Encoding key in font dictionaries.
+     *  
+     *  This method generates array of differences into /Encoding
+     *  dictionary if called from derived class with
+     *  different unicode table.
+     *
+     *  \param rDictionary add the encoding to this dictionary
+     */
+    virtual void AddToDictionary( PdfDictionary & rDictionary ) const;
+
  private:
     static const pdf_utf16be s_cEncoding[256]; ///< conversion table from WinAnsiEncoding to UTF16
 
@@ -726,6 +740,66 @@
 
 };
 
+/**
+* Windows 1250 encoding
+*/
+class PODOFO_API PdfWin1250Encoding : public PdfWinAnsiEncoding
+{
+ public:
+   
+    /** Create a new PdfWin1250Encoding
+     */
+    PdfWin1250Encoding()
+    {
+    }
+
+ protected:
+
+    /** Gets a table of 256 short values which are the 
+     *  big endian unicode code points that are assigned
+     *  to the 256 values of this encoding.
+     *
+     *  This table is used internally to convert an encoded
+     *  string of this encoding to and from unicode.
+     *
+     *  \returns an array of 256 big endian unicode code points
+     */
+    virtual const pdf_utf16be* GetToUnicodeTable() const;
+
+ private:
+    static const pdf_utf16be s_cEncoding[256]; ///< conversion table from ZapfDingbatsEncoding to UTF16
+};
+
+/**
+* ISO8859-2 encoding
+*/
+class PODOFO_API PdfIso88592Encoding : public PdfWinAnsiEncoding
+{
+ public:
+   
+    /** Create a new PdfIso88592Encoding
+     */
+    PdfIso88592Encoding()
+    {
+    }
+
+ protected:
+
+    /** Gets a table of 256 short values which are the 
+     *  big endian unicode code points that are assigned
+     *  to the 256 values of this encoding.
+     *
+     *  This table is used internally to convert an encoded
+     *  string of this encoding to and from unicode.
+     *
+     *  \returns an array of 256 big endian unicode code points
+     */
+    virtual const pdf_utf16be* GetToUnicodeTable() const;
+
+ private:
+    static const pdf_utf16be s_cEncoding[256]; ///< conversion table from ZapfDingbatsEncoding to UTF16
+};
+
 }; /* namespace PoDoFo */
 
 
Index: trunk/src/doc/PdfFontMetricsBase14.h
===================================================================
--- trunk/src/doc/PdfFontMetricsBase14.h	(revision 1701)
+++ trunk/src/doc/PdfFontMetricsBase14.h	(working copy)
@@ -235,7 +235,13 @@
 
     inline double GetCapHeight() const;
 
-private:
+    /** Get a glyph ID by Unicode value. This is needed for generation
+    *  array of widths to /Font element.
+    *
+    *  \param lUnicode the unicode character value
+    *  \returns a glyph ID
+    *  \see PdfFontType1Base14
+    */
     long GetGlyphIdUnicode( long lUnicode ) const;
 
 private :
Index: trunk/src/doc/PdfFontType1Base14.cpp
===================================================================
--- trunk/src/doc/PdfFontType1Base14.cpp	(revision 1701)
+++ trunk/src/doc/PdfFontType1Base14.cpp	(working copy)
@@ -37,6 +37,8 @@
 
 #include "base/PdfDictionary.h"
 #include "base/PdfEncoding.h"
+#include "PdfFontMetricsBase14.h"
+#include "base/PdfArray.h"
 
 namespace PoDoFo {
 
@@ -71,7 +73,35 @@
     
     this->GetObject()->GetDictionary().AddKey( PdfName::KeySubtype, PdfName("Type1"));
     this->GetObject()->GetDictionary().AddKey("BaseFont", PdfName( pMetrics->GetFontname() ) );
-		 
+
+    PdfFontMetricsBase14 *pBase14Metrics = dynamic_cast<PdfFontMetricsBase14*>(pMetrics);
+
+    if (pBase14Metrics == NULL)
+    {
+        PODOFO_RAISE_ERROR( ePdfError_InvalidHandle );
+    }
+
+    // Width array for correct character spacing
+    PdfArray arWidths;
+    for ( int i = m_pEncoding->GetFirstChar(); i <= m_pEncoding->GetLastChar(); i++ )
+    {
+        // Chars below 32 are invisible- don't solve it
+        if (i < 32)
+        {
+            continue;
+        }
+
+        unsigned short shCode = m_pEncoding->GetCharCode(i);
+#ifdef PODOFO_IS_LITTLE_ENDIAN
+        shCode = ((shCode & 0x00FF) << 8) | ((shCode & 0xFF00) >> 8);
+#endif
+
+        arWidths.push_back(PdfObject( (pdf_int64)pBase14Metrics->GetGlyphWidth(pBase14Metrics->GetGlyphIdUnicode(shCode) )));
+    }
+    this->GetObject()->GetDictionary().AddKey("Widths", arWidths );
+    this->GetObject()->GetDictionary().AddKey("FirstChar", PdfVariant( static_cast<pdf_int64>(32) ) );
+    this->GetObject()->GetDictionary().AddKey("LastChar", PdfVariant( static_cast<pdf_int64>(m_pEncoding->GetLastChar()) ) );
+
     m_pEncoding->AddToDictionary( this->GetObject()->GetDictionary() ); // Add encoding key
 //	pDescriptor->GetDictionary().AddKey( "FontName", this->GetBaseFont() );
     //pDescriptor->GetDictionary().AddKey( "FontWeight", (long)m_pMetrics->Weight() );
