about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-11-02 07:51:38 +0000
committerUlrich Drepper <drepper@redhat.com>2000-11-02 07:51:38 +0000
commit18a3a9a3b4f00ed773c452abc7ded7c56cc0859c (patch)
tree005769ffbbf01bb893066cbfba8cdb989e384e43
parent275cdda0e2bf9bed3d7e873e2d038d6ff1a78c75 (diff)
downloadglibc-18a3a9a3b4f00ed773c452abc7ded7c56cc0859c.tar.gz
glibc-18a3a9a3b4f00ed773c452abc7ded7c56cc0859c.tar.xz
glibc-18a3a9a3b4f00ed773c452abc7ded7c56cc0859c.zip
Update.
	* iconvdata/TESTS: Add entries for IBM856, IBM930, IBM933, IBM935,
	IBM937, IBM939, and IBM1046.
	* iconvdata/testdata/IBM1046: New file.
	* iconvdata/testdata/IBM930..UTF8: New file.
	* iconvdata/testdata/IBM1046..UTF8: New file.
	* iconvdata/testdata/IBM933: New file.
	* iconvdata/testdata/IBM935: New file.
	* iconvdata/testdata/IBM937: New file.
	* iconvdata/testdata/IBM856..UTF8: New file.
	* iconvdata/testdata/IBM939: New file.
	* iconvdata/testdata/IBM933..UTF8: New file.
	* iconvdata/testdata/IBM935..UTF8: New file.
	* iconvdata/testdata/IBM930: New file.
	* iconvdata/testdata/IBM856: New file.
	* iconvdata/testdata/IBM937..UTF8: New file.
	* iconvdata/testdata/IBM939..UTF8: New file.
	Contributed by Masahide Washizawa <washi@yamato.ibm.co.jp>.

2000-11-01  Martin Buchholz  <martin@xemacs.org>

	* manual/memory.texi (Hooks for Malloc): Fix `caller' arg docs to
	agree with implementation.

2000-11-01  Ulrich Drepper  <drepper@redhat.com>
-rw-r--r--ChangeLog25
-rw-r--r--iconvdata/TESTS7
-rwxr-xr-xiconvdata/run-iconv-test.sh4
-rw-r--r--iconvdata/testdata/IBM104614
-rw-r--r--iconvdata/testdata/IBM1046..UTF814
-rw-r--r--iconvdata/testdata/IBM85611
-rw-r--r--iconvdata/testdata/IBM856..UTF811
-rw-r--r--iconvdata/testdata/IBM930bin0 -> 59775 bytes
-rw-r--r--iconvdata/testdata/IBM930..UTF8bin0 -> 48136 bytes
-rw-r--r--iconvdata/testdata/IBM933bin0 -> 55021 bytes
-rw-r--r--iconvdata/testdata/IBM933..UTF8bin0 -> 44229 bytes
-rw-r--r--iconvdata/testdata/IBM935bin0 -> 47825 bytes
-rw-r--r--iconvdata/testdata/IBM935..UTF8bin0 -> 38355 bytes
-rw-r--r--iconvdata/testdata/IBM937bin0 -> 102085 bytes
-rw-r--r--iconvdata/testdata/IBM937..UTF8bin0 -> 81911 bytes
-rw-r--r--iconvdata/testdata/IBM939bin0 -> 59775 bytes
-rw-r--r--iconvdata/testdata/IBM939..UTF8bin0 -> 48136 bytes
-rw-r--r--intl/translit.po4
-rw-r--r--intl/tst-translit.c10
-rw-r--r--locale/C-translit.h261
-rw-r--r--locale/C-translit.h.in500
-rw-r--r--locale/gen-translit.pl2
-rw-r--r--manual/memory.texi33
23 files changed, 784 insertions, 112 deletions
diff --git a/ChangeLog b/ChangeLog
index ef46b97215..fd9601e5ec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,30 @@
 2000-11-01  Ulrich Drepper  <drepper@redhat.com>
 
+	* iconvdata/TESTS: Add entries for IBM856, IBM930, IBM933, IBM935,
+	IBM937, IBM939, and IBM1046.
+	* iconvdata/testdata/IBM1046: New file.
+	* iconvdata/testdata/IBM930..UTF8: New file.
+	* iconvdata/testdata/IBM1046..UTF8: New file.
+	* iconvdata/testdata/IBM933: New file.
+	* iconvdata/testdata/IBM935: New file.
+	* iconvdata/testdata/IBM937: New file.
+	* iconvdata/testdata/IBM856..UTF8: New file.
+	* iconvdata/testdata/IBM939: New file.
+	* iconvdata/testdata/IBM933..UTF8: New file.
+	* iconvdata/testdata/IBM935..UTF8: New file.
+	* iconvdata/testdata/IBM930: New file.
+	* iconvdata/testdata/IBM856: New file.
+	* iconvdata/testdata/IBM937..UTF8: New file.
+	* iconvdata/testdata/IBM939..UTF8: New file.
+	Contributed by Masahide Washizawa <washi@yamato.ibm.co.jp>.
+
+2000-11-01  Martin Buchholz  <martin@xemacs.org>
+
+	* manual/memory.texi (Hooks for Malloc): Fix `caller' arg docs to
+	agree with implementation.
+
+2000-11-01  Ulrich Drepper  <drepper@redhat.com>
+
 	* sysdeps/unix/sysv/linux/bits/time.h (CLK_TCK): Cast sysconf result
 	to __clock_t.
 	* sysdeps/unix/sysv/linux/alpha/bits/time.h: Likewise.
diff --git a/iconvdata/TESTS b/iconvdata/TESTS
index eb3776537a..cbdae2ea44 100644
--- a/iconvdata/TESTS
+++ b/iconvdata/TESTS
@@ -88,3 +88,10 @@ EUC-TW			EUC-TW			Y	UTF8
 GBK			GBK			Y	UTF8
 BIG5HKSCS		BIG5HKSCS		Y	UTF8
 UTF-7			UTF-7			N	UTF8
+IBM856			IBM856			N	UTF8
+IBM930			IBM930			N	UTF8
+IBM933			IBM933			N	UTF8
+IBM935			IBM935			N	UTF8
+IBM937			IBM937			N	UTF8
+IBM939			IBM939			N	UTF8
+IBM1046			IBM1046			Y	UTF8
diff --git a/iconvdata/run-iconv-test.sh b/iconvdata/run-iconv-test.sh
index a000b68b14..532006cdcb 100755
--- a/iconvdata/run-iconv-test.sh
+++ b/iconvdata/run-iconv-test.sh
@@ -84,8 +84,8 @@ while read from to subset targets; do
     rm -f $temp1 $temp2
 
     # Now test some bigger text, entirely in ASCII.  If ASCII is no subset
-    # of the coded character set we test we convert the test to this
-    # coded character set.  Otherwise we convert to all the TARGETS.
+    # of the coded character set we convert the text to this coded character
+    # set.  Otherwise we convert to all the TARGETS.
     if test $subset = Y; then
       echo $ac_n "   suntzu: $from -> $t -> $to $ac_c"
       $PROG -f $from -t $t testdata/suntzus |
diff --git a/iconvdata/testdata/IBM1046 b/iconvdata/testdata/IBM1046
new file mode 100644
index 0000000000..0a43e9523a
--- /dev/null
+++ b/iconvdata/testdata/IBM1046
@@ -0,0 +1,14 @@
+  ! " # $ % & ' ( ) * + , - . / 0 
+1 2 3 4 5 6 7 8 9 : ; < = > ? @ A 
+B C D E F G H I J K L M N O P Q R 
+S T U V W X Y Z [ \ ] ^ _ ` a b c 
+d e f g h i j k l m n o p q r s t 
+u v w x y z { | } ~        
+                 
+                 
+                 
+                 
+                 
+                 
+                 
+  
diff --git a/iconvdata/testdata/IBM1046..UTF8 b/iconvdata/testdata/IBM1046..UTF8
new file mode 100644
index 0000000000..ed2679759b
--- /dev/null
+++ b/iconvdata/testdata/IBM1046..UTF8
@@ -0,0 +1,14 @@
+  ! " # $ % & ' ( ) * + , - . / 0 
+1 2 3 4 5 6 7 8 9 : ; < = > ? @ A 
+B C D E F G H I J K L M N O P Q R 
+S T U V W X Y Z [ \ ] ^ _ ` a b c 
+d e f g h i j k l m n o p q r s t 
+u v w x y z { | } ~  ﺈ × ÷ س ش ص 
+ض ﹱ ˆ ■ │ ─ ┐ ┌ └ ┘ ﹹ ﹻ ﹽ ﹿ ﹷ ﺊ ﻰ 
+ﻳ ﻲ ﻎ ﻏ ﻐ ﻶ ﻸ ﻺ ﻼ   ﺂ ﺄ ﺈ ¤ ﺎ ﺋ ﺑ 
+ﺗ ﺛ ﺟ ﺣ ، ­ ﺧ ﺳ ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ 
+٩ ﺷ ؛ ﺻ ﺿ ﻊ ؟ ﻋ ء آ أ ؤ إ ئ ا ب ة 
+ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ 
+ﻌ ﺂ ﺄ ﺎ ﻓ ـ ف ق ك ل م ن ه و ى ي ً 
+ٌ ٍ َ ُ ِ ّ ْ ﻗ ﻛ ﻟ ​ ﻵ ﻷ ﻹ ﻻ ﻣ ﻧ 
+ﻬ ﻩ 
diff --git a/iconvdata/testdata/IBM856 b/iconvdata/testdata/IBM856
new file mode 100644
index 0000000000..83af6682f1
--- /dev/null
+++ b/iconvdata/testdata/IBM856
@@ -0,0 +1,11 @@
+  ! " # $ % & ' ( ) * + , - . / 0 
+1 2 3 4 5 6 7 8 9 : ; < = > ? @ A 
+B C D E F G H I J K L M N O P Q R 
+S T U V W X Y Z [ \ ] ^ _ ` a b c 
+d e f g h i j k l m n o p q r s t 
+u v w x y z { | } ~        
+                 
+                 
+                 
+                 
+             
diff --git a/iconvdata/testdata/IBM856..UTF8 b/iconvdata/testdata/IBM856..UTF8
new file mode 100644
index 0000000000..080fe1d679
--- /dev/null
+++ b/iconvdata/testdata/IBM856..UTF8
@@ -0,0 +1,11 @@
+  ! " # $ % & ' ( ) * + , - . / 0 
+1 2 3 4 5 6 7 8 9 : ; < = > ? @ A 
+B C D E F G H I J K L M N O P Q R 
+S T U V W X Y Z [ \ ] ^ _ ` a b c 
+d e f g h i j k l m n o p q r s t 
+u v w x y z { | } ~  א ב ג ד ה ו 
+ז ח ט י ך כ ל ם מ ן נ ס ע ף פ ץ צ 
+ק ר ש ת £ × ® ¬ ½ ¼ « » ░ ▒ ▓ │ ┤ 
+© ╣ ║ ╗ ╝ ¢ ¥ ┐ └ ┴ ┬ ├ ─ ┼ ╚ ╔ ╩ 
+╦ ╠ ═ ╬ ¤ ┘ ┌ █ ▄ ¦ ▀ µ ‾ ´ ­ ± ‗ 
+¾ ¶ § ÷ ¸ ° ¨ • ¹ ³ ² ■   
diff --git a/iconvdata/testdata/IBM930 b/iconvdata/testdata/IBM930
new file mode 100644
index 0000000000..551cb60797
--- /dev/null
+++ b/iconvdata/testdata/IBM930
Binary files differdiff --git a/iconvdata/testdata/IBM930..UTF8 b/iconvdata/testdata/IBM930..UTF8
new file mode 100644
index 0000000000..89df7f15ac
--- /dev/null
+++ b/iconvdata/testdata/IBM930..UTF8
Binary files differdiff --git a/iconvdata/testdata/IBM933 b/iconvdata/testdata/IBM933
new file mode 100644
index 0000000000..4da0d685bf
--- /dev/null
+++ b/iconvdata/testdata/IBM933
Binary files differdiff --git a/iconvdata/testdata/IBM933..UTF8 b/iconvdata/testdata/IBM933..UTF8
new file mode 100644
index 0000000000..025c6285e1
--- /dev/null
+++ b/iconvdata/testdata/IBM933..UTF8
Binary files differdiff --git a/iconvdata/testdata/IBM935 b/iconvdata/testdata/IBM935
new file mode 100644
index 0000000000..4a905ee27e
--- /dev/null
+++ b/iconvdata/testdata/IBM935
Binary files differdiff --git a/iconvdata/testdata/IBM935..UTF8 b/iconvdata/testdata/IBM935..UTF8
new file mode 100644
index 0000000000..2fc263d52a
--- /dev/null
+++ b/iconvdata/testdata/IBM935..UTF8
Binary files differdiff --git a/iconvdata/testdata/IBM937 b/iconvdata/testdata/IBM937
new file mode 100644
index 0000000000..58bd2632c4
--- /dev/null
+++ b/iconvdata/testdata/IBM937
Binary files differdiff --git a/iconvdata/testdata/IBM937..UTF8 b/iconvdata/testdata/IBM937..UTF8
new file mode 100644
index 0000000000..61282f129f
--- /dev/null
+++ b/iconvdata/testdata/IBM937..UTF8
Binary files differdiff --git a/iconvdata/testdata/IBM939 b/iconvdata/testdata/IBM939
new file mode 100644
index 0000000000..9c10f9e416
--- /dev/null
+++ b/iconvdata/testdata/IBM939
Binary files differdiff --git a/iconvdata/testdata/IBM939..UTF8 b/iconvdata/testdata/IBM939..UTF8
new file mode 100644
index 0000000000..89df7f15ac
--- /dev/null
+++ b/iconvdata/testdata/IBM939..UTF8
Binary files differdiff --git a/intl/translit.po b/intl/translit.po
index 0dc380f525..5df5d0d064 100644
--- a/intl/translit.po
+++ b/intl/translit.po
@@ -3,7 +3,7 @@ msgstr ""
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 
 msgid "test"
-msgstr ""
+msgstr "߻"
 
 msgid "onemore"
-msgstr "ssdf"
+msgstr "*="
diff --git a/intl/tst-translit.c b/intl/tst-translit.c
index f12d99bc96..8e4e6ca26d 100644
--- a/intl/tst-translit.c
+++ b/intl/tst-translit.c
@@ -39,11 +39,11 @@ main (void)
   puts (s);								      \
   result |= strcmp (s, exp) != 0;
 
-  TEST ("test", "aeoeueAEUEOEss");
-  TEST ("test", "aeoeueAEUEOEss");
-  TEST ("onemore", "AEssdf");
-  TEST ("onemore", "AEssdf");
-  TEST ("test", "aeoeueAEUEOEss");
+  TEST ("test", "<<(C) AEss>>");
+  TEST ("test", "<<(C) AEss>>");
+  TEST ("onemore", "1/2*1/2=1/4");
+  TEST ("onemore", "1/2*1/2=1/4");
+  TEST ("test", "<<(C) AEss>>");
 
   return result;
 }
diff --git a/locale/C-translit.h b/locale/C-translit.h
index 2d42133b0e..09c0346636 100644
--- a/locale/C-translit.h
+++ b/locale/C-translit.h
@@ -1,21 +1,258 @@
-#define NTRANSLIT 20
+#define NTRANSLIT 425
 static const uint32_t translit_from_idx[] =
 {
      0,    2,    4,    6,    8,   10,   12,   14,   16,   18,   20,   22,
-    24,   26,   28,   30,   32,   34,   36,   38
+    24,   26,   28,   30,   32,   34,   36,   38,   40,   42,   44,   46,
+    48,   50,   52,   54,   56,   58,   60,   62,   64,   66,   68,   70,
+    72,   74,   76,   78,   80,   82,   84,   86,   88,   90,   92,   94,
+    96,   98,  100,  102,  104,  106,  108,  110,  112,  114,  116,  118,
+   120,  122,  124,  126,  128,  130,  132,  134,  136,  138,  140,  142,
+   144,  146,  148,  150,  152,  154,  156,  158,  160,  162,  164,  166,
+   168,  170,  172,  174,  176,  178,  180,  182,  184,  186,  188,  190,
+   192,  194,  196,  198,  200,  202,  204,  206,  208,  210,  212,  214,
+   216,  218,  220,  222,  224,  226,  228,  230,  232,  234,  236,  238,
+   240,  242,  244,  246,  248,  250,  252,  254,  256,  258,  260,  262,
+   264,  266,  268,  270,  272,  274,  276,  278,  280,  282,  284,  286,
+   288,  290,  292,  294,  296,  298,  300,  302,  304,  306,  308,  310,
+   312,  314,  316,  318,  320,  322,  324,  326,  328,  330,  332,  334,
+   336,  338,  340,  342,  344,  346,  348,  350,  352,  354,  356,  358,
+   360,  362,  364,  366,  368,  370,  372,  374,  376,  378,  380,  382,
+   384,  386,  388,  390,  392,  394,  396,  398,  400,  402,  404,  406,
+   408,  410,  412,  414,  416,  418,  420,  422,  424,  426,  428,  430,
+   432,  434,  436,  438,  440,  442,  444,  446,  448,  450,  452,  454,
+   456,  458,  460,  462,  464,  466,  468,  470,  472,  474,  476,  478,
+   480,  482,  484,  486,  488,  490,  492,  494,  496,  498,  500,  502,
+   504,  506,  508,  510,  512,  514,  516,  518,  520,  522,  524,  526,
+   528,  530,  532,  534,  536,  538,  540,  542,  544,  546,  548,  550,
+   552,  554,  556,  558,  560,  562,  564,  566,  568,  570,  572,  574,
+   576,  578,  580,  582,  584,  586,  588,  590,  592,  594,  596,  598,
+   600,  602,  604,  606,  608,  610,  612,  614,  616,  618,  620,  622,
+   624,  626,  628,  630,  632,  634,  636,  638,  640,  642,  644,  646,
+   648,  650,  652,  654,  656,  658,  660,  662,  664,  666,  668,  670,
+   672,  674,  676,  678,  680,  682,  684,  686,  688,  690,  692,  694,
+   696,  698,  700,  702,  704,  706,  708,  710,  712,  714,  716,  718,
+   720,  722,  724,  726,  728,  730,  732,  734,  736,  738,  740,  742,
+   744,  746,  748,  750,  752,  754,  756,  758,  760,  762,  764,  766,
+   768,  770,  772,  774,  776,  778,  780,  782,  784,  786,  788,  790,
+   792,  794,  796,  798,  800,  802,  804,  806,  808,  810,  812,  814,
+   816,  818,  820,  822,  824,  826,  828,  830,  832,  834,  836,  838,
+   840,  842,  844,  846,  848
 };
 static const wchar_t translit_from_tbl[] =
-  L"\xa9" L"\0" L"\xab" L"\0" L"\xae" L"\0" L"\xbb" L"\0" L"\xbc" L"\0"
-  L"\xbd" L"\0" L"\xbe" L"\0" L"\xc4" L"\0" L"\xc5" L"\0" L"\xc6" L"\0"
-  L"\xd6" L"\0" L"\xdc" L"\0" L"\xdf" L"\0" L"\xe4" L"\0" L"\xe5" L"\0"
-  L"\xe6" L"\0" L"\xf6" L"\0" L"\xfc" L"\0" L"\x201c" L"\0" L"\x201d";
+  L"\x00a0" L"\0" L"\x00a9" L"\0" L"\x00ab" L"\0" L"\x00ad" L"\0" L"\x00ae"
+  L"\0" L"\x00bb" L"\0" L"\x00bc" L"\0" L"\x00bd" L"\0" L"\x00be" L"\0"
+  L"\x00c6" L"\0" L"\x00df" L"\0" L"\x00e6" L"\0" L"\x0132" L"\0" L"\x0133"
+  L"\0" L"\x017f" L"\0" L"\x01c7" L"\0" L"\x01c8" L"\0" L"\x01c9" L"\0"
+  L"\x01ca" L"\0" L"\x01cb" L"\0" L"\x01cc" L"\0" L"\x01f1" L"\0" L"\x01f2"
+  L"\0" L"\x01f3" L"\0" L"\x02dc" L"\0" L"\x2002" L"\0" L"\x2003" L"\0"
+  L"\x2004" L"\0" L"\x2005" L"\0" L"\x2006" L"\0" L"\x2008" L"\0" L"\x2009"
+  L"\0" L"\x200a" L"\0" L"\x2010" L"\0" L"\x2011" L"\0" L"\x2012" L"\0"
+  L"\x2013" L"\0" L"\x2014" L"\0" L"\x2015" L"\0" L"\x2018" L"\0" L"\x2019"
+  L"\0" L"\x201a" L"\0" L"\x201b" L"\0" L"\x201c" L"\0" L"\x201d" L"\0"
+  L"\x201e" L"\0" L"\x201f" L"\0" L"\x2020" L"\0" L"\x2022" L"\0" L"\x2024"
+  L"\0" L"\x2025" L"\0" L"\x2026" L"\0" L"\x2039" L"\0" L"\x203a" L"\0"
+  L"\x203c" L"\0" L"\x2048" L"\0" L"\x2049" L"\0" L"\x20a8" L"\0" L"\x20ac"
+  L"\0" L"\x2100" L"\0" L"\x2101" L"\0" L"\x2102" L"\0" L"\x2105" L"\0"
+  L"\x2106" L"\0" L"\x210a" L"\0" L"\x210b" L"\0" L"\x210c" L"\0" L"\x210d"
+  L"\0" L"\x210e" L"\0" L"\x2110" L"\0" L"\x2111" L"\0" L"\x2112" L"\0"
+  L"\x2113" L"\0" L"\x2115" L"\0" L"\x2116" L"\0" L"\x2119" L"\0" L"\x211a"
+  L"\0" L"\x211b" L"\0" L"\x211c" L"\0" L"\x211d" L"\0" L"\x2121" L"\0"
+  L"\x2122" L"\0" L"\x2124" L"\0" L"\x2126" L"\0" L"\x2128" L"\0" L"\x212c"
+  L"\0" L"\x212d" L"\0" L"\x212f" L"\0" L"\x2130" L"\0" L"\x2131" L"\0"
+  L"\x2133" L"\0" L"\x2134" L"\0" L"\x2139" L"\0" L"\x2153" L"\0" L"\x2154"
+  L"\0" L"\x2155" L"\0" L"\x2156" L"\0" L"\x2157" L"\0" L"\x2158" L"\0"
+  L"\x2159" L"\0" L"\x215a" L"\0" L"\x215b" L"\0" L"\x215c" L"\0" L"\x215d"
+  L"\0" L"\x215e" L"\0" L"\x215f" L"\0" L"\x2160" L"\0" L"\x2161" L"\0"
+  L"\x2162" L"\0" L"\x2163" L"\0" L"\x2164" L"\0" L"\x2165" L"\0" L"\x2166"
+  L"\0" L"\x2167" L"\0" L"\x2168" L"\0" L"\x2169" L"\0" L"\x216a" L"\0"
+  L"\x216b" L"\0" L"\x216c" L"\0" L"\x216d" L"\0" L"\x216e" L"\0" L"\x216f"
+  L"\0" L"\x2170" L"\0" L"\x2171" L"\0" L"\x2172" L"\0" L"\x2173" L"\0"
+  L"\x2174" L"\0" L"\x2175" L"\0" L"\x2176" L"\0" L"\x2177" L"\0" L"\x2178"
+  L"\0" L"\x2179" L"\0" L"\x217a" L"\0" L"\x217b" L"\0" L"\x217c" L"\0"
+  L"\x217d" L"\0" L"\x217e" L"\0" L"\x217f" L"\0" L"\x2190" L"\0" L"\x2192"
+  L"\0" L"\x21d0" L"\0" L"\x21d2" L"\0" L"\x2212" L"\0" L"\x2215" L"\0"
+  L"\x2264" L"\0" L"\x2265" L"\0" L"\x226a" L"\0" L"\x226b" L"\0" L"\x2460"
+  L"\0" L"\x2461" L"\0" L"\x2462" L"\0" L"\x2463" L"\0" L"\x2464" L"\0"
+  L"\x2465" L"\0" L"\x2466" L"\0" L"\x2467" L"\0" L"\x2468" L"\0" L"\x2469"
+  L"\0" L"\x246a" L"\0" L"\x246b" L"\0" L"\x246c" L"\0" L"\x246d" L"\0"
+  L"\x246e" L"\0" L"\x246f" L"\0" L"\x2470" L"\0" L"\x2471" L"\0" L"\x2472"
+  L"\0" L"\x2473" L"\0" L"\x2474" L"\0" L"\x2475" L"\0" L"\x2476" L"\0"
+  L"\x2477" L"\0" L"\x2478" L"\0" L"\x2479" L"\0" L"\x247a" L"\0" L"\x247b"
+  L"\0" L"\x247c" L"\0" L"\x247d" L"\0" L"\x247e" L"\0" L"\x247f" L"\0"
+  L"\x2480" L"\0" L"\x2481" L"\0" L"\x2482" L"\0" L"\x2483" L"\0" L"\x2484"
+  L"\0" L"\x2485" L"\0" L"\x2486" L"\0" L"\x2487" L"\0" L"\x2488" L"\0"
+  L"\x2489" L"\0" L"\x248a" L"\0" L"\x248b" L"\0" L"\x248c" L"\0" L"\x248d"
+  L"\0" L"\x248e" L"\0" L"\x248f" L"\0" L"\x2490" L"\0" L"\x2491" L"\0"
+  L"\x2492" L"\0" L"\x2493" L"\0" L"\x2494" L"\0" L"\x2495" L"\0" L"\x2496"
+  L"\0" L"\x2497" L"\0" L"\x2498" L"\0" L"\x2499" L"\0" L"\x249a" L"\0"
+  L"\x249b" L"\0" L"\x249c" L"\0" L"\x249d" L"\0" L"\x249e" L"\0" L"\x249f"
+  L"\0" L"\x24a0" L"\0" L"\x24a1" L"\0" L"\x24a2" L"\0" L"\x24a3" L"\0"
+  L"\x24a4" L"\0" L"\x24a5" L"\0" L"\x24a6" L"\0" L"\x24a7" L"\0" L"\x24a8"
+  L"\0" L"\x24a9" L"\0" L"\x24aa" L"\0" L"\x24ab" L"\0" L"\x24ac" L"\0"
+  L"\x24ad" L"\0" L"\x24ae" L"\0" L"\x24af" L"\0" L"\x24b0" L"\0" L"\x24b1"
+  L"\0" L"\x24b2" L"\0" L"\x24b3" L"\0" L"\x24b4" L"\0" L"\x24b5" L"\0"
+  L"\x24b6" L"\0" L"\x24b7" L"\0" L"\x24b8" L"\0" L"\x24b9" L"\0" L"\x24ba"
+  L"\0" L"\x24bb" L"\0" L"\x24bc" L"\0" L"\x24bd" L"\0" L"\x24be" L"\0"
+  L"\x24bf" L"\0" L"\x24c0" L"\0" L"\x24c1" L"\0" L"\x24c2" L"\0" L"\x24c3"
+  L"\0" L"\x24c4" L"\0" L"\x24c5" L"\0" L"\x24c6" L"\0" L"\x24c7" L"\0"
+  L"\x24c8" L"\0" L"\x24c9" L"\0" L"\x24ca" L"\0" L"\x24cb" L"\0" L"\x24cc"
+  L"\0" L"\x24cd" L"\0" L"\x24ce" L"\0" L"\x24cf" L"\0" L"\x24d0" L"\0"
+  L"\x24d1" L"\0" L"\x24d2" L"\0" L"\x24d3" L"\0" L"\x24d4" L"\0" L"\x24d5"
+  L"\0" L"\x24d6" L"\0" L"\x24d7" L"\0" L"\x24d8" L"\0" L"\x24d9" L"\0"
+  L"\x24da" L"\0" L"\x24db" L"\0" L"\x24dc" L"\0" L"\x24dd" L"\0" L"\x24de"
+  L"\0" L"\x24df" L"\0" L"\x24e0" L"\0" L"\x24e1" L"\0" L"\x24e2" L"\0"
+  L"\x24e3" L"\0" L"\x24e4" L"\0" L"\x24e5" L"\0" L"\x24e6" L"\0" L"\x24e7"
+  L"\0" L"\x24e8" L"\0" L"\x24e9" L"\0" L"\x24ea" L"\0" L"\x2500" L"\0"
+  L"\x2502" L"\0" L"\x250c" L"\0" L"\x2510" L"\0" L"\x2514" L"\0" L"\x2518"
+  L"\0" L"\x251c" L"\0" L"\x2524" L"\0" L"\x252c" L"\0" L"\x2534" L"\0"
+  L"\x253c" L"\0" L"\x3000" L"\0" L"\xfb00" L"\0" L"\xfb01" L"\0" L"\xfb02"
+  L"\0" L"\xfb03" L"\0" L"\xfb04" L"\0" L"\xfb06" L"\0" L"\xfb29" L"\0"
+  L"\xfe4d" L"\0" L"\xfe4e" L"\0" L"\xfe4f" L"\0" L"\xfe50" L"\0" L"\xfe52"
+  L"\0" L"\xfe54" L"\0" L"\xfe55" L"\0" L"\xfe56" L"\0" L"\xfe57" L"\0"
+  L"\xfe59" L"\0" L"\xfe5a" L"\0" L"\xfe5b" L"\0" L"\xfe5c" L"\0" L"\xfe5f"
+  L"\0" L"\xfe60" L"\0" L"\xfe61" L"\0" L"\xfe62" L"\0" L"\xfe63" L"\0"
+  L"\xfe64" L"\0" L"\xfe65" L"\0" L"\xfe66" L"\0" L"\xfe68" L"\0" L"\xfe69"
+  L"\0" L"\xfe6a" L"\0" L"\xfe6b" L"\0" L"\xff01" L"\0" L"\xff02" L"\0"
+  L"\xff03" L"\0" L"\xff04" L"\0" L"\xff05" L"\0" L"\xff06" L"\0" L"\xff07"
+  L"\0" L"\xff08" L"\0" L"\xff09" L"\0" L"\xff0a" L"\0" L"\xff0b" L"\0"
+  L"\xff0c" L"\0" L"\xff0d" L"\0" L"\xff0e" L"\0" L"\xff0f" L"\0" L"\xff10"
+  L"\0" L"\xff11" L"\0" L"\xff12" L"\0" L"\xff13" L"\0" L"\xff14" L"\0"
+  L"\xff15" L"\0" L"\xff16" L"\0" L"\xff17" L"\0" L"\xff18" L"\0" L"\xff19"
+  L"\0" L"\xff1a" L"\0" L"\xff1b" L"\0" L"\xff1c" L"\0" L"\xff1d" L"\0"
+  L"\xff1e" L"\0" L"\xff1f" L"\0" L"\xff20" L"\0" L"\xff21" L"\0" L"\xff22"
+  L"\0" L"\xff23" L"\0" L"\xff24" L"\0" L"\xff25" L"\0" L"\xff26" L"\0"
+  L"\xff27" L"\0" L"\xff28" L"\0" L"\xff29" L"\0" L"\xff2a" L"\0" L"\xff2b"
+  L"\0" L"\xff2c" L"\0" L"\xff2d" L"\0" L"\xff2e" L"\0" L"\xff2f" L"\0"
+  L"\xff30" L"\0" L"\xff31" L"\0" L"\xff32" L"\0" L"\xff33" L"\0" L"\xff34"
+  L"\0" L"\xff35" L"\0" L"\xff36" L"\0" L"\xff37" L"\0" L"\xff38" L"\0"
+  L"\xff39" L"\0" L"\xff3a" L"\0" L"\xff3b" L"\0" L"\xff3c" L"\0" L"\xff3d"
+  L"\0" L"\xff3e" L"\0" L"\xff3f" L"\0" L"\xff40" L"\0" L"\xff41" L"\0"
+  L"\xff42" L"\0" L"\xff43" L"\0" L"\xff44" L"\0" L"\xff45" L"\0" L"\xff46"
+  L"\0" L"\xff47" L"\0" L"\xff48" L"\0" L"\xff49" L"\0" L"\xff4a" L"\0"
+  L"\xff4b" L"\0" L"\xff4c" L"\0" L"\xff4d" L"\0" L"\xff4e" L"\0" L"\xff4f"
+  L"\0" L"\xff50" L"\0" L"\xff51" L"\0" L"\xff52" L"\0" L"\xff53" L"\0"
+  L"\xff54" L"\0" L"\xff55" L"\0" L"\xff56" L"\0" L"\xff57" L"\0" L"\xff58"
+  L"\0" L"\xff59" L"\0" L"\xff5a" L"\0" L"\xff5b" L"\0" L"\xff5c" L"\0"
+  L"\xff5d" L"\0" L"\xff5e";
 static const uint32_t translit_to_idx[] =
 {
-     0,    5,    9,   14,   18,   23,   28,   33,   37,   41,   45,   49,
-    53,   57,   61,   65,   69,   73,   77,   80
+     0,    3,    8,   12,   15,   20,   24,   29,   34,   39,   43,   47,
+    51,   55,   59,   62,   66,   70,   74,   78,   82,   86,   90,   94,
+    98,  101,  104,  107,  110,  113,  116,  119,  122,  125,  128,  131,
+   134,  137,  140,  143,  146,  149,  152,  155,  158,  161,  165,  168,
+   171,  174,  177,  181,  186,  189,  192,  196,  200,  204,  208,  213,
+   218,  223,  226,  231,  236,  239,  242,  245,  248,  251,  254,  257,
+   260,  263,  266,  270,  273,  276,  279,  282,  285,  290,  296,  299,
+   304,  307,  310,  313,  316,  319,  322,  325,  328,  331,  336,  341,
+   346,  351,  356,  361,  366,  371,  376,  381,  386,  391,  395,  398,
+   402,  407,  411,  414,  418,  423,  429,  433,  436,  440,  445,  448,
+   451,  454,  457,  460,  464,  469,  473,  476,  480,  485,  491,  495,
+   498,  502,  507,  510,  513,  516,  519,  523,  527,  531,  535,  538,
+   541,  545,  549,  553,  557,  562,  567,  572,  577,  582,  587,  592,
+   597,  602,  608,  614,  620,  626,  632,  638,  644,  650,  656,  662,
+   668,  673,  678,  683,  688,  693,  698,  703,  708,  713,  719,  725,
+   731,  737,  743,  749,  755,  761,  767,  773,  779,  783,  787,  791,
+   795,  799,  803,  807,  811,  815,  820,  825,  830,  835,  840,  845,
+   850,  855,  860,  865,  870,  875,  880,  885,  890,  895,  900,  905,
+   910,  915,  920,  925,  930,  935,  940,  945,  950,  955,  960,  965,
+   970,  975,  980,  985,  990,  995, 1000, 1005, 1010, 1015, 1020, 1025,
+  1030, 1035, 1040, 1045, 1050, 1055, 1060, 1065, 1070, 1075, 1080, 1085,
+  1090, 1095, 1100, 1105, 1110, 1115, 1120, 1125, 1130, 1135, 1140, 1145,
+  1150, 1155, 1160, 1165, 1170, 1175, 1180, 1185, 1190, 1195, 1200, 1205,
+  1210, 1215, 1220, 1225, 1230, 1235, 1240, 1245, 1250, 1255, 1260, 1265,
+  1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 1298, 1301,
+  1305, 1309, 1313, 1318, 1323, 1327, 1330, 1333, 1336, 1339, 1342, 1345,
+  1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381,
+  1384, 1387, 1390, 1393, 1396, 1399, 1402, 1405, 1408, 1411, 1414, 1417,
+  1420, 1423, 1426, 1429, 1432, 1435, 1438, 1441, 1444, 1447, 1450, 1453,
+  1456, 1459, 1462, 1465, 1468, 1471, 1474, 1477, 1480, 1483, 1486, 1489,
+  1492, 1495, 1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 1522, 1525,
+  1528, 1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561,
+  1564, 1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 1591, 1594, 1597,
+  1600, 1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 1627, 1630, 1633,
+  1636, 1639, 1642, 1645, 1648, 1651, 1654, 1657, 1660, 1663, 1666, 1669,
+  1672, 1675, 1678, 1681, 1684
 };
 static const wchar_t translit_to_tbl[] =
-  L"(C)\0" L"\0" L"<<\0" L"\0" L"(R)\0" L"\0" L">>\0" L"\0" L"1/4\0" L"\0"
-  L"1/2\0" L"\0" L"3/4\0" L"\0" L"AE\0" L"\0" L"AA\0" L"\0" L"AE\0" L"\0"
-  L"OE\0" L"\0" L"UE\0" L"\0" L"ss\0" L"\0" L"ae\0" L"\0" L"aa\0" L"\0"
-  L"ae\0" L"\0" L"oe\0" L"\0" L"ue\0" L"\0" L"\"\0" L"\0" L"\"\0";
+  L" \0" L"\0" L"(C)\0" L"\0" L"<<\0" L"\0" L"-\0" L"\0" L"(R)\0" L"\0"
+  L">>\0" L"\0" L"1/4\0" L"\0" L"1/2\0" L"\0" L"3/4\0" L"\0" L"AE\0" L"\0"
+  L"ss\0" L"\0" L"ae\0" L"\0" L"IJ\0" L"\0" L"ij\0" L"\0" L"s\0" L"\0" L"LJ\0"
+  L"\0" L"Lj\0" L"\0" L"lj\0" L"\0" L"NJ\0" L"\0" L"Nj\0" L"\0" L"nj\0" L"\0"
+  L"DZ\0" L"\0" L"Dz\0" L"\0" L"dz\0" L"\0" L"~\0" L"\0" L" \0" L"\0" L" \0"
+  L"\0" L" \0" L"\0" L" \0" L"\0" L" \0" L"\0" L" \0" L"\0" L" \0" L"\0"
+  L" \0" L"\0" L"-\0" L"\0" L"-\0" L"\0" L"-\0" L"\0" L"-\0" L"\0" L"-\0"
+  L"\0" L"-\0" L"\0" L"'\0" L"\0" L"'\0" L"\0" L",\0" L"\0" L"'\0" L"\0"
+  L"\"\0" L"\0" L"\"\0" L"\0" L",,\0" L"\0" L"\"\0" L"\0" L"+\0" L"\0" L"o\0"
+  L"\0" L".\0" L"\0" L"..\0" L"\0" L"...\0" L"\0" L"<\0" L"\0" L">\0" L"\0"
+  L"!!\0" L"\0" L"?!\0" L"\0" L"!?\0" L"\0" L"Rs\0" L"\0" L"EUR\0" L"\0"
+  L"a/c\0" L"\0" L"a/s\0" L"\0" L"C\0" L"\0" L"c/o\0" L"\0" L"c/u\0" L"\0"
+  L"g\0" L"\0" L"H\0" L"\0" L"H\0" L"\0" L"H\0" L"\0" L"h\0" L"\0" L"I\0"
+  L"\0" L"I\0" L"\0" L"L\0" L"\0" L"l\0" L"\0" L"N\0" L"\0" L"No\0" L"\0"
+  L"P\0" L"\0" L"Q\0" L"\0" L"R\0" L"\0" L"R\0" L"\0" L"R\0" L"\0" L"TEL\0"
+  L"\0" L"(TM)\0" L"\0" L"Z\0" L"\0" L"Ohm\0" L"\0" L"Z\0" L"\0" L"B\0" L"\0"
+  L"C\0" L"\0" L"e\0" L"\0" L"E\0" L"\0" L"F\0" L"\0" L"M\0" L"\0" L"o\0"
+  L"\0" L"i\0" L"\0" L"1/3\0" L"\0" L"2/3\0" L"\0" L"1/5\0" L"\0" L"2/5\0"
+  L"\0" L"3/5\0" L"\0" L"4/5\0" L"\0" L"1/6\0" L"\0" L"5/6\0" L"\0" L"1/8\0"
+  L"\0" L"3/8\0" L"\0" L"5/8\0" L"\0" L"7/8\0" L"\0" L"1/\0" L"\0" L"I\0"
+  L"\0" L"II\0" L"\0" L"III\0" L"\0" L"IV\0" L"\0" L"V\0" L"\0" L"VI\0" L"\0"
+  L"VII\0" L"\0" L"VIII\0" L"\0" L"IX\0" L"\0" L"X\0" L"\0" L"XI\0" L"\0"
+  L"XII\0" L"\0" L"L\0" L"\0" L"C\0" L"\0" L"D\0" L"\0" L"M\0" L"\0" L"i\0"
+  L"\0" L"ii\0" L"\0" L"iii\0" L"\0" L"iv\0" L"\0" L"v\0" L"\0" L"vi\0" L"\0"
+  L"vii\0" L"\0" L"viii\0" L"\0" L"ix\0" L"\0" L"x\0" L"\0" L"xi\0" L"\0"
+  L"xii\0" L"\0" L"l\0" L"\0" L"c\0" L"\0" L"d\0" L"\0" L"m\0" L"\0" L"<-\0"
+  L"\0" L"->\0" L"\0" L"<=\0" L"\0" L"=>\0" L"\0" L"-\0" L"\0" L"/\0" L"\0"
+  L"<=\0" L"\0" L">=\0" L"\0" L"<<\0" L"\0" L">>\0" L"\0" L"(1)\0" L"\0"
+  L"(2)\0" L"\0" L"(3)\0" L"\0" L"(4)\0" L"\0" L"(5)\0" L"\0" L"(6)\0" L"\0"
+  L"(7)\0" L"\0" L"(8)\0" L"\0" L"(9)\0" L"\0" L"(10)\0" L"\0" L"(11)\0" L"\0"
+  L"(12)\0" L"\0" L"(13)\0" L"\0" L"(14)\0" L"\0" L"(15)\0" L"\0" L"(16)\0"
+  L"\0" L"(17)\0" L"\0" L"(18)\0" L"\0" L"(19)\0" L"\0" L"(20)\0" L"\0"
+  L"(1)\0" L"\0" L"(2)\0" L"\0" L"(3)\0" L"\0" L"(4)\0" L"\0" L"(5)\0" L"\0"
+  L"(6)\0" L"\0" L"(7)\0" L"\0" L"(8)\0" L"\0" L"(9)\0" L"\0" L"(10)\0" L"\0"
+  L"(11)\0" L"\0" L"(12)\0" L"\0" L"(13)\0" L"\0" L"(14)\0" L"\0" L"(15)\0"
+  L"\0" L"(16)\0" L"\0" L"(17)\0" L"\0" L"(18)\0" L"\0" L"(19)\0" L"\0"
+  L"(20)\0" L"\0" L"1.\0" L"\0" L"2.\0" L"\0" L"3.\0" L"\0" L"4.\0" L"\0"
+  L"5.\0" L"\0" L"6.\0" L"\0" L"7.\0" L"\0" L"8.\0" L"\0" L"9.\0" L"\0"
+  L"10.\0" L"\0" L"11.\0" L"\0" L"12.\0" L"\0" L"13.\0" L"\0" L"14.\0" L"\0"
+  L"15.\0" L"\0" L"16.\0" L"\0" L"17.\0" L"\0" L"18.\0" L"\0" L"19.\0" L"\0"
+  L"20.\0" L"\0" L"(a)\0" L"\0" L"(b)\0" L"\0" L"(c)\0" L"\0" L"(d)\0" L"\0"
+  L"(e)\0" L"\0" L"(f)\0" L"\0" L"(g)\0" L"\0" L"(h)\0" L"\0" L"(i)\0" L"\0"
+  L"(j)\0" L"\0" L"(k)\0" L"\0" L"(l)\0" L"\0" L"(m)\0" L"\0" L"(n)\0" L"\0"
+  L"(o)\0" L"\0" L"(p)\0" L"\0" L"(q)\0" L"\0" L"(r)\0" L"\0" L"(s)\0" L"\0"
+  L"(t)\0" L"\0" L"(u)\0" L"\0" L"(v)\0" L"\0" L"(w)\0" L"\0" L"(x)\0" L"\0"
+  L"(y)\0" L"\0" L"(z)\0" L"\0" L"(A)\0" L"\0" L"(B)\0" L"\0" L"(C)\0" L"\0"
+  L"(D)\0" L"\0" L"(E)\0" L"\0" L"(F)\0" L"\0" L"(G)\0" L"\0" L"(H)\0" L"\0"
+  L"(I)\0" L"\0" L"(J)\0" L"\0" L"(K)\0" L"\0" L"(L)\0" L"\0" L"(M)\0" L"\0"
+  L"(N)\0" L"\0" L"(O)\0" L"\0" L"(P)\0" L"\0" L"(Q)\0" L"\0" L"(R)\0" L"\0"
+  L"(S)\0" L"\0" L"(T)\0" L"\0" L"(U)\0" L"\0" L"(V)\0" L"\0" L"(W)\0" L"\0"
+  L"(X)\0" L"\0" L"(Y)\0" L"\0" L"(Z)\0" L"\0" L"(a)\0" L"\0" L"(b)\0" L"\0"
+  L"(c)\0" L"\0" L"(d)\0" L"\0" L"(e)\0" L"\0" L"(f)\0" L"\0" L"(g)\0" L"\0"
+  L"(h)\0" L"\0" L"(i)\0" L"\0" L"(j)\0" L"\0" L"(k)\0" L"\0" L"(l)\0" L"\0"
+  L"(m)\0" L"\0" L"(n)\0" L"\0" L"(o)\0" L"\0" L"(p)\0" L"\0" L"(q)\0" L"\0"
+  L"(r)\0" L"\0" L"(s)\0" L"\0" L"(t)\0" L"\0" L"(u)\0" L"\0" L"(v)\0" L"\0"
+  L"(w)\0" L"\0" L"(x)\0" L"\0" L"(y)\0" L"\0" L"(z)\0" L"\0" L"(0)\0" L"\0"
+  L"-\0" L"\0" L"|\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0"
+  L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0"
+  L" \0" L"\0" L"ff\0" L"\0" L"fi\0" L"\0" L"fl\0" L"\0" L"ffi\0" L"\0"
+  L"ffl\0" L"\0" L"st\0" L"\0" L"+\0" L"\0" L"_\0" L"\0" L"_\0" L"\0" L"_\0"
+  L"\0" L",\0" L"\0" L".\0" L"\0" L";\0" L"\0" L":\0" L"\0" L"?\0" L"\0"
+  L"!\0" L"\0" L"(\0" L"\0" L")\0" L"\0" L"{\0" L"\0" L"}\0" L"\0" L"#\0"
+  L"\0" L"&\0" L"\0" L"*\0" L"\0" L"+\0" L"\0" L"-\0" L"\0" L"<\0" L"\0"
+  L">\0" L"\0" L"=\0" L"\0" L"\\\0" L"\0" L"$\0" L"\0" L"%\0" L"\0" L"@\0"
+  L"\0" L"!\0" L"\0" L"\"\0" L"\0" L"#\0" L"\0" L"$\0" L"\0" L"%\0" L"\0"
+  L"&\0" L"\0" L"'\0" L"\0" L"(\0" L"\0" L")\0" L"\0" L"*\0" L"\0" L"+\0"
+  L"\0" L",\0" L"\0" L"-\0" L"\0" L".\0" L"\0" L"/\0" L"\0" L"0\0" L"\0"
+  L"1\0" L"\0" L"2\0" L"\0" L"3\0" L"\0" L"4\0" L"\0" L"5\0" L"\0" L"6\0"
+  L"\0" L"7\0" L"\0" L"8\0" L"\0" L"9\0" L"\0" L":\0" L"\0" L";\0" L"\0"
+  L"<\0" L"\0" L"=\0" L"\0" L">\0" L"\0" L"?\0" L"\0" L"@\0" L"\0" L"A\0"
+  L"\0" L"B\0" L"\0" L"C\0" L"\0" L"D\0" L"\0" L"E\0" L"\0" L"F\0" L"\0"
+  L"G\0" L"\0" L"H\0" L"\0" L"I\0" L"\0" L"J\0" L"\0" L"K\0" L"\0" L"L\0"
+  L"\0" L"M\0" L"\0" L"N\0" L"\0" L"O\0" L"\0" L"P\0" L"\0" L"Q\0" L"\0"
+  L"R\0" L"\0" L"S\0" L"\0" L"T\0" L"\0" L"U\0" L"\0" L"V\0" L"\0" L"W\0"
+  L"\0" L"X\0" L"\0" L"Y\0" L"\0" L"Z\0" L"\0" L"[\0" L"\0" L"\\\0" L"\0"
+  L"]\0" L"\0" L"^\0" L"\0" L"_\0" L"\0" L"`\0" L"\0" L"a\0" L"\0" L"b\0"
+  L"\0" L"c\0" L"\0" L"d\0" L"\0" L"e\0" L"\0" L"f\0" L"\0" L"g\0" L"\0"
+  L"h\0" L"\0" L"i\0" L"\0" L"j\0" L"\0" L"k\0" L"\0" L"l\0" L"\0" L"m\0"
+  L"\0" L"n\0" L"\0" L"o\0" L"\0" L"p\0" L"\0" L"q\0" L"\0" L"r\0" L"\0"
+  L"s\0" L"\0" L"t\0" L"\0" L"u\0" L"\0" L"v\0" L"\0" L"w\0" L"\0" L"x\0"
+  L"\0" L"y\0" L"\0" L"z\0" L"\0" L"{\0" L"\0" L"|\0" L"\0" L"}\0" L"\0"
+  L"~\0";
diff --git a/locale/C-translit.h.in b/locale/C-translit.h.in
index 4734789ecb..93abad4415 100644
--- a/locale/C-translit.h.in
+++ b/locale/C-translit.h.in
@@ -20,78 +20,428 @@
 
 /* The entries here have to be sorted relative to the input string.  */
 
-/* <U00A9> COPYRIGHT SIGN.  */
-"\xa9"   "(C)"
-
-/* <U00AB> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK.  */
-"\xab"   "<<"
-
-/* <U00AE> REGISTERED SIGN.  */
-"\xae"   "(R)"
-
-/* <U00BB> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK.  */
-"\xbb"   ">>"
-
-/* <U00BC> VULGAR FRACTION ONE QUARTER.  */
-"\xbc"   "1/4"
-
-/* <U00BD> VULGAR FRACTION ONE HALF.  */
-"\xbd"   "1/2"
-
-/* <U00BE> VULGAR FRACTION THREE QUARTERS.  */
-"\xbe"   "3/4"
-
-/* <U00C4> LATIN CAPITAL LETTER A WITH DIAERESIS.  */
-/* XXX It is not clear whether this is the best transliteration for
-   all locales.  If not, we probably have to take it out completely.  */
-"\xc4"   "AE"
-
-/* <U00C5> LATIN CAPITAL LETTER A WITH RING ABOVE.  */
-/* XXX It is not clear whether this is the best transliteration for
-   all locales.  If not, we probably have to take it out completely.  */
-"\xc5"   "AA"
-
-/* <U00C6> LATIN CAPITAL LETTER AE.  */
-"\xc6"   "AE"
-
-/* <U00D6> LATIN CAPITAL LETTER O WITH DIAERESIS.  */
-/* XXX It is not clear whether this is the best transliteration for
-   all locales.  If not, we probably have to take it out completely.  */
-"\xd6"   "OE"
-
-/* <U00DC> LATIN CAPITAL LETTER U WITH DIAERESIS.  */
-/* XXX It is not clear whether this is the best transliteration for
-   all locales.  If not, we probably have to take it out completely.  */
-"\xdc"   "UE"
-
-/* <U00DF> LATIN SMALL LETTER SHARP S.  */
-"\xdf"   "ss"
-
-/* <U00E4> LATIN SMALL LETTER A WITH DIAERESIS.  */
-/* XXX It is not clear whether this is the best transliteration for
-   all locales.  If not, we probably have to take it out completely.  */
-"\xe4"   "ae"
-
-/* <U00E5> LATIN SMALL LETTER A WITH RING ABOVE.  */
-/* XXX It is not clear whether this is the best transliteration for
-   all locales.  If not, we probably have to take it out completely.  */
-"\xe5"   "aa"
-
-/* <U00E6> LATIN SMALL LETTER AE.  */
-"\xe6"   "ae"
-
-/* <U00F6> LATIN SMALL LETTER O WITH DIAERESIS.  */
-/* XXX It is not clear whether this is the best transliteration for
-   all locales.  If not, we probably have to take it out completely.  */
-"\xf6"   "oe"
-
-/* <U00FC> LATIN SMALL LETTER U WITH DIAERESIS.  */
-/* XXX It is not clear whether this is the best transliteration for
-   all locales.  If not, we probably have to take it out completely.  */
-"\xfc"   "ue"
-
-/* <U201C> LEFT DOUBLE QUOTATION MARK.  */
-"\x201c" "\""
-
-/* <U201D> RIGHT DOUBLE QUOTATION MARK.  */
-"\x201d" "\""
+"\x00a0"	" "	/* <U00A0> NO-BREAK SPACE */
+"\x00a9"	"(C)"	/* <U00A9> COPYRIGHT SIGN */
+"\x00ab"	"<<"	/* <U00AB> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
+"\x00ad"	"-"	/* <U00AD> SOFT HYPHEN */
+"\x00ae"	"(R)"	/* <U00AE> REGISTERED SIGN */
+"\x00bb"	">>"	/* <U00BB> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
+"\x00bc"	"1/4"	/* <U00BC> VULGAR FRACTION ONE QUARTER */
+"\x00bd"	"1/2"	/* <U00BD> VULGAR FRACTION ONE HALF */
+"\x00be"	"3/4"	/* <U00BE> VULGAR FRACTION THREE QUARTERS */
+"\x00c6"	"AE"	/* <U00C6> LATIN CAPITAL LETTER AE */
+"\x00df"	"ss"	/* <U00DF> LATIN SMALL LETTER SHARP S */
+"\x00e6"	"ae"	/* <U00E6> LATIN SMALL LETTER AE */
+"\x0132"	"IJ"	/* <U0132> LATIN CAPITAL LIGATURE IJ */
+"\x0133"	"ij"	/* <U0133> LATIN SMALL LIGATURE IJ */
+"\x017f"	"s"	/* <U017F> LATIN SMALL LETTER LONG S */
+"\x01c7"	"LJ"	/* <U01C7> LATIN CAPITAL LETTER LJ */
+"\x01c8"	"Lj"	/* <U01C8> LATIN CAPITAL LETTER L WITH SMALL LETTER J */
+"\x01c9"	"lj"	/* <U01C9> LATIN SMALL LETTER LJ */
+"\x01ca"	"NJ"	/* <U01CA> LATIN CAPITAL LETTER NJ */
+"\x01cb"	"Nj"	/* <U01CB> LATIN CAPITAL LETTER N WITH SMALL LETTER J */
+"\x01cc"	"nj"	/* <U01CC> LATIN SMALL LETTER NJ */
+"\x01f1"	"DZ"	/* <U01F1> LATIN CAPITAL LETTER DZ */
+"\x01f2"	"Dz"	/* <U01F2> LATIN CAPITAL LETTER D WITH SMALL LETTER Z */
+"\x01f3"	"dz"	/* <U01F3> LATIN SMALL LETTER DZ */
+"\x02dc"	"~"	/* <U02DC> SMALL TILDE */
+"\x2002"	" "	/* <U2002> EN SPACE */
+"\x2003"	" "	/* <U2003> EM SPACE */
+"\x2004"	" "	/* <U2004> THREE-PER-EM SPACE */
+"\x2005"	" "	/* <U2005> FOUR-PER-EM SPACE */
+"\x2006"	" "	/* <U2006> SIX-PER-EM SPACE */
+"\x2008"	" "	/* <U2008> PUNCTUATION SPACE */
+"\x2009"	" "	/* <U2009> THIN SPACE */
+"\x200a"	" "	/* <U200A> HAIR SPACE */
+"\x2010"	"-"	/* <U2010> HYPHEN */
+"\x2011"	"-"	/* <U2011> NON-BREAKING HYPHEN */
+"\x2012"	"-"	/* <U2012> FIGURE DASH */
+"\x2013"	"-"	/* <U2013> EN DASH */
+"\x2014"	"-"	/* <U2014> EM DASH */
+"\x2015"	"-"	/* <U2015> HORIZONTAL BAR */
+"\x2018"	"'"	/* <U2018> LEFT SINGLE QUOTATION MARK */
+"\x2019"	"'"	/* <U2019> RIGHT SINGLE QUOTATION MARK */
+"\x201a"	","	/* <U201A> SINGLE LOW-9 QUOTATION MARK */
+"\x201b"	"'"	/* <U201B> SINGLE HIGH-REVERSED-9 QUOTATION MARK */
+"\x201c"	"\""	/* <U201C> LEFT DOUBLE QUOTATION MARK */
+"\x201d"	"\""	/* <U201D> RIGHT DOUBLE QUOTATION MARK */
+"\x201e"	",,"	/* <U201E> DOUBLE LOW-9 QUOTATION MARK */
+"\x201f"	"\""	/* <U201F> DOUBLE HIGH-REVERSED-9 QUOTATION MARK */
+"\x2020"	"+"	/* <U2020> DAGGER */
+"\x2022"	"o"	/* <U2022> BULLET */
+"\x2024"	"."	/* <U2024> ONE DOT LEADER */
+"\x2025"	".."	/* <U2025> TWO DOT LEADER */
+"\x2026"	"..."	/* <U2026> HORIZONTAL ELLIPSIS */
+"\x2039"	"<"	/* <U2039> SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
+"\x203a"	">"	/* <U203A> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
+"\x203c"	"!!"	/* <U203C> DOUBLE EXCLAMATION MARK */
+"\x2048"	"?!"	/* <U2048> QUESTION EXCLAMATION MARK */
+"\x2049"	"!?"	/* <U2049> EXCLAMATION QUESTION MARK */
+"\x20a8"	"Rs"	/* <U20A8> RUPEE SIGN */
+"\x20ac"	"EUR"	/* <U20AC> EURO SIGN */
+"\x2100"	"a/c"	/* <U2100> ACCOUNT OF */
+"\x2101"	"a/s"	/* <U2101> ADDRESSED TO THE SUBJECT */
+"\x2102"	"C"	/* <U2102> DOUBLE-STRUCK CAPITAL C */
+"\x2105"	"c/o"	/* <U2105> CARE OF */
+"\x2106"	"c/u"	/* <U2106> CADA UNA */
+"\x210a"	"g"	/* <U210A> SCRIPT SMALL G */
+"\x210b"	"H"	/* <U210B> SCRIPT CAPITAL H */
+"\x210c"	"H"	/* <U210C> BLACK-LETTER CAPITAL H */
+"\x210d"	"H"	/* <U210D> DOUBLE-STRUCK CAPITAL H */
+"\x210e"	"h"	/* <U210E> PLANCK CONSTANT */
+"\x2110"	"I"	/* <U2110> SCRIPT CAPITAL I */
+"\x2111"	"I"	/* <U2111> BLACK-LETTER CAPITAL I */
+"\x2112"	"L"	/* <U2112> SCRIPT CAPITAL L */
+"\x2113"	"l"	/* <U2113> SCRIPT SMALL L */
+"\x2115"	"N"	/* <U2115> DOUBLE-STRUCK CAPITAL N */
+"\x2116"	"No"	/* <U2116> NUMERO SIGN */
+"\x2119"	"P"	/* <U2119> DOUBLE-STRUCK CAPITAL P */
+"\x211a"	"Q"	/* <U211A> DOUBLE-STRUCK CAPITAL Q */
+"\x211b"	"R"	/* <U211B> SCRIPT CAPITAL R */
+"\x211c"	"R"	/* <U211C> BLACK-LETTER CAPITAL R */
+"\x211d"	"R"	/* <U211D> DOUBLE-STRUCK CAPITAL R */
+"\x2121"	"TEL"	/* <U2121> TELEPHONE SIGN */
+"\x2122"	"(TM)"	/* <U2122> TRADE MARK SIGN */
+"\x2124"	"Z"	/* <U2124> DOUBLE-STRUCK CAPITAL Z */
+"\x2126"	"Ohm"	/* <U2126> OHM SIGN */
+"\x2128"	"Z"	/* <U2128> BLACK-LETTER CAPITAL Z */
+"\x212c"	"B"	/* <U212C> SCRIPT CAPITAL B */
+"\x212d"	"C"	/* <U212D> BLACK-LETTER CAPITAL C */
+"\x212f"	"e"	/* <U212F> SCRIPT SMALL E */
+"\x2130"	"E"	/* <U2130> SCRIPT CAPITAL E */
+"\x2131"	"F"	/* <U2131> SCRIPT CAPITAL F */
+"\x2133"	"M"	/* <U2133> SCRIPT CAPITAL M */
+"\x2134"	"o"	/* <U2134> SCRIPT SMALL O */
+"\x2139"	"i"	/* <U2139> INFORMATION SOURCE */
+"\x2153"	"1/3"	/* <U2153> VULGAR FRACTION ONE THIRD */
+"\x2154"	"2/3"	/* <U2154> VULGAR FRACTION TWO THIRDS */
+"\x2155"	"1/5"	/* <U2155> VULGAR FRACTION ONE FIFTH */
+"\x2156"	"2/5"	/* <U2156> VULGAR FRACTION TWO FIFTHS */
+"\x2157"	"3/5"	/* <U2157> VULGAR FRACTION THREE FIFTHS */
+"\x2158"	"4/5"	/* <U2158> VULGAR FRACTION FOUR FIFTHS */
+"\x2159"	"1/6"	/* <U2159> VULGAR FRACTION ONE SIXTH */
+"\x215a"	"5/6"	/* <U215A> VULGAR FRACTION FIVE SIXTHS */
+"\x215b"	"1/8"	/* <U215B> VULGAR FRACTION ONE EIGHTH */
+"\x215c"	"3/8"	/* <U215C> VULGAR FRACTION THREE EIGHTHS */
+"\x215d"	"5/8"	/* <U215D> VULGAR FRACTION FIVE EIGHTHS */
+"\x215e"	"7/8"	/* <U215E> VULGAR FRACTION SEVEN EIGHTHS */
+"\x215f"	"1/"	/* <U215F> FRACTION NUMERATOR ONE */
+"\x2160"	"I"	/* <U2160> ROMAN NUMERAL ONE */
+"\x2161"	"II"	/* <U2161> ROMAN NUMERAL TWO */
+"\x2162"	"III"	/* <U2162> ROMAN NUMERAL THREE */
+"\x2163"	"IV"	/* <U2163> ROMAN NUMERAL FOUR */
+"\x2164"	"V"	/* <U2164> ROMAN NUMERAL FIVE */
+"\x2165"	"VI"	/* <U2165> ROMAN NUMERAL SIX */
+"\x2166"	"VII"	/* <U2166> ROMAN NUMERAL SEVEN */
+"\x2167"	"VIII"	/* <U2167> ROMAN NUMERAL EIGHT */
+"\x2168"	"IX"	/* <U2168> ROMAN NUMERAL NINE */
+"\x2169"	"X"	/* <U2169> ROMAN NUMERAL TEN */
+"\x216a"	"XI"	/* <U216A> ROMAN NUMERAL ELEVEN */
+"\x216b"	"XII"	/* <U216B> ROMAN NUMERAL TWELVE */
+"\x216c"	"L"	/* <U216C> ROMAN NUMERAL FIFTY */
+"\x216d"	"C"	/* <U216D> ROMAN NUMERAL ONE HUNDRED */
+"\x216e"	"D"	/* <U216E> ROMAN NUMERAL FIVE HUNDRED */
+"\x216f"	"M"	/* <U216F> ROMAN NUMERAL ONE THOUSAND */
+"\x2170"	"i"	/* <U2170> SMALL ROMAN NUMERAL ONE */
+"\x2171"	"ii"	/* <U2171> SMALL ROMAN NUMERAL TWO */
+"\x2172"	"iii"	/* <U2172> SMALL ROMAN NUMERAL THREE */
+"\x2173"	"iv"	/* <U2173> SMALL ROMAN NUMERAL FOUR */
+"\x2174"	"v"	/* <U2174> SMALL ROMAN NUMERAL FIVE */
+"\x2175"	"vi"	/* <U2175> SMALL ROMAN NUMERAL SIX */
+"\x2176"	"vii"	/* <U2176> SMALL ROMAN NUMERAL SEVEN */
+"\x2177"	"viii"	/* <U2177> SMALL ROMAN NUMERAL EIGHT */
+"\x2178"	"ix"	/* <U2178> SMALL ROMAN NUMERAL NINE */
+"\x2179"	"x"	/* <U2179> SMALL ROMAN NUMERAL TEN */
+"\x217a"	"xi"	/* <U217A> SMALL ROMAN NUMERAL ELEVEN */
+"\x217b"	"xii"	/* <U217B> SMALL ROMAN NUMERAL TWELVE */
+"\x217c"	"l"	/* <U217C> SMALL ROMAN NUMERAL FIFTY */
+"\x217d"	"c"	/* <U217D> SMALL ROMAN NUMERAL ONE HUNDRED */
+"\x217e"	"d"	/* <U217E> SMALL ROMAN NUMERAL FIVE HUNDRED */
+"\x217f"	"m"	/* <U217F> SMALL ROMAN NUMERAL ONE THOUSAND */
+"\x2190"	"<-"	/* <U2190> LEFTWARDS ARROW */
+"\x2192"	"->"	/* <U2192> RIGHTWARDS ARROW */
+"\x21d0"	"<="	/* <U21D0> LEFTWARDS DOUBLE ARROW */
+"\x21d2"	"=>"	/* <U21D2> RIGHTWARDS DOUBLE ARROW */
+"\x2212"	"-"	/* <U2212> MINUS SIGN */
+"\x2215"	"/"	/* <U2215> DIVISION SLASH */
+"\x2264"	"<="	/* <U2264> LESS-THAN OR EQUAL TO */
+"\x2265"	">="	/* <U2265> GREATER-THAN OR EQUAL TO */
+"\x226a"	"<<"	/* <U226A> MUCH LESS-THAN */
+"\x226b"	">>"	/* <U226B> MUCH GREATER-THAN */
+"\x2460"	"(1)"	/* <U2460> CIRCLED DIGIT ONE */
+"\x2461"	"(2)"	/* <U2461> CIRCLED DIGIT TWO */
+"\x2462"	"(3)"	/* <U2462> CIRCLED DIGIT THREE */
+"\x2463"	"(4)"	/* <U2463> CIRCLED DIGIT FOUR */
+"\x2464"	"(5)"	/* <U2464> CIRCLED DIGIT FIVE */
+"\x2465"	"(6)"	/* <U2465> CIRCLED DIGIT SIX */
+"\x2466"	"(7)"	/* <U2466> CIRCLED DIGIT SEVEN */
+"\x2467"	"(8)"	/* <U2467> CIRCLED DIGIT EIGHT */
+"\x2468"	"(9)"	/* <U2468> CIRCLED DIGIT NINE */
+"\x2469"	"(10)"	/* <U2469> CIRCLED NUMBER TEN */
+"\x246a"	"(11)"	/* <U246A> CIRCLED NUMBER ELEVEN */
+"\x246b"	"(12)"	/* <U246B> CIRCLED NUMBER TWELVE */
+"\x246c"	"(13)"	/* <U246C> CIRCLED NUMBER THIRTEEN */
+"\x246d"	"(14)"	/* <U246D> CIRCLED NUMBER FOURTEEN */
+"\x246e"	"(15)"	/* <U246E> CIRCLED NUMBER FIFTEEN */
+"\x246f"	"(16)"	/* <U246F> CIRCLED NUMBER SIXTEEN */
+"\x2470"	"(17)"	/* <U2470> CIRCLED NUMBER SEVENTEEN */
+"\x2471"	"(18)"	/* <U2471> CIRCLED NUMBER EIGHTEEN */
+"\x2472"	"(19)"	/* <U2472> CIRCLED NUMBER NINETEEN */
+"\x2473"	"(20)"	/* <U2473> CIRCLED NUMBER TWENTY */
+"\x2474"	"(1)"	/* <U2474> PARENTHESIZED DIGIT ONE */
+"\x2475"	"(2)"	/* <U2475> PARENTHESIZED DIGIT TWO */
+"\x2476"	"(3)"	/* <U2476> PARENTHESIZED DIGIT THREE */
+"\x2477"	"(4)"	/* <U2477> PARENTHESIZED DIGIT FOUR */
+"\x2478"	"(5)"	/* <U2478> PARENTHESIZED DIGIT FIVE */
+"\x2479"	"(6)"	/* <U2479> PARENTHESIZED DIGIT SIX */
+"\x247a"	"(7)"	/* <U247A> PARENTHESIZED DIGIT SEVEN */
+"\x247b"	"(8)"	/* <U247B> PARENTHESIZED DIGIT EIGHT */
+"\x247c"	"(9)"	/* <U247C> PARENTHESIZED DIGIT NINE */
+"\x247d"	"(10)"	/* <U247D> PARENTHESIZED NUMBER TEN */
+"\x247e"	"(11)"	/* <U247E> PARENTHESIZED NUMBER ELEVEN */
+"\x247f"	"(12)"	/* <U247F> PARENTHESIZED NUMBER TWELVE */
+"\x2480"	"(13)"	/* <U2480> PARENTHESIZED NUMBER THIRTEEN */
+"\x2481"	"(14)"	/* <U2481> PARENTHESIZED NUMBER FOURTEEN */
+"\x2482"	"(15)"	/* <U2482> PARENTHESIZED NUMBER FIFTEEN */
+"\x2483"	"(16)"	/* <U2483> PARENTHESIZED NUMBER SIXTEEN */
+"\x2484"	"(17)"	/* <U2484> PARENTHESIZED NUMBER SEVENTEEN */
+"\x2485"	"(18)"	/* <U2485> PARENTHESIZED NUMBER EIGHTEEN */
+"\x2486"	"(19)"	/* <U2486> PARENTHESIZED NUMBER NINETEEN */
+"\x2487"	"(20)"	/* <U2487> PARENTHESIZED NUMBER TWENTY */
+"\x2488"	"1."	/* <U2488> DIGIT ONE FULL STOP */
+"\x2489"	"2."	/* <U2489> DIGIT TWO FULL STOP */
+"\x248a"	"3."	/* <U248A> DIGIT THREE FULL STOP */
+"\x248b"	"4."	/* <U248B> DIGIT FOUR FULL STOP */
+"\x248c"	"5."	/* <U248C> DIGIT FIVE FULL STOP */
+"\x248d"	"6."	/* <U248D> DIGIT SIX FULL STOP */
+"\x248e"	"7."	/* <U248E> DIGIT SEVEN FULL STOP */
+"\x248f"	"8."	/* <U248F> DIGIT EIGHT FULL STOP */
+"\x2490"	"9."	/* <U2490> DIGIT NINE FULL STOP */
+"\x2491"	"10."	/* <U2491> NUMBER TEN FULL STOP */
+"\x2492"	"11."	/* <U2492> NUMBER ELEVEN FULL STOP */
+"\x2493"	"12."	/* <U2493> NUMBER TWELVE FULL STOP */
+"\x2494"	"13."	/* <U2494> NUMBER THIRTEEN FULL STOP */
+"\x2495"	"14."	/* <U2495> NUMBER FOURTEEN FULL STOP */
+"\x2496"	"15."	/* <U2496> NUMBER FIFTEEN FULL STOP */
+"\x2497"	"16."	/* <U2497> NUMBER SIXTEEN FULL STOP */
+"\x2498"	"17."	/* <U2498> NUMBER SEVENTEEN FULL STOP */
+"\x2499"	"18."	/* <U2499> NUMBER EIGHTEEN FULL STOP */
+"\x249a"	"19."	/* <U249A> NUMBER NINETEEN FULL STOP */
+"\x249b"	"20."	/* <U249B> NUMBER TWENTY FULL STOP */
+"\x249c"	"(a)"	/* <U249C> PARENTHESIZED LATIN SMALL LETTER A */
+"\x249d"	"(b)"	/* <U249D> PARENTHESIZED LATIN SMALL LETTER B */
+"\x249e"	"(c)"	/* <U249E> PARENTHESIZED LATIN SMALL LETTER C */
+"\x249f"	"(d)"	/* <U249F> PARENTHESIZED LATIN SMALL LETTER D */
+"\x24a0"	"(e)"	/* <U24A0> PARENTHESIZED LATIN SMALL LETTER E */
+"\x24a1"	"(f)"	/* <U24A1> PARENTHESIZED LATIN SMALL LETTER F */
+"\x24a2"	"(g)"	/* <U24A2> PARENTHESIZED LATIN SMALL LETTER G */
+"\x24a3"	"(h)"	/* <U24A3> PARENTHESIZED LATIN SMALL LETTER H */
+"\x24a4"	"(i)"	/* <U24A4> PARENTHESIZED LATIN SMALL LETTER I */
+"\x24a5"	"(j)"	/* <U24A5> PARENTHESIZED LATIN SMALL LETTER J */
+"\x24a6"	"(k)"	/* <U24A6> PARENTHESIZED LATIN SMALL LETTER K */
+"\x24a7"	"(l)"	/* <U24A7> PARENTHESIZED LATIN SMALL LETTER L */
+"\x24a8"	"(m)"	/* <U24A8> PARENTHESIZED LATIN SMALL LETTER M */
+"\x24a9"	"(n)"	/* <U24A9> PARENTHESIZED LATIN SMALL LETTER N */
+"\x24aa"	"(o)"	/* <U24AA> PARENTHESIZED LATIN SMALL LETTER O */
+"\x24ab"	"(p)"	/* <U24AB> PARENTHESIZED LATIN SMALL LETTER P */
+"\x24ac"	"(q)"	/* <U24AC> PARENTHESIZED LATIN SMALL LETTER Q */
+"\x24ad"	"(r)"	/* <U24AD> PARENTHESIZED LATIN SMALL LETTER R */
+"\x24ae"	"(s)"	/* <U24AE> PARENTHESIZED LATIN SMALL LETTER S */
+"\x24af"	"(t)"	/* <U24AF> PARENTHESIZED LATIN SMALL LETTER T */
+"\x24b0"	"(u)"	/* <U24B0> PARENTHESIZED LATIN SMALL LETTER U */
+"\x24b1"	"(v)"	/* <U24B1> PARENTHESIZED LATIN SMALL LETTER V */
+"\x24b2"	"(w)"	/* <U24B2> PARENTHESIZED LATIN SMALL LETTER W */
+"\x24b3"	"(x)"	/* <U24B3> PARENTHESIZED LATIN SMALL LETTER X */
+"\x24b4"	"(y)"	/* <U24B4> PARENTHESIZED LATIN SMALL LETTER Y */
+"\x24b5"	"(z)"	/* <U24B5> PARENTHESIZED LATIN SMALL LETTER Z */
+"\x24b6"	"(A)"	/* <U24B6> CIRCLED LATIN CAPITAL LETTER A */
+"\x24b7"	"(B)"	/* <U24B7> CIRCLED LATIN CAPITAL LETTER B */
+"\x24b8"	"(C)"	/* <U24B8> CIRCLED LATIN CAPITAL LETTER C */
+"\x24b9"	"(D)"	/* <U24B9> CIRCLED LATIN CAPITAL LETTER D */
+"\x24ba"	"(E)"	/* <U24BA> CIRCLED LATIN CAPITAL LETTER E */
+"\x24bb"	"(F)"	/* <U24BB> CIRCLED LATIN CAPITAL LETTER F */
+"\x24bc"	"(G)"	/* <U24BC> CIRCLED LATIN CAPITAL LETTER G */
+"\x24bd"	"(H)"	/* <U24BD> CIRCLED LATIN CAPITAL LETTER H */
+"\x24be"	"(I)"	/* <U24BE> CIRCLED LATIN CAPITAL LETTER I */
+"\x24bf"	"(J)"	/* <U24BF> CIRCLED LATIN CAPITAL LETTER J */
+"\x24c0"	"(K)"	/* <U24C0> CIRCLED LATIN CAPITAL LETTER K */
+"\x24c1"	"(L)"	/* <U24C1> CIRCLED LATIN CAPITAL LETTER L */
+"\x24c2"	"(M)"	/* <U24C2> CIRCLED LATIN CAPITAL LETTER M */
+"\x24c3"	"(N)"	/* <U24C3> CIRCLED LATIN CAPITAL LETTER N */
+"\x24c4"	"(O)"	/* <U24C4> CIRCLED LATIN CAPITAL LETTER O */
+"\x24c5"	"(P)"	/* <U24C5> CIRCLED LATIN CAPITAL LETTER P */
+"\x24c6"	"(Q)"	/* <U24C6> CIRCLED LATIN CAPITAL LETTER Q */
+"\x24c7"	"(R)"	/* <U24C7> CIRCLED LATIN CAPITAL LETTER R */
+"\x24c8"	"(S)"	/* <U24C8> CIRCLED LATIN CAPITAL LETTER S */
+"\x24c9"	"(T)"	/* <U24C9> CIRCLED LATIN CAPITAL LETTER T */
+"\x24ca"	"(U)"	/* <U24CA> CIRCLED LATIN CAPITAL LETTER U */
+"\x24cb"	"(V)"	/* <U24CB> CIRCLED LATIN CAPITAL LETTER V */
+"\x24cc"	"(W)"	/* <U24CC> CIRCLED LATIN CAPITAL LETTER W */
+"\x24cd"	"(X)"	/* <U24CD> CIRCLED LATIN CAPITAL LETTER X */
+"\x24ce"	"(Y)"	/* <U24CE> CIRCLED LATIN CAPITAL LETTER Y */
+"\x24cf"	"(Z)"	/* <U24CF> CIRCLED LATIN CAPITAL LETTER Z */
+"\x24d0"	"(a)"	/* <U24D0> CIRCLED LATIN SMALL LETTER A */
+"\x24d1"	"(b)"	/* <U24D1> CIRCLED LATIN SMALL LETTER B */
+"\x24d2"	"(c)"	/* <U24D2> CIRCLED LATIN SMALL LETTER C */
+"\x24d3"	"(d)"	/* <U24D3> CIRCLED LATIN SMALL LETTER D */
+"\x24d4"	"(e)"	/* <U24D4> CIRCLED LATIN SMALL LETTER E */
+"\x24d5"	"(f)"	/* <U24D5> CIRCLED LATIN SMALL LETTER F */
+"\x24d6"	"(g)"	/* <U24D6> CIRCLED LATIN SMALL LETTER G */
+"\x24d7"	"(h)"	/* <U24D7> CIRCLED LATIN SMALL LETTER H */
+"\x24d8"	"(i)"	/* <U24D8> CIRCLED LATIN SMALL LETTER I */
+"\x24d9"	"(j)"	/* <U24D9> CIRCLED LATIN SMALL LETTER J */
+"\x24da"	"(k)"	/* <U24DA> CIRCLED LATIN SMALL LETTER K */
+"\x24db"	"(l)"	/* <U24DB> CIRCLED LATIN SMALL LETTER L */
+"\x24dc"	"(m)"	/* <U24DC> CIRCLED LATIN SMALL LETTER M */
+"\x24dd"	"(n)"	/* <U24DD> CIRCLED LATIN SMALL LETTER N */
+"\x24de"	"(o)"	/* <U24DE> CIRCLED LATIN SMALL LETTER O */
+"\x24df"	"(p)"	/* <U24DF> CIRCLED LATIN SMALL LETTER P */
+"\x24e0"	"(q)"	/* <U24E0> CIRCLED LATIN SMALL LETTER Q */
+"\x24e1"	"(r)"	/* <U24E1> CIRCLED LATIN SMALL LETTER R */
+"\x24e2"	"(s)"	/* <U24E2> CIRCLED LATIN SMALL LETTER S */
+"\x24e3"	"(t)"	/* <U24E3> CIRCLED LATIN SMALL LETTER T */
+"\x24e4"	"(u)"	/* <U24E4> CIRCLED LATIN SMALL LETTER U */
+"\x24e5"	"(v)"	/* <U24E5> CIRCLED LATIN SMALL LETTER V */
+"\x24e6"	"(w)"	/* <U24E6> CIRCLED LATIN SMALL LETTER W */
+"\x24e7"	"(x)"	/* <U24E7> CIRCLED LATIN SMALL LETTER X */
+"\x24e8"	"(y)"	/* <U24E8> CIRCLED LATIN SMALL LETTER Y */
+"\x24e9"	"(z)"	/* <U24E9> CIRCLED LATIN SMALL LETTER Z */
+"\x24ea"	"(0)"	/* <U24EA> CIRCLED DIGIT ZERO */
+"\x2500"	"-"	/* <U2500> BOX DRAWINGS LIGHT HORIZONTAL */
+"\x2502"	"|"	/* <U2502> BOX DRAWINGS LIGHT VERTICAL */
+"\x250c"	"+"	/* <U250C> BOX DRAWINGS LIGHT DOWN AND RIGHT */
+"\x2510"	"+"	/* <U2510> BOX DRAWINGS LIGHT DOWN AND LEFT */
+"\x2514"	"+"	/* <U2514> BOX DRAWINGS LIGHT UP AND RIGHT */
+"\x2518"	"+"	/* <U2518> BOX DRAWINGS LIGHT UP AND LEFT */
+"\x251c"	"+"	/* <U251C> BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
+"\x2524"	"+"	/* <U2524> BOX DRAWINGS LIGHT VERTICAL AND LEFT */
+"\x252c"	"+"	/* <U252C> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
+"\x2534"	"+"	/* <U2534> BOX DRAWINGS LIGHT UP AND HORIZONTAL */
+"\x253c"	"+"	/* <U253C> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
+"\x3000"	" "	/* <U3000> IDEOGRAPHIC SPACE */
+"\xfb00"	"ff"	/* <UFB00> LATIN SMALL LIGATURE FF */
+"\xfb01"	"fi"	/* <UFB01> LATIN SMALL LIGATURE FI */
+"\xfb02"	"fl"	/* <UFB02> LATIN SMALL LIGATURE FL */
+"\xfb03"	"ffi"	/* <UFB03> LATIN SMALL LIGATURE FFI */
+"\xfb04"	"ffl"	/* <UFB04> LATIN SMALL LIGATURE FFL */
+"\xfb06"	"st"	/* <UFB06> LATIN SMALL LIGATURE ST */
+"\xfb29"	"+"	/* <UFB29> HEBREW LETTER ALTERNATIVE PLUS SIGN */
+"\xfe4d"	"_"	/* <UFE4D> DASHED LOW LINE */
+"\xfe4e"	"_"	/* <UFE4E> CENTRELINE LOW LINE */
+"\xfe4f"	"_"	/* <UFE4F> WAVY LOW LINE */
+"\xfe50"	","	/* <UFE50> SMALL COMMA */
+"\xfe52"	"."	/* <UFE52> SMALL FULL STOP */
+"\xfe54"	";"	/* <UFE54> SMALL SEMICOLON */
+"\xfe55"	":"	/* <UFE55> SMALL COLON */
+"\xfe56"	"?"	/* <UFE56> SMALL QUESTION MARK */
+"\xfe57"	"!"	/* <UFE57> SMALL EXCLAMATION MARK */
+"\xfe59"	"("	/* <UFE59> SMALL LEFT PARENTHESIS */
+"\xfe5a"	")"	/* <UFE5A> SMALL RIGHT PARENTHESIS */
+"\xfe5b"	"{"	/* <UFE5B> SMALL LEFT CURLY BRACKET */
+"\xfe5c"	"}"	/* <UFE5C> SMALL RIGHT CURLY BRACKET */
+"\xfe5f"	"#"	/* <UFE5F> SMALL NUMBER SIGN */
+"\xfe60"	"&"	/* <UFE60> SMALL AMPERSAND */
+"\xfe61"	"*"	/* <UFE61> SMALL ASTERISK */
+"\xfe62"	"+"	/* <UFE62> SMALL PLUS SIGN */
+"\xfe63"	"-"	/* <UFE63> SMALL HYPHEN-MINUS */
+"\xfe64"	"<"	/* <UFE64> SMALL LESS-THAN SIGN */
+"\xfe65"	">"	/* <UFE65> SMALL GREATER-THAN SIGN */
+"\xfe66"	"="	/* <UFE66> SMALL EQUALS SIGN */
+"\xfe68"	"\\"	/* <UFE68> SMALL REVERSE SOLIDUS */
+"\xfe69"	"$"	/* <UFE69> SMALL DOLLAR SIGN */
+"\xfe6a"	"%"	/* <UFE6A> SMALL PERCENT SIGN */
+"\xfe6b"	"@"	/* <UFE6B> SMALL COMMERCIAL AT */
+"\xff01"	"!"	/* <UFF01> FULLWIDTH EXCLAMATION MARK */
+"\xff02"	"\""	/* <UFF02> FULLWIDTH QUOTATION MARK */
+"\xff03"	"#"	/* <UFF03> FULLWIDTH NUMBER SIGN */
+"\xff04"	"$"	/* <UFF04> FULLWIDTH DOLLAR SIGN */
+"\xff05"	"%"	/* <UFF05> FULLWIDTH PERCENT SIGN */
+"\xff06"	"&"	/* <UFF06> FULLWIDTH AMPERSAND */
+"\xff07"	"'"	/* <UFF07> FULLWIDTH APOSTROPHE */
+"\xff08"	"("	/* <UFF08> FULLWIDTH LEFT PARENTHESIS */
+"\xff09"	")"	/* <UFF09> FULLWIDTH RIGHT PARENTHESIS */
+"\xff0a"	"*"	/* <UFF0A> FULLWIDTH ASTERISK */
+"\xff0b"	"+"	/* <UFF0B> FULLWIDTH PLUS SIGN */
+"\xff0c"	","	/* <UFF0C> FULLWIDTH COMMA */
+"\xff0d"	"-"	/* <UFF0D> FULLWIDTH HYPHEN-MINUS */
+"\xff0e"	"."	/* <UFF0E> FULLWIDTH FULL STOP */
+"\xff0f"	"/"	/* <UFF0F> FULLWIDTH SOLIDUS */
+"\xff10"	"0"	/* <UFF10> FULLWIDTH DIGIT ZERO */
+"\xff11"	"1"	/* <UFF11> FULLWIDTH DIGIT ONE */
+"\xff12"	"2"	/* <UFF12> FULLWIDTH DIGIT TWO */
+"\xff13"	"3"	/* <UFF13> FULLWIDTH DIGIT THREE */
+"\xff14"	"4"	/* <UFF14> FULLWIDTH DIGIT FOUR */
+"\xff15"	"5"	/* <UFF15> FULLWIDTH DIGIT FIVE */
+"\xff16"	"6"	/* <UFF16> FULLWIDTH DIGIT SIX */
+"\xff17"	"7"	/* <UFF17> FULLWIDTH DIGIT SEVEN */
+"\xff18"	"8"	/* <UFF18> FULLWIDTH DIGIT EIGHT */
+"\xff19"	"9"	/* <UFF19> FULLWIDTH DIGIT NINE */
+"\xff1a"	":"	/* <UFF1A> FULLWIDTH COLON */
+"\xff1b"	";"	/* <UFF1B> FULLWIDTH SEMICOLON */
+"\xff1c"	"<"	/* <UFF1C> FULLWIDTH LESS-THAN SIGN */
+"\xff1d"	"="	/* <UFF1D> FULLWIDTH EQUALS SIGN */
+"\xff1e"	">"	/* <UFF1E> FULLWIDTH GREATER-THAN SIGN */
+"\xff1f"	"?"	/* <UFF1F> FULLWIDTH QUESTION MARK */
+"\xff20"	"@"	/* <UFF20> FULLWIDTH COMMERCIAL AT */
+"\xff21"	"A"	/* <UFF21> FULLWIDTH LATIN CAPITAL LETTER A */
+"\xff22"	"B"	/* <UFF22> FULLWIDTH LATIN CAPITAL LETTER B */
+"\xff23"	"C"	/* <UFF23> FULLWIDTH LATIN CAPITAL LETTER C */
+"\xff24"	"D"	/* <UFF24> FULLWIDTH LATIN CAPITAL LETTER D */
+"\xff25"	"E"	/* <UFF25> FULLWIDTH LATIN CAPITAL LETTER E */
+"\xff26"	"F"	/* <UFF26> FULLWIDTH LATIN CAPITAL LETTER F */
+"\xff27"	"G"	/* <UFF27> FULLWIDTH LATIN CAPITAL LETTER G */
+"\xff28"	"H"	/* <UFF28> FULLWIDTH LATIN CAPITAL LETTER H */
+"\xff29"	"I"	/* <UFF29> FULLWIDTH LATIN CAPITAL LETTER I */
+"\xff2a"	"J"	/* <UFF2A> FULLWIDTH LATIN CAPITAL LETTER J */
+"\xff2b"	"K"	/* <UFF2B> FULLWIDTH LATIN CAPITAL LETTER K */
+"\xff2c"	"L"	/* <UFF2C> FULLWIDTH LATIN CAPITAL LETTER L */
+"\xff2d"	"M"	/* <UFF2D> FULLWIDTH LATIN CAPITAL LETTER M */
+"\xff2e"	"N"	/* <UFF2E> FULLWIDTH LATIN CAPITAL LETTER N */
+"\xff2f"	"O"	/* <UFF2F> FULLWIDTH LATIN CAPITAL LETTER O */
+"\xff30"	"P"	/* <UFF30> FULLWIDTH LATIN CAPITAL LETTER P */
+"\xff31"	"Q"	/* <UFF31> FULLWIDTH LATIN CAPITAL LETTER Q */
+"\xff32"	"R"	/* <UFF32> FULLWIDTH LATIN CAPITAL LETTER R */
+"\xff33"	"S"	/* <UFF33> FULLWIDTH LATIN CAPITAL LETTER S */
+"\xff34"	"T"	/* <UFF34> FULLWIDTH LATIN CAPITAL LETTER T */
+"\xff35"	"U"	/* <UFF35> FULLWIDTH LATIN CAPITAL LETTER U */
+"\xff36"	"V"	/* <UFF36> FULLWIDTH LATIN CAPITAL LETTER V */
+"\xff37"	"W"	/* <UFF37> FULLWIDTH LATIN CAPITAL LETTER W */
+"\xff38"	"X"	/* <UFF38> FULLWIDTH LATIN CAPITAL LETTER X */
+"\xff39"	"Y"	/* <UFF39> FULLWIDTH LATIN CAPITAL LETTER Y */
+"\xff3a"	"Z"	/* <UFF3A> FULLWIDTH LATIN CAPITAL LETTER Z */
+"\xff3b"	"["	/* <UFF3B> FULLWIDTH LEFT SQUARE BRACKET */
+"\xff3c"	"\\"	/* <UFF3C> FULLWIDTH REVERSE SOLIDUS */
+"\xff3d"	"]"	/* <UFF3D> FULLWIDTH RIGHT SQUARE BRACKET */
+"\xff3e"	"^"	/* <UFF3E> FULLWIDTH CIRCUMFLEX ACCENT */
+"\xff3f"	"_"	/* <UFF3F> FULLWIDTH LOW LINE */
+"\xff40"	"`"	/* <UFF40> FULLWIDTH GRAVE ACCENT */
+"\xff41"	"a"	/* <UFF41> FULLWIDTH LATIN SMALL LETTER A */
+"\xff42"	"b"	/* <UFF42> FULLWIDTH LATIN SMALL LETTER B */
+"\xff43"	"c"	/* <UFF43> FULLWIDTH LATIN SMALL LETTER C */
+"\xff44"	"d"	/* <UFF44> FULLWIDTH LATIN SMALL LETTER D */
+"\xff45"	"e"	/* <UFF45> FULLWIDTH LATIN SMALL LETTER E */
+"\xff46"	"f"	/* <UFF46> FULLWIDTH LATIN SMALL LETTER F */
+"\xff47"	"g"	/* <UFF47> FULLWIDTH LATIN SMALL LETTER G */
+"\xff48"	"h"	/* <UFF48> FULLWIDTH LATIN SMALL LETTER H */
+"\xff49"	"i"	/* <UFF49> FULLWIDTH LATIN SMALL LETTER I */
+"\xff4a"	"j"	/* <UFF4A> FULLWIDTH LATIN SMALL LETTER J */
+"\xff4b"	"k"	/* <UFF4B> FULLWIDTH LATIN SMALL LETTER K */
+"\xff4c"	"l"	/* <UFF4C> FULLWIDTH LATIN SMALL LETTER L */
+"\xff4d"	"m"	/* <UFF4D> FULLWIDTH LATIN SMALL LETTER M */
+"\xff4e"	"n"	/* <UFF4E> FULLWIDTH LATIN SMALL LETTER N */
+"\xff4f"	"o"	/* <UFF4F> FULLWIDTH LATIN SMALL LETTER O */
+"\xff50"	"p"	/* <UFF50> FULLWIDTH LATIN SMALL LETTER P */
+"\xff51"	"q"	/* <UFF51> FULLWIDTH LATIN SMALL LETTER Q */
+"\xff52"	"r"	/* <UFF52> FULLWIDTH LATIN SMALL LETTER R */
+"\xff53"	"s"	/* <UFF53> FULLWIDTH LATIN SMALL LETTER S */
+"\xff54"	"t"	/* <UFF54> FULLWIDTH LATIN SMALL LETTER T */
+"\xff55"	"u"	/* <UFF55> FULLWIDTH LATIN SMALL LETTER U */
+"\xff56"	"v"	/* <UFF56> FULLWIDTH LATIN SMALL LETTER V */
+"\xff57"	"w"	/* <UFF57> FULLWIDTH LATIN SMALL LETTER W */
+"\xff58"	"x"	/* <UFF58> FULLWIDTH LATIN SMALL LETTER X */
+"\xff59"	"y"	/* <UFF59> FULLWIDTH LATIN SMALL LETTER Y */
+"\xff5a"	"z"	/* <UFF5A> FULLWIDTH LATIN SMALL LETTER Z */
+"\xff5b"	"{"	/* <UFF5B> FULLWIDTH LEFT CURLY BRACKET */
+"\xff5c"	"|"	/* <UFF5C> FULLWIDTH VERTICAL LINE */
+"\xff5d"	"}"	/* <UFF5D> FULLWIDTH RIGHT CURLY BRACKET */
+"\xff5e"	"~"	/* <UFF5E> FULLWIDTH TILDE */
diff --git a/locale/gen-translit.pl b/locale/gen-translit.pl
index b6fba77c80..d44310b316 100644
--- a/locale/gen-translit.pl
+++ b/locale/gen-translit.pl
@@ -134,7 +134,7 @@ for ($cnt = 0; $cnt <= $#tos; ++$cnt) {
     printf(" ");
     ++$col;
   }
-  printf("L\"$tos[$cnt]\\0\"");
+  printf("%s", "L\"$tos[$cnt]\\0\"");
   $col += length($tos[$cnt]) + 5;
 }
 printf(";\n");
diff --git a/manual/memory.texi b/manual/memory.texi
index fc364194df..6d86f550a3 100644
--- a/manual/memory.texi
+++ b/manual/memory.texi
@@ -841,7 +841,7 @@ The value of this variable is a pointer to the function that
 function to look like @code{malloc}; that is, like:
 
 @smallexample
-void *@var{function} (size_t @var{size}, void *@var{caller})
+void *@var{function} (size_t @var{size}, const void *@var{caller})
 @end smallexample
 
 The value of @var{caller} is the return address found on the stack when
@@ -857,7 +857,7 @@ uses whenever it is called.  You should define this function to look
 like @code{realloc}; that is, like:
 
 @smallexample
-void *@var{function} (void *@var{ptr}, size_t @var{size}, void *@var{caller})
+void *@var{function} (void *@var{ptr}, size_t @var{size}, const void *@var{caller})
 @end smallexample
 
 The value of @var{caller} is the return address found on the stack when
@@ -873,7 +873,7 @@ uses whenever it is called.  You should define this function to look
 like @code{free}; that is, like:
 
 @smallexample
-void @var{function} (void *@var{ptr}, void *@var{caller})
+void @var{function} (void *@var{ptr}, const void *@var{caller})
 @end smallexample
 
 The value of @var{caller} is the return address found on the stack when
@@ -889,8 +889,12 @@ uses whenever it is called.  You should define this function to look
 like @code{memalign}; that is, like:
 
 @smallexample
-void *@var{function} (size_t @var{size}, size_t @var{alignment})
+void *@var{function} (size_t @var{size}, size_t @var{alignment}, const void *@var{caller})
 @end smallexample
+
+The value of @var{caller} is the return address found on the stack when
+the @code{memalign} function was called.  This value allows you to trace the
+memory consumption of the program.
 @end defvar
 
 You must make sure that the function you install as a hook for one of
@@ -936,14 +940,13 @@ assume here that @code{realloc} and @code{memalign} are not used in our
 program.
 
 @smallexample
-/* Global variables used to hold underlaying hook values.  */
-static void *(*old_malloc_hook) (size_t);
-static void (*old_free_hook) (void*);
+/* Prototypes for __malloc_hook, __free_hook */
+#include <malloc.h>
 
 /* Prototypes for our hooks.  */
 static void *my_init_hook (void);
-static void *my_malloc_hook (size_t);
-static void my_free_hook (void*);
+static void *my_malloc_hook (size_t, const void *);
+static void my_free_hook (void*, const void *);
 
 /* Override initializing hook from the C library. */
 void (*__malloc_initialize_hook) (void) = my_init_hook;
@@ -958,7 +961,7 @@ my_init_hook (void)
 @}
 
 static void *
-my_malloc_hook (size_t size)
+my_malloc_hook (size_t size, const void *caller)
 @{
   void *result;
   /* Restore all old hooks */
@@ -978,7 +981,7 @@ my_malloc_hook (size_t size)
 @}
 
 static void *
-my_free_hook (void *ptr)
+my_free_hook (void *ptr, const void *caller)
 @{
   /* Restore all old hooks */
   __malloc_hook = old_malloc_hook;
@@ -1109,16 +1112,16 @@ Tell @code{malloc} to perform occasional consistency checks on
 dynamically allocated memory, and to call @var{abortfn} when an
 inconsistency is found.  @xref{Heap Consistency Checking}.
 
-@item void *(*__malloc_hook) (size_t @var{size}, void *@var{caller})
+@item void *(*__malloc_hook) (size_t @var{size}, const void *@var{caller})
 A pointer to a function that @code{malloc} uses whenever it is called.
 
-@item void *(*__realloc_hook) (void *@var{ptr}, size_t @var{size}, void *@var{caller})
+@item void *(*__realloc_hook) (void *@var{ptr}, size_t @var{size}, const void *@var{caller})
 A pointer to a function that @code{realloc} uses whenever it is called.
 
-@item void (*__free_hook) (void *@var{ptr}, void *@var{caller})
+@item void (*__free_hook) (void *@var{ptr}, const void *@var{caller})
 A pointer to a function that @code{free} uses whenever it is called.
 
-@item void (*__memalign_hook) (size_t @var{size}, size_t @var{alignment})
+@item void (*__memalign_hook) (size_t @var{size}, size_t @var{alignment}, const void *@var{caller})
 A pointer to a function that @code{memalign} uses whenever it is called.
 
 @item struct mallinfo mallinfo (void)