dwrite/arabic: Set per-glyph action.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
864745e7bb
commit
bea9c706eb
|
@ -18,4 +18,5 @@ C_SRCS = \
|
|||
opentype.c \
|
||||
scripts.c \
|
||||
shape.c \
|
||||
shapers/arabic.c
|
||||
shapers/arabic.c \
|
||||
shapers/arabic_table.c
|
||||
|
|
|
@ -75,9 +75,91 @@ static void arabic_collect_features(struct scriptshaping_context *context,
|
|||
shape_enable_feature(features, DWRITE_MAKE_OPENTYPE_TAG('m','s','e','t'), 0);
|
||||
}
|
||||
|
||||
enum arabic_joining_type
|
||||
{
|
||||
JOINING_TYPE_U = 0,
|
||||
JOINING_TYPE_L = 1,
|
||||
JOINING_TYPE_R = 2,
|
||||
JOINING_TYPE_D = 3,
|
||||
JOINING_TYPE_C = JOINING_TYPE_D,
|
||||
JOINING_GROUP_ALAPH = 4,
|
||||
JOINING_GROUP_DALATH_RISH = 5,
|
||||
JOINING_TYPES = 6,
|
||||
JOINING_TYPE_T = 6,
|
||||
};
|
||||
|
||||
static const struct arabic_state_table_entry
|
||||
{
|
||||
unsigned char prev_action;
|
||||
unsigned char curr_action;
|
||||
unsigned char next_state;
|
||||
}
|
||||
arabic_state_table[][JOINING_TYPES] =
|
||||
{
|
||||
/* U, L, R, D, ALAPH, DALATH_RISH */
|
||||
/* State 0: prev was U, not willing to join. */
|
||||
{ {NONE,NONE,0}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,6}, },
|
||||
|
||||
/* State 1: prev was R or ISOL/ALAPH, not willing to join. */
|
||||
{ {NONE,NONE,0}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,FIN2,5}, {NONE,ISOL,6}, },
|
||||
|
||||
/* State 2: prev was D/L in ISOL form, willing to join. */
|
||||
{ {NONE,NONE,0}, {NONE,ISOL,2}, {INIT,FINA,1}, {INIT,FINA,3}, {INIT,FINA,4}, {INIT,FINA,6}, },
|
||||
|
||||
/* State 3: prev was D in FINA form, willing to join. */
|
||||
{ {NONE,NONE,0}, {NONE,ISOL,2}, {MEDI,FINA,1}, {MEDI,FINA,3}, {MEDI,FINA,4}, {MEDI,FINA,6}, },
|
||||
|
||||
/* State 4: prev was FINA ALAPH, not willing to join. */
|
||||
{ {NONE,NONE,0}, {NONE,ISOL,2}, {MED2,ISOL,1}, {MED2,ISOL,2}, {MED2,FIN2,5}, {MED2,ISOL,6}, },
|
||||
|
||||
/* State 5: prev was FIN2/FIN3 ALAPH, not willing to join. */
|
||||
{ {NONE,NONE,0}, {NONE,ISOL,2}, {ISOL,ISOL,1}, {ISOL,ISOL,2}, {ISOL,FIN2,5}, {ISOL,ISOL,6}, },
|
||||
|
||||
/* State 6: prev was DALATH/RISH, not willing to join. */
|
||||
{ {NONE,NONE,0}, {NONE,ISOL,2}, {NONE,ISOL,1}, {NONE,ISOL,2}, {NONE,FIN3,5}, {NONE,ISOL,6}, }
|
||||
};
|
||||
|
||||
extern const unsigned short arabic_shaping_table[] DECLSPEC_HIDDEN;
|
||||
|
||||
static unsigned short arabic_get_joining_type(WCHAR ch)
|
||||
{
|
||||
const unsigned short *table = arabic_shaping_table;
|
||||
return table[table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + (ch & 0xf)];
|
||||
}
|
||||
|
||||
static void arabic_set_shaping_action(struct scriptshaping_context *context,
|
||||
unsigned int idx, enum arabic_shaping_action action)
|
||||
{
|
||||
context->glyph_infos[idx].props &= ~(0xf << 16);
|
||||
context->glyph_infos[idx].props |= (action & 0xf) << 16;
|
||||
}
|
||||
|
||||
static void arabic_setup_masks(struct scriptshaping_context *context,
|
||||
const struct shaping_features *features)
|
||||
{
|
||||
unsigned int i, prev = ~0u, state = 0;
|
||||
|
||||
for (i = 0; i < context->length; ++i)
|
||||
{
|
||||
unsigned short this_type = arabic_get_joining_type(context->text[i]);
|
||||
const struct arabic_state_table_entry *entry;
|
||||
|
||||
if (this_type == JOINING_TYPE_T)
|
||||
{
|
||||
arabic_set_shaping_action(context, i, NONE);
|
||||
continue;
|
||||
}
|
||||
|
||||
entry = &arabic_state_table[state][this_type];
|
||||
|
||||
if (entry->prev_action != NONE && prev != ~0u)
|
||||
arabic_set_shaping_action(context, prev, entry->prev_action);
|
||||
|
||||
arabic_set_shaping_action(context, i, entry->curr_action);
|
||||
|
||||
prev = i;
|
||||
state = entry->next_state;
|
||||
}
|
||||
}
|
||||
|
||||
const struct shaper arabic_shaper =
|
||||
|
|
|
@ -0,0 +1,275 @@
|
|||
/* Unicode Arabic shaping */
|
||||
/* generated from https://www.unicode.org/Public/13.0.0/ucd/UCD.zip:ArabicShaping.txt */
|
||||
/* DO NOT EDIT!! */
|
||||
|
||||
#include "windef.h"
|
||||
|
||||
const unsigned short DECLSPEC_HIDDEN arabic_shaping_table[2099] =
|
||||
{
|
||||
/* level 1 offsets */
|
||||
0x0100, 0x010b, 0x010b, 0x011b, 0x0123, 0x012c, 0x013b, 0x014b,
|
||||
0x015b, 0x016b, 0x017b, 0x018b, 0x019b, 0x01ab, 0x01b9, 0x01c8,
|
||||
0x01d6, 0x010b, 0x010b, 0x01e1, 0x010b, 0x010b, 0x010b, 0x01f0,
|
||||
0x0200, 0x020e, 0x021d, 0x022d, 0x023d, 0x024d, 0x010b, 0x010b,
|
||||
0x025d, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x026d, 0x027d, 0x010b, 0x010b,
|
||||
0x028d, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x0297, 0x010b,
|
||||
0x02a7, 0x02b7, 0x02c6, 0x02d6, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b, 0x010b,
|
||||
0x010b, 0x010b, 0x010b, 0x02e5, 0x010b, 0x010b, 0x02f5, 0x0305,
|
||||
/* level 2 offsets */
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0318, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0328, 0x0328, 0x0328, 0x0328, 0x0328,
|
||||
0x0328, 0x0328, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0338, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0327, 0x0328, 0x0348,
|
||||
0x0356, 0x0315, 0x0315, 0x0315, 0x0366, 0x0376, 0x0385, 0x038d,
|
||||
0x0328, 0x039d, 0x03ad, 0x03b5, 0x03bd, 0x03c7, 0x03c7, 0x03d7,
|
||||
0x03e7, 0x03ef, 0x03ff, 0x0316, 0x040f, 0x041e, 0x0328, 0x042e,
|
||||
0x043c, 0x0448, 0x0457, 0x0315, 0x0315, 0x0342, 0x0467, 0x046d,
|
||||
0x03c7, 0x0477, 0x0483, 0x0315, 0x0491, 0x049d, 0x0315, 0x04ad,
|
||||
0x04b9, 0x04c9, 0x0315, 0x0315, 0x0315, 0x04d9, 0x04e8, 0x04f2,
|
||||
0x0345, 0x0502, 0x0328, 0x039a, 0x0315, 0x0315, 0x0512, 0x0521,
|
||||
0x0530, 0x053e, 0x0315, 0x054d, 0x0315, 0x0315, 0x0542, 0x055c,
|
||||
0x0315, 0x053e, 0x0317, 0x056b, 0x0315, 0x0315, 0x0542, 0x057a,
|
||||
0x054d, 0x0315, 0x0586, 0x056b, 0x0315, 0x0315, 0x0542, 0x0595,
|
||||
0x0315, 0x053e, 0x05a3, 0x054d, 0x0315, 0x0315, 0x0319, 0x055c,
|
||||
0x053b, 0x053e, 0x0315, 0x054c, 0x0315, 0x0315, 0x0315, 0x0541,
|
||||
0x0315, 0x0315, 0x0315, 0x05b2, 0x0315, 0x0315, 0x054f, 0x05c2,
|
||||
0x053b, 0x053e, 0x0315, 0x054d, 0x0315, 0x0315, 0x0319, 0x05d0,
|
||||
0x0315, 0x053e, 0x0315, 0x039b, 0x0315, 0x0315, 0x0570, 0x055c,
|
||||
0x0315, 0x053e, 0x0315, 0x054d, 0x0315, 0x0315, 0x0315, 0x0544,
|
||||
0x05de, 0x0315, 0x0315, 0x0315, 0x052d, 0x05e7, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x05f6, 0x05a5, 0x0315, 0x0315,
|
||||
0x0315, 0x0538, 0x0315, 0x0603, 0x0315, 0x0315, 0x0315, 0x0347,
|
||||
0x0613, 0x0620, 0x0328, 0x032b, 0x0548, 0x0315, 0x0315, 0x0315,
|
||||
0x0550, 0x062f, 0x0315, 0x0573, 0x0467, 0x063e, 0x064c, 0x0318,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0550, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x065a, 0x0315, 0x065a, 0x0315, 0x053e, 0x0315, 0x053e,
|
||||
0x0315, 0x0315, 0x0315, 0x0666, 0x031f, 0x0670, 0x0315, 0x0315,
|
||||
0x067e, 0x0315, 0x03c7, 0x03c7, 0x03c7, 0x03c7, 0x03c7, 0x068e,
|
||||
0x0699, 0x03c7, 0x06a0, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x06b0, 0x06be, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x06ca, 0x0315,
|
||||
0x0315, 0x0315, 0x06d6, 0x06e4, 0x06f1, 0x0315, 0x0315, 0x0315,
|
||||
0x0328, 0x0467, 0x0315, 0x0315, 0x0315, 0x0399, 0x0315, 0x0315,
|
||||
0x0701, 0x054c, 0x0315, 0x070e, 0x0399, 0x039b, 0x0315, 0x071e,
|
||||
0x0315, 0x0315, 0x0315, 0x072c, 0x039b, 0x0315, 0x0315, 0x0551,
|
||||
0x073b, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x074b, 0x075a, 0x0763, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0328, 0x0328, 0x0328, 0x0751, 0x076d, 0x0315, 0x058c,
|
||||
0x0315, 0x0315, 0x0315, 0x077b, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0328, 0x0328, 0x0467, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0316, 0x039b, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0316, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0328, 0x0328, 0x0315, 0x0315, 0x0553,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x078b, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0316, 0x079b, 0x0315,
|
||||
0x054f, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x039b, 0x07a9,
|
||||
0x0315, 0x07b5, 0x0315, 0x03c7, 0x03c7, 0x03c7, 0x07c5, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x053c, 0x0315, 0x0328, 0x056c, 0x0315,
|
||||
0x0315, 0x07cf, 0x0315, 0x035f, 0x039b, 0x0315, 0x0315, 0x039a,
|
||||
0x0315, 0x0315, 0x07dd, 0x0315, 0x0315, 0x0549, 0x0315, 0x0315,
|
||||
0x05a4, 0x07e8, 0x07f5, 0x0315, 0x0315, 0x0542, 0x0315, 0x0315,
|
||||
0x0315, 0x0805, 0x054d, 0x0315, 0x056f, 0x0548, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0815, 0x0315, 0x0317, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0328, 0x0315, 0x0328,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0316, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315, 0x0315,
|
||||
0x0315, 0x0315, 0x0315, 0x0315, 0x0823,
|
||||
/* values */
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0000, 0x0006, 0x0006, 0x0000, 0x0006, 0x0006, 0x0000,
|
||||
0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0003, 0x0000, 0x0002, 0x0002, 0x0002, 0x0002, 0x0003,
|
||||
0x0002, 0x0003, 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0002, 0x0002, 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0002, 0x0003, 0x0003, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0003,
|
||||
0x0006, 0x0002, 0x0002, 0x0002, 0x0000, 0x0002, 0x0002, 0x0002,
|
||||
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
|
||||
0x0002, 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0002, 0x0003, 0x0003, 0x0002, 0x0002, 0x0002,
|
||||
0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0003, 0x0002,
|
||||
0x0003, 0x0002, 0x0003, 0x0003, 0x0002, 0x0002, 0x0000, 0x0002,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000,
|
||||
0x0000, 0x0006, 0x0006, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0002, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0003, 0x0000,
|
||||
0x0000, 0x0003, 0x0004, 0x0006, 0x0003, 0x0003, 0x0003, 0x0002,
|
||||
0x0002, 0x0002, 0x0002, 0x0002, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0002, 0x0003, 0x0002, 0x0003, 0x0002, 0x0003, 0x0003,
|
||||
0x0002, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0002, 0x0003,
|
||||
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0002, 0x0002, 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0002, 0x0002,
|
||||
0x0003, 0x0003, 0x0003, 0x0002, 0x0003, 0x0002, 0x0002, 0x0003,
|
||||
0x0003, 0x0003, 0x0002, 0x0002, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0003, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0006, 0x0006, 0x0006,
|
||||
0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0002, 0x0002,
|
||||
0x0003, 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0002, 0x0003, 0x0002, 0x0002, 0x0002, 0x0006, 0x0006, 0x0006,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0000, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0000, 0x0002, 0x0003, 0x0002, 0x0002, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0002, 0x0002,
|
||||
0x0002, 0x0000, 0x0002, 0x0003, 0x0002, 0x0002, 0x0003, 0x0003,
|
||||
0x0000, 0x0003, 0x0003, 0x0003, 0x0002, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006,
|
||||
0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0006,
|
||||
0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0006,
|
||||
0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0000, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006,
|
||||
0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0000, 0x0006,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0000, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0006, 0x0000, 0x0006,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, 0x0006,
|
||||
0x0006, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0006,
|
||||
0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0003, 0x0000, 0x0000, 0x0003, 0x0006, 0x0006, 0x0006, 0x0000,
|
||||
0x0000, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0006, 0x0006, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
|
||||
0x0003, 0x0003, 0x0003, 0x0003, 0x0006, 0x0003, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006,
|
||||
0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0000, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0006, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000,
|
||||
0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000,
|
||||
0x0000, 0x0006, 0x0006, 0x0000, 0x0006, 0x0006, 0x0006, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0006,
|
||||
0x0006, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006,
|
||||
0x0006, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0003, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006,
|
||||
0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006,
|
||||
0x0006, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0006, 0x0000,
|
||||
0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0000,
|
||||
0x0003, 0x0003, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
|
||||
0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006,
|
||||
0x0006, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000,
|
||||
0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0000,
|
||||
0x0006, 0x0000, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0006,
|
||||
0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000,
|
||||
0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006,
|
||||
0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000
|
||||
};
|
|
@ -435,7 +435,7 @@ my @tolower_table = ();
|
|||
my @toupper_table = ();
|
||||
my @digitmap_table = ();
|
||||
my @category_table = ();
|
||||
my @joining_table = ();
|
||||
my @initial_joining_table = ();
|
||||
my @direction_table = ();
|
||||
my @decomp_table = ();
|
||||
my @combining_class_table = ();
|
||||
|
@ -645,11 +645,11 @@ sub load_data()
|
|||
$direction_table[$src] = $bidi;
|
||||
if ($cat eq "Mn" || $cat eq "Me" || $cat eq "Cf")
|
||||
{
|
||||
$joining_table[$src] = $joining_types{"T"};
|
||||
$initial_joining_table[$src] = $joining_types{"T"};
|
||||
}
|
||||
else
|
||||
{
|
||||
$joining_table[$src] = $joining_types{"U"};
|
||||
$initial_joining_table[$src] = $joining_types{"U"};
|
||||
}
|
||||
|
||||
if ($lower ne "")
|
||||
|
@ -1609,6 +1609,7 @@ sub dump_bracket($)
|
|||
sub dump_shaping($)
|
||||
{
|
||||
my $filename = shift;
|
||||
my @joining_table = @initial_joining_table;
|
||||
|
||||
my $INPUT = open_data_file( $UNIDATA, "ArabicShaping.txt" );
|
||||
while (<$INPUT>)
|
||||
|
@ -1650,6 +1651,52 @@ sub dump_shaping($)
|
|||
save_file($filename);
|
||||
}
|
||||
|
||||
################################################################
|
||||
# dump the Arabic shaping table
|
||||
sub dump_arabic_shaping($)
|
||||
{
|
||||
my $filename = shift;
|
||||
my @joining_table = @initial_joining_table;
|
||||
|
||||
my $INPUT = open_data_file( $UNIDATA, "ArabicShaping.txt" );
|
||||
while (<$INPUT>)
|
||||
{
|
||||
next if /^\#/; # skip comments
|
||||
next if /^\s*$/; # skip empty lines
|
||||
next if /\x1a/; # skip ^Z
|
||||
if (/^\s*([0-9a-fA-F]+)\s*;.*;\s*([RLDCUT])\s*;\s*(\w+)/)
|
||||
{
|
||||
my $type = $2;
|
||||
my $group = $3;
|
||||
|
||||
if ($group eq "ALAPH" || $group eq "DALATH RISH")
|
||||
{
|
||||
$joining_table[hex $1] = $joining_types{$group};
|
||||
}
|
||||
else
|
||||
{
|
||||
$joining_table[hex $1] = $joining_types{$type};
|
||||
}
|
||||
|
||||
next;
|
||||
}
|
||||
die "malformed line $_";
|
||||
}
|
||||
close $INPUT;
|
||||
|
||||
open OUTPUT,">$filename.new" or die "Cannot create $filename";
|
||||
print "Building $filename\n";
|
||||
print OUTPUT "/* Unicode Arabic shaping */\n";
|
||||
print OUTPUT "/* generated from $UNIDATA:ArabicShaping.txt */\n";
|
||||
print OUTPUT "/* DO NOT EDIT!! */\n\n";
|
||||
print OUTPUT "#include \"windef.h\"\n\n";
|
||||
|
||||
dump_two_level_mapping( "arabic_shaping_table", 0, 16, @joining_table );
|
||||
|
||||
close OUTPUT;
|
||||
save_file($filename);
|
||||
}
|
||||
|
||||
################################################################
|
||||
# dump the Vertical Orientation table
|
||||
sub dump_vertical($)
|
||||
|
@ -2710,6 +2757,7 @@ dump_mirroring( "dlls/dwrite/mirror.c" );
|
|||
dump_bracket( "dlls/gdi32/uniscribe/bracket.c" );
|
||||
dump_bracket( "dlls/dwrite/bracket.c" );
|
||||
dump_shaping( "dlls/gdi32/uniscribe/shaping.c" );
|
||||
dump_arabic_shaping( "dlls/dwrite/shapers/arabic_table.c" );
|
||||
dump_linebreak( "dlls/gdi32/uniscribe/linebreak.c" );
|
||||
dump_linebreak( "dlls/dwrite/linebreak.c" );
|
||||
dump_scripts( "dlls/dwrite/scripts" );
|
||||
|
|
Loading…
Reference in New Issue