docs/dev/debt/libSceCesCs.md: keep this branch's new sceCesJisGetLevel bullet, take main's edit of the single-byte profiles bullet, and recount PendingExports.cpp: 17 pending (main implemented 8 profile exports, this branch sceCesJisGetLevel).
Bytes 81 8D 8E 8F 90 9D 9E of Cp1254 and 81 8A 8D 8E 8F 90 9A 9D 9E of
Cp1258 now answer 0x805C0020 both ways instead of mapping to C1 controls,
and sceCesUtf32ToSbc answers 0x805C0015 for a surrogate, as a sweep on a
PS5 measured and a firmware 13.42 run of the module agrees.
Implement sceCesRefersUcsProfileCp864 with Microsoft's CP864.TXT table.
Byte 0x25 maps to U+066A through the low-byte table, U+0025 has no
byte, and the six undefined bytes answer UNASSIGNED_CODE.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01N6PcbFBJ6WBtt4TVxUhgTW
Split the sceCesJiscsToUcs and sceCesUcsToJiscs debt entry in two. The
first lists the forms a payload process on a device answered that still
throw here, with what the device returned: native Shift-JIS and EUC-JP
codes, 0x02002422, the null-profile results and plane 2 with a JIS X
0208 profile. The second lists what was not measured: planes 1 and
3-16, the encoder's 0x03PPRRCC and 0x0400RRCC codes as input, and other
or modified profiles.
Convert between Unicode and JIS codes for the eight JIS profiles, as
measured as a payload process on a device: single bytes and rows and
cells of the profile's table one way, and bytes, 0x03PPRRCC and
0x0400RRCC codes the other way, with the measured error codes. Forms,
planes and profiles that were not measured throw and are listed in the
technical debt, including the type-prefixed codes the encoder returns.
sceCesRefersUcsProfileCp858 threw. It now returns a single-byte profile
accepted by sceCesSbcToUtf8, sceCesUtf8ToSbc and the MBCS context
conversions. Code page 858 is code page 850 with byte 0xD5 mapped to the
euro sign (U+20AC) instead of U+0131; that is the whole high half of
ICU's ibm-858_P100-1997.ucm. Bytes 0x00-0x7F stay unchanged, as in the
other single-byte profiles.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01FzhWRMauD3ouc8kSxT2NnT
Brings in main with #9204. The measured CP932 and CP51932 encoding rules (JIS form aliases, U+FEFF, the C1 range and U+000E) apply to those profiles only; the strict JIS X 0208 profiles keep #9204's tables.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Keep #9204's strict JIS X 0208 profiles with their SS2 and SS3 choices inside the new helpers: decodeEucJp sends the measured CP51932 profile to decodeEucJpScalar and the strict profiles to #9204's rules, and only the X0208Ss2Ss3 profile encodes JIS X 0212. The EUC-KR, UHC and Big5 UTF-8 forms decode with decodeScalarUtf8.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Implement sceCesUcsProfileInitGb18030_2000 and sceCesUcsProfileInitGb18030_2005.
Two-byte cells are the CP936 table plus the cells that differ, and four-byte
sequences are runs over the BMP and the supplementary planes, generated from
ICU's gb-18030-2000.ucm (before ICU-8427) and gb-18030-2005.ucm with ICU's
GB 18030 ranges. The GB, MBC and MBCS string conversions accept both profiles
and produce four-byte UTF-8 and surrogate pairs for supplementary characters.
Implement sceCesUcsProfileInitEucJpX0208, sceCesUcsProfileInitEucJpX0208Ss2,
sceCesUcsProfileInitEucJpX0208Ss2Ss3 and sceCesUcsProfileInitSJis1997X0208.
The JIS X 0208 table is JIS0208.TXT, derived from the CP932 table without
rows 13 and 89-92 and with six cells changed. The EUC-JP variants add SS2
half-width katakana and SS3 JIS X 0212 as their names say. Cell 0x2140 and
the Shift-JIS single bytes 0x5C and 0x7E, where the sources disagree, throw.