1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#!/usr/bin/perl
# /****************************************************************************\
# Part of the XeTeX typesetting system
# copyright (c) 1994-2006 by SIL International
# written by Jonathan Kew
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL SIL INTERNATIONAL BE LIABLE FOR
# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of SIL International
# shall not be used in advertising or otherwise to promote the sale,
# use or other dealings in this Software without prior written
# authorization from SIL International.
# \****************************************************************************/
# script to create unicode-letters.tex by processing UnicodeData.txt
while (<>) {
chomp;
@u = split(/;/);
last if length($u[0]) > 4;
if ($u[1] =~ /First>/) {
$start = hex "0x$u[0]";
$_ = <>;
chomp;
@u = split(/;/);
if ($u[1] =~ /Last>/) {
$end = hex "0x$u[0]";
if ($u[2] =~ /^L/) {
foreach ($start .. $end) {
push(@letters, sprintf("%04X", $_));
}
}
}
}
else {
$lccode{$u[0]} = $u[13] if $u[13] ne '' and length($u[13]) <= 4;
$lccode{$u[0]} = $u[0] if $u[13] eq '' and $u[2] =~ /^L/;
$uccode{$u[0]} = $u[12] if $u[12] ne '' and length($u[12]) <= 4;
$uccode{$u[0]} = $u[0] if $u[12] eq '' and $u[2] =~ /^L/;
if ($u[2] =~ /^L/) {
push(@letters, $u[0]);
}
elsif ($u[2] =~ /^M/) {
push(@marks, $u[0]);
}
elsif (exists $lccode{$u[0]} or exists $uccode{$u[0]}) {
push(@casesym, $u[0]);
}
}
}
$date = `date`;
chomp $date;
print << "__EOT__";
% Do not edit this file!
% Created from UnicodeData.txt by unicode-char-prep.pl on $date.
% In case of errors, fix the Perl script instead.
__EOT__
print << '__EOT__';
\begingroup
\catcode`\{=1 \catcode`\}=2 \catcode`\#=6
\def\C #1 #2 #3 {\global\uccode"#1="#2 \global\lccode"#1="#3 } % case mappings (non-letter)
\def\L #1 #2 #3 {\global\catcode"#1=11 \C #1 #2 #3 % letter with case mappings
\global\XeTeXextmathcode"#1="7"01"#1 } % letters default to class 7 (var), fam 1
\def\l #1 {\L #1 #1 #1 } % letter without case mappings
\let\m=\l % combining mark - treated as uncased letter
__EOT__
for (@letters) {
if (exists $uccode{$_} or exists $lccode{$_}) {
if (($lccode{$_} eq $_) and ($uccode{$_} eq $_)) {
print "\\l $_\n";
}
else {
print "\\L $_ ";
print exists $uccode{$_} ? $uccode{$_} : "0";
print " ";
print exists $lccode{$_} ? $lccode{$_} : "0";
print "\n";
}
}
else {
print "\\l $_\n";
}
}
for (@casesym) {
print "\\C $_ ";
print exists $uccode{$_} ? $uccode{$_} : "0";
print " ";
print exists $lccode{$_} ? $lccode{$_} : "0";
print "\n";
}
for (@marks) {
print "\\m $_\n";
}
print << '__EOT__';
\endgroup
__EOT__
|