]> git.lyx.org Git - lyx.git/blobdiff - src/encoding.C
get builddir!=srcdir compiling working; allow successful make even without noweb...
[lyx.git] / src / encoding.C
index 129a29a03678ee249e4d04fd8dc07da9ddbd9101..f8350dd1db7edb613c4b42b8c1723f08444fe24f 100644 (file)
 
 #include <config.h>
 
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
 #include "encoding.h"
 
+static
 Uchar tab_iso8859_1[256] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
@@ -31,6 +36,8 @@ Uchar tab_iso8859_1[256] = {
    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
 };
 
+
+static
 Uchar tab_iso8859_2[256] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
@@ -56,6 +63,8 @@ Uchar tab_iso8859_2[256] = {
    0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9
 };
 
+
+static
 Uchar tab_iso8859_3[256] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
@@ -81,6 +90,8 @@ Uchar tab_iso8859_3[256] = {
    0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9,
 };
 
+
+static
 Uchar tab_iso8859_4[256] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
@@ -106,6 +117,8 @@ Uchar tab_iso8859_4[256] = {
    0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9
 };
 
+
+static
 Uchar tab_iso8859_6_16[256] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
@@ -137,6 +150,8 @@ Uchar tab_iso8859_6_16[256] = {
    0xfe8b, 0xfe8a, 0xfef6, 0xfefa, 0xfef8, 0xfefc, 0x00fe, 0x00ff
 };
 
+
+static
 Uchar tab_iso8859_7[256] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
@@ -162,6 +177,8 @@ Uchar tab_iso8859_7[256] = {
    0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0xffff
 };
 
+
+static
 Uchar tab_iso8859_9[256] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
@@ -187,6 +204,8 @@ Uchar tab_iso8859_9[256] = {
    0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff,
 };
 
+
+static
 Uchar tab_cp1255[256] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
@@ -212,6 +231,8 @@ Uchar tab_cp1255[256] = {
    0x05e8, 0x05e9, 0x05ea, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
 };
 
+
+static
 Uchar tab_koi8[256] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
@@ -239,6 +260,9 @@ Uchar tab_koi8[256] = {
    0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a
 };
 
+
+#ifdef USE_UNICODE_FOR_SYMBOLS
+static
 Uchar tab_symbol[256] = {
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
@@ -289,7 +313,10 @@ Uchar tab_symbol[256] = {
    0xffff, 0x232a, 0x222b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
    0xffff, 0x2309, 0xffff, 0x230b, 0xffff, 0xffff, 0xffff, 0xffff
 };
+#endif
 
+
+static
 unsigned char arabic_table2[63][4] = {
        {0x41, 0x41, 0x41, 0x41}, // 0xc1 = hamza
        {0x42, 0xa1, 0x42, 0x42}, // 0xc2 = ligature madda on alef
@@ -359,6 +386,8 @@ unsigned char arabic_table2[63][4] = {
        {0,0,0,0}, // 0xff
 };
 
+
+static
 unsigned char arabic_table[63][2] = {
        {0xc1, 0xc1}, // 0xc1 = hamza
        {0xc2, 0xc2}, // 0xc2 = ligature madda on alef
@@ -433,7 +462,7 @@ Encoding iso8859_2("latin2",tab_iso8859_2);
 Encoding iso8859_3("latin3",tab_iso8859_3);
 Encoding iso8859_4("latin4",tab_iso8859_4);
 Encoding iso8859_6("unknown",tab_iso8859_6_16);
-Encoding iso8859_7("unknown",tab_iso8859_7);
+Encoding iso8859_7("iso-8859-7",tab_iso8859_7);
 Encoding iso8859_9("latin5",tab_iso8859_9);
 Encoding cp1255("cp1255",tab_cp1255);
 Encoding koi8("koi8-r",tab_koi8);
@@ -444,3 +473,39 @@ Encoding symbol_encoding("",tab_symbol);
 #else
 Encoding symbol_encoding("",tab_iso8859_1);
 #endif
+
+
+bool Encoding::IsComposeChar_hebrew(unsigned char c)
+{
+       return c <= 0xd2 && c >= 0xc0 &&
+               c != 0xce && c != 0xd0;
+}
+
+
+bool Encoding::IsComposeChar_arabic(unsigned char c)
+{
+       return c >= 0xeb && c <= 0xf2;
+}
+
+
+static
+unsigned char const arabic_start = 0xc1;
+
+
+bool Encoding::is_arabic(unsigned char c)
+{
+       return c >= arabic_start && arabic_table[c-arabic_start][0];
+}
+
+
+unsigned char Encoding::TransformChar(unsigned char c,
+                                     Encoding::Letter_Form form)
+{
+       if (!is_arabic(c))
+               return c;
+
+       if (lyxrc.font_norm == "iso10646-1")
+               return arabic_table2[c-arabic_start][form];
+       else
+               return arabic_table[c-arabic_start][form >> 1];
+}