1 #! /bin/sh 2 3 # 4 # Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. 5 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 6 # 7 # This code is free software; you can redistribute it and/or modify it 8 # under the terms of the GNU General Public License version 2 only, as 9 # published by the Free Software Foundation. Oracle designates this 10 # particular file as subject to the "Classpath" exception as provided 11 # by Oracle in the LICENSE file that accompanied this code. 12 # 13 # This code is distributed in the hope that it will be useful, but WITHOUT 14 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16 # version 2 for more details (a copy is included in the LICENSE file that 17 # accompanied this code). 18 # 19 # You should have received a copy of the GNU General Public License version 20 # 2 along with this work; if not, write to the Free Software Foundation, 21 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 22 # 23 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 24 # or visit www.oracle.com if you need additional information or have any 25 # questions. 26 # 27 28 # Generate a charset provider class 29 30 # Required environment variables 31 # NAWK awk tool 32 # TEMPDIR temporary directory 33 # HASHER Hasher program 34 35 SPEC=$1; shift 36 DST=$1; shift 37 38 eval `$NAWK <$SPEC ' 39 /^[ \t]*copyright / { printf "COPYRIGHT_YEARS=\"%s %s\"\n", $2, $3; } 40 /^[ \t]*package / { printf "PKG=%s\n", $2; } 41 /^[ \t]*class / { printf "CLASS=%s\n", $2; } 42 '` 43 44 OUT=$DST/$CLASS.java 45 echo '-->' $OUT 46 47 48 # Header 49 # 50 51 $SH addNotices.sh "$COPYRIGHT_YEARS" > $OUT 52 53 cat <<__END__ >>$OUT 54 55 // -- This file was mechanically generated: Do not edit! -- // 56 57 package $PKG; 58 59 import java.nio.charset.*; 60 61 62 public class $CLASS 63 extends FastCharsetProvider 64 { 65 66 __END__ 67 68 69 # Alias tables 70 # 71 $NAWK <$SPEC >>$OUT ' 72 BEGIN { n = 1; m = 1; } 73 74 /^[ \t]*charset / { 75 csn = $2; cln = $3; 76 lcsn = tolower(csn); 77 lcsns[n++] = lcsn; 78 csns[lcsn] = csn; 79 classMap[lcsn] = cln; 80 if (n > 2) 81 printf " };\n\n"; 82 printf " static final String[] aliases_%s = new String[] {\n", cln; 83 } 84 85 /^[ \t]*alias / { 86 acsns[m++] = tolower($2); 87 aliasMap[tolower($2)] = lcsn; 88 printf " \"%s\",\n", $2; 89 } 90 91 END { 92 printf " };\n\n"; 93 } 94 ' 95 96 97 # Prehashed alias and class maps 98 # 99 $NAWK <$SPEC >$TEMPDIR/aliases ' 100 /^[ \t]*charset / { 101 csn = $2; 102 lcsn = tolower(csn); 103 } 104 /^[ \t]*alias / { 105 an = tolower($2); 106 printf "%-20s \"%s\"\n", an, lcsn; 107 } 108 ' 109 110 $NAWK <$SPEC >$TEMPDIR/classes ' 111 /^[ \t]*charset / { 112 csn = $2; cln = $3; 113 lcsn = tolower(csn); 114 printf "%-20s \"%s\"\n", lcsn, cln; 115 } 116 ' 117 118 ${HASHER} -i Aliases <$TEMPDIR/aliases >>$OUT 119 ${HASHER} -i Classes <$TEMPDIR/classes >>$OUT 120 ${HASHER} -i -e Cache -t Charset <$TEMPDIR/classes >>$OUT 121 122 123 # Constructor 124 # 125 cat <<__END__ >>$OUT 126 public $CLASS() { 127 super("$PKG", new Aliases(), new Classes(), new Cache()); 128 } 129 130 } 131 __END__