evas: Removed the obsolete Arabic shaping as it's now done in FrBiDi (starting from version 0.19.2).

If you are having any problems with Arabic shaping please make sure you have FriBiDi version 0.19.2 installed at the time of compilation. If your distro doesn't have that version yet, make them upgrade, it's an year and a half old.

SVN revision: 49949
This commit is contained in:
Tom Hacohen 2010-06-30 16:51:49 +00:00
parent d1fcb71f84
commit 3e2b214065
5 changed files with 0 additions and 338 deletions

View File

@ -68,8 +68,6 @@ evas_tiler.c \
evas_regionbuf.c \
evas_pipe.c \
evas_intl_utils.c \
evas_intl/evas_intl_arabic.c \
evas_intl/evas_intl_arabic.h \
evas_map_image.c \
evas_map_image.h

View File

@ -1,316 +0,0 @@
#include "../evas_intl_utils.h"
#ifdef ARABIC_SUPPORT
/* arabic contextualizing */
/* arabic input forms */
#define ARABIC_ALEPH_MADDA 0x0622
#define ARABIC_ALEPH 0x0627
#define ARABIC_BET 0x0628
#define ARABIC_TA_MARBUTA 0x0629
#define ARABIC_TAW 0x062A
#define ARABIC_TA 0x062B
#define ARABIC_GIMEL 0x062C
#define ARABIC_HETH 0x062D
#define ARABIC_HA 0x062E
#define ARABIC_DALET 0x062F
#define ARABIC_DAL 0x0630
#define ARABIC_RESH 0x0631
#define ARABIC_ZAYIN 0x0632
#define ARABIC_SHIN 0x0633
#define ARABIC_SH 0x0634
#define ARABIC_TSADE 0x0635
#define ARABIC_DAD 0x0636
#define ARABIC_TETH 0x0637
#define ARABIC_ZA 0x0638
#define ARABIC_AYIN 0x0639
#define ARABIC_GHAIN 0x063A
#define ARABIC_PE 0x0641
#define ARABIC_QOPH 0x0642
#define ARABIC_KAPH 0x0643
#define ARABIC_LAMED 0x0644
#define ARABIC_MEM 0x0645
#define ARABIC_NUN 0x0646
#define ARABIC_HE 0x0647
#define ARABIC_WAW 0x0648
#define ARABIC_ALEPH_MAQSURA 0x0649
#define ARABIC_YODH 0x064A
/* arabic contextual forms */
#define ARABIC_ISOLATED_ALEPH_MADDA 0xFE81
#define ARABIC_ISOLATED_ALEPH 0xFE8D
#define ARABIC_ISOLATED_TA_MARBUTA 0xFE93
#define ARABIC_ISOLATED_BET 0xFE8F
#define ARABIC_ISOLATED_TAW 0xFE95
#define ARABIC_ISOLATED_TA 0xFE99
#define ARABIC_ISOLATED_GIMEL 0xFE9D
#define ARABIC_ISOLATED_HETH 0xFEA1
#define ARABIC_ISOLATED_HA 0xFEA5
#define ARABIC_ISOLATED_DALET 0xFEA9
#define ARABIC_ISOLATED_DAL 0xFEAB
#define ARABIC_ISOLATED_RESH 0xFEAD
#define ARABIC_ISOLATED_ZAYIN 0xFEAF
#define ARABIC_ISOLATED_SHIN 0xFEB1
#define ARABIC_ISOLATED_SH 0xFEB5
#define ARABIC_ISOLATED_TSADE 0xFEB9
#define ARABIC_ISOLATED_DAD 0xFEBD
#define ARABIC_ISOLATED_TETH 0xFEC1
#define ARABIC_ISOLATED_ZA 0xFEC5
#define ARABIC_ISOLATED_AYIN 0xFEC9
#define ARABIC_ISOLATED_GHAIN 0xFECD
#define ARABIC_ISOLATED_PE 0xFED1
#define ARABIC_ISOLATED_QOPH 0xFED5
#define ARABIC_ISOLATED_KAPH 0xFED9
#define ARABIC_ISOLATED_LAMED 0xFEDD
#define ARABIC_ISOLATED_MEM 0xFEE1
#define ARABIC_ISOLATED_NUN 0xFEE5
#define ARABIC_ISOLATED_HE 0xFEE9
#define ARABIC_ISOLATED_WAW 0xFEED
#define ARABIC_ISOLATED_ALEPH_MAQSURA 0xFEEF
#define ARABIC_ISOLATED_YODH 0xFEF1
#define ARABIC_IS_SPECIAL_LETTER(c) ((c) == ARABIC_ISOLATED_ALEPH || \
(c) == ARABIC_ISOLATED_DALET || \
(c) == ARABIC_ISOLATED_DAL || \
(c) == ARABIC_ISOLATED_RESH || \
(c) == ARABIC_ISOLATED_ZAYIN || \
(c) == ARABIC_ISOLATED_WAW || \
(c) == ARABIC_ISOLATED_TA_MARBUTA)
/* from the first to last (including all forms, and special cases
* like aleph maqsura in some forms*/
#define ARABIC_IS_CONTEXT(c) (((c) >= ARABIC_ISOLATED_ALEPH && (c) <= ARABIC_ISOLATED_YODH + 3) || \
((c) >= ARABIC_ISOLATED_ALEPH_MADDA && (c) <= ARABIC_ISOLATED_ALEPH_MADDA + 3) || \
(c) == 0xFBE8 || \
(c) == 0xFBE9)
#define ARABIC_IS_LETTER(c) ARABIC_IS_CONTEXT(c)
/* used for arabic context logic */
/* each value is the offset from the regular char in unicode */
enum _ArabicContext {
ARABIC_CONTEXT_ISOLATED = 0,
ARABIC_CONTEXT_FINAL = 1,
ARABIC_CONTEXT_INITIAL = 2,
ARABIC_CONTEXT_MEDIAL = 3
};
typedef enum _ArabicContext ArabicContext;
static FriBidiChar
_evas_intl_arabic_isolated_to_context(FriBidiChar chr, ArabicContext context);
static int
_evas_intl_arabic_text_to_isolated(FriBidiChar *text);
static FriBidiChar
_evas_intl_arabic_general_to_isolated(FriBidiChar chr);
/* FIXME: there are issues with text that's already in context
* vowels support is needed (skip them when analysing context)*/
int
evas_intl_arabic_to_context(FriBidiChar *text)
{
int i;
int len;
int start_of_context = 1; /* assume the first is special/non arabic */
int last_is_first = 0;
int last_letter = 0;
/* check for empty string */
if (!*text)
return 0;
len = _evas_intl_arabic_text_to_isolated(text);
/*FIXME: make it skip vowels */
for (i = 0; i < len; i++)
{
if (!ARABIC_IS_LETTER(text[i]))
{
/* mark so it won't be touched,
* though start formating */
if (last_letter && !start_of_context)
{
ArabicContext tmp = (last_is_first) ?
ARABIC_CONTEXT_ISOLATED : ARABIC_CONTEXT_FINAL;
text[i-1] = _evas_intl_arabic_isolated_to_context(
last_letter,
tmp);
}
last_is_first = 0;
start_of_context = 1;
last_letter = 0;
continue;
}
/* adjust the last letter */
last_letter = text[i];
if (ARABIC_IS_SPECIAL_LETTER(text[i]))
{
if (!start_of_context)
text[i] = _evas_intl_arabic_isolated_to_context(text[i], ARABIC_CONTEXT_FINAL);
/* else: leave isolated */
start_of_context = 1;
last_is_first = 0;
continue;
}
if (start_of_context)
{
text[i] = _evas_intl_arabic_isolated_to_context(text[i], ARABIC_CONTEXT_INITIAL);
last_is_first = 1;
}
else
{
text[i] = _evas_intl_arabic_isolated_to_context(text[i], ARABIC_CONTEXT_MEDIAL);
last_is_first = 0;
}
/* spceial chars don't get here. */
start_of_context = 0;
}
/* if it's arabic and not isolated, the last is always final */
i--;
if (last_letter && !start_of_context)
{
ArabicContext tmp = (last_is_first) ? ARABIC_CONTEXT_ISOLATED : ARABIC_CONTEXT_FINAL;
/* because it's medial atm, and should be isolated */
text[i] = _evas_intl_arabic_isolated_to_context(last_letter, tmp);
}
return len;
}
/* I wish I could think about a simpler way to do it.
* Just match every word with it's isolated form */
static FriBidiChar
_evas_intl_arabic_general_to_isolated(FriBidiChar chr)
{
switch (chr)
{
case ARABIC_ALEPH_MADDA:
return ARABIC_ISOLATED_ALEPH_MADDA;
case ARABIC_ALEPH:
return ARABIC_ISOLATED_ALEPH;
case ARABIC_TA_MARBUTA:
return ARABIC_ISOLATED_TA_MARBUTA;
case ARABIC_BET:
return ARABIC_ISOLATED_BET;
case ARABIC_TAW:
return ARABIC_ISOLATED_TAW;
case ARABIC_TA:
return ARABIC_ISOLATED_TA;
case ARABIC_GIMEL:
return ARABIC_ISOLATED_GIMEL;
case ARABIC_HETH:
return ARABIC_ISOLATED_HETH;
case ARABIC_HA:
return ARABIC_ISOLATED_HA;
case ARABIC_DALET:
return ARABIC_ISOLATED_DALET;
case ARABIC_DAL:
return ARABIC_ISOLATED_DAL;
case ARABIC_RESH:
return ARABIC_ISOLATED_RESH;
case ARABIC_ZAYIN:
return ARABIC_ISOLATED_ZAYIN;
case ARABIC_SHIN:
return ARABIC_ISOLATED_SHIN;
case ARABIC_SH:
return ARABIC_ISOLATED_SH;
case ARABIC_TSADE:
return ARABIC_ISOLATED_TSADE;
case ARABIC_DAD:
return ARABIC_ISOLATED_DAD;
case ARABIC_TETH:
return ARABIC_ISOLATED_TETH;
case ARABIC_ZA:
return ARABIC_ISOLATED_ZA;
case ARABIC_AYIN:
return ARABIC_ISOLATED_AYIN;
case ARABIC_GHAIN:
return ARABIC_ISOLATED_GHAIN;
case ARABIC_PE:
return ARABIC_ISOLATED_PE;
case ARABIC_QOPH:
return ARABIC_ISOLATED_QOPH;
case ARABIC_KAPH:
return ARABIC_ISOLATED_KAPH;
case ARABIC_LAMED:
return ARABIC_ISOLATED_LAMED;
case ARABIC_MEM:
return ARABIC_ISOLATED_MEM;
case ARABIC_NUN:
return ARABIC_ISOLATED_NUN;
case ARABIC_HE:
return ARABIC_ISOLATED_HE;
case ARABIC_WAW:
return ARABIC_ISOLATED_WAW;
case ARABIC_ALEPH_MAQSURA:
return ARABIC_ISOLATED_ALEPH_MAQSURA;
case ARABIC_YODH:
return ARABIC_ISOLATED_YODH;
default:
return chr;
}
}
static FriBidiChar
_evas_intl_arabic_isolated_to_context(FriBidiChar chr, ArabicContext context)
{
if (ARABIC_IS_SPECIAL_LETTER(chr))
{
if (context == ARABIC_CONTEXT_INITIAL)
return chr;
else
return chr + ARABIC_CONTEXT_FINAL;
}
/* HACK AROUND ALIF MAQSURA */
else if (chr == ARABIC_ISOLATED_ALEPH_MAQSURA && context > 1)
{
chr = 0xFBE8; /* the initial form */
context -= 2;
}
return chr + context;
}
static int
_evas_intl_arabic_text_to_isolated(FriBidiChar *text)
{
int i = 0;
while (*text)
{
/* if it's not arabic/it's already in context
* it's just returned the same */
*text = _evas_intl_arabic_general_to_isolated(*text);
text++;
i++;
}
return i;
}
#endif

View File

@ -1,9 +0,0 @@
#ifndef _EVAS_INTL_ARABIC
#define _EVAS_INTL_ARABIC
#include "evas_intl_utils.h"
int
evas_intl_arabic_to_context(EvasIntlChar *text);
#endif

View File

@ -91,10 +91,6 @@ evas_intl_utf8_to_visual(const char *text,
tmp_V_to_L_list = *position_V_to_L_list;
}
#ifdef ARABIC_SUPPORT
/* fix arabic context */
evas_intl_arabic_to_context(unicode_in);
#endif
LKL(fribidi_lock);
if (!fribidi_log2vis(unicode_in, len, direction,
unicode_out, tmp_L_to_V_list, tmp_V_to_L_list, tmp_level_list))

View File

@ -20,13 +20,6 @@ typedef FriBidiStrIndex EvasIntlStrIndex;
typedef FriBidiLevel EvasIntlLevel;
/* whether should fix arabic specifix issues */
# define ARABIC_SUPPORT
# ifdef ARABIC_SUPPORT
# include "evas_intl/evas_intl_arabic.h"
# endif
# define evas_intl_position_logical_to_visual(list, position) \
(list) ? list[position] : position;