diff --git a/Aerofoil.sln b/Aerofoil.sln index 1757aa4..c7839a1 100644 --- a/Aerofoil.sln +++ b/Aerofoil.sln @@ -27,12 +27,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConvertColorCursors", "Conv EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GpDisplayDriver_D3D11", "GpDisplayDriver_D3D11\GpDisplayDriver_D3D11.vcxproj", "{FFC961AC-55B4-4A38-A83E-06AE98F59ACC}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImportCharSet", "ImportCharSet\ImportCharSet.vcxproj", "{B3D152CB-CD52-4CD6-9213-710ADE1B8EB0}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GpInputDriver_XInput", "GpInputDriver_XInput\GpInputDriver_XInput.vcxproj", "{17B96F07-EF92-47CD-95A5-8E6EE38AB564}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Aerofoil", "Aerofoil\Aerofoil.vcxproj", "{0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MacRomanConversion", "MacRomanConversion\MacRomanConversion.vcxproj", "{07351A8E-1F79-42C9-BBAB-31F071EAA99E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -137,14 +137,6 @@ Global {FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Release|x64.Build.0 = Release|x64 {FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Release|x86.ActiveCfg = Release|Win32 {FFC961AC-55B4-4A38-A83E-06AE98F59ACC}.Release|x86.Build.0 = Release|Win32 - {B3D152CB-CD52-4CD6-9213-710ADE1B8EB0}.Debug|x64.ActiveCfg = Debug|x64 - {B3D152CB-CD52-4CD6-9213-710ADE1B8EB0}.Debug|x64.Build.0 = Debug|x64 - {B3D152CB-CD52-4CD6-9213-710ADE1B8EB0}.Debug|x86.ActiveCfg = Debug|Win32 - {B3D152CB-CD52-4CD6-9213-710ADE1B8EB0}.Debug|x86.Build.0 = Debug|Win32 - {B3D152CB-CD52-4CD6-9213-710ADE1B8EB0}.Release|x64.ActiveCfg = Release|x64 - {B3D152CB-CD52-4CD6-9213-710ADE1B8EB0}.Release|x64.Build.0 = Release|x64 - {B3D152CB-CD52-4CD6-9213-710ADE1B8EB0}.Release|x86.ActiveCfg = Release|Win32 - {B3D152CB-CD52-4CD6-9213-710ADE1B8EB0}.Release|x86.Build.0 = Release|Win32 {17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Debug|x64.ActiveCfg = Debug|x64 {17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Debug|x64.Build.0 = Debug|x64 {17B96F07-EF92-47CD-95A5-8E6EE38AB564}.Debug|x86.ActiveCfg = Debug|Win32 @@ -161,6 +153,14 @@ Global {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x64.Build.0 = Release|x64 {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x86.ActiveCfg = Release|Win32 {0E383EF0-CEF7-4733-87C6-5AC9844AA1EF}.Release|x86.Build.0 = Release|Win32 + {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Debug|x64.ActiveCfg = Debug|x64 + {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Debug|x64.Build.0 = Debug|x64 + {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Debug|x86.ActiveCfg = Debug|Win32 + {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Debug|x86.Build.0 = Debug|Win32 + {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Release|x64.ActiveCfg = Release|x64 + {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Release|x64.Build.0 = Release|x64 + {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Release|x86.ActiveCfg = Release|Win32 + {07351A8E-1F79-42C9-BBAB-31F071EAA99E}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ImportCharSet/ImportCharSet.cpp b/ImportCharSet/ImportCharSet.cpp deleted file mode 100644 index d3bdabb..0000000 --- a/ImportCharSet/ImportCharSet.cpp +++ /dev/null @@ -1,217 +0,0 @@ -#include -#include - -uint16_t g_toUnicode[256]; -uint8_t g_toUpper[256]; -uint8_t g_toLower[256]; -uint8_t g_stripDiacritic[256]; - -std::string g_charDescs[256]; - -template -void DumpListing(FILE *outF, const T *buf, const char *hexFormat, const char *title) -{ - fprintf(outF, "\t\tconst %s[256] =\n", title); - fprintf(outF, "\t\t{"); - - for (int i = 0; i < 256; i++) - { - if (i % 16 == 0) - fprintf(outF, "\n\t\t\t"); - - fprintf(outF, hexFormat, static_cast(buf[i])); - fputc(',', outF); - if (i % 16 != 15) - fputc(' ', outF); - } - - fprintf(outF, "\n\t\t};\n"); -} - -uint32_t ParseHexCode(const std::string &str) -{ - if (str.substr(0, 2) != "0x") - return 0; - - uint32_t result = 0; - for (size_t i = 2; i < str.length(); i++) - { - const char c = str[i]; - - result = result * 16; - - if (c >= 'a' && c <= 'f') - result += (c - 'a') + 0xA; - else if (c >= 'A' && c <= 'F') - result += (c - 'A') + 0xA; - else if (c >= '0' && c <= '9') - result += (c - '0'); - else - result = result / 16; - } - - return result; -} - -bool ParseLatinDesc(const std::string &str, bool &isSmall, bool &isCapital, std::string &remainder) -{ - if (str.substr(0, 6) != "LATIN ") - return false; - - isCapital = false; - isSmall = false; - - if (str.substr(6, 6) == "SMALL ") - { - isSmall = true; - remainder = str.substr(12); - } - else if (str.substr(6, 8) == "CAPITAL ") - { - isCapital = true; - remainder = str.substr(14); - } - else - remainder = str.substr(6); - - return true; -} - -void ProcessLine(const std::string &lineStr) -{ - std::string comment; - std::string contents; - - size_t commentPos = lineStr.find('#'); - if (commentPos == std::string::npos) - contents = lineStr; - else - { - comment = lineStr.substr(commentPos); - contents = lineStr.substr(0, commentPos); - } - - size_t tabLoc = contents.find('\t'); - if (tabLoc == std::string::npos) - return; - - std::string pageCode = contents.substr(0, tabLoc); - - size_t secondTabLoc = contents.find('\t', tabLoc + 1); - if (secondTabLoc == std::string::npos) - return; - - std::string unicodeCode = contents.substr(tabLoc + 1, secondTabLoc - tabLoc); - - uint32_t decodedUnicodeCode = ParseHexCode(unicodeCode); - uint32_t decodedCharCode = ParseHexCode(pageCode); - - size_t contentOffset = 1; - while (contentOffset < comment.length()) - { - const char c = comment[contentOffset]; - if (c <= ' ') - contentOffset++; - else - break; - } - - g_toUnicode[decodedCharCode] = decodedUnicodeCode; - g_charDescs[decodedCharCode] = comment.substr(contentOffset); -} - -int main(int argc, const char **argv) -{ - for (int i = 0; i < 256; i++) - { - g_toUnicode[i] = 0xffff; - g_toUpper[i] = i; - g_toLower[i] = i; - g_stripDiacritic[i] = i; - } - - FILE *f = nullptr; - - if (errno_t err = fopen_s(&f, "MiscData/MacRoman.txt", "rb")) - return err; - - std::string currentLine; - - while (!feof(f)) - { - char c = fgetc(f); - - if (c == '\n') - { - ProcessLine(currentLine); - currentLine = ""; - } - else - currentLine += c; - } - - fclose(f); - - // Fill unlisted codes - for (int i = 0; i < 0x20; i++) - g_toUnicode[i] = i; - - g_toUnicode[0x11] = 0x2318; - g_toUnicode[0x12] = 0x21e7; - g_toUnicode[0x13] = 0x2325; - g_toUnicode[0x14] = 0x2303; - - for (int i = 0; i < 256; i++) - { - bool isSmall = false; - bool isCapital = false; - std::string remainder; - - if (ParseLatinDesc(g_charDescs[i], isSmall, isCapital, remainder)) - { - for (int j = 0; j < 256; j++) - { - bool otherIsSmall = false; - bool otherIsCapital = false; - std::string otherRemainder = remainder; - - if (ParseLatinDesc(g_charDescs[j], otherIsSmall, otherIsCapital, otherRemainder)) - { - if (isCapital && otherIsSmall && remainder == otherRemainder) - { - g_toLower[i] = j; - g_toUpper[j] = i; - } - - if (isSmall == otherIsSmall && isCapital == otherIsCapital && otherRemainder.length() < remainder.length() && remainder.substr(0, otherRemainder.length()) == otherRemainder) - g_stripDiacritic[i] = j; - } - } - } - } - - FILE *outF; - if (errno_t err = fopen_s(&outF, "PortabilityLayer/MacRoman.cpp", "wb")) - return err; - - fprintf(outF, "#include \"MacRoman.h\"\n"); - fprintf(outF, "\n"); - fprintf(outF, "// This file is automatically generated by the ImportCharSet tool. DO NOT MODIFY THIS BY HAND.\n"); - fprintf(outF, "namespace PortabilityLayer\n"); - fprintf(outF, "{\n"); - fprintf(outF, "\tnamespace MacRoman\n"); - fprintf(outF, "\t{\n"); - DumpListing(outF, g_toUnicode, "0x%04x", "uint16_t g_toUnicode"); - fprintf(outF, "\n"); - DumpListing(outF, g_toUpper, "0x%02x", "uint8_t g_toUpper"); - fprintf(outF, "\n"); - DumpListing(outF, g_toLower, "0x%02x", "uint8_t g_toLower"); - fprintf(outF, "\n"); - DumpListing(outF, g_stripDiacritic, "0x%02x", "uint8_t g_stripDiacritic"); - fprintf(outF, "\t}\n"); - fprintf(outF, "}\n"); - - fclose(outF); - - return 0; -} diff --git a/MacRomanConversion.props b/MacRomanConversion.props new file mode 100644 index 0000000..c623816 --- /dev/null +++ b/MacRomanConversion.props @@ -0,0 +1,10 @@ + + + + + + $(SolutionDir)MacRomanConversion;$(IncludePath) + + + + \ No newline at end of file diff --git a/MacRomanConversion/MacRomanConversion.cpp b/MacRomanConversion/MacRomanConversion.cpp new file mode 100644 index 0000000..0bfef68 --- /dev/null +++ b/MacRomanConversion/MacRomanConversion.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. + * This file is part of the GNU LIBICONV Library. + * + * The GNU LIBICONV Library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * The GNU LIBICONV Library is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the GNU LIBICONV Library; see the file COPYING.LIB. + * If not, see . + */ + +#include "MacRomanConversion.h" + +// This only exists to isolate off this one LIBICONV table to a separate library. + +static const uint16_t mac_roman_2uni[128] = { + /* 0x80 */ + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + /* 0x90 */ + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + /* 0xa0 */ + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + /* 0xb0 */ + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x2126, 0x00e6, 0x00f8, + /* 0xc0 */ + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + /* 0xd0 */ + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x2044, 0x00a4, 0x2039, 0x203a, 0xfb01, 0xfb02, + /* 0xe0 */ + 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + /* 0xf0 */ + 0xfffd, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7, +}; + +namespace MacRoman +{ + uint16_t ToUnicode(uint8_t character) + { + if (character < 0x80) + return character; + else + return mac_roman_2uni[character - 0x80]; + } +} diff --git a/MacRomanConversion/MacRomanConversion.h b/MacRomanConversion/MacRomanConversion.h new file mode 100644 index 0000000..ccf1130 --- /dev/null +++ b/MacRomanConversion/MacRomanConversion.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +namespace MacRoman +{ + uint16_t ToUnicode(uint8_t character); +} diff --git a/ImportCharSet/ImportCharSet.vcxproj b/MacRomanConversion/MacRomanConversion.vcxproj similarity index 91% rename from ImportCharSet/ImportCharSet.vcxproj rename to MacRomanConversion/MacRomanConversion.vcxproj index e3344f5..80dc9d7 100644 --- a/ImportCharSet/ImportCharSet.vcxproj +++ b/MacRomanConversion/MacRomanConversion.vcxproj @@ -20,8 +20,8 @@ 15.0 - {B3D152CB-CD52-4CD6-9213-710ADE1B8EB0} - ImportCharSet + {07351A8E-1F79-42C9-BBAB-31F071EAA99E} + MacRomanConversion 10.0.17763.0 @@ -39,13 +39,13 @@ MultiByte - Application + StaticLibrary true v141 MultiByte - Application + StaticLibrary false v141 true @@ -115,7 +115,10 @@ - + + + + diff --git a/ImportCharSet/ImportCharSet.vcxproj.filters b/MacRomanConversion/MacRomanConversion.vcxproj.filters similarity index 81% rename from ImportCharSet/ImportCharSet.vcxproj.filters rename to MacRomanConversion/MacRomanConversion.vcxproj.filters index b8d1ae9..c473c9e 100644 --- a/ImportCharSet/ImportCharSet.vcxproj.filters +++ b/MacRomanConversion/MacRomanConversion.vcxproj.filters @@ -15,7 +15,12 @@ - + + Source Files + + + + Source Files diff --git a/MiscData/MacRoman.txt b/MiscData/MacRoman.txt deleted file mode 100644 index 5b3b8b4..0000000 --- a/MiscData/MacRoman.txt +++ /dev/null @@ -1,370 +0,0 @@ -#======================================================================= -# File name: ROMAN.TXT -# -# Contents: Map (external version) from Mac OS Roman -# character set to Unicode 2.1 and later. -# -# Copyright: (c) 1994-2002, 2005 by Apple Computer, Inc., all rights -# reserved. -# -# Contact: charsets@apple.com -# -# Changes: -# -# c02 2005-Apr-05 Update header comments. Matches internal xml -# and Text Encoding Converter 2.0. -# b4,c1 2002-Dec-19 Update URLs, notes. Matches internal -# utom. -# b03 1999-Sep-22 Update contact e-mail address. Matches -# internal utom, ufrm, and Text -# Encoding Converter version 1.5. -# b02 1998-Aug-18 Encoding changed for Mac OS 8.5; change -# mapping of 0xDB from CURRENCY SIGN to -# EURO SIGN. Matches internal utom, -# ufrm. -# n08 1998-Feb-05 Minor update to header comments -# n06 1997-Dec-14 Add warning about future changes to 0xDB -# from CURRENCY SIGN to EURO SIGN. Clarify -# some header information -# n04 1997-Dec-01 Update to match internal utom, ufrm: -# Change standard mapping for 0xBD from U+2126 -# to its canonical decomposition, U+03A9. -# n03 1995-Apr-15 First version (after fixing some typos). -# Matches internal ufrm. -# -# Standard header: -# ---------------- -# -# Apple, the Apple logo, and Macintosh are trademarks of Apple -# Computer, Inc., registered in the United States and other countries. -# Unicode is a trademark of Unicode Inc. For the sake of brevity, -# throughout this document, "Macintosh" can be used to refer to -# Macintosh computers and "Unicode" can be used to refer to the -# Unicode standard. -# -# Apple Computer, Inc. ("Apple") makes no warranty or representation, -# either express or implied, with respect to this document and the -# included data, its quality, accuracy, or fitness for a particular -# purpose. In no event will Apple be liable for direct, indirect, -# special, incidental, or consequential damages resulting from any -# defect or inaccuracy in this document or the included data. -# -# These mapping tables and character lists are subject to change. -# The latest tables should be available from the following: -# -# -# -# For general information about Mac OS encodings and these mapping -# tables, see the file "README.TXT". -# -# Format: -# ------- -# -# Three tab-separated columns; -# '#' begins a comment which continues to the end of the line. -# Column #1 is the Mac OS Roman code (in hex as 0xNN) -# Column #2 is the corresponding Unicode (in hex as 0xNNNN) -# Column #3 is a comment containing the Unicode name -# -# The entries are in Mac OS Roman code order. -# -# One of these mappings requires the use of a corporate character. -# See the file "CORPCHAR.TXT" and notes below. -# -# Control character mappings are not shown in this table, following -# the conventions of the standard UTC mapping tables. However, the -# Mac OS Roman character set uses the standard control characters at -# 0x00-0x1F and 0x7F. -# -# Notes on Mac OS Roman: -# ---------------------- -# -# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa -# environments, it is only supported directly in programming -# interfaces for QuickDraw Text, the Script Manager, and related -# Text Utilities. For other purposes it is supported via transcoding -# to and from Unicode. -# -# This character set is used for at least the following Mac OS -# localizations: U.S., British, Canadian French, French, Swiss -# French, German, Swiss German, Italian, Swiss Italian, Dutch, -# Swedish, Norwegian, Danish, Finnish, Spanish, Catalan, -# Portuguese, Brazilian, and the default International system. -# -# Variants of Mac OS Roman are used for Croatian, Icelandic, -# Turkish, Romanian, and other encodings. Separate mapping tables -# are available for these encodings. -# -# Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was -# mapped to U+00A4. In Mac OS 8.5 and later versions, code point -# 0xDB is changed to EURO SIGN and maps to U+20AC; the standard -# Apple fonts are updated for Mac OS 8.5 to reflect this. There is -# a "currency sign" variant of the Mac OS Roman encoding that still -# maps 0xDB to U+00A4; this can be used for older fonts. -# -# Before Mac OS 8.5, the ROM bitmap versions of the fonts Chicago, -# New York, Geneva, and Monaco did not implement the full Mac OS -# Roman character set; they only supported character codes up to -# 0xD8. The TrueType versions of these fonts have always implemented -# the full character set, as with the bitmap and TrueType versions -# of the other standard Roman fonts. -# -# In all Mac OS encodings, fonts such as Chicago which are used -# as "system" fonts (for menus, dialogs, etc.) have four glyphs -# at code points 0x11-0x14 for transient use by the Menu Manager. -# These glyphs are not intended as characters for use in normal -# text, and the associated code points are not generally -# interpreted as associated with these glyphs; they are usually -# interpreted (if at all) as the control codes DC1-DC4. -# -# Unicode mapping issues and notes: -# --------------------------------- -# -# The following corporate zone Unicode character is used in this -# mapping: -# -# 0xF8FF Apple logo -# -# NOTE: The graphic image associated with the Apple logo character -# is not authorized for use without permission of Apple, and -# unauthorized use might constitute trademark infringement. -# -# Details of mapping changes in each version: -# ------------------------------------------- -# -# Changes from version n08 to version b02: -# -# - Encoding changed for Mac OS 8.5; change mapping of 0xDB from -# CURRENCY SIGN (U+00A4) to EURO SIGN (U+20AC). -# -# Changes from version n03 to version n04: -# -# - Change mapping of 0xBD from U+2126 to its canonical -# decomposition, U+03A9. -# -################## - -0x20 0x0020 # SPACE -0x21 0x0021 # EXCLAMATION MARK -0x22 0x0022 # QUOTATION MARK -0x23 0x0023 # NUMBER SIGN -0x24 0x0024 # DOLLAR SIGN -0x25 0x0025 # PERCENT SIGN -0x26 0x0026 # AMPERSAND -0x27 0x0027 # APOSTROPHE -0x28 0x0028 # LEFT PARENTHESIS -0x29 0x0029 # RIGHT PARENTHESIS -0x2A 0x002A # ASTERISK -0x2B 0x002B # PLUS SIGN -0x2C 0x002C # COMMA -0x2D 0x002D # HYPHEN-MINUS -0x2E 0x002E # FULL STOP -0x2F 0x002F # SOLIDUS -0x30 0x0030 # DIGIT ZERO -0x31 0x0031 # DIGIT ONE -0x32 0x0032 # DIGIT TWO -0x33 0x0033 # DIGIT THREE -0x34 0x0034 # DIGIT FOUR -0x35 0x0035 # DIGIT FIVE -0x36 0x0036 # DIGIT SIX -0x37 0x0037 # DIGIT SEVEN -0x38 0x0038 # DIGIT EIGHT -0x39 0x0039 # DIGIT NINE -0x3A 0x003A # COLON -0x3B 0x003B # SEMICOLON -0x3C 0x003C # LESS-THAN SIGN -0x3D 0x003D # EQUALS SIGN -0x3E 0x003E # GREATER-THAN SIGN -0x3F 0x003F # QUESTION MARK -0x40 0x0040 # COMMERCIAL AT -0x41 0x0041 # LATIN CAPITAL LETTER A -0x42 0x0042 # LATIN CAPITAL LETTER B -0x43 0x0043 # LATIN CAPITAL LETTER C -0x44 0x0044 # LATIN CAPITAL LETTER D -0x45 0x0045 # LATIN CAPITAL LETTER E -0x46 0x0046 # LATIN CAPITAL LETTER F -0x47 0x0047 # LATIN CAPITAL LETTER G -0x48 0x0048 # LATIN CAPITAL LETTER H -0x49 0x0049 # LATIN CAPITAL LETTER I -0x4A 0x004A # LATIN CAPITAL LETTER J -0x4B 0x004B # LATIN CAPITAL LETTER K -0x4C 0x004C # LATIN CAPITAL LETTER L -0x4D 0x004D # LATIN CAPITAL LETTER M -0x4E 0x004E # LATIN CAPITAL LETTER N -0x4F 0x004F # LATIN CAPITAL LETTER O -0x50 0x0050 # LATIN CAPITAL LETTER P -0x51 0x0051 # LATIN CAPITAL LETTER Q -0x52 0x0052 # LATIN CAPITAL LETTER R -0x53 0x0053 # LATIN CAPITAL LETTER S -0x54 0x0054 # LATIN CAPITAL LETTER T -0x55 0x0055 # LATIN CAPITAL LETTER U -0x56 0x0056 # LATIN CAPITAL LETTER V -0x57 0x0057 # LATIN CAPITAL LETTER W -0x58 0x0058 # LATIN CAPITAL LETTER X -0x59 0x0059 # LATIN CAPITAL LETTER Y -0x5A 0x005A # LATIN CAPITAL LETTER Z -0x5B 0x005B # LEFT SQUARE BRACKET -0x5C 0x005C # REVERSE SOLIDUS -0x5D 0x005D # RIGHT SQUARE BRACKET -0x5E 0x005E # CIRCUMFLEX ACCENT -0x5F 0x005F # LOW LINE -0x60 0x0060 # GRAVE ACCENT -0x61 0x0061 # LATIN SMALL LETTER A -0x62 0x0062 # LATIN SMALL LETTER B -0x63 0x0063 # LATIN SMALL LETTER C -0x64 0x0064 # LATIN SMALL LETTER D -0x65 0x0065 # LATIN SMALL LETTER E -0x66 0x0066 # LATIN SMALL LETTER F -0x67 0x0067 # LATIN SMALL LETTER G -0x68 0x0068 # LATIN SMALL LETTER H -0x69 0x0069 # LATIN SMALL LETTER I -0x6A 0x006A # LATIN SMALL LETTER J -0x6B 0x006B # LATIN SMALL LETTER K -0x6C 0x006C # LATIN SMALL LETTER L -0x6D 0x006D # LATIN SMALL LETTER M -0x6E 0x006E # LATIN SMALL LETTER N -0x6F 0x006F # LATIN SMALL LETTER O -0x70 0x0070 # LATIN SMALL LETTER P -0x71 0x0071 # LATIN SMALL LETTER Q -0x72 0x0072 # LATIN SMALL LETTER R -0x73 0x0073 # LATIN SMALL LETTER S -0x74 0x0074 # LATIN SMALL LETTER T -0x75 0x0075 # LATIN SMALL LETTER U -0x76 0x0076 # LATIN SMALL LETTER V -0x77 0x0077 # LATIN SMALL LETTER W -0x78 0x0078 # LATIN SMALL LETTER X -0x79 0x0079 # LATIN SMALL LETTER Y -0x7A 0x007A # LATIN SMALL LETTER Z -0x7B 0x007B # LEFT CURLY BRACKET -0x7C 0x007C # VERTICAL LINE -0x7D 0x007D # RIGHT CURLY BRACKET -0x7E 0x007E # TILDE -# -0x80 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -0x81 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -0x82 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -0x83 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE -0x84 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE -0x85 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -0x86 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -0x87 0x00E1 # LATIN SMALL LETTER A WITH ACUTE -0x88 0x00E0 # LATIN SMALL LETTER A WITH GRAVE -0x89 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -0x8A 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS -0x8B 0x00E3 # LATIN SMALL LETTER A WITH TILDE -0x8C 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE -0x8D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA -0x8E 0x00E9 # LATIN SMALL LETTER E WITH ACUTE -0x8F 0x00E8 # LATIN SMALL LETTER E WITH GRAVE -0x90 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -0x91 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS -0x92 0x00ED # LATIN SMALL LETTER I WITH ACUTE -0x93 0x00EC # LATIN SMALL LETTER I WITH GRAVE -0x94 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -0x95 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS -0x96 0x00F1 # LATIN SMALL LETTER N WITH TILDE -0x97 0x00F3 # LATIN SMALL LETTER O WITH ACUTE -0x98 0x00F2 # LATIN SMALL LETTER O WITH GRAVE -0x99 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0x9A 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS -0x9B 0x00F5 # LATIN SMALL LETTER O WITH TILDE -0x9C 0x00FA # LATIN SMALL LETTER U WITH ACUTE -0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE -0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS -0xA0 0x2020 # DAGGER -0xA1 0x00B0 # DEGREE SIGN -0xA2 0x00A2 # CENT SIGN -0xA3 0x00A3 # POUND SIGN -0xA4 0x00A7 # SECTION SIGN -0xA5 0x2022 # BULLET -0xA6 0x00B6 # PILCROW SIGN -0xA7 0x00DF # LATIN SMALL LETTER SHARP S -0xA8 0x00AE # REGISTERED SIGN -0xA9 0x00A9 # COPYRIGHT SIGN -0xAA 0x2122 # TRADE MARK SIGN -0xAB 0x00B4 # ACUTE ACCENT -0xAC 0x00A8 # DIAERESIS -0xAD 0x2260 # NOT EQUAL TO -0xAE 0x00C6 # LATIN CAPITAL LETTER AE -0xAF 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE -0xB0 0x221E # INFINITY -0xB1 0x00B1 # PLUS-MINUS SIGN -0xB2 0x2264 # LESS-THAN OR EQUAL TO -0xB3 0x2265 # GREATER-THAN OR EQUAL TO -0xB4 0x00A5 # YEN SIGN -0xB5 0x00B5 # MICRO SIGN -0xB6 0x2202 # PARTIAL DIFFERENTIAL -0xB7 0x2211 # N-ARY SUMMATION -0xB8 0x220F # N-ARY PRODUCT -0xB9 0x03C0 # GREEK SMALL LETTER PI -0xBA 0x222B # INTEGRAL -0xBB 0x00AA # FEMININE ORDINAL INDICATOR -0xBC 0x00BA # MASCULINE ORDINAL INDICATOR -0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA -0xBE 0x00E6 # LATIN SMALL LETTER AE -0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE -0xC0 0x00BF # INVERTED QUESTION MARK -0xC1 0x00A1 # INVERTED EXCLAMATION MARK -0xC2 0x00AC # NOT SIGN -0xC3 0x221A # SQUARE ROOT -0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK -0xC5 0x2248 # ALMOST EQUAL TO -0xC6 0x2206 # INCREMENT -0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xC8 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xC9 0x2026 # HORIZONTAL ELLIPSIS -0xCA 0x00A0 # NO-BREAK SPACE -0xCB 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE -0xCC 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE -0xCD 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE -0xCE 0x0152 # LATIN CAPITAL LIGATURE OE -0xCF 0x0153 # LATIN SMALL LIGATURE OE -0xD0 0x2013 # EN DASH -0xD1 0x2014 # EM DASH -0xD2 0x201C # LEFT DOUBLE QUOTATION MARK -0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK -0xD4 0x2018 # LEFT SINGLE QUOTATION MARK -0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK -0xD6 0x00F7 # DIVISION SIGN -0xD7 0x25CA # LOZENGE -0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS -0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS -0xDA 0x2044 # FRACTION SLASH -0xDB 0x20AC # EURO SIGN -0xDC 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK -0xDD 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -0xDE 0xFB01 # LATIN SMALL LIGATURE FI -0xDF 0xFB02 # LATIN SMALL LIGATURE FL -0xE0 0x2021 # DOUBLE DAGGER -0xE1 0x00B7 # MIDDLE DOT -0xE2 0x201A # SINGLE LOW-9 QUOTATION MARK -0xE3 0x201E # DOUBLE LOW-9 QUOTATION MARK -0xE4 0x2030 # PER MILLE SIGN -0xE5 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0xE6 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0xE7 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE -0xE8 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -0xE9 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE -0xEA 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE -0xEB 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0xEC 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -0xED 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE -0xEE 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE -0xEF 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -0xF0 0xF8FF # Apple logo -0xF1 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE -0xF2 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE -0xF3 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0xF4 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE -0xF5 0x0131 # LATIN SMALL LETTER DOTLESS I -0xF6 0x02C6 # MODIFIER LETTER CIRCUMFLEX ACCENT -0xF7 0x02DC # SMALL TILDE -0xF8 0x00AF # MACRON -0xF9 0x02D8 # BREVE -0xFA 0x02D9 # DOT ABOVE -0xFB 0x02DA # RING ABOVE -0xFC 0x00B8 # CEDILLA -0xFD 0x02DD # DOUBLE ACUTE ACCENT -0xFE 0x02DB # OGONEK -0xFF 0x02C7 # CARON diff --git a/PortabilityLayer/FontRenderer.cpp b/PortabilityLayer/FontRenderer.cpp index 9163545..5d360bd 100644 --- a/PortabilityLayer/FontRenderer.cpp +++ b/PortabilityLayer/FontRenderer.cpp @@ -4,7 +4,7 @@ #include "HostFont.h" #include "HostFontHandler.h" #include "HostFontRenderedGlyph.h" -#include "MacRoman.h" +#include "MacRomanConversion.h" #include "PLPasStr.h" #include "RenderedFont.h" #include "RenderedFontMetrics.h" @@ -152,7 +152,7 @@ namespace PortabilityLayer for (unsigned int i = 0; i < numCharacters; i++) { - uint16_t unicodeCodePoint = MacRoman::g_toUnicode[i]; + uint16_t unicodeCodePoint = MacRoman::ToUnicode(i); if (unicodeCodePoint == 0xffff) continue; diff --git a/PortabilityLayer/InputManager.cpp b/PortabilityLayer/InputManager.cpp index c22e010..be199b5 100644 --- a/PortabilityLayer/InputManager.cpp +++ b/PortabilityLayer/InputManager.cpp @@ -1,5 +1,5 @@ #include "InputManager.h" -#include "MacRoman.h" +#include "MacRomanConversion.h" #include "PLKeyEncoding.h" #include @@ -73,7 +73,7 @@ namespace PortabilityLayer case GpKeyIDSubsets::kUnicode: for (int i = 0; i < 256; i++) { - if (MacRoman::g_toUnicode[i] == vosEvent.m_key.m_unicodeChar) + if (MacRoman::ToUnicode(i) == vosEvent.m_key.m_unicodeChar) { if (i < 128) m_keyMap.m_ascii.Set(i, bit); diff --git a/PortabilityLayer/MacRoman.cpp b/PortabilityLayer/MacRoman.cpp deleted file mode 100644 index c8e9cf6..0000000 --- a/PortabilityLayer/MacRoman.cpp +++ /dev/null @@ -1,88 +0,0 @@ -#include "MacRoman.h" - -// This file is automatically generated by the ImportCharSet tool. DO NOT MODIFY THIS BY HAND. -namespace PortabilityLayer -{ - namespace MacRoman - { - const uint16_t g_toUnicode[256] = - { - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x2318, 0x21e7, 0x2325, 0x2303, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0xffff, - 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, - 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, - 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, - 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x00e6, 0x00f8, - 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, - 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, 0x00ff, 0x0178, 0x2044, 0x20ac, 0x2039, 0x203a, 0xfb01, 0xfb02, - 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, - 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7, - }; - - const uint8_t g_toUpper[256] = - { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0xe7, 0xcb, 0xe5, 0x80, 0xcc, 0x81, 0x82, 0x83, 0xe9, - 0xe6, 0xe8, 0xea, 0xed, 0xeb, 0xec, 0x84, 0xee, 0xf1, 0xef, 0x85, 0xcd, 0xf2, 0xf4, 0xf3, 0x86, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xae, 0xaf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xce, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd9, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - }; - - const uint8_t g_toLower[256] = - { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x8a, 0x8c, 0x8d, 0x8e, 0x96, 0x9a, 0x9f, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xbe, 0xbf, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0x88, 0x8b, 0x9b, 0xcf, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd8, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0x89, 0x90, 0x87, 0x91, 0x8f, 0x92, 0x94, 0x95, 0x93, 0x97, 0x99, - 0xf0, 0x98, 0x9c, 0x9e, 0x9d, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - }; - - const uint8_t g_stripDiacritic[256] = - { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, - 0x41, 0x41, 0x43, 0x45, 0x4e, 0x4f, 0x55, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x63, 0x65, 0x65, - 0x65, 0x65, 0x69, 0x69, 0x69, 0x69, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x75, 0x75, 0x75, 0x75, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0x73, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x41, 0x4f, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x61, 0x6f, - 0xc0, 0xc1, 0xc2, 0xc3, 0x66, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0x41, 0x41, 0x4f, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0x79, 0x59, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0x41, 0x45, 0x41, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0x4f, 0x4f, - 0xf0, 0x4f, 0x55, 0x55, 0x55, 0x64, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - }; - } -} diff --git a/PortabilityLayer/MacRoman.h b/PortabilityLayer/MacRoman.h deleted file mode 100644 index e0230d9..0000000 --- a/PortabilityLayer/MacRoman.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include - -namespace PortabilityLayer -{ - namespace MacRoman - { - extern const uint16_t g_toUnicode[256]; - extern const uint8_t g_stripDiacritic[256]; - extern const uint8_t g_toLower[256]; - extern const uint8_t g_toUpper[256]; - } -} diff --git a/PortabilityLayer/PLCore.cpp b/PortabilityLayer/PLCore.cpp index e16636a..9522695 100644 --- a/PortabilityLayer/PLCore.cpp +++ b/PortabilityLayer/PLCore.cpp @@ -22,7 +22,7 @@ #include "InputManager.h" #include "ResourceManager.h" #include "MacFileInfo.h" -#include "MacRoman.h" +#include "MacRomanConversion.h" #include "MemoryManager.h" #include "MenuManager.h" #include "MemReaderStream.h" @@ -845,7 +845,7 @@ bool Window::AddWidget(PortabilityLayer::Widget *widget) m_widgets = static_cast(PortabilityLayer::MemoryManager::GetInstance()->Alloc(sizeof(PortabilityLayer::Widget *))); if (m_widgets == nullptr) return false; - } + } else { void *newBuffer = PortabilityLayer::MemoryManager::GetInstance()->Realloc(m_widgets, (m_numWidgets + 1) * sizeof(PortabilityLayer::Widget*)); diff --git a/PortabilityLayer/PLStringCompare.cpp b/PortabilityLayer/PLStringCompare.cpp index 3f5aadb..d63cf02 100644 --- a/PortabilityLayer/PLStringCompare.cpp +++ b/PortabilityLayer/PLStringCompare.cpp @@ -1,11 +1,23 @@ #include "PLStringCompare.h" -#include "MacRoman.h" +#include "MacRomanConversion.h" #include #include +namespace +{ + static uint8_t ToLowerInvariant(uint8_t v) + { + // This isn't very comprehensive, but we're only ever using this for two cases that don't contain any diacritics or anything + if (v >= 65 && v <= 90) + return v + 32; + else + return v; + } +} + namespace StrCmp -{ +{ int Compare(const PLPasStr &string1, const PLPasStr &string2) { const uint8_t *chars1 = string1.UChars(); @@ -41,8 +53,8 @@ namespace StrCmp for (size_t i = 0; i < shorterLen; i++) { - const uint8_t c1 = PortabilityLayer::MacRoman::g_toLower[chars1[i]]; - const uint8_t c2 = PortabilityLayer::MacRoman::g_toLower[chars2[i]]; + const uint8_t c1 = ToLowerInvariant(chars1[i]); + const uint8_t c2 = ToLowerInvariant(chars2[i]); if (c1 < c2) return -1; diff --git a/PortabilityLayer/PLSysCalls.cpp b/PortabilityLayer/PLSysCalls.cpp index 51f6737..b1110cc 100644 --- a/PortabilityLayer/PLSysCalls.cpp +++ b/PortabilityLayer/PLSysCalls.cpp @@ -9,7 +9,7 @@ #include "HostSuspendCallArgument.h" #include "HostSuspendHook.h" #include "HostVOSEventQueue.h" -#include "MacRoman.h" +#include "MacRomanConversion.h" static void TranslateMouseInputEvent(const GpVOSEvent &vosEventBase, uint32_t timestamp, PortabilityLayer::EventQueue *queue) { @@ -77,7 +77,7 @@ intptr_t PackVOSKeyCode(const GpKeyboardInputEvent &vosEvent) case GpKeyIDSubsets::kUnicode: for (int i = 128; i < 256; i++) { - if (PortabilityLayer::MacRoman::g_toUnicode[i] == vosEvent.m_key.m_unicodeChar) + if (MacRoman::ToUnicode(i) == vosEvent.m_key.m_unicodeChar) return PL_KEY_MACROMAN(i); } break; @@ -119,7 +119,7 @@ static void ImportVOSEvents(uint32_t timestamp) } namespace PLSysCalls -{ +{ void Sleep(uint32_t ticks) { if (ticks > 0) diff --git a/PortabilityLayer/PortabilityLayer.vcxproj b/PortabilityLayer/PortabilityLayer.vcxproj index 4c36adc..4c2435a 100644 --- a/PortabilityLayer/PortabilityLayer.vcxproj +++ b/PortabilityLayer/PortabilityLayer.vcxproj @@ -61,24 +61,28 @@ + + + + @@ -172,7 +176,6 @@ - @@ -181,7 +184,6 @@ - @@ -299,7 +301,6 @@ - @@ -358,6 +359,11 @@ + + + {07351a8e-1f79-42c9-bbab-31f071eaa99e} + + diff --git a/PortabilityLayer/PortabilityLayer.vcxproj.filters b/PortabilityLayer/PortabilityLayer.vcxproj.filters index c1e6334..4c51111 100644 --- a/PortabilityLayer/PortabilityLayer.vcxproj.filters +++ b/PortabilityLayer/PortabilityLayer.vcxproj.filters @@ -267,9 +267,6 @@ Header Files - - Header Files - Header Files @@ -342,9 +339,6 @@ Header Files - - Header Files - Header Files @@ -617,9 +611,6 @@ Source Files - - Source Files - Source Files