X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/2846c6e3607995ce250435e5998ea6a08f60dd89..d3155315c85212f224fc5df0239182dafdfd6284:/admin/charsets/mapconv diff --git a/admin/charsets/mapconv b/admin/charsets/mapconv index aee23a1120..32ba6421a8 100755 --- a/admin/charsets/mapconv +++ b/admin/charsets/mapconv @@ -1,6 +1,8 @@ #!/bin/sh -# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 +# Copyright (C) 2015 Free Software Foundation, Inc. + +# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # National Institute of Advanced Industrial Science and Technology (AIST) # Registration Number H13PRO009 @@ -30,38 +32,53 @@ # $1: source map file # $2: address pattern for sed (optionally with substitution command) # $3: format of source map file -# GLIBC-1 GLIBC-2 GLIBC-2-7 CZYBORRA IANA UNICODE YASUOKA MICROSOFT +# GLIBC-1 GLIBC-2 GLIBC-2-7 CZYBORRA IANA UNICODE UNICODE2 YASUOKA # $4: awk script -BASE=`basename $1` +## So that eg [A-F] as used by KANJI-DATABASE branch below works as expected. +## Otherwise with LANG=en_US.utf8, CNS-6.map was generated with a +## bogus entry. By experiment, LC_COLLATE=C was not enough. +export LC_ALL=C + +BASE=`expr "$1" : '.*/\(.*\)' '|' "$1"` # basename +FILE="admin/charsets/mapfiles/$BASE" +BASE=`expr "$BASE" : '\(.*\)\.gz$' '|' "$BASE"` # remove any .gz suffix +AWK=${AWK:-awk} case "$3" in GLIBC*) - SOURCE="glibc-2.3.2/localedata/charmaps/${BASE}";; + FILE="$BASE in localedata/charmaps of glibc"; + SOURCE="";; CZYBORRA) + BASE="$BASE.gz"; SOURCE="http://czyborra.com/charsets/${BASE}";; IANA) SOURCE="http://www.iana.org/assignments/charset-reg/${BASE}";; UNICODE) - SOURCE="http://www.unicode.org/Public/MAPPINGS/.../${BASE}";; + SOURCE="http://www.unicode.org/Public/MAPPINGS/VENDORS/ADOBE/${BASE}";; UNICODE2) - SOURCE="http://www.unicode.org/Public/MAPPINGS/.../${BASE}";; + SOURCE="http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/${BASE}";; YASUOKA) - SOURCE="http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/.../${BASE}";; - MICROSOFT) - SOURCE="http://www.microsoft.com/globaldev/reference/oem/${BASE}";; + BASE="$BASE.Z"; + SOURCE="http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/ftp/CJKtable/${BASE}";; KANJI-DATABASE) - SOURCE="data at http://sourceforge.net/cvs/?group_id=26261";; + SOURCE="http://kanji-database.cvs.sourceforge.net/viewvc/*checkout*/kanji-database/kanji-database/data/cns2ucsdkw.txt?revision=1.4";; *) echo "Unknown file type: $3"; exit 1;; esac -echo "# Generated from $SOURCE" +if [ -n "$SOURCE" ] ; then + echo "# Generated from $FILE which is a copy of"; + echo "# $SOURCE" +else + echo "# Generated from $FILE" +fi + if [ -n "$4" ] ; then if [ -f "$4" ] ; then - AWKPROG="gawk -f $4" + AWKPROG="$AWK -f $4" else echo "Awk program does not exist: $4" exit 1 @@ -70,73 +87,67 @@ else AWKPROG=cat fi -if [ "$3" == "GLIBC-1" ] ; then +if [ "$3" = "GLIBC-1" ] ; then # Source format is: # /xXX - sed -n -e "$2 p" < $1 \ + gunzip -c $1 | sed -n -e "${2}p" \ | sed -e 's,]*\)>[ ]*/x\(..\).*,0x\2 0x\1,' \ | sort | ${AWKPROG} -elif [ "$3" == "GLIBC-2" ] ; then +elif [ "$3" = "GLIBC-2" ] ; then # Source format is: # /xXX/xZZ - sed -n -e "$2 p" < $1 \ + gunzip -c $1 | sed -n -e "${2}p" \ | sed -e 's,]*\)>[ ]*/x\(..\)/x\(..\).*,0x\2\3 0x\1,' \ | sort | ${AWKPROG} -elif [ "$3" == "GLIBC-2-7" ] ; then +elif [ "$3" = "GLIBC-2-7" ] ; then # Source format is: # /xXX/xZZ # We must drop MSBs of XX and ZZ - sed -n -e "$2 p" < $1 \ + gunzip -c $1 | sed -n -e "${2}p" \ | sed -e 's/xa/x2/g' -e 's/xb/x3/g' -e 's/xc/x4/g' \ -e 's/xd/x5/g' -e 's/xe/x6/g' -e 's/xf/x7/g' \ -e 's,]*\)>[ ]*/x\(..\)/x\(..\).*,0x\2\3 0x\1,' \ - | tee temp \ | sort | ${AWKPROG} -elif [ "$3" == "CZYBORRA" ] ; then +elif [ "$3" = "CZYBORRA" ] ; then # Source format is: # =XX U+YYYY - zcat $1 | sed -n -e "$2 p" \ + sed -n -e "${2}p" < $1 \ | sed -e 's/=\(..\)[^U]*U+\([0-9A-F]*\).*/0x\1 0x\2/' \ | sort | ${AWKPROG} -elif [ "$3" == "IANA" ] ; then +elif [ "$3" = "IANA" ] ; then # Source format is: # 0xXX 0xYYYY - sed -n -e "$2 p" < $1 \ + sed -n -e "${2}p" < $1 \ | sed -e 's/\(0x[0-9A-Fa-f]*\)[^0]*\(0x[0-9A-Fa-f]*\).*/\1 \2/' \ | sort | ${AWKPROG} -elif [ "$3" == "UNICODE" ] ; then +elif [ "$3" = "UNICODE" ] ; then # Source format is: # YYYY XX - sed -n -e "$2 p" < $1 \ + # We perform reverse sort to prefer the first one in the + # duplicated mappings (e.g. 0x20->U+0020, 0x20->U+00A0). + sed -n -e "${2}p" < $1 \ | sed -e 's/\([0-9A-F]*\)[^0-9A-F]*\([0-9A-F]*\).*/0x\2 0x\1/' \ - | sort | ${AWKPROG} -elif [ "$3" == "UNICODE2" ] ; then + | sort -r +elif [ "$3" = "UNICODE2" ] ; then # Source format is: # 0xXXXX 0xYYYY # ... - sed -n -e "$2 p" < $1 \ + sed -n -e "${2}p" < $1 \ | sed -e 's/\([0-9A-Fx]*\)[^0]*\([0-9A-Fx]*\).*/\1 \2/' \ | ${AWKPROG} | sort -n -k 4,4 -elif [ "$3" == "YASUOKA" ] ; then +elif [ "$3" = "YASUOKA" ] ; then # Source format is: # YYYY 0-XXXX (XXXX is a Kuten code) - sed -n -e "$2 p" < $1 \ + sed -n -e "${2}p" < $1 \ | sed -e 's/\([0-9A-F]*\)[^0]*0-\([0-9]*\).*/0x\2 0x\1/' \ | sort | ${AWKPROG} -elif [ "$3" == "MICROSOFT" ] ; then - # Source format is: - # XX = U+YYYY - sed -n -e "$2 p" < $1 \ - | sed -e 's/\([0-9A-F]*\).*U+\([0-9A-F]*\).*/0x\1 0x\2/' \ - | sort | ${AWKPROG} -elif [ "$3" == "KANJI-DATABASE" ] ; then +elif [ "$3" = "KANJI-DATABASE" ] ; then # Source format is: # C?-XXXX U+YYYYY ..... - sed -n -e "$2 p" < $1 \ + sed -n -e "${2}p" < $1 \ | sed -e 's/...\(....\) U+\([0-9A-F]*\).*/0x\1 0x\2/' \ | sort | ${AWKPROG} else - echo "Invalid arguments" + echo "Invalid arguments: $3" exit 1 fi -# arch-tag: c33acb47-7eb6-4872-b871-15e1447e8f0e