// ported from https://github.com/kiwi515/ogws/blob/master/src/nw4r/ut/ut_CharStrmReader.cpp #include "nw4r/ut/ut_CharStrmReader.h" namespace nw4r { namespace ut { namespace { bool IsSJISLeadByte(u8 c) { 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); if (IsSJISLeadByte((u8)code)) { code = GetChar(1) | (GetChar(0) << 8); StepStrm(2); } else { code = GetChar(0); StepStrm(1); } return code; } } // namespace ut } // namespace nw4r