UTF refactor to eliminate duplicated code outside of PL

This commit is contained in:
elasota
2021-04-27 09:54:01 -04:00
parent 07df94fb00
commit 2cd4e4f178
19 changed files with 311 additions and 389 deletions

View File

@@ -2,7 +2,7 @@
#include "PLCore.h"
#include "PLBigEndian.h"
#include "MacRomanConversion.h"
#include "UTF8.h"
#include "GpUnicode.h"
#include "WindowsUnicodeToolShim.h"
#include <vector>
@@ -376,122 +376,122 @@ static const size_t houseSize = sizeof(houseType);
EnumDef g_objectTypeEnum[] =
{
{ -1, "kObjectIsEmpty" },
ENUM_VALUE_DEF(kFloorVent),
ENUM_VALUE_DEF(kCeilingVent),
ENUM_VALUE_DEF(kFloorBlower),
ENUM_VALUE_DEF(kCeilingBlower),
ENUM_VALUE_DEF(kSewerGrate),
ENUM_VALUE_DEF(kLeftFan),
ENUM_VALUE_DEF(kRightFan),
ENUM_VALUE_DEF(kTaper),
ENUM_VALUE_DEF(kCandle),
ENUM_VALUE_DEF(kStubby),
ENUM_VALUE_DEF(kTiki),
ENUM_VALUE_DEF(kBBQ),
ENUM_VALUE_DEF(kInvisBlower),
ENUM_VALUE_DEF(kGrecoVent),
ENUM_VALUE_DEF(kSewerBlower),
ENUM_VALUE_DEF(kLiftArea),
ENUM_VALUE_DEF(kTable),
ENUM_VALUE_DEF(kShelf),
ENUM_VALUE_DEF(kCabinet),
ENUM_VALUE_DEF(kFilingCabinet),
ENUM_VALUE_DEF(kWasteBasket),
ENUM_VALUE_DEF(kMilkCrate),
ENUM_VALUE_DEF(kCounter),
ENUM_VALUE_DEF(kDresser),
ENUM_VALUE_DEF(kDeckTable),
ENUM_VALUE_DEF(kStool),
ENUM_VALUE_DEF(kTrunk),
ENUM_VALUE_DEF(kInvisObstacle),
ENUM_VALUE_DEF(kManhole),
ENUM_VALUE_DEF(kBooks),
ENUM_VALUE_DEF(kInvisBounce),
ENUM_VALUE_DEF(kRedClock),
ENUM_VALUE_DEF(kBlueClock),
ENUM_VALUE_DEF(kYellowClock),
ENUM_VALUE_DEF(kCuckoo),
ENUM_VALUE_DEF(kPaper),
ENUM_VALUE_DEF(kBattery),
ENUM_VALUE_DEF(kBands),
ENUM_VALUE_DEF(kGreaseRt),
ENUM_VALUE_DEF(kGreaseLf),
ENUM_VALUE_DEF(kFoil),
ENUM_VALUE_DEF(kInvisBonus),
ENUM_VALUE_DEF(kStar),
ENUM_VALUE_DEF(kSparkle),
ENUM_VALUE_DEF(kHelium),
ENUM_VALUE_DEF(kSlider),
ENUM_VALUE_DEF(kUpStairs),
ENUM_VALUE_DEF(kDownStairs),
ENUM_VALUE_DEF(kMailboxLf),
ENUM_VALUE_DEF(kMailboxRt),
ENUM_VALUE_DEF(kFloorTrans),
ENUM_VALUE_DEF(kCeilingTrans),
ENUM_VALUE_DEF(kDoorInLf),
ENUM_VALUE_DEF(kDoorInRt),
ENUM_VALUE_DEF(kDoorExRt),
ENUM_VALUE_DEF(kDoorExLf),
ENUM_VALUE_DEF(kWindowInLf),
ENUM_VALUE_DEF(kWindowInRt),
ENUM_VALUE_DEF(kWindowExRt),
ENUM_VALUE_DEF(kWindowExLf),
ENUM_VALUE_DEF(kInvisTrans),
ENUM_VALUE_DEF(kDeluxeTrans),
ENUM_VALUE_DEF(kLightSwitch),
ENUM_VALUE_DEF(kMachineSwitch),
ENUM_VALUE_DEF(kThermostat),
ENUM_VALUE_DEF(kPowerSwitch),
ENUM_VALUE_DEF(kKnifeSwitch),
ENUM_VALUE_DEF(kInvisSwitch),
ENUM_VALUE_DEF(kTrigger),
ENUM_VALUE_DEF(kLgTrigger),
ENUM_VALUE_DEF(kSoundTrigger),
ENUM_VALUE_DEF(kCeilingLight),
ENUM_VALUE_DEF(kLightBulb),
ENUM_VALUE_DEF(kTableLamp),
ENUM_VALUE_DEF(kHipLamp),
ENUM_VALUE_DEF(kDecoLamp),
ENUM_VALUE_DEF(kFlourescent),
ENUM_VALUE_DEF(kTrackLight),
ENUM_VALUE_DEF(kInvisLight),
ENUM_VALUE_DEF(kShredder),
ENUM_VALUE_DEF(kToaster),
ENUM_VALUE_DEF(kMacPlus),
ENUM_VALUE_DEF(kGuitar),
ENUM_VALUE_DEF(kTV),
ENUM_VALUE_DEF(kCoffee),
ENUM_VALUE_DEF(kOutlet),
ENUM_VALUE_DEF(kVCR),
ENUM_VALUE_DEF(kStereo),
ENUM_VALUE_DEF(kMicrowave),
ENUM_VALUE_DEF(kCinderBlock),
ENUM_VALUE_DEF(kFlowerBox),
ENUM_VALUE_DEF(kCDs),
ENUM_VALUE_DEF(kCustomPict),
ENUM_VALUE_DEF(kBalloon),
ENUM_VALUE_DEF(kCopterLf),
ENUM_VALUE_DEF(kCopterRt),
ENUM_VALUE_DEF(kDartLf),
ENUM_VALUE_DEF(kDartRt),
ENUM_VALUE_DEF(kBall),
ENUM_VALUE_DEF(kDrip),
ENUM_VALUE_DEF(kFish),
ENUM_VALUE_DEF(kCobweb),
ENUM_VALUE_DEF(kOzma),
ENUM_VALUE_DEF(kMirror),
ENUM_VALUE_DEF(kMousehole),
ENUM_VALUE_DEF(kFireplace),
ENUM_VALUE_DEF(kFlower),
ENUM_VALUE_DEF(kWallWindow),
ENUM_VALUE_DEF(kBear),
ENUM_VALUE_DEF(kCalendar),
ENUM_VALUE_DEF(kVase1),
ENUM_VALUE_DEF(kVase2),
ENUM_VALUE_DEF(kBulletin),
ENUM_VALUE_DEF(kCloud),
ENUM_VALUE_DEF(kFaucet),
ENUM_VALUE_DEF(kRug),
ENUM_VALUE_DEF(kFloorVent),
ENUM_VALUE_DEF(kCeilingVent),
ENUM_VALUE_DEF(kFloorBlower),
ENUM_VALUE_DEF(kCeilingBlower),
ENUM_VALUE_DEF(kSewerGrate),
ENUM_VALUE_DEF(kLeftFan),
ENUM_VALUE_DEF(kRightFan),
ENUM_VALUE_DEF(kTaper),
ENUM_VALUE_DEF(kCandle),
ENUM_VALUE_DEF(kStubby),
ENUM_VALUE_DEF(kTiki),
ENUM_VALUE_DEF(kBBQ),
ENUM_VALUE_DEF(kInvisBlower),
ENUM_VALUE_DEF(kGrecoVent),
ENUM_VALUE_DEF(kSewerBlower),
ENUM_VALUE_DEF(kLiftArea),
ENUM_VALUE_DEF(kTable),
ENUM_VALUE_DEF(kShelf),
ENUM_VALUE_DEF(kCabinet),
ENUM_VALUE_DEF(kFilingCabinet),
ENUM_VALUE_DEF(kWasteBasket),
ENUM_VALUE_DEF(kMilkCrate),
ENUM_VALUE_DEF(kCounter),
ENUM_VALUE_DEF(kDresser),
ENUM_VALUE_DEF(kDeckTable),
ENUM_VALUE_DEF(kStool),
ENUM_VALUE_DEF(kTrunk),
ENUM_VALUE_DEF(kInvisObstacle),
ENUM_VALUE_DEF(kManhole),
ENUM_VALUE_DEF(kBooks),
ENUM_VALUE_DEF(kInvisBounce),
ENUM_VALUE_DEF(kRedClock),
ENUM_VALUE_DEF(kBlueClock),
ENUM_VALUE_DEF(kYellowClock),
ENUM_VALUE_DEF(kCuckoo),
ENUM_VALUE_DEF(kPaper),
ENUM_VALUE_DEF(kBattery),
ENUM_VALUE_DEF(kBands),
ENUM_VALUE_DEF(kGreaseRt),
ENUM_VALUE_DEF(kGreaseLf),
ENUM_VALUE_DEF(kFoil),
ENUM_VALUE_DEF(kInvisBonus),
ENUM_VALUE_DEF(kStar),
ENUM_VALUE_DEF(kSparkle),
ENUM_VALUE_DEF(kHelium),
ENUM_VALUE_DEF(kSlider),
ENUM_VALUE_DEF(kUpStairs),
ENUM_VALUE_DEF(kDownStairs),
ENUM_VALUE_DEF(kMailboxLf),
ENUM_VALUE_DEF(kMailboxRt),
ENUM_VALUE_DEF(kFloorTrans),
ENUM_VALUE_DEF(kCeilingTrans),
ENUM_VALUE_DEF(kDoorInLf),
ENUM_VALUE_DEF(kDoorInRt),
ENUM_VALUE_DEF(kDoorExRt),
ENUM_VALUE_DEF(kDoorExLf),
ENUM_VALUE_DEF(kWindowInLf),
ENUM_VALUE_DEF(kWindowInRt),
ENUM_VALUE_DEF(kWindowExRt),
ENUM_VALUE_DEF(kWindowExLf),
ENUM_VALUE_DEF(kInvisTrans),
ENUM_VALUE_DEF(kDeluxeTrans),
ENUM_VALUE_DEF(kLightSwitch),
ENUM_VALUE_DEF(kMachineSwitch),
ENUM_VALUE_DEF(kThermostat),
ENUM_VALUE_DEF(kPowerSwitch),
ENUM_VALUE_DEF(kKnifeSwitch),
ENUM_VALUE_DEF(kInvisSwitch),
ENUM_VALUE_DEF(kTrigger),
ENUM_VALUE_DEF(kLgTrigger),
ENUM_VALUE_DEF(kSoundTrigger),
ENUM_VALUE_DEF(kCeilingLight),
ENUM_VALUE_DEF(kLightBulb),
ENUM_VALUE_DEF(kTableLamp),
ENUM_VALUE_DEF(kHipLamp),
ENUM_VALUE_DEF(kDecoLamp),
ENUM_VALUE_DEF(kFlourescent),
ENUM_VALUE_DEF(kTrackLight),
ENUM_VALUE_DEF(kInvisLight),
ENUM_VALUE_DEF(kShredder),
ENUM_VALUE_DEF(kToaster),
ENUM_VALUE_DEF(kMacPlus),
ENUM_VALUE_DEF(kGuitar),
ENUM_VALUE_DEF(kTV),
ENUM_VALUE_DEF(kCoffee),
ENUM_VALUE_DEF(kOutlet),
ENUM_VALUE_DEF(kVCR),
ENUM_VALUE_DEF(kStereo),
ENUM_VALUE_DEF(kMicrowave),
ENUM_VALUE_DEF(kCinderBlock),
ENUM_VALUE_DEF(kFlowerBox),
ENUM_VALUE_DEF(kCDs),
ENUM_VALUE_DEF(kCustomPict),
ENUM_VALUE_DEF(kBalloon),
ENUM_VALUE_DEF(kCopterLf),
ENUM_VALUE_DEF(kCopterRt),
ENUM_VALUE_DEF(kDartLf),
ENUM_VALUE_DEF(kDartRt),
ENUM_VALUE_DEF(kBall),
ENUM_VALUE_DEF(kDrip),
ENUM_VALUE_DEF(kFish),
ENUM_VALUE_DEF(kCobweb),
ENUM_VALUE_DEF(kOzma),
ENUM_VALUE_DEF(kMirror),
ENUM_VALUE_DEF(kMousehole),
ENUM_VALUE_DEF(kFireplace),
ENUM_VALUE_DEF(kFlower),
ENUM_VALUE_DEF(kWallWindow),
ENUM_VALUE_DEF(kBear),
ENUM_VALUE_DEF(kCalendar),
ENUM_VALUE_DEF(kVase1),
ENUM_VALUE_DEF(kVase2),
ENUM_VALUE_DEF(kBulletin),
ENUM_VALUE_DEF(kCloud),
ENUM_VALUE_DEF(kFaucet),
ENUM_VALUE_DEF(kRug),
ENUM_VALUE_DEF(kChimes),
};
@@ -1124,7 +1124,7 @@ void PatchVisitor::VisitLPStr(uint8_t &length, uint8_t *chars, int capacity)
{
uint32_t codePoint = 0;
size_t charsDigested = 0;
if (!PortabilityLayer::UTF8Processor::DecodeCodePoint(replacementUTF8, rLen, charsDigested, codePoint))
if (!GpUnicode::UTF8::Decode(replacementUTF8, rLen, charsDigested, codePoint))
break;
rLen -= charsDigested;
@@ -1382,9 +1382,9 @@ bool PatchVisitor::DecodeQuotedString(const std::string &scopeStr, size_t startP
}
const uint16_t unicodeCodePoint = (nibbles[0] << 12) + (nibbles[1] << 8) + (nibbles[2] << 4) + nibbles[3];
uint8_t encoded[PortabilityLayer::UTF8Processor::kMaxEncodedBytes];
uint8_t encoded[GpUnicode::UTF8::kMaxEncodedBytes];
size_t emitted = 0;
PortabilityLayer::UTF8Processor::EncodeCodePoint(encoded, emitted, unicodeCodePoint);
GpUnicode::UTF8::Encode(encoded, emitted, unicodeCodePoint);
for (size_t ei = 0; ei < emitted; ei++)
decoded.push_back(static_cast<char>(encoded[ei]));