📄 gen-script-table.pl
字号:
#!/usr/bin/perl -w ## Script to convert http://www.unicode.org/Public/UNIDATA/Scripts.txt# into a machine-readable table.#######################################################################if (@ARGV != 1) { die "Usage: gen-script-table.pl Scripts.txt > pango-script-table.h\n";}open IN, $ARGV[0] || die "Cannot open $ARGV[0]: $!\n";my @ranges;my $file;my $easy_range;my $i;my $start;my $end;my $script;while (<IN>) { if (/^\#\s+(Scripts-.*.txt)/) { $file = $1; } s/#.*//; next if /^\s*$/; if (!/^([0-9A-F]+)(?:\.\.([0-9A-F]+))?\s*;\s*([A-Za-z_]+)\s*$/) { die "Cannot parse line: '$_'\n"; } if (defined $2) { push @ranges, [ hex $1, hex $2, uc $3 ]; } else { push @ranges, [ hex $1, hex $1, uc $3 ]; }}@ranges = sort { $a->[0] <=> $b->[0] } @ranges;$date = gmtime;print <<"EOT";/* pango-script-table.h: Generated by gen-script-table.pl * * Date: $date * Source: $file * * Do not edit. */EOT$easy_range = 0x2000;print <<"EOT";static const guchar pango_script_easy_table[$easy_range] = {EOT$i = 0;$end = -1;for (my $c = 0; $c < $easy_range; $c++) { if ($c % 3 == 0) { printf "\n "; } if ($c > $end) { $start = $ranges[$i]->[0]; $end = $ranges[$i]->[1]; $script = $ranges[$i]->[2]; $i++; } if ($c < $start) { printf " PANGO_SCRIPT_UNKNOWN,"; } else { printf " PANGO_SCRIPT_%s,", $script; }}if ($end >= $easy_range) { $i--; $ranges[$i]->[0] = $easy_range;}print <<"EOT";};static const struct { gunichar start; guint16 chars; guint16 script;} pango_script_table[] = { EOTfor (; $i <= $#ranges; $i++) { $start = $ranges[$i]->[0]; $end = $ranges[$i]->[1]; $script = $ranges[$i]->[2]; while ($i <= $#ranges - 1 && $ranges[$i + 1]->[0] == $end + 1 && $ranges[$i + 1]->[2] eq $script) { $i++; $end = $ranges[$i]->[1]; } printf " { %#06x, %5d, PANGO_SCRIPT_%s },\n", $start, $end - $start + 1, $script;}printf "};\n";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -