#!/usr/bin/perl open UNIDATA, "<", "www.unicode.org/Public/UNIDATA/UnicodeData.txt" or die "www.unicode.org/Public/UNIDATA/UnicodeData.txt: $!"; #my %docom = qw(initial | medial | final | isolated | compat | none |); #+ arabic my %docom = qw(compat | none |); while () { my ($code, undef, $category, undef, undef, $decompose, undef) = split /;/; push @cat_z, $code if $category =~ /^Z/; if ($decompose) { $type = $decompose =~ s/^<(.*)>\s*// ? $1 : "none"; next unless $docom{$type}; next unless $decompose =~ /^([0-9a-f]+) ([0-9a-f]+)$/i; my $pfx = sprintf "%08d %08d %08d", hex $1, hex $2, hex $code; push @compose, [$pfx, hex $1, hex $2, hex $code]; } } open TABLE, ">", "table/compose.h" or die "table/compose.h: $!"; print TABLE <[0] cmp $b->[0] } @compose) { next if $seen{$_->[1],$_->[2]}++; printf TABLE " { 0x%05x, 0x%05x, 0x%05x },\n", $_->[1], $_->[2], $_->[3]; } print TABLE <", "table/category.h"; print TABLE_Z <