From 88df5e430bf5f29dd52202c9ee84079e92c3a04e Mon Sep 17 00:00:00 2001 From: elijah-thomas774 Date: Sat, 4 May 2024 23:11:25 -0400 Subject: [PATCH] Update ut_CharStrmReader.cpp --- src/nw4r/ut/ut_CharStrmReader.cpp | 61 +++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/nw4r/ut/ut_CharStrmReader.cpp b/src/nw4r/ut/ut_CharStrmReader.cpp index e69de29b..647875de 100644 --- a/src/nw4r/ut/ut_CharStrmReader.cpp +++ b/src/nw4r/ut/ut_CharStrmReader.cpp @@ -0,0 +1,61 @@ +#include + +namespace nw4r { +namespace ut { +namespace { + +bool IsSJISLeadByte(u8 c) { + // Idk how to force the comparison correctly + return ((c >= 0x81) && (c < 0xA0)) || c >= 0xe0; +} + +} // namespace + +u16 CharStrmReader::ReadNextCharUTF8() { + u16 code; + + if (!(GetChar(0) & 0x80)) { + code = GetChar(0); + StepStrm(1); + } else if ((GetChar(0) & 0xe0) == 0xC0) { + code = ((GetChar(0) & 0x1F) << 6) | GetChar(1) & 0x3F; + StepStrm(2); + } else { + code = ((GetChar(0) & 0x1F) << 12) | ((GetChar(1) & 0x3F) << 6) | (GetChar(2) & 0x3F); + StepStrm(3); + } + return code; +} + +u16 CharStrmReader::ReadNextCharUTF16() { + u16 code = GetChar(0); + StepStrm(1); + return code; +} +u16 CharStrmReader::ReadNextCharCP1252() { + u16 code = GetChar(0); + StepStrm(1); + return code; +} +u16 CharStrmReader::ReadNextCharSJIS() { + u16 code = GetChar(0); + + bool isLead = false; + + if ((((u8)GetChar(0) >= 0x81) && ((u8)GetChar(0) <= 0xA0)) || (u8)GetChar(0) >= 0xe0) { + isLead = true; + } + + if (isLead) { + code = GetChar(1) | (GetChar(0) << 8); + StepStrm(2); + } else { + code = GetChar(0); + StepStrm(1); + } + return code; +} + +} // namespace ut + +} // namespace nw4r