diff options
Diffstat (limited to 'Build/source/texk/web2c/xetexdir/unicode-char-prep.pl')
-rw-r--r-- | Build/source/texk/web2c/xetexdir/unicode-char-prep.pl | 116 |
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__ |