This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add the files from dist/meta to perl's repo
[metaconfig.git] / dist / U / Tr.U
CommitLineData
d8875586
MBT
1?RCS: $Id: Tr.U 1 2006-08-24 12:32:52Z rmanfredi $
2?RCS:
3?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
4?RCS:
5?RCS: You may redistribute only under the terms of the Artistic Licence,
6?RCS: as specified in the README file that comes with the distribution.
7?RCS: You may reuse parts of this distribution only within the terms of
8?RCS: that same Artistic Licence; a copy of which may be found at the root
9?RCS: of the source tree for dist 4.0.
10?RCS:
11?RCS: $Log: Tr.U,v $
12?RCS: Revision 3.0.1.2 1994/10/29 18:00:54 ram
13?RCS: patch43: forgot to quote $@ to protect against "evil" characters
14?RCS:
15?RCS: Revision 3.0.1.1 1994/10/29 15:58:35 ram
16?RCS: patch36: created
17?RCS:
18?X:
19?X: This unit produces a bit of shell code that must be dotted in in order
20?X: to do a character translation. It catches translations to uppercase or
21?X: to lowercase, and then invokes the real tr to perform the job.
22?X:
23?X: This unit is necessary on HP machines (HP strikes again!) with non-ascii
24?X: ROMAN8-charset, where normal letters are not arranged in a row, so a-z
25?X: covers not the whole alphabet but lots of special chars. This was reported
26?X: by Andreas Sahlbach <a.sahlbach@tu-bs.de>.
27?X:
28?X: Units performing a tr '[A-Z]' '[a-z]' or the other way round should include
29?X: us in their dependency and use ./tr instead.
30?X:
31?MAKE:Tr: startsh tr eunicefix
32?MAKE: -pick add $@ %<
33?F:./tr
34?T:up low LC_ALL
35: see whether [:lower:] and [:upper:] are supported character classes
36echo " "
37case "`echo AbyZ | LC_ALL=C $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
38ABYZ)
39 echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
40 up='[:upper:]'
41 low='[:lower:]'
42 ;;
43*) # There is a discontinuity in EBCDIC between 'I' and 'J'
44 # (0xc9 and 0xd1), therefore that is a nice testing point.
45 if test "X$up" = X -o "X$low" = X; then
46 case "`echo IJ | LC_ALL=C $tr '[I-J]' '[i-j]' 2>/dev/null`" in
47 ij) up='[A-Z]'
48 low='[a-z]'
49 ;;
50 esac
51 fi
52 if test "X$up" = X -o "X$low" = X; then
53 case "`echo IJ | LC_ALL=C $tr I-J i-j 2>/dev/null`" in
54 ij) up='A-Z'
55 low='a-z'
56 ;;
57 esac
58 fi
59 if test "X$up" = X -o "X$low" = X; then
60 case "`echo IJ | od -x 2>/dev/null`" in
61 *C9D1*|*c9d1*)
62 echo "Hey, this might be EBCDIC." >&4
63 if test "X$up" = X -o "X$low" = X; then
64 case "`echo IJ | \
65 LC_ALL=C $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
66 ij) up='[A-IJ-RS-Z]'
67 low='[a-ij-rs-z]'
68 ;;
69 esac
70 fi
71 if test "X$up" = X -o "X$low" = X; then
72 case "`echo IJ | LC_ALL=C $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
73 ij) up='A-IJ-RS-Z'
74 low='a-ij-rs-z'
75 ;;
76 esac
77 fi
78 ;;
79 esac
80 fi
81esac
82case "`echo IJ | LC_ALL=C $tr \"$up\" \"$low\" 2>/dev/null`" in
83ij)
84 echo "Using $up and $low to convert case." >&4
85 ;;
86*)
87 echo "I don't know how to translate letters from upper to lower case." >&4
88 echo "Your tr is not acting any way I know of." >&4
89 exit 1
90 ;;
91esac
92: set up the translation script tr, must be called with ./tr of course
93cat >tr <<EOSC
94$startsh
95case "\$1\$2" in
96'[A-Z][a-z]') LC_ALL=C exec $tr '$up' '$low';;
97'[a-z][A-Z]') LC_ALL=C exec $tr '$low' '$up';;
98esac
99LC_ALL=C exec $tr "\$@"
100EOSC
101chmod +x tr
102$eunicefix tr
103