From: Dekel Tsur Date: Mon, 25 Nov 2002 21:29:21 +0000 (+0000) Subject: Patch from Isam Bayazidi X-Git-Tag: 1.6.10~17896 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=467b0c0913e2000f728ff66ca0dc332ef69f39d9;p=features.git Patch from Isam Bayazidi git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5718 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/lib/ChangeLog b/lib/ChangeLog index a85bf2b27b..262cfea8f0 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2002-11-25 Dekel Tsur + + * kbd/arabic.kmap: Fix map (patch from Isam Bayazidi). + 2002-11-21 Angus Leeming * scripts/lyxpreview2bitmap.sh: Don't use "if [ $? -ne 0 ]; then..." diff --git a/lib/kbd/arabic.kmap b/lib/kbd/arabic.kmap index 962f78353f..4dfc1f2176 100644 --- a/lib/kbd/arabic.kmap +++ b/lib/kbd/arabic.kmap @@ -3,6 +3,7 @@ # # Generated automatically from kikbd map by Adil Alsaid # +# reviewed and fixed by Isam Bayazidi , Mohamed Kebdani \kmap q Ö \kmap w Õ @@ -27,7 +28,7 @@ \kmap x Á \kmap c Ä \kmap v Ñ -\kmap b Ð +\kmap b äÇ \kmap n é \kmap m É \kmap ; ã @@ -35,44 +36,41 @@ \kmap "," è \kmap . Ò \kmap / Ø -\kmap ` ; +\kmap ` Ð \kmap [ Ì \kmap ] Ï -\kmap Q î -\kmap W ë -\kmap E ï -\kmap R ì -#\kmap T ¤ -\kmap T ~ +# shifted keyboard + +\kmap Q ? +\kmap W ? +\kmap E ? +\kmap R ? +\kmap T äÅ \kmap Y Å -#\kmap U ~ -\kmap U Ù +\kmap U ` \kmap I ç -\kmap O Î +\kmap O ? \kmap P » -\kmap A ð -\kmap S í +\kmap A ? +\kmap S ? \kmap D [ \kmap F ] -#\kmap G £ -\kmap G ~ +\kmap G äà \kmap H à \kmap J à -#\kmap K º -\kmap K ~ +\kmap K ¬ \kmap L / -\kmap Z ñ -\kmap X ò +\kmap Z ~ +\kmap X ? \kmap C { \kmap V } -#\kmap B ¢ -\kmap B ~ +\kmap B ä \kmap N  -#\kmap M º -\kmap M ~ +\kmap M ' \kmap < "," \kmap > . \kmap ? ¿ \kmap { < \kmap } > +\kmap ~ ? diff --git a/lib/languages b/lib/languages index 0b17fd9c8b..77e443fa5a 100644 --- a/lib/languages +++ b/lib/languages @@ -1,7 +1,7 @@ # name babel name GUI name RTL? encoding code latex options afrikaans afrikaans "Afrikaans" false iso8859-1 af_ZA "" american american "American" false iso8859-1 en_US "" -arabic arabic "Arabic" true iso8859-6 ar_SA "" +arabic arabic "Arabic" true iso8859-6 ar "" austrian austrian "Austrian" false iso8859-1 de_AU "" bahasa bahasa "Bahasa" false iso8859-1 in_ID "" belarusian belarusian "Belarusian" false cp1251 be "" diff --git a/src/ChangeLog b/src/ChangeLog index e0153ef6bd..d3cb7ce95b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2002-11-25 Dekel Tsur + + * encoding.C: Patch from Isam Bayazidi: Fix Arabic shaping. + 2002-11-25 Angus Leeming * BoostFormat.h: wrap code inside #ifdef __GNUG__ block. diff --git a/src/encoding.C b/src/encoding.C index 71749a8381..e9d8217be6 100644 --- a/src/encoding.C +++ b/src/encoding.C @@ -103,24 +103,24 @@ Uchar tab_symbol[256] = { unsigned char arabic_table2[63][4] = { {0x41, 0x41, 0x41, 0x41}, // 0xc1 = hamza - {0x42, 0xa1, 0x42, 0x42}, // 0xc2 = ligature madda on alef - {0x43, 0xa2, 0x43, 0x43}, // 0xc3 = ligature hamza on alef - {0x44, 0xa3, 0x44, 0x44}, // 0xc4 = ligature hamza on waw - {0x45, 0xa4, 0x45, 0x45}, // 0xc5 = ligature hamza under alef - {0xf9, 0xf9, 0xf8, 0xa0}, // 0xc6 = ligature hamza on ya - {0x47, 0xa5, 0xa5, 0xa5}, // 0xc7 = alef + {0x42, 0xa1, 0x42, 0xa1}, // 0xc2 = ligature madda on alef + {0x43, 0xa2, 0x43, 0xa2}, // 0xc3 = ligature hamza on alef + {0x44, 0xa3, 0x44, 0xa3}, // 0xc4 = ligature hamza on waw + {0x45, 0xa4, 0x45, 0xa4}, // 0xc5 = ligature hamza under alef + {0x46, 0xf9, 0xf8, 0xa0}, // 0xc6 = ligature hamza on ya + {0x47, 0xa5, 0x47, 0xa5}, // 0xc7 = alef {0x48, 0xae, 0xac, 0xad}, // 0xc8 = baa - {0x49, 0xb1, 0xaf, 0xb0}, // 0xc9 = taa marbuta + {0x49, 0xb1, 0x49, 0xb1}, // 0xc9 = taa marbuta {0x4a, 0xb4, 0xb2, 0xb3}, // 0xca = taa {0x4b, 0xb7, 0xb5, 0xb6}, // 0xcb = thaa {0x4c, 0xba, 0xb8, 0xb9}, // 0xcc = jeem {0x4d, 0xbd, 0xbb, 0xbc}, // 0xcd = haa {0x4e, 0xc0, 0xbe, 0xbf}, // 0xce = khaa - {0x4f, 0xa6, 0xa6, 0xa6}, // 0xcf = dal + {0x4f, 0xa6, 0x4f, 0xa6}, // 0xcf = dal - {0x50, 0xa7, 0xa7, 0xa7}, // 0xd0 = thal - {0x51, 0xa8, 0xa8, 0xa8}, // 0xd1 = ra - {0x52, 0xa9, 0xa9, 0xa9}, // 0xd2 = zain + {0x50, 0xa7, 0x50, 0xa7}, // 0xd0 = thal + {0x51, 0xa8, 0x51, 0xa8}, // 0xd1 = ra + {0x52, 0xa9, 0x52, 0xa9}, // 0xd2 = zain {0x53, 0xc3, 0xc1, 0xc2}, // 0xd3 = seen {0x54, 0xc6, 0xc4, 0xc5}, // 0xd4 = sheen {0x55, 0xc9, 0xc7, 0xc8}, // 0xd5 = sad @@ -143,8 +143,8 @@ unsigned char arabic_table2[63][4] = { {0x65, 0xe7, 0xe5, 0xe6}, // 0xe5 = meem {0x66, 0xea, 0xe8, 0xe9}, // 0xe6 = noon {0x67, 0xed, 0xeb, 0xec}, // 0xe7 = ha - {0x68, 0xaa, 0xaa, 0xaa}, // 0xe8 = waw - {0x69, 0xab, 0xab, 0xab}, // 0xe9 = alef maksura + {0x68, 0xaa, 0x68, 0xaa}, // 0xe8 = waw + {0x69, 0xab, 0x69, 0xab}, // 0xe9 = alef maksura {0x6a, 0xf0, 0xee, 0xef}, // 0xea = ya {0x6b, 0x6b, 0x6b, 0x6b}, // 0xeb = fathatan {0x6c, 0x6c, 0x6c, 0x6c}, // 0xec = dammatan @@ -253,6 +253,19 @@ bool Encodings::IsComposeChar_hebrew(unsigned char c) } +// Special Arabic letters are ones that do not get connected from left +// they are hamza, alef_madda, alef_hamza, waw_hamza, alef_hamza_under, +// alef, tah_marbota, dal, thal, rah, zai, wow, alef_maksoura + +bool Encodings::is_arabic_special(unsigned char c) +{ + return (c >= 0xc1 && c <= 0xc5) || + c == 0xc7 || c == 0xc9 || + c == 0xcf || c == 0xe8 || + (c >= 0xd0 && c <= 0xd2) || + c == 0xe9; +} + bool Encodings::IsComposeChar_arabic(unsigned char c) { return c >= 0xeb && c <= 0xf2; diff --git a/src/encoding.h b/src/encoding.h index fe429862cd..a985a15645 100644 --- a/src/encoding.h +++ b/src/encoding.h @@ -90,6 +90,9 @@ public: bool IsComposeChar_arabic(unsigned char c); /// static + bool is_arabic_special(unsigned char c); + /// + static bool is_arabic(unsigned char c); /// static diff --git a/src/text.C b/src/text.C index 0616e7e07a..1c1ddb6367 100644 --- a/src/text.C +++ b/src/text.C @@ -150,12 +150,14 @@ unsigned char LyXText::transformChar(unsigned char c, Paragraph * par, } if (Encodings::is_arabic(next_char)) { - if (Encodings::is_arabic(prev_char)) + if (Encodings::is_arabic(prev_char) && + !Encodings::is_arabic_special(prev_char)) return Encodings::TransformChar(c, Encodings::FORM_MEDIAL); else return Encodings::TransformChar(c, Encodings::FORM_INITIAL); } else { - if (Encodings::is_arabic(prev_char)) + if (Encodings::is_arabic(prev_char) && + !Encodings::is_arabic_special(prev_char)) return Encodings::TransformChar(c, Encodings::FORM_FINAL); else return Encodings::TransformChar(c, Encodings::FORM_ISOLATED);