summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/xetexdir/unicode-char-prep.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/xetexdir/unicode-char-prep.pl')
-rw-r--r--Build/source/texk/web2c/xetexdir/unicode-char-prep.pl116
1 files changed, 116 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/xetexdir/unicode-char-prep.pl b/Build/source/texk/web2c/xetexdir/unicode-char-prep.pl
new file mode 100644
index 00000000000..31b27de7dc9
--- /dev/null
+++ b/Build/source/texk/web2c/xetexdir/unicode-char-prep.pl
@@ -0,0 +1,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__