@@ -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)
similarity index 100%
rename from iconvdata/TESTS
rename to iconvdata/iconv-test1.in
similarity index 100%
rename from iconvdata/TESTS2
rename to iconvdata/iconv-test2.in
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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>
@@ -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
@@ -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
@@ -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