# *******************************************************************************
# * Copyright (C) 2012, International Business Machines
# * Corporation and others.  All Rights Reserved.
# *******************************************************************************
#
# test2.ucm
#
# Test file for MBCS conversion with two-byte codepage data. (DBCS)
# Also contains extension mappings (m:n).

<code_set_name>     "test2"
<mb_cur_max>        2
<mb_cur_min>        1
<uconv_class>       "MBCS"
<subchar>           \x1A
<icu:state>         0, 1:1, 5-9, 1a, ff
<icu:state>         a-f.p

CHARMAP

# fromUnicode result is zero byte from other than U+0000
<U0040>     \x00 |0

# nothing special
<U0065>     \x05 |0

# extensions
<U00c0>     \x05+\x01\x0d |0
<U00c0>     \x05+\x01\x0e |3
<U00c0>     \x05+\xff |3

# toUnicode result is fallback direct
<U0066>     \x06 |3

# toUnicode result is direct non-BMP code point
<U101234>   \x07 |0
<Ufebcd>    \x08 |3

# extensions
<U101234>+<U50005>+<U60006> \x07+\x00+\x01\x0f+\x09 |0
<U101234>+<U50005>          \x07+\x00+\x01\x0e+\x05 |0
<U101234>+<U60006>          \x07+\x00+\x01\x0f+\x06 |0
<U101234>+<U70007>          \x07+\x00+\x01\x0f |1

#unassigned \x09

# extensions where the first code point is unassigned, for replay testing
#<U00c4><U0300> \x09+\x09 |0
<U00c4><U00c4><U101234><U0005> \x05+\x01\x0c |0

# toUnicode result is surrogate pair: test real pair, single unit, unassigned
<U23456>    \x01\x0a |0
<U000b>     \x01\x0b |0
#unassigned \x01\x0c
<U34567>    \x01\x0d |3
<U000e>     \x01\x0e |3
#unassigned \x01\x0f

END CHARMAP
