From 94397d96bb473e3d987e8ea778c52dc2ec78fc59 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 18 Mar 2020 16:03:33 +0100 Subject: [PATCH] unicode: Add compression flags to the sortkey table. Signed-off-by: Alexandre Julliard --- nls/sortdefault.nls | Bin 3316820 -> 3354708 bytes tools/make_unicode | 33 +++++++++++++++++++++------------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/nls/sortdefault.nls b/nls/sortdefault.nls index fcd92d90c4a8003ec4afe351efe5c62f95fa76f7..8d6cc62209f770b865f0d2af2ca7fb6d9ff27fb6 100644 GIT binary patch delta 11638 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 A%>V!Z delta 4146 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 |= $flags{$2} if $2; $guids{$guid}->{compr} = @compressions; + $exceptions{"$guid-"} = [ ] unless defined $exceptions{"$guid-"}; + $compr_flags{$guid} = [ ] unless defined $compr_flags{$guid}; push @compressions, [ ]; } else # merge with current one @@ -2495,6 +2497,7 @@ sub dump_sortkey_table($$) $guids{lc $1} = { } unless defined $guids{lc $1}; $guids{lc $1}->{flags} |= $flags{$2} if $2; $guids{lc $1}->{compr} = $guids{$guid}->{compr}; + $compr_flags{lc $1} = $compr_flags{$guid}; } next; } @@ -2510,7 +2513,10 @@ sub dump_sortkey_table($$) } if ($subsection && /^\s*(($re_hex\s+){2,8})$re_key/) { - push @{$compressions[$#compressions]}, [ split(/\s+/,$3), map { hex $_; } split(/\s+/,$1) ]; + my @comp = map { hex $_; } split(/\s+/,$1); + push @{$compressions[$#compressions]}, [ split(/\s+/,$3), @comp ]; + # add compression flags + $compr_flags{$guid}->[$comp[0]] |= @comp >= 6 ? 0xc0 : @comp >= 4 ? 0x80 : 0x40; next; } } @@ -2520,8 +2526,8 @@ sub dump_sortkey_table($$) { $guid = lc $1; $guids{$guid} = { } unless defined $guids{lc $1}; - push @except_guid, ($2 ? "+" : "-") . $guid; - push @exceptions, [ ]; + $ling_flag = ($2 ? "+" : "-"); + $exceptions{"$guid$ling_flag"} = [ ] unless defined $exceptions{"$guid$ling_flag"}; next; } if (/^\s*LOCALENAME\s+([A-Za-z0-9-_]+)/) @@ -2531,7 +2537,7 @@ sub dump_sortkey_table($$) } if (/^\s*($re_hex)\s+$re_key/) { - ${$exceptions[$#exceptions]}[hex $1] = [ split(/\s+/,$2) ]; + $exceptions{"$guid$ling_flag"}->[hex $1] = [ split(/\s+/,$2) ]; next; } } @@ -2556,17 +2562,19 @@ sub dump_sortkey_table($$) $table .= pack "C4", $k[1], $k[0], $k[2], $k[3]; } - for (my $i = 0; $i < @exceptions; $i++) + foreach my $id (sort keys %exceptions) { my $pos = length($table) / 4; - my @exc = @{$exceptions[$i]}; + my @exc = @{$exceptions{$id}}; my @filled; - my $key = (substr($except_guid[$i],0,1) eq "+" ? "ling_except" : "except"); - $guids{substr( $except_guid[$i], 1 )}->{$key} = $pos; + my $key = (substr( $id, -1 ) eq "+" ? "ling_except" : "except"); + my $guid = substr( $id, 0, -1 ); + $guids{$guid}->{$key} = $pos; $pos += 0x100; + my @flags = @{$compr_flags{$guid}} if defined $compr_flags{$guid}; for (my $j = 0; $j < 0x10000; $j++) { - next unless defined $exc[$j]; + next unless defined $exc[$j] || defined $flags[$j]; $filled[$j >> 8] = 1; $j |= 0xff; } @@ -2579,6 +2587,7 @@ sub dump_sortkey_table($$) { next unless $filled[$j >> 8]; my @k = defined $exc[$j] ? @{$exc[$j]} : defined $keys[$j] ? @{$keys[$j]} : (0) x 4; + $k[3] |= $flags[$j] || 0; $table .= pack "C4", $k[1], $k[0], $k[2], $k[3]; } }