[RFC] iconvdata/, localedata/: Fix TSCII and document tests.
Carlos O'Donell
carlos@redhat.com
Sun Jun 21 14:11:14 GMT 2020
This is a general cleanup of the testing infrastructure around the
iconv tests. I'm posting it now to get any feedback about general
direction with the cleanup. Should I pass arguments to the script
instead of environment variables?
I have one test failure in test-tables which I need to fix which
has to do with the regexps there.
8< --- 8< --- 8<
The TSCII charmap was completely broken and is fixed by the removal
of the many-to-one mappings, not needed WIDTH specification,
invalid identical encodings, and wrong mb_cur_max. The %IRREVERSIBLE%
markup is documented, and that documentation is extended to all
locales that have such markup.
TSCII was not explicitly being excluded from testing, but it should
have been, and this led me to cleanup run-iconv-test.sh for TSCII.
The iconvdata/run-iconv-test.sh had two implicit inputs, TESTS and
TESTS2, the latter which was not included in the dependencies, along
with iconv-test.yyy which was not included in generated. We rename
the tests to iconv-test1.in and iconv-test2.in because that makes
it clearer they are a part of the iconv-test special test, and we
pass the test data names via env vars. We add iconv-test2.in to the
dependencies, and iconv-test.yyy to generated to ensure the test is
rebuilt if the test data changes and that iconv-test.yyy is removed.
Further to this we extensively comment run-iconv-test.sh and explain
what each step of the test is doing. We remove the cryptic grep for
excluding charmaps that have data that cannot be handled by iconv
with charmaps as input and we explicitly name those charmaps which
cannot be tested in "Test 1c: Convert using charmaps." and why.
We incidentally fix the BIG5-HKSCS <-> BIG5HKSCS alias problem even
if we don't test it, we might in the future, and not it will work.
In reviewing iconvdata/tst-table-charmap.sh it was shown that the
%IRREVERSIBLE% markup in the charmaps is used both by the table
generation for testing *and* the iconv table generation. Thus as
part of the additional documentation effort we add comments to all
of the %IRREVERSIBLE% markup to note where it is used for testing
or where it is used for iconv table generation.
For BIG5-HKSCS we add additional comments for HKSCS-2016, which was
quite helpful during review.
---
iconvdata/Makefile | 10 +-
iconvdata/{TESTS => iconv-test1.in} | 0
iconvdata/{TESTS2 => iconv-test2.in} | 0
iconvdata/run-iconv-test.sh | 123 +++++++-
localedata/charmaps/BIG5 | 7 +
localedata/charmaps/BIG5-HKSCS | 32 +++
localedata/charmaps/EUC-JP-MS | 7 +
localedata/charmaps/EUC-TW | 1 +
localedata/charmaps/IBM1132 | 1 +
localedata/charmaps/IBM1133 | 1 +
localedata/charmaps/IBM1160 | 4 +
localedata/charmaps/IBM1161 | 2 +
localedata/charmaps/TSCII | 409 ++++++++++++++-------------
localedata/charmaps/WINDOWS-31J | 7 +-
14 files changed, 394 insertions(+), 210 deletions(-)
rename iconvdata/{TESTS => iconv-test1.in} (100%)
rename iconvdata/{TESTS2 => iconv-test2.in} (100%)
diff --git a/iconvdata/Makefile b/iconvdata/Makefile
index 4ec2741cdc..6a02f227e0 100644
--- a/iconvdata/Makefile
+++ b/iconvdata/Makefile
@@ -178,8 +178,9 @@ generated-modules := $(gen-8bit-modules) $(gen-8bit-gap-modules) \
$(gen-special-modules)
generated += $(generated-modules:=.h) $(generated-modules:=.stmp) \
- iconv-test.out iconv-rules tst-loading.mtrace \
- mtrace-tst-loading.out tst-tables.out iconv-test.xxx
+ iconv-test.out iconv-rules tst-loading.mtrace \
+ mtrace-tst-loading.out tst-tables.out iconv-test.xxx \
+ iconv-test.yyy
ifdef objpfx
generated += gconv-modules
endif
@@ -324,8 +325,11 @@ $(objpfx)bug-iconv12.out: $(objpfx)gconv-modules \
$(objpfx)iconv-test.out: run-iconv-test.sh $(objpfx)gconv-modules \
$(addprefix $(objpfx),$(modules.so)) \
- $(common-objdir)/iconv/iconv_prog TESTS
+ $(common-objdir)/iconv/iconv_prog iconv-test1.in \
+ iconv-test2.in
iconv_modules="$(modules)" \
+ iconv_test1="iconv-test1.in" \
+ iconv_test2="iconv-test2.in" \
$(SHELL) $< $(common-objdir) '$(test-wrapper-env)' \
'$(run-program-env)' > $@; \
$(evaluate-test)
diff --git a/iconvdata/TESTS b/iconvdata/iconv-test1.in
similarity index 100%
rename from iconvdata/TESTS
rename to iconvdata/iconv-test1.in
diff --git a/iconvdata/TESTS2 b/iconvdata/iconv-test2.in
similarity index 100%
rename from iconvdata/TESTS2
rename to iconvdata/iconv-test2.in
diff --git a/iconvdata/run-iconv-test.sh b/iconvdata/run-iconv-test.sh
index 56b6630a6d..e337146af7 100755
--- a/iconvdata/run-iconv-test.sh
+++ b/iconvdata/run-iconv-test.sh
@@ -23,6 +23,10 @@ set -e
codir=$1
test_wrapper_env="$2"
run_program_env="$3"
+# Additionally we get as input the following environment variables:
+# iconv_modules: The list of modules to test.
+# iconv_test1: The input data for the first test.
+# iconv_test2: The input data for the second test.
# We use always the same temporary file.
temp1=$codir/iconvdata/iconv-test.xxx
@@ -45,9 +49,10 @@ else
ac_n= ac_c='\c' ac_t=
fi
-# We read the file named TESTS. All non-empty lines not starting with
+# We read the file named ICONV_TEST1. All non-empty lines not starting with
# `#' are interpreted as commands.
failed=0
+echo "Reading $iconv_tests and running tests:"
while read from to subset targets; do
# Ignore empty and comment lines.
if test -z "$subset" || test "$from" = '#'; then continue; fi
@@ -57,91 +62,179 @@ while read from to subset targets; do
if test -n "$targets"; then
for t in $targets; do
+ # Test 1a: Convert data using iconv internally.
if test -f testdata/$from; then
echo $ac_n " test data: $from -> $t $ac_c"
+
+ # Convert the test data using iconv DSOs.
$PROG -f $from -t $t testdata/$from < /dev/null > $temp1 ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
+
+ # Conversion succeeded.
echo $ac_n "OK$ac_c"
+
+ # Compare converted data to expected data.
if test -s testdata/$from..$t; then
LC_ALL=C cmp $temp1 testdata/$from..$t > /dev/null 2>&1 ||
{ echo "/FAILED"; failed=1; continue; }
echo $ac_n "/OK$ac_c"
fi
+
+ # Conversion *and* comparison succeeded.
echo $ac_n " -> $from $ac_c"
+
+ # Convert in the opposite direction.
$PROG -f $t -t $to -o $temp2 $temp1 < /dev/null ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
+
+ # Conversion succeeded.
echo $ac_n "OK$ac_c"
+
+ # Compare converted data to expected data.
test -s $temp1 &&
LC_ALL=C cmp testdata/$from $temp2 > /dev/null 2>&1 ||
{ echo "/FAILED"; failed=1; continue; }
+
+ # Conversion *and* comparison succeeded in both directions.
echo "/OK"
+ # Cleanup test.
rm -f $temp1 $temp2
+
fi
- # Now test some bigger text, entirely in ASCII. If ASCII is no subset
+ # Test 1b: Convert "The Art of War" (larger text) [ASCII subset]
+ #
+ # Now test some bigger text, entirely in ASCII. If ASCII is not a subset
# 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"
+
+ # Convert test data to target and back.
$PROG -f $from -t $t testdata/suntzus < /dev/null |
$PROG -f $t -t $to > $temp1 ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
+
+ # Conversion succeeded.
echo $ac_n "OK$ac_c"
+
+ # Compare against expected data.
LC_ALL=C cmp testdata/suntzus $temp1 ||
{ echo "/FAILED"; failed=1; continue; }
+
+ # Conversion *and* comparison succeeded.
echo "/OK"
+ # Cleanup test.
+ rm -f $temp1
fi
- rm -f $temp1
-
- # And tests where iconv(1) has to handle charmaps.
- if test "$t" = UTF8; then tc=UTF-8; else tc="$t"; fi
- if test -f ../localedata/charmaps/$from &&
- test -f ../localedata/charmaps/$tc &&
- test -f testdata/$from &&
- ! grep '<U....><U....>' ../localedata/charmaps/$from > /dev/null; then
+
+ # Test 1c: Convert using charmaps.
+ #
+ # And tests where iconv(1) has to handle charmaps:
+ # We exclude charmaps that have many-to-one mappings, which today is
+ # TSCII, SHIFT_SJISX0213, BIG5HKSCS, and EUC-JISX0213. We exclude them
+ # because such mappings make the there-and-back conversion tests
+ # difficult. All of these charmaps have commented out entries or
+ # valid entries for their many-to-one conversions e.g.
+ # '% <U0B9C><U0BC1> /x83/xa4 TAMIL GLYPH JU' (TSCII)
+ # or '% <U304B><U309A> /x82/xf5' (SHIFT_JISX0213).
+ # We could test them but it would require splitting the data files out
+ # into those that can be handled by charmap conversions versus those
+ # that can only be handled by iconv conversion (the larger set).
+
+ # Some charsets need to be converted to special charmap names.
+ tc="$t";
+ fromc="$from";
+ if test "$t" = UTF8; then tc=UTF-8; fi
+ if test "$from" = BIG5HKSCS; then fromc=BIG5-HKSCS; fi
+
+ # Run the charmap tests:
+ if test -f ../localedata/charmaps/$fromc \
+ && test -f ../localedata/charmaps/$tc \
+ && test -f testdata/$from \
+ && test "$from" != "BIG5HKSCS" \
+ && test "$from" != "EUC-JISX0213" \
+ && test "$from" != "SHIFT_JISX0213" \
+ && test "$from" != "TSCII"; then
+
+ # Identify the the FROM and TO charmaps.
echo $ac_n "test charmap: $from -> $t $ac_c"
- $PROG -f ../localedata/charmaps/$from -t ../localedata/charmaps/$tc \
- testdata/$from < /dev/null > $temp1 ||
+
+ # Convert from FROM to TO using the initial data in testdata/FROM
+ # and storing in $temp1.
+ $PROG -f ../localedata/charmaps/$fromc -t ../localedata/charmaps/$tc \
+ testdata/$from < /dev/null > $temp1 ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
+
+ # The conversion from FROM to TO of the testdata/FROM succeeded.
echo $ac_n "OK$ac_c"
+
+ # If testdata/FROM..TO exists then we compare the generated output
+ # in $temp1 to the the expected output in FROM..TO.
if test -s testdata/$from..$t; then
LC_ALL=C cmp $temp1 testdata/$from..$t > /dev/null 2>&1 ||
{ echo "/FAILED"; failed=1; continue; }
+
+ # The comparison to expected output succeeded.
echo $ac_n "/OK$ac_c"
fi
+
+ # Conversion *and* the comparison succeeded.
echo $ac_n " -> $from $ac_c"
+
+ # Run the conversion from TO to FROM (backwards) storing in $temp2.
$PROG -t ../localedata/charmaps/$from -f ../localedata/charmaps/$tc \
-o $temp2 $temp1 < /dev/null ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
+
+ # Conversion succeeded.
echo $ac_n "OK$ac_c"
+
+ # Compare the expected data with the converted data.
test -s $temp1 &&
LC_ALL=C cmp testdata/$from $temp2 > /dev/null 2>&1 ||
{ echo "/FAILED"; failed=1; continue; }
+
+ # We succeeded in converting to the target charmap and back
+ # again and both directions worked and the data matched.
echo "/OK"
+
+ # Cleanup test.
rm -f $temp1 $temp2
fi
done
fi
+ # Test 1b: Convert "The Art of War" (larger text) [Non-ASCII subset]
if test "$subset" = N; then
echo $ac_n " suntzu: ASCII -> $to -> ASCII $ac_c"
+
+ # Convert only from ASCII to target and back to ASCII.
$PROG -f ASCII -t $to testdata/suntzus < /dev/null |
$PROG -f $to -t ASCII > $temp1 ||
{ if test $? -gt 128; then exit 1; fi
echo "FAILED"; failed=1; continue; }
+
+ # Conversion succeeded.
echo $ac_n "OK$ac_c"
+
+ # Compare against expected ASCII data.
LC_ALL=C cmp testdata/suntzus $temp1 ||
{ echo "/FAILED"; failed=1; continue; }
+
+ # Conversion *and* comparison succeeded.
echo "/OK"
+ # Cleanup test.
+ rm -f $temp1
fi
-done < TESTS
+done < "$iconv_test1"
-# We read the file named TESTS2. All non-empty lines not starting with
+# We read the file named ICONV_TEST2. All non-empty lines not starting with
# `#' are interpreted as commands.
while read utf8 from filename; do
# Ignore empty and comment lines.
@@ -182,7 +275,7 @@ while read utf8 from filename; do
{ echo "/FAILED"; failed=1; continue; }
echo "OK"
-done < TESTS2
+done < "$iconv_test2"
# Check for crashes in decoders.
printf '\016\377\377\377\377\377\377\377' > $temp1
diff --git a/localedata/charmaps/BIG5 b/localedata/charmaps/BIG5
index 50f5f16cd2..b552e43763 100644
--- a/localedata/charmaps/BIG5
+++ b/localedata/charmaps/BIG5
@@ -19,6 +19,9 @@
% /xa2/xcc, /xa2/xce, /xf9/xe9, /xf9/xea, /xf9/xeb,
% /xf9/xf9, /xf9/xfa, /xf9/xfb, /xf9/xfc, /xf9/xfd
%
+% The %IRREVERSIBLE% markup is used to generate the data used by iconv.
+% Please do not remove the %IRREVERSIBLE% markup.
+%
% alias BIG5-CP950
CHARMAP
@@ -417,8 +420,10 @@ CHARMAP
<U3027> /xa2/xc9 HANGZHOU NUMERAL SEVEN
<U3028> /xa2/xca HANGZHOU NUMERAL EIGHT
<U3029> /xa2/xcb HANGZHOU NUMERAL NINE
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U5341> /xa2/xcc <CJK>
<U5344> /xa2/xcd <CJK>
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U5345> /xa2/xce <CJK>
<UFF21> /xa2/xcf FULLWIDTH LATIN CAPITAL LETTER A
<UFF22> /xa2/xd0 FULLWIDTH LATIN CAPITAL LETTER B
@@ -14050,6 +14055,7 @@ CHARMAP
<U2552> /xf9/xe6 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
<U2564> /xf9/xe7 BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
<U2555> /xf9/xe8 BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U255E> /xf9/xe9 BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
%IRREVERSIBLE%<U256A> /xf9/xea BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
%IRREVERSIBLE%<U2561> /xf9/xeb BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
@@ -14066,6 +14072,7 @@ CHARMAP
<U2568> /xf9/xf6 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
<U255C> /xf9/xf7 BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
<U2551> /xf9/xf8 BOX DRAWINGS DOUBLE VERTICAL
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U2550> /xf9/xf9 BOX DRAWINGS DOUBLE HORIZONTAL
%IRREVERSIBLE%<U256D> /xf9/xfa BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
%IRREVERSIBLE%<U256E> /xf9/xfb BOX DRAWINGS LIGHT ARC DOWN AND LEFT
diff --git a/localedata/charmaps/BIG5-HKSCS b/localedata/charmaps/BIG5-HKSCS
index 0735efc5c8..3489654fb2 100644
--- a/localedata/charmaps/BIG5-HKSCS
+++ b/localedata/charmaps/BIG5-HKSCS
@@ -10,6 +10,12 @@
% Last updated from the HKSCS-2008 standard
% http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/e_hkscs_2008.pdf
%
+% The latest available standard is HKSCS-2016 which has not yet been applied
+% https://www.ogcio.gov.hk/en/our_work/business/tech_promotion/ccli/terms/doc/e_hkscs_2016.pdf
+%
+% The %IRREVERSIBLE% markup is used to generate the data used by iconv.
+% Please do not remove the %IRREVERSIBLE% markup.
+%
CHARMAP
<U0000> /x00 NULL
@@ -300,8 +306,31 @@ CHARMAP
<U00D3> /x88/x5f LATIN CAPITAL LETTER O WITH ACUTE
<U01D1> /x88/x60 LATIN CAPITAL LETTER O WITH CARON
<U00D2> /x88/x61 LATIN CAPITAL LETTER O WITH GRAVE
+%
+% BIG5-HKSCS has 4 mappings that cannot be represented in a normal
+% character map. For BIG5-HKSCS 2008 (Amd. 1 to Amd. 6) they are:
+% /x88/x62 => <U00CA><U0304>
+% /x88/x64 => <U00CA><U030C>
+% /x88/xa3 => <U00EA><U0304>
+% /x88/xa5 => <U00EA><U030C>
+%
+% These mappings are noted in BIG5-HKSCS 2016 standard as documented in the
+% initial comments.
+%
+% These mappings cannot be represented in a traditional POSIX character map
+% which has no way to indicate that a sequence of multi-byte characters
+% generates multiple wide characters. Therefore we document them here but do
+% not include them. Note that iconv is capable of and supports such
+% conversions, but iconv when run with character maps as from-encoding or
+% to-encoding is unable to support such conversions.
+%
+% Note that iconv is capable of and supports such conversions, but iconv
+% when run with character maps as from-encoding or to-encoding is unable
+% to support such conversions.
+
%<U00CA><U0304> /x88/x62
<U1EBE> /x88/x63 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+% See note above.
%<U00CA><U030C> /x88/x64
<U1EC0> /x88/x65 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
<U00CA> /x88/x66 LATIN CAPITAL LETTER E WITH CIRCUMFLEX
@@ -331,8 +360,10 @@ CHARMAP
<U01DA> /x88/x7e LATIN SMALL LETTER U WITH DIAERESIS AND CARON
<U01DC> /x88/xa1 LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
<U00FC> /x88/xa2 LATIN SMALL LETTER U WITH DIAERESIS
+% See note above.
%<U00EA><U0304> /x88/xa3
<U1EBF> /x88/xa4 LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+% See note above.
%<U00EA><U030C> /x88/xa5
<U1EC1> /x88/xa6 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
<U00EA> /x88/xa7 LATIN SMALL LETTER E WITH CIRCUMFLEX
@@ -4201,6 +4232,7 @@ CHARMAP
<U2510> /xa2/x7b BOX DRAWINGS LIGHT DOWN AND LEFT
<U2514> /xa2/x7c BOX DRAWINGS LIGHT UP AND RIGHT
<U2518> /xa2/x7d BOX DRAWINGS LIGHT UP AND LEFT
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U256D> /xa2/x7e BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
%IRREVERSIBLE%<U256E> /xa2/xa1 BOX DRAWINGS LIGHT ARC DOWN AND LEFT
%IRREVERSIBLE%<U2570> /xa2/xa2 BOX DRAWINGS LIGHT ARC UP AND RIGHT
diff --git a/localedata/charmaps/EUC-JP-MS b/localedata/charmaps/EUC-JP-MS
index 6b1c9e4733..9fd1139ea4 100644
--- a/localedata/charmaps/EUC-JP-MS
+++ b/localedata/charmaps/EUC-JP-MS
@@ -839,16 +839,19 @@ CHARMAP
<U337E> /xad/xed SQUARE ERA NAME MEIZI
<U337D> /xad/xee SQUARE ERA NAME TAISYOU
<U337C> /xad/xef SQUARE ERA NAME SYOUWA
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U2252> /xad/xf0 APPROXIMATELY EQUAL TO OR THE IMAGE OF
%IRREVERSIBLE%<U2261> /xad/xf1 IDENTICAL TO
%IRREVERSIBLE%<U222B> /xad/xf2 INTEGRAL
<U222E> /xad/xf3 CONTOUR INTEGRAL
<U2211> /xad/xf4 N-ARY SUMMATION
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U221A> /xad/xf5 SQUARE ROOT
%IRREVERSIBLE%<U22A5> /xad/xf6 UP TACK
%IRREVERSIBLE%<U2220> /xad/xf7 ANGLE
<U221F> /xad/xf8 RIGHT ANGLE
<U22BF> /xad/xf9 RIGHT TRIANGLE
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U2235> /xad/xfa BECAUSE
%IRREVERSIBLE%<U2229> /xad/xfb INTERSECTION
%IRREVERSIBLE%<U222A> /xad/xfc UNION
@@ -8163,6 +8166,7 @@ CHARMAP
<U00AF> /x8f/xa2/xb4 MACRON
<U02DB> /x8f/xa2/xb5 OGONEK
<U02DA> /x8f/xa2/xb6 RING ABOVE
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<UFF5E> /x8f/xa2/xb7 FULLWIDTH TILDE
<U0384> /x8f/xa2/xb8 GREEK TONOS
<U0385> /x8f/xa2/xb9 GREEK DIALYTIKA TONOS
@@ -8175,6 +8179,7 @@ CHARMAP
<U00AE> /x8f/xa2/xee REGISTERED SIGN
<U2122> /x8f/xa2/xef TRADE MARK SIGN
<U00A4> /x8f/xa2/xf0 CURRENCY SIGN
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U2116> /x8f/xa2/xf1 NUMERO SIGN
<U0386> /x8f/xa6/xe1 GREEK CAPITAL LETTER ALPHA WITH TONOS
<U0388> /x8f/xa6/xe2 GREEK CAPITAL LETTER EPSILON WITH TONOS
@@ -14232,6 +14237,7 @@ CHARMAP
<U2177> /x8f/xf3/xfa SMALL ROMAN NUMERAL EIGHT
<U2178> /x8f/xf3/xfb SMALL ROMAN NUMERAL NINE
<U2179> /x8f/xf3/xfc SMALL ROMAN NUMERAL TEN
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U2160> /x8f/xf3/xfd ROMAN NUMERAL ONE
%IRREVERSIBLE%<U2161> /x8f/xf3/xfe ROMAN NUMERAL TWO
%IRREVERSIBLE%<U2162> /x8f/xf4/xa1 ROMAN NUMERAL THREE
@@ -14244,6 +14250,7 @@ CHARMAP
%IRREVERSIBLE%<U2169> /x8f/xf4/xa8 ROMAN NUMERAL TEN
<UFF07> /x8f/xf4/xa9 FULLWIDTH APOSTROPHE
<UFF02> /x8f/xf4/xaa FULLWIDTH QUOTATION MARK
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U3231> /x8f/xf4/xab PARENTHESIZED IDEOGRAPH STOCK
%IRREVERSIBLE%<U2116> /x8f/xf4/xac NUMERO SIGN
%IRREVERSIBLE%<U2121> /x8f/xf4/xad TELEPHONE SIGN
diff --git a/localedata/charmaps/EUC-TW b/localedata/charmaps/EUC-TW
index c9c9cdd82a..a3adf38347 100644
--- a/localedata/charmaps/EUC-TW
+++ b/localedata/charmaps/EUC-TW
@@ -6009,6 +6009,7 @@ CHARMAP
%
% CNS 11643-1992 Plane 1 again
%
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U3000> /x8e/xa1/xa1/xa1 IDEOGRAPHIC SPACE
%IRREVERSIBLE%<UFF0C> /x8e/xa1/xa1/xa2 FULLWIDTH COMMA
%IRREVERSIBLE%<U3001> /x8e/xa1/xa1/xa3 IDEOGRAPHIC COMMA
diff --git a/localedata/charmaps/IBM1132 b/localedata/charmaps/IBM1132
index 948d5a4416..6154070aef 100644
--- a/localedata/charmaps/IBM1132
+++ b/localedata/charmaps/IBM1132
@@ -115,6 +115,7 @@ CHARMAP
<U005F> /x6d LOW LINE
<U003E> /x6e GREATER-THAN SIGN
<U003F> /x6f QUESTION MARK
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U006B> /x70 LATIN SMALL LETTER K
<U0EA3> /x72 LAO LETTER LO LING
<U0EA5> /x73 LAO LETTER LO LOOT
diff --git a/localedata/charmaps/IBM1133 b/localedata/charmaps/IBM1133
index a4848439db..cbe09214c3 100644
--- a/localedata/charmaps/IBM1133
+++ b/localedata/charmaps/IBM1133
@@ -219,6 +219,7 @@ CHARMAP
<U0EC6> /xdb LAO KO LA
<U0EDC> /xdd LAO HO NO
<U0EDD> /xde LAO HO MO
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U006B> /xdf LATIN SMALL LETTER K
<U0ED0> /xf0 LAO DIGIT ZERO
<U0ED1> /xf1 LAO DIGIT ONE
diff --git a/localedata/charmaps/IBM1160 b/localedata/charmaps/IBM1160
index 646b921133..cce874f921 100644
--- a/localedata/charmaps/IBM1160
+++ b/localedata/charmaps/IBM1160
@@ -85,6 +85,7 @@ CHARMAP
<U002B> /x4e PLUS SIGN
<U007C> /x4f VERTICAL LINE
<U0026> /x50 AMPERSAND
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U0E48> /x51 THAI CHARACTER MAI EK
<U0E08> /x52 THAI CHARACTER CHO CHAN
<U0E09> /x53 THAI CHARACTER CHO CHING
@@ -206,6 +207,7 @@ CHARMAP
<U0047> /xc7 LATIN CAPITAL LETTER G
<U0048> /xc8 LATIN CAPITAL LETTER H
<U0049> /xc9 LATIN CAPITAL LETTER I
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U0E49> /xca THAI CHARACTER MAI THO
<U0E35> /xcb THAI CHARACTER SARA II
<U0E36> /xcc THAI CHARACTER SARA UE
@@ -229,6 +231,7 @@ CHARMAP
<U0E43> /xde THAI CHARACTER SARA AI MAIMUAN
<U0E44> /xdf THAI CHARACTER SARA AI MAIMALAI
<U005C> /xe0 REVERSE SOLIDUS
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U0E4A> /xe1 THAI CHARACTER MAI TRI
<U0053> /xe2 LATIN CAPITAL LETTER S
<U0054> /xe3 LATIN CAPITAL LETTER T
@@ -257,6 +260,7 @@ CHARMAP
<U0E4B> /xfa THAI CHARACTER MAI CHATTAWA
<U0E4C> /xfb THAI CHARACTER THANTHAKHAT
<U0E4D> /xfc THAI CHARACTER NIKHAHIT
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U0E4B> /xfd THAI CHARACTER MAI CHATTAWA
<U20AC> /xfe EURO SIGN
<U009F> /xff <control>
diff --git a/localedata/charmaps/IBM1161 b/localedata/charmaps/IBM1161
index 9340ba141b..52337c6117 100644
--- a/localedata/charmaps/IBM1161
+++ b/localedata/charmaps/IBM1161
@@ -132,6 +132,7 @@ CHARMAP
<U007D> /x7d RIGHT CURLY BRACKET
<U007E> /x7e TILDE
<U001A> /x7f <control>
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U0E48> /xa0 THAI CHARACTER MAI EK
<U0E01> /xa1 THAI CHARACTER KO KAI
<U0E02> /xa2 THAI CHARACTER KHO KHAI
@@ -191,6 +192,7 @@ CHARMAP
<U0E38> /xd8 THAI CHARACTER SARA U
<U0E39> /xd9 THAI CHARACTER SARA UU
<U0E3A> /xda THAI CHARACTER PHINTHU
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U0E49> /xdb THAI CHARACTER MAI THO
%IRREVERSIBLE%<U0E4A> /xdc THAI CHARACTER MAI TRI
%IRREVERSIBLE%<U0E4B> /xdd THAI CHARACTER MAI CHATTAWA
diff --git a/localedata/charmaps/TSCII b/localedata/charmaps/TSCII
index 9646f326cb..3d9ae1fb5e 100644
--- a/localedata/charmaps/TSCII
+++ b/localedata/charmaps/TSCII
@@ -2,8 +2,26 @@
<comment_char> %
<escape_char> /
<mb_cur_min> 1
-<mb_cur_max> 1
-% based on TSCII version 1.7
+<mb_cur_max> 3
+
+% Tamil Script Code for Information Interchange
+%
+% Based on TSCII version 1.7
+%
+% The lower 128 code points are ASCII, but the upper code points are
+% TSCII characters that often map to multiple Unicode code points. The
+% one-to-many mapping means that much of the character map is commented
+% out since we don't support many-to-one mappings in POSIX-compatible
+% character maps. There are 179 such mappings where one encoded TSCII
+% character is mapped to more than one Unicode code point.
+%
+% Note that iconv is capable of and supports such conversions, but iconv
+% when run with character maps as from-encoding or to-encoding is unable
+% to support such conversions.
+%
+% For conversion reference:
+% https://www.unicode.org/notes/tn15/Tscii2Unicode2.pdf
+%
CHARMAP
<U0000> /x00 NULL
@@ -134,27 +152,30 @@ CHARMAP
<U007D> /x7d RIGHT CURLY BRACKET
<U007E> /x7e TILDE
<U007F> /x7f DELETE
-<U0BE6> /x80 TAMIL DIGIT ZERO (currently unassigned)
+<U0BE6> /x80 TAMIL DIGIT ZERO (Since Unicode 4.1)
<U0BE7> /x81 TAMIL DIGIT ONE
-<U0BB8><U0BCD><U0BB0><U0BC0> /x82 TAMIL GLYPH SRI
+% Note: Prior to Unicode 4.1 the SRI ligature was:
+% <U0BB8><U0BCD><U0BB0><U0BC0>,
+% but since Unicode 4.1 the SRI ligature should start with <U0BB6>.
+% <U0BB6><U0BCD><U0BB0><U0BC0> /x82 TAMIL GLYPH SRI
<U0B9C> /x83 TAMIL LETTER JA
-<U0B9C><U0BC1> /x83/xa4 TAMIL GLYPH JU
-<U0B9C><U0BC2> /x83/xa5 TAMIL GLYPH JUU
+% <U0B9C><U0BC1> /x83/xa4 TAMIL GLYPH JU
+% <U0B9C><U0BC2> /x83/xa5 TAMIL GLYPH JUU
<U0BB7> /x84 TAMIL LETTER SSA
-<U0BB7><U0BC1> /x84/xa4 TAMIL GLYPH SSU
-<U0BB7><U0BC2> /x84/xa5 TAMIL GLYPH SSUU
+% <U0BB7><U0BC1> /x84/xa4 TAMIL GLYPH SSU
+% <U0BB7><U0BC2> /x84/xa5 TAMIL GLYPH SSUU
<U0BB8> /x85 TAMIL LETTER SA
<U0BB9> /x86 TAMIL LETTER HA
-<U0B95><U0BCD><U0BB7> /x87 TAMIL GLYPH KSHA
-<U0B9C><U0BCD> /x88 TAMIL GLYPH J
-<U0BB7><U0BCD> /x89 TAMIL GLYPH SS
-<U0BB8><U0BCD> /x8a TAMIL GLYPH S
-<U0BB8><U0BC1> /x8a/xa4 TAMIL GLYPH SU
-<U0BB8><U0BC2> /x8a/xa5 TAMIL GLYPH SUU
-<U0BB9><U0BCD> /x8b TAMIL GLYPH H
-<U0BB9><U0BC1> /x8b/xa4 TAMIL GLYPH HU
-<U0BB9><U0BC2> /x8b/xa5 TAMIL GLYPH HUU
-<U0B95><U0BCD><U0BB7><U0BCD> /x8c TAMIL GLYPH KSH
+% <U0B95><U0BCD><U0BB7> /x87 TAMIL GLYPH KSHA
+% <U0B9C><U0BCD> /x88 TAMIL GLYPH J
+% <U0BB7><U0BCD> /x89 TAMIL GLYPH SS
+% <U0BB8><U0BCD> /x8a TAMIL GLYPH S
+% <U0BB8><U0BC1> /x8a/xa4 TAMIL GLYPH SU
+% <U0BB8><U0BC2> /x8a/xa5 TAMIL GLYPH SUU
+% <U0BB9><U0BCD> /x8b TAMIL GLYPH H
+% <U0BB9><U0BC1> /x8b/xa4 TAMIL GLYPH HU
+% <U0BB9><U0BC2> /x8b/xa5 TAMIL GLYPH HUU
+% <U0B95><U0BCD><U0BB7><U0BCD> /x8c TAMIL GLYPH KSH
<U0BE8> /x8d TAMIL DIGIT TWO
<U0BE9> /x8e TAMIL DIGIT THREE
<U0BEA> /x8f TAMIL DIGIT FOUR
@@ -167,10 +188,10 @@ CHARMAP
<U0BED> /x96 TAMIL DIGIT SEVEN
<U0BEE> /x97 TAMIL DIGIT EIGHT
<U0BEF> /x98 TAMIL DIGIT NINE
-<U0B99><U0BC1> /x99 TAMIL GLYPH NGU
-<U0B9E><U0BC1> /x9a TAMIL GLYPH NYU
-<U0B99><U0BC2> /x9b TAMIL GLYPH NGUU
-<U0B9E><U0BC2> /x9c TAMIL GLYPH NYUU
+% <U0B99><U0BC1> /x99 TAMIL GLYPH NGU
+% <U0B9E><U0BC1> /x9a TAMIL GLYPH NYU
+% <U0B99><U0BC2> /x9b TAMIL GLYPH NGUU
+% <U0B9E><U0BC2> /x9c TAMIL GLYPH NYUU
<U0BF0> /x9d TAMIL NUMBER TEN
<U0BF1> /x9e TAMIL NUMBER ONE HUNDRED
<U0BF2> /x9f TAMIL NUMBER ONE THOUSAND
@@ -180,124 +201,136 @@ CHARMAP
<U0BC1> /xa4 TAMIL VOWEL SIGN U
<U0BC2> /xa5 TAMIL VOWEL SIGN UU
<U0BC6> /xa6 TAMIL VOWEL SIGN E
-<U0BCA> /xa6/xa1 TAMIL VOWEL SIGN O
-<U0B95><U0BC6> /xa6/xb8 TAMIL GLYPH KE
-<U0B95><U0BCA> /xa6/xb8/xa1 TAMIL GLYPH KAI
-<U0B99><U0BC6> /xa6/xb9 TAMIL GLYPH NGE
-<U0B99><U0BCA> /xa6/xb9/xa1 TAMIL GLYPH NGAI
-<U0B9A><U0BC6> /xa6/xba TAMIL GLYPH CE
-<U0B9A><U0BCA> /xa6/xba/xa1 TAMIL GLYPH CAI
-<U0B9E><U0BC6> /xa6/xbb TAMIL GLYPH NYE
-<U0B9E><U0BCA> /xa6/xbb/xa1 TAMIL GLYPH NYAI
-<U0B9F><U0BC6> /xa6/xbc TAMIL GLYPH TTE
-<U0B9F><U0BCA> /xa6/xbc/xa1 TAMIL GLYPH TTAI
-<U0BA3><U0BC6> /xa6/xbd TAMIL GLYPH NNE
-<U0BA3><U0BCA> /xa6/xbd/xa1 TAMIL GLYPH NNAI
-<U0BA4><U0BC6> /xa6/xbe TAMIL GLYPH TE
-<U0BA4><U0BCA> /xa6/xbe/xa1 TAMIL GLYPH TAI
-<U0BA8><U0BC6> /xa6/xbf TAMIL GLYPH NE
-<U0BA8><U0BCA> /xa6/xbf/xa1 TAMIL GLYPH NAI
-<U0BAA><U0BC6> /xa6/xc0 TAMIL GLYPH PE
-<U0BAA><U0BCA> /xa6/xc0/xa1 TAMIL GLYPH PAI
-<U0BAE><U0BC6> /xa6/xc1 TAMIL GLYPH ME
-<U0BAE><U0BCA> /xa6/xc1/xa1 TAMIL GLYPH MAI
-<U0BAF><U0BC6> /xa6/xc2 TAMIL GLYPH YE
-<U0BAF><U0BCA> /xa6/xc2/xa1 TAMIL GLYPH YAI
-<U0BB0><U0BC6> /xa6/xc3 TAMIL GLYPH RE
-<U0BB0><U0BCA> /xa6/xc3/xa1 TAMIL GLYPH RAI
-<U0BB2><U0BC6> /xa6/xc4 TAMIL GLYPH LE
-<U0BB2><U0BCA> /xa6/xc4/xa1 TAMIL GLYPH LAI
-<U0BB5><U0BC6> /xa6/xc5 TAMIL GLYPH VE
-<U0BB5><U0BCA> /xa6/xc5/xa1 TAMIL GLYPH VAI
-<U0BB4><U0BC6> /xa6/xc6 TAMIL GLYPH LLLE
-<U0BB4><U0BCA> /xa6/xc6/xa1 TAMIL GLYPH LLLAI
-<U0BB3><U0BC6> /xa6/xc7 TAMIL GLYPH LLE
-<U0BB3><U0BCA> /xa6/xc7/xa1 TAMIL GLYPH LLAI
-<U0BB1><U0BC6> /xa6/xc8 TAMIL GLYPH RRE
-<U0BB1><U0BCA> /xa6/xc8/xa1 TAMIL GLYPH RRAI
-<U0BA9><U0BC6> /xa6/xc9 TAMIL GLYPH NNNE
-<U0BA9><U0BCA> /xa6/xc9/xa1 TAMIL GLYPH NNNAI
+% The encoded /xa6/xa1 is <U0BC6><U0BBE> which is the decomposition of
+% <U0BCA> and is encoded exactly the same and collated the same.
+%
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
+%IRREVERSIBLE% <U0BCA> /xa6/xa1 TAMIL VOWEL SIGN O
+% <U0B95><U0BC6> /xa6/xb8 TAMIL GLYPH KE
+% <U0B95><U0BCA> /xa6/xb8/xa1 TAMIL GLYPH KAI
+% <U0B99><U0BC6> /xa6/xb9 TAMIL GLYPH NGE
+% <U0B99><U0BCA> /xa6/xb9/xa1 TAMIL GLYPH NGAI
+% <U0B9A><U0BC6> /xa6/xba TAMIL GLYPH CE
+% <U0B9A><U0BCA> /xa6/xba/xa1 TAMIL GLYPH CAI
+% <U0B9E><U0BC6> /xa6/xbb TAMIL GLYPH NYE
+% <U0B9E><U0BCA> /xa6/xbb/xa1 TAMIL GLYPH NYAI
+% <U0B9F><U0BC6> /xa6/xbc TAMIL GLYPH TTE
+% <U0B9F><U0BCA> /xa6/xbc/xa1 TAMIL GLYPH TTAI
+% <U0BA3><U0BC6> /xa6/xbd TAMIL GLYPH NNE
+% <U0BA3><U0BCA> /xa6/xbd/xa1 TAMIL GLYPH NNAI
+% <U0BA4><U0BC6> /xa6/xbe TAMIL GLYPH TE
+% <U0BA4><U0BCA> /xa6/xbe/xa1 TAMIL GLYPH TAI
+% <U0BA8><U0BC6> /xa6/xbf TAMIL GLYPH NE
+% <U0BA8><U0BCA> /xa6/xbf/xa1 TAMIL GLYPH NAI
+% <U0BAA><U0BC6> /xa6/xc0 TAMIL GLYPH PE
+% <U0BAA><U0BCA> /xa6/xc0/xa1 TAMIL GLYPH PAI
+% <U0BAE><U0BC6> /xa6/xc1 TAMIL GLYPH ME
+% <U0BAE><U0BCA> /xa6/xc1/xa1 TAMIL GLYPH MAI
+% <U0BAF><U0BC6> /xa6/xc2 TAMIL GLYPH YE
+% <U0BAF><U0BCA> /xa6/xc2/xa1 TAMIL GLYPH YAI
+% <U0BB0><U0BC6> /xa6/xc3 TAMIL GLYPH RE
+% <U0BB0><U0BCA> /xa6/xc3/xa1 TAMIL GLYPH RAI
+% <U0BB2><U0BC6> /xa6/xc4 TAMIL GLYPH LE
+% <U0BB2><U0BCA> /xa6/xc4/xa1 TAMIL GLYPH LAI
+% <U0BB5><U0BC6> /xa6/xc5 TAMIL GLYPH VE
+% <U0BB5><U0BCA> /xa6/xc5/xa1 TAMIL GLYPH VAI
+% <U0BB4><U0BC6> /xa6/xc6 TAMIL GLYPH LLLE
+% <U0BB4><U0BCA> /xa6/xc6/xa1 TAMIL GLYPH LLLAI
+% <U0BB3><U0BC6> /xa6/xc7 TAMIL GLYPH LLE
+% <U0BB3><U0BCA> /xa6/xc7/xa1 TAMIL GLYPH LLAI
+% <U0BB1><U0BC6> /xa6/xc8 TAMIL GLYPH RRE
+% <U0BB1><U0BCA> /xa6/xc8/xa1 TAMIL GLYPH RRAI
+% <U0BA9><U0BC6> /xa6/xc9 TAMIL GLYPH NNNE
+% <U0BA9><U0BCA> /xa6/xc9/xa1 TAMIL GLYPH NNNAI
<U0BC7> /xa7 TAMIL VOWEL SIGN EE
-<U0BCB> /xa7/xa1 TAMIL VOWEL SIGN OO
+% The encoded /xa7/xa1 is <U0BC7><U0BBE> which is the decomposition of
+% <U0BCB> and is encoded exactly the same and collated the same.
+%
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
+%IRREVERSIBLE% <U0BCB> /xa7/xa1 TAMIL VOWEL SIGN OO
<U0BCC> /xa7/xaa TAMIL VOWEL SIGN AU
-<U0B95><U0BC7> /xa7/xb8 TAMIL GLYPH KEE
-<U0B95><U0BCB> /xa7/xb8/xa1 TAMIL GLYPH KOO
-<U0B95><U0BCC> /xa7/xb8/xaa TAMIL GLYPH KAU
-<U0B99><U0BC7> /xa7/xb9 TAMIL GLYPH NGEE
-<U0B99><U0BCB> /xa7/xb9/xa1 TAMIL GLYPH NGOO
-<U0B99><U0BCC> /xa7/xb9/xaa TAMIL GLYPH NGAU
-<U0B9A><U0BC7> /xa7/xba TAMIL GLYPH CEE
-<U0B9A><U0BCB> /xa7/xba/xa1 TAMIL GLYPH COO
-<U0B9A><U0BCC> /xa7/xba/xaa TAMIL GLYPH CAU
-<U0B9E><U0BC7> /xa7/xbb TAMIL GLYPH NYEE
-<U0B9E><U0BCB> /xa7/xbb/xa1 TAMIL GLYPH NYOO
-<U0B9E><U0BCC> /xa7/xbb/xaa TAMIL GLYPH NYAU
-<U0B9F><U0BC7> /xa7/xbc TAMIL GLYPH TTEE
-<U0B9F><U0BCB> /xa7/xbc/xa1 TAMIL GLYPH TTOO
-<U0B9F><U0BCC> /xa7/xbc/xaa TAMIL GLYPH TTAU
-<U0BA3><U0BC7> /xa7/xbd TAMIL GLYPH NNEE
-<U0BA3><U0BCB> /xa7/xbd/xa1 TAMIL GLYPH NNOO
-<U0BA3><U0BCC> /xa7/xbd/xaa TAMIL GLYPH NNAU
-<U0BA4><U0BC7> /xa7/xbe TAMIL GLYPH TEE
-<U0BA4><U0BCB> /xa7/xbe/xa1 TAMIL GLYPH TOO
-<U0BA4><U0BCC> /xa7/xbe/xaa TAMIL GLYPH TAU
-<U0BA8><U0BC7> /xa7/xbf TAMIL GLYPH NEE
-<U0BA8><U0BCB> /xa7/xbf/xa1 TAMIL GLYPH NOO
-<U0BA8><U0BCC> /xa7/xbf/xaa TAMIL GLYPH NAU
-<U0BAA><U0BC7> /xa7/xc0 TAMIL GLYPH PEE
-<U0BAA><U0BCB> /xa7/xc0/xa1 TAMIL GLYPH POO
-<U0BAA><U0BCC> /xa7/xc0/xaa TAMIL GLYPH PAU
-<U0BAE><U0BC7> /xa7/xc1 TAMIL GLYPH MEE
-<U0BAE><U0BCB> /xa7/xc1/xa1 TAMIL GLYPH MOO
-<U0BAE><U0BCC> /xa7/xc1/xaa TAMIL GLYPH MAU
-<U0BAF><U0BC7> /xa7/xc2 TAMIL GLYPH YEE
-<U0BAF><U0BCB> /xa7/xc2/xa1 TAMIL GLYPH YOO
-<U0BAF><U0BCC> /xa7/xc2/xaa TAMIL GLYPH YAU
-<U0BB0><U0BC7> /xa7/xc3 TAMIL GLYPH REE
-<U0BB0><U0BCB> /xa7/xc3/xa1 TAMIL GLYPH ROO
-<U0BB0><U0BCC> /xa7/xc3/xaa TAMIL GLYPH RAU
-<U0BB2><U0BC7> /xa7/xc4 TAMIL GLYPH LEE
-<U0BB2><U0BCB> /xa7/xc4/xa1 TAMIL GLYPH LOO
-<U0BB2><U0BCC> /xa7/xc4/xaa TAMIL GLYPH LAU
-<U0BB5><U0BC7> /xa7/xc5 TAMIL GLYPH VEE
-<U0BB5><U0BCB> /xa7/xc5/xa1 TAMIL GLYPH VOO
-<U0BB5><U0BCC> /xa7/xc5/xaa TAMIL GLYPH VAU
-<U0BB4><U0BC7> /xa7/xc6 TAMIL GLYPH LLLEE
-<U0BB4><U0BCB> /xa7/xc6/xa1 TAMIL GLYPH LLLOO
-<U0BB4><U0BCC> /xa7/xc6/xaa TAMIL GLYPH LLLAU
-<U0BB3><U0BC7> /xa7/xc7 TAMIL GLYPH LLEE
-<U0BB3><U0BCB> /xa7/xc7/xa1 TAMIL GLYPH LLOO
-<U0BB3><U0BCC> /xa7/xc7/xaa TAMIL GLYPH LLAU
-<U0BB1><U0BC7> /xa7/xc8 TAMIL GLYPH RREE
-<U0BB1><U0BCB> /xa7/xc8/xa1 TAMIL GLYPH RROO
-<U0BB1><U0BCC> /xa7/xc8/xaa TAMIL GLYPH RRAU
-<U0BA9><U0BC7> /xa7/xc9 TAMIL GLYPH NNNEE
-<U0BA9><U0BCB> /xa7/xc9/xa1 TAMIL GLYPH NNNOO
-<U0BA9><U0BCC> /xa7/xc9/xaa TAMIL GLYPH NNNAU
+% <U0B95><U0BC7> /xa7/xb8 TAMIL GLYPH KEE
+% <U0B95><U0BCB> /xa7/xb8/xa1 TAMIL GLYPH KOO
+% <U0B95><U0BCC> /xa7/xb8/xaa TAMIL GLYPH KAU
+% <U0B99><U0BC7> /xa7/xb9 TAMIL GLYPH NGEE
+% <U0B99><U0BCB> /xa7/xb9/xa1 TAMIL GLYPH NGOO
+% <U0B99><U0BCC> /xa7/xb9/xaa TAMIL GLYPH NGAU
+% <U0B9A><U0BC7> /xa7/xba TAMIL GLYPH CEE
+% <U0B9A><U0BCB> /xa7/xba/xa1 TAMIL GLYPH COO
+% <U0B9A><U0BCC> /xa7/xba/xaa TAMIL GLYPH CAU
+% <U0B9E><U0BC7> /xa7/xbb TAMIL GLYPH NYEE
+% <U0B9E><U0BCB> /xa7/xbb/xa1 TAMIL GLYPH NYOO
+% <U0B9E><U0BCC> /xa7/xbb/xaa TAMIL GLYPH NYAU
+% <U0B9F><U0BC7> /xa7/xbc TAMIL GLYPH TTEE
+% <U0B9F><U0BCB> /xa7/xbc/xa1 TAMIL GLYPH TTOO
+% <U0B9F><U0BCC> /xa7/xbc/xaa TAMIL GLYPH TTAU
+% <U0BA3><U0BC7> /xa7/xbd TAMIL GLYPH NNEE
+% <U0BA3><U0BCB> /xa7/xbd/xa1 TAMIL GLYPH NNOO
+% <U0BA3><U0BCC> /xa7/xbd/xaa TAMIL GLYPH NNAU
+% <U0BA4><U0BC7> /xa7/xbe TAMIL GLYPH TEE
+% <U0BA4><U0BCB> /xa7/xbe/xa1 TAMIL GLYPH TOO
+% <U0BA4><U0BCC> /xa7/xbe/xaa TAMIL GLYPH TAU
+% <U0BA8><U0BC7> /xa7/xbf TAMIL GLYPH NEE
+% <U0BA8><U0BCB> /xa7/xbf/xa1 TAMIL GLYPH NOO
+% <U0BA8><U0BCC> /xa7/xbf/xaa TAMIL GLYPH NAU
+% <U0BAA><U0BC7> /xa7/xc0 TAMIL GLYPH PEE
+% <U0BAA><U0BCB> /xa7/xc0/xa1 TAMIL GLYPH POO
+% <U0BAA><U0BCC> /xa7/xc0/xaa TAMIL GLYPH PAU
+% <U0BAE><U0BC7> /xa7/xc1 TAMIL GLYPH MEE
+% <U0BAE><U0BCB> /xa7/xc1/xa1 TAMIL GLYPH MOO
+% <U0BAE><U0BCC> /xa7/xc1/xaa TAMIL GLYPH MAU
+% <U0BAF><U0BC7> /xa7/xc2 TAMIL GLYPH YEE
+% <U0BAF><U0BCB> /xa7/xc2/xa1 TAMIL GLYPH YOO
+% <U0BAF><U0BCC> /xa7/xc2/xaa TAMIL GLYPH YAU
+% <U0BB0><U0BC7> /xa7/xc3 TAMIL GLYPH REE
+% <U0BB0><U0BCB> /xa7/xc3/xa1 TAMIL GLYPH ROO
+% <U0BB0><U0BCC> /xa7/xc3/xaa TAMIL GLYPH RAU
+% <U0BB2><U0BC7> /xa7/xc4 TAMIL GLYPH LEE
+% <U0BB2><U0BCB> /xa7/xc4/xa1 TAMIL GLYPH LOO
+% <U0BB2><U0BCC> /xa7/xc4/xaa TAMIL GLYPH LAU
+% <U0BB5><U0BC7> /xa7/xc5 TAMIL GLYPH VEE
+% <U0BB5><U0BCB> /xa7/xc5/xa1 TAMIL GLYPH VOO
+% <U0BB5><U0BCC> /xa7/xc5/xaa TAMIL GLYPH VAU
+% <U0BB4><U0BC7> /xa7/xc6 TAMIL GLYPH LLLEE
+% <U0BB4><U0BCB> /xa7/xc6/xa1 TAMIL GLYPH LLLOO
+% <U0BB4><U0BCC> /xa7/xc6/xaa TAMIL GLYPH LLLAU
+% <U0BB3><U0BC7> /xa7/xc7 TAMIL GLYPH LLEE
+% <U0BB3><U0BCB> /xa7/xc7/xa1 TAMIL GLYPH LLOO
+% <U0BB3><U0BCC> /xa7/xc7/xaa TAMIL GLYPH LLAU
+% <U0BB1><U0BC7> /xa7/xc8 TAMIL GLYPH RREE
+% <U0BB1><U0BCB> /xa7/xc8/xa1 TAMIL GLYPH RROO
+% <U0BB1><U0BCC> /xa7/xc8/xaa TAMIL GLYPH RRAU
+% <U0BA9><U0BC7> /xa7/xc9 TAMIL GLYPH NNNEE
+% <U0BA9><U0BCB> /xa7/xc9/xa1 TAMIL GLYPH NNNOO
+% <U0BA9><U0BCC> /xa7/xc9/xaa TAMIL GLYPH NNNAU
<U0BC8> /xa8 TAMIL VOWEL SIGN AI
-<U0B95><U0BC8> /xa8/xb8 TAMIL GLYPH KA
-<U0B99><U0BC8> /xa8/xb9 TAMIL GLYPH NGA
-<U0B9A><U0BC8> /xa8/xba TAMIL GLYPH CA
-<U0B9E><U0BC8> /xa8/xbb TAMIL GLYPH NYA
-<U0B9F><U0BC8> /xa8/xbc TAMIL GLYPH TTA
-<U0BA3><U0BC8> /xa8/xbd TAMIL GLYPH NNA
-<U0BA4><U0BC8> /xa8/xbe TAMIL GLYPH TA
-<U0BA8><U0BC8> /xa8/xbf TAMIL GLYPH NA
-<U0BAA><U0BC8> /xa8/xc0 TAMIL GLYPH PA
-<U0BAE><U0BC8> /xa8/xc1 TAMIL GLYPH MA
-<U0BAF><U0BC8> /xa8/xc2 TAMIL GLYPH YA
-<U0BB0><U0BC8> /xa8/xc3 TAMIL GLYPH RA
-<U0BB2><U0BC8> /xa8/xc4 TAMIL GLYPH LA
-<U0BB5><U0BC8> /xa8/xc5 TAMIL GLYPH VA
-<U0BB4><U0BC8> /xa8/xc6 TAMIL GLYPH LLLA
-<U0BB3><U0BC8> /xa8/xc7 TAMIL GLYPH LLA
-<U0BB1><U0BC8> /xa8/xc8 TAMIL GLYPH RRA
-<U0BA9><U0BC8> /xa8/xc9 TAMIL GLYPH NNNA
+% <U0B95><U0BC8> /xa8/xb8 TAMIL GLYPH KA
+% <U0B99><U0BC8> /xa8/xb9 TAMIL GLYPH NGA
+% <U0B9A><U0BC8> /xa8/xba TAMIL GLYPH CA
+% <U0B9E><U0BC8> /xa8/xbb TAMIL GLYPH NYA
+% <U0B9F><U0BC8> /xa8/xbc TAMIL GLYPH TTA
+% <U0BA3><U0BC8> /xa8/xbd TAMIL GLYPH NNA
+% <U0BA4><U0BC8> /xa8/xbe TAMIL GLYPH TA
+% <U0BA8><U0BC8> /xa8/xbf TAMIL GLYPH NA
+% <U0BAA><U0BC8> /xa8/xc0 TAMIL GLYPH PA
+% <U0BAE><U0BC8> /xa8/xc1 TAMIL GLYPH MA
+% <U0BAF><U0BC8> /xa8/xc2 TAMIL GLYPH YA
+% <U0BB0><U0BC8> /xa8/xc3 TAMIL GLYPH RA
+% <U0BB2><U0BC8> /xa8/xc4 TAMIL GLYPH LA
+% <U0BB5><U0BC8> /xa8/xc5 TAMIL GLYPH VA
+% <U0BB4><U0BC8> /xa8/xc6 TAMIL GLYPH LLLA
+% <U0BB3><U0BC8> /xa8/xc7 TAMIL GLYPH LLA
+% <U0BB1><U0BC8> /xa8/xc8 TAMIL GLYPH RRA
+% <U0BA9><U0BC8> /xa8/xc9 TAMIL GLYPH NNNA
<U00A9> /xa9 COPYRIGHT SIGN
<U0BD7> /xaa TAMIL AU LENGTH MARK
<U0B85> /xab TAMIL LETTER A
<U0B86> /xac TAMIL LETTER AA
-%IRREVERSIBLE%<U0B87> /xad TAMIL LETTER I
+% In TSCII 1.7 the hex value for TAMIL LETTER I was moved from /xad
+% to /xfe, thus we leave the next line commented out.
+%
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
+%IRREVERSIBLE% <U0B87> /xad TAMIL LETTER I
<U0B88> /xae TAMIL LETTER II
<U0B89> /xaf TAMIL LETTER U
<U0B8A> /xb0 TAMIL LETTER UU
@@ -326,63 +359,57 @@ CHARMAP
<U0BB3> /xc7 TAMIL LETTER LLA
<U0BB1> /xc8 TAMIL LETTER RRA
<U0BA9> /xc9 TAMIL LETTER NNNA
-<U0B9F><U0BBF> /xca TAMIL GLYPH TI
-<U0B9F><U0BC0> /xcb TAMIL GLYPH TII
-<U0B95><U0BC1> /xcc TAMIL GLYPH KU
-<U0B9A><U0BC1> /xcd TAMIL GLYPH CU
-<U0B9F><U0BC1> /xce TAMIL GLYPH TTU
-<U0BA3><U0BC1> /xcf TAMIL GLYPH NNU
-<U0BA4><U0BC1> /xd0 TAMIL GLYPH TU
-<U0BA8><U0BC1> /xd1 TAMIL GLYPH NU
-<U0BAA><U0BC1> /xd2 TAMIL GLYPH PU
-<U0BAE><U0BC1> /xd3 TAMIL GLYPH MU
-<U0BAF><U0BC1> /xd4 TAMIL GLYPH YU
-<U0BB0><U0BC1> /xd5 TAMIL GLYPH RU
-<U0BB2><U0BC1> /xd6 TAMIL GLYPH LU
-<U0BB5><U0BC1> /xd7 TAMIL GLYPH VU
-<U0BB4><U0BC1> /xd8 TAMIL GLYPH LLLU
-<U0BB3><U0BC1> /xd9 TAMIL GLYPH LLU
-<U0BB1><U0BC1> /xda TAMIL GLYPH RRU
-<U0BA9><U0BC1> /xdb TAMIL GLYPH NNNU
-<U0B95><U0BC2> /xdc TAMIL GLYPH KUU
-<U0B9A><U0BC2> /xdd TAMIL GLYPH CUU
-<U0B9F><U0BC2> /xde TAMIL GLYPH TTUU
-<U0BA3><U0BC2> /xdf TAMIL GLYPH NNUU
-<U0BA4><U0BC2> /xe0 TAMIL GLYPH TUU
-<U0BA8><U0BC2> /xe1 TAMIL GLYPH NUU
-<U0BAA><U0BC2> /xe2 TAMIL GLYPH PUU
-<U0BAE><U0BC2> /xe3 TAMIL GLYPH MUU
-<U0BAF><U0BC2> /xe4 TAMIL GLYPH YUU
-<U0BB0><U0BC2> /xe5 TAMIL GLYPH RUU
-<U0BB2><U0BC2> /xe6 TAMIL GLYPH LUU
-<U0BB5><U0BC2> /xe7 TAMIL GLYPH VUU
-<U0BB4><U0BC2> /xe8 TAMIL GLYPH LLLUU
-<U0BB3><U0BC2> /xe9 TAMIL GLYPH LLUU
-<U0BB1><U0BC2> /xea TAMIL GLYPH RRUU
-<U0BA9><U0BC2> /xeb TAMIL GLYPH NNNUU
-<U0B95><U0BCD> /xec TAMIL GLYPH K
-<U0B99><U0BCD> /xed TAMIL GLYPH NG
-<U0B9A><U0BCD> /xee TAMIL GLYPH C
-<U0B9E><U0BCD> /xef TAMIL GLYPH NY
-<U0B9F><U0BCD> /xf0 TAMIL GLYPH TT
-<U0BA3><U0BCD> /xf1 TAMIL GLYPH NN
-<U0BA4><U0BCD> /xf2 TAMIL GLYPH T
-<U0BA8><U0BCD> /xf3 TAMIL GLYPH N
-<U0BAA><U0BCD> /xf4 TAMIL GLYPH P
-<U0BAE><U0BCD> /xf5 TAMIL GLYPH M
-<U0BAF><U0BCD> /xf6 TAMIL GLYPH Y
-<U0BB0><U0BCD> /xf7 TAMIL GLYPH R
-<U0BB2><U0BCD> /xf8 TAMIL GLYPH L
-<U0BB5><U0BCD> /xf9 TAMIL GLYPH V
-<U0BB4><U0BCD> /xfa TAMIL GLYPH LLL
-<U0BB3><U0BCD> /xfb TAMIL GLYPH LL
-<U0BB1><U0BCD> /xfc TAMIL GLYPH RR
-<U0BA9><U0BCD> /xfd TAMIL GLYPH NNN
+% <U0B9F><U0BBF> /xca TAMIL GLYPH TI
+% <U0B9F><U0BC0> /xcb TAMIL GLYPH TII
+% <U0B95><U0BC1> /xcc TAMIL GLYPH KU
+% <U0B9A><U0BC1> /xcd TAMIL GLYPH CU
+% <U0B9F><U0BC1> /xce TAMIL GLYPH TTU
+% <U0BA3><U0BC1> /xcf TAMIL GLYPH NNU
+% <U0BA4><U0BC1> /xd0 TAMIL GLYPH TU
+% <U0BA8><U0BC1> /xd1 TAMIL GLYPH NU
+% <U0BAA><U0BC1> /xd2 TAMIL GLYPH PU
+% <U0BAE><U0BC1> /xd3 TAMIL GLYPH MU
+% <U0BAF><U0BC1> /xd4 TAMIL GLYPH YU
+% <U0BB0><U0BC1> /xd5 TAMIL GLYPH RU
+% <U0BB2><U0BC1> /xd6 TAMIL GLYPH LU
+% <U0BB5><U0BC1> /xd7 TAMIL GLYPH VU
+% <U0BB4><U0BC1> /xd8 TAMIL GLYPH LLLU
+% <U0BB3><U0BC1> /xd9 TAMIL GLYPH LLU
+% <U0BB1><U0BC1> /xda TAMIL GLYPH RRU
+% <U0BA9><U0BC1> /xdb TAMIL GLYPH NNNU
+% <U0B95><U0BC2> /xdc TAMIL GLYPH KUU
+% <U0B9A><U0BC2> /xdd TAMIL GLYPH CUU
+% <U0B9F><U0BC2> /xde TAMIL GLYPH TTUU
+% <U0BA3><U0BC2> /xdf TAMIL GLYPH NNUU
+% <U0BA4><U0BC2> /xe0 TAMIL GLYPH TUU
+% <U0BA8><U0BC2> /xe1 TAMIL GLYPH NUU
+% <U0BAA><U0BC2> /xe2 TAMIL GLYPH PUU
+% <U0BAE><U0BC2> /xe3 TAMIL GLYPH MUU
+% <U0BAF><U0BC2> /xe4 TAMIL GLYPH YUU
+% <U0BB0><U0BC2> /xe5 TAMIL GLYPH RUU
+% <U0BB2><U0BC2> /xe6 TAMIL GLYPH LUU
+% <U0BB5><U0BC2> /xe7 TAMIL GLYPH VUU
+% <U0BB4><U0BC2> /xe8 TAMIL GLYPH LLLUU
+% <U0BB3><U0BC2> /xe9 TAMIL GLYPH LLUU
+% <U0BB1><U0BC2> /xea TAMIL GLYPH RRUU
+% <U0BA9><U0BC2> /xeb TAMIL GLYPH NNNUU
+% <U0B95><U0BCD> /xec TAMIL GLYPH K
+% <U0B99><U0BCD> /xed TAMIL GLYPH NG
+% <U0B9A><U0BCD> /xee TAMIL GLYPH C
+% <U0B9E><U0BCD> /xef TAMIL GLYPH NY
+% <U0B9F><U0BCD> /xf0 TAMIL GLYPH TT
+% <U0BA3><U0BCD> /xf1 TAMIL GLYPH NN
+% <U0BA4><U0BCD> /xf2 TAMIL GLYPH T
+% <U0BA8><U0BCD> /xf3 TAMIL GLYPH N
+% <U0BAA><U0BCD> /xf4 TAMIL GLYPH P
+% <U0BAE><U0BCD> /xf5 TAMIL GLYPH M
+% <U0BAF><U0BCD> /xf6 TAMIL GLYPH Y
+% <U0BB0><U0BCD> /xf7 TAMIL GLYPH R
+% <U0BB2><U0BCD> /xf8 TAMIL GLYPH L
+% <U0BB5><U0BCD> /xf9 TAMIL GLYPH V
+% <U0BB4><U0BCD> /xfa TAMIL GLYPH LLL
+% <U0BB3><U0BCD> /xfb TAMIL GLYPH LL
+% <U0BB1><U0BCD> /xfc TAMIL GLYPH RR
+% <U0BA9><U0BCD> /xfd TAMIL GLYPH NNN
<U0B87> /xfe TAMIL LETTER I
END CHARMAP
-
-WIDTH
-<U0B82> 0
-<U0BC0> 0
-<U0BCD> 0
-END WIDTH
diff --git a/localedata/charmaps/WINDOWS-31J b/localedata/charmaps/WINDOWS-31J
index d5ab12abef..63e987f4ac 100644
--- a/localedata/charmaps/WINDOWS-31J
+++ b/localedata/charmaps/WINDOWS-31J
@@ -734,16 +734,19 @@ CHARMAP
<U337E> /x87/x8d SQUARE ERA NAME MEIZI
<U337D> /x87/x8e SQUARE ERA NAME TAISYOU
<U337C> /x87/x8f SQUARE ERA NAME SYOUWA
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U2252> /x87/x90 APPROXIMATELY EQUAL TO OR THE IMAGE OF
%IRREVERSIBLE%<U2261> /x87/x91 IDENTICAL TO
%IRREVERSIBLE%<U222B> /x87/x92 INTEGRAL
<U222E> /x87/x93 CONTOUR INTEGRAL
<U2211> /x87/x94 N-ARY SUMMATION
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U221A> /x87/x95 SQUARE ROOT
%IRREVERSIBLE%<U22A5> /x87/x96 UP TACK
%IRREVERSIBLE%<U2220> /x87/x97 ANGLE
<U221F> /x87/x98 RIGHT ANGLE
<U22BF> /x87/x99 RIGHT TRIANGLE
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U2235> /x87/x9a BECAUSE
%IRREVERSIBLE%<U2229> /x87/x9b INTERSECTION
%IRREVERSIBLE%<U222A> /x87/x9c UNION
@@ -7167,7 +7170,7 @@ CHARMAP
<U7464> /xea/xa2 <CJK>
<U51DC> /xea/xa3 <CJK>
<U7199> /xea/xa4 <CJK>
-
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U7E8A> /xed/x40 <CJK>
%IRREVERSIBLE%<U891C> /xed/x41 <CJK>
%IRREVERSIBLE%<U9348> /xed/x42 <CJK>
@@ -9434,6 +9437,7 @@ CHARMAP
<U2177> /xfa/x47 SMALL ROMAN NUMERAL EIGHT
<U2178> /xfa/x48 SMALL ROMAN NUMERAL NINE
<U2179> /xfa/x49 SMALL ROMAN NUMERAL TEN
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U2160> /xfa/x4a ROMAN NUMERAL ONE
%IRREVERSIBLE%<U2161> /xfa/x4b ROMAN NUMERAL TWO
%IRREVERSIBLE%<U2162> /xfa/x4c ROMAN NUMERAL THREE
@@ -9448,6 +9452,7 @@ CHARMAP
<UFFE4> /xfa/x55 FULLWIDTH BROKEN BAR
<UFF07> /xfa/x56 FULLWIDTH APOSTROPHE
<UFF02> /xfa/x57 FULLWIDTH QUOTATION MARK
+% The "IRREVERSIBLE" markup is used by iconv testing. Please do not remove.
%IRREVERSIBLE%<U3231> /xfa/x58 PARENTHESIZED IDEOGRAPH STOCK
%IRREVERSIBLE%<U2116> /xfa/x59 NUMERO SIGN
%IRREVERSIBLE%<U2121> /xfa/x5a TELEPHONE SIGN
--
2.26.2
More information about the Libc-alpha
mailing list