make_unicode: Store the full BiDi direction type in the table.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
2f6918cbe2
commit
d68f8d7b35
|
@ -162,56 +162,14 @@ static inline void dump_types(const char* header, WORD *types, int start, int en
|
||||||
/* Convert the libwine information to the direction enum */
|
/* Convert the libwine information to the direction enum */
|
||||||
static void classify(const WCHAR *string, WORD *chartype, DWORD count, const SCRIPT_CONTROL *c)
|
static void classify(const WCHAR *string, WORD *chartype, DWORD count, const SCRIPT_CONTROL *c)
|
||||||
{
|
{
|
||||||
static const enum directions dir_map[16] =
|
|
||||||
{
|
|
||||||
L, /* unassigned defaults to L */
|
|
||||||
L,
|
|
||||||
R,
|
|
||||||
EN,
|
|
||||||
ES,
|
|
||||||
ET,
|
|
||||||
AN,
|
|
||||||
CS,
|
|
||||||
B,
|
|
||||||
S,
|
|
||||||
WS,
|
|
||||||
ON,
|
|
||||||
AL,
|
|
||||||
NSM,
|
|
||||||
BN,
|
|
||||||
PDF /* also LRE, LRO, RLE, RLO */
|
|
||||||
};
|
|
||||||
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i = 0; i < count; ++i)
|
for (i = 0; i < count; ++i)
|
||||||
{
|
{
|
||||||
chartype[i] = dir_map[get_table_entry( bidi_direction_table, string[i] )];
|
chartype[i] = get_table_entry( bidi_direction_table, string[i] );
|
||||||
switch (chartype[i])
|
if (c->fLegacyBidiClass && chartype[i] == ES)
|
||||||
{
|
{
|
||||||
case ES:
|
if (string[i] == '+' || string[i] == '-') chartype[i] = NI;
|
||||||
if (!c->fLegacyBidiClass) break;
|
|
||||||
switch (string[i])
|
|
||||||
{
|
|
||||||
case '-':
|
|
||||||
case '+': chartype[i] = NI; break;
|
|
||||||
case '/': chartype[i] = CS; break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PDF:
|
|
||||||
switch (string[i])
|
|
||||||
{
|
|
||||||
case 0x202A: chartype[i] = LRE; break;
|
|
||||||
case 0x202B: chartype[i] = RLE; break;
|
|
||||||
case 0x202C: chartype[i] = PDF; break;
|
|
||||||
case 0x202D: chartype[i] = LRO; break;
|
|
||||||
case 0x202E: chartype[i] = RLO; break;
|
|
||||||
case 0x2066: chartype[i] = LRI; break;
|
|
||||||
case 0x2067: chartype[i] = RLI; break;
|
|
||||||
case 0x2068: chartype[i] = FSI; break;
|
|
||||||
case 0x2069: chartype[i] = PDI; break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -363,6 +363,33 @@ my %c2_types =
|
||||||
"PDI" => 11 # C2_OTHERNEUTRAL
|
"PDI" => 11 # C2_OTHERNEUTRAL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
my %bidi_types =
|
||||||
|
(
|
||||||
|
"ON" => 0, # Other Neutrals
|
||||||
|
"L" => 1, # Left-to-Right
|
||||||
|
"R" => 2, # Right-to-Left
|
||||||
|
"AN" => 3, # Arabic Number
|
||||||
|
"EN" => 4, # European Number
|
||||||
|
"AL" => 5, # Right-to-Left Arabic
|
||||||
|
"NSM" => 6, # Non-Spacing Mark
|
||||||
|
"CS" => 7, # Common Number Separator
|
||||||
|
"ES" => 8, # European Number Separator
|
||||||
|
"ET" => 9, # European Number Terminator
|
||||||
|
"BN" => 10, # Boundary Neutral
|
||||||
|
"S" => 11, # Segment Separator
|
||||||
|
"WS" => 12, # Whitespace
|
||||||
|
"B" => 13, # Paragraph Separator
|
||||||
|
"RLO" => 14, # Right-to-Left Override
|
||||||
|
"RLE" => 15, # Right-to-Left Embedding
|
||||||
|
"LRO" => 16, # Left-to-Right Override
|
||||||
|
"LRE" => 17, # Left-to-Right Embedding
|
||||||
|
"PDF" => 18, # Pop Directional Format
|
||||||
|
"LRI" => 19, # Left-to-Right Isolate
|
||||||
|
"RLI" => 20, # Right-to-Left Isolate
|
||||||
|
"FSI" => 21, # First Strong Isolate
|
||||||
|
"PDI" => 22 # Pop Directional Isolate
|
||||||
|
);
|
||||||
|
|
||||||
my %joining_types =
|
my %joining_types =
|
||||||
(
|
(
|
||||||
"U" => 0, # Non_Joining
|
"U" => 0, # Non_Joining
|
||||||
|
@ -2246,10 +2273,11 @@ sub dump_bidi_dir_table($)
|
||||||
|
|
||||||
for (my $i = 0; $i < 65536; $i++)
|
for (my $i = 0; $i < 65536; $i++)
|
||||||
{
|
{
|
||||||
$table[$i] = $directions{$direction_table[$i]} if defined $direction_table[$i];
|
$table[$i] = $bidi_types{$direction_table[$i]} if defined $direction_table[$i];
|
||||||
}
|
}
|
||||||
|
|
||||||
dump_two_level_mapping( "DECLSPEC_HIDDEN bidi_direction_table", 0, @table );
|
dump_two_level_mapping( "DECLSPEC_HIDDEN bidi_direction_table",
|
||||||
|
$bidi_types{"L"}, @table );
|
||||||
|
|
||||||
close OUTPUT;
|
close OUTPUT;
|
||||||
save_file($filename);
|
save_file($filename);
|
||||||
|
|
Loading…
Reference in New Issue