Index: ObjFW.xcodeproj/project.pbxproj ================================================================== --- ObjFW.xcodeproj/project.pbxproj +++ ObjFW.xcodeproj/project.pbxproj @@ -1314,12 +1314,12 @@ 4B5C112C17E9AAED003C917F /* forwarding.S */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; name = forwarding.S; path = src/forwarding/forwarding.S; sourceTree = ""; }; 4B5C112E17E9AB0C003C917F /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; name = Makefile; path = src/forwarding/Makefile; sourceTree = ""; }; 4B5CF8F614940BD2007AA324 /* OFString+JSONValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OFString+JSONValue.h"; path = "src/OFString+JSONValue.h"; sourceTree = ""; }; 4B5CF8F714940BD2007AA324 /* OFString+JSONValue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "OFString+JSONValue.m"; path = "src/OFString+JSONValue.m"; sourceTree = ""; }; 4B5D70751DA2F87A00B3B2D7 /* TestPlugin.bundle */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = TestPlugin.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 4B5EBFB51E25A8CF004FE6A2 /* codepage_850.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = codepage_850.m; path = src/codepage_850.m; sourceTree = ""; }; - 4B5EBFB81E25A937004FE6A2 /* mac_roman.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = mac_roman.m; path = src/mac_roman.m; sourceTree = ""; }; + 4B5EBFB51E25A8CF004FE6A2 /* codepage_850.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = codepage_850.m; path = src/encodings/codepage_850.m; sourceTree = ""; }; + 4B5EBFB81E25A937004FE6A2 /* mac_roman.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = mac_roman.m; path = src/encodings/mac_roman.m; sourceTree = ""; }; 4B60259919B76A5C00694BCC /* OFSHA384Hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFSHA384Hash.h; path = src/OFSHA384Hash.h; sourceTree = ""; }; 4B60259A19B76A5C00694BCC /* OFSHA384Hash.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFSHA384Hash.m; path = src/OFSHA384Hash.m; sourceTree = ""; }; 4B60259B19B76A5C00694BCC /* OFSHA384Or512Hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFSHA384Or512Hash.h; path = src/OFSHA384Or512Hash.h; sourceTree = ""; }; 4B60259C19B76A5C00694BCC /* OFSHA384Or512Hash.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFSHA384Or512Hash.m; path = src/OFSHA384Or512Hash.m; sourceTree = ""; }; 4B60259D19B76A5C00694BCC /* OFSHA512Hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFSHA512Hash.h; path = src/OFSHA512Hash.h; sourceTree = ""; }; @@ -1326,11 +1326,11 @@ 4B60259E19B76A5C00694BCC /* OFSHA512Hash.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFSHA512Hash.m; path = src/OFSHA512Hash.m; sourceTree = ""; }; 4B6025A519B76B5000694BCC /* OFSHA384HashTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFSHA384HashTests.m; path = tests/OFSHA384HashTests.m; sourceTree = ""; }; 4B6025A619B76B5000694BCC /* OFSHA512HashTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFSHA512HashTests.m; path = tests/OFSHA512HashTests.m; sourceTree = ""; }; 4B62ED1318566FCA0004E0E3 /* OFCopyItemFailedException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFCopyItemFailedException.h; path = src/exceptions/OFCopyItemFailedException.h; sourceTree = ""; }; 4B62ED1418566FCA0004E0E3 /* OFCopyItemFailedException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFCopyItemFailedException.m; path = src/exceptions/OFCopyItemFailedException.m; sourceTree = ""; }; - 4B6736111E2B2F6F00681F2C /* codepage_858.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = codepage_858.m; path = src/codepage_858.m; sourceTree = ""; }; + 4B6736111E2B2F6F00681F2C /* codepage_858.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = codepage_858.m; path = src/encodings/codepage_858.m; sourceTree = ""; }; 4B6743EB163C384A00EB1E59 /* OFLockFailedException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFLockFailedException.h; path = src/exceptions/OFLockFailedException.h; sourceTree = ""; }; 4B6743EC163C384A00EB1E59 /* OFLockFailedException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFLockFailedException.m; path = src/exceptions/OFLockFailedException.m; sourceTree = ""; }; 4B6743ED163C384A00EB1E59 /* OFStillLockedException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFStillLockedException.h; path = src/exceptions/OFStillLockedException.h; sourceTree = ""; }; 4B6743EE163C384A00EB1E59 /* OFStillLockedException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFStillLockedException.m; path = src/exceptions/OFStillLockedException.m; sourceTree = ""; }; 4B6743EF163C384A00EB1E59 /* OFUnlockFailedException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFUnlockFailedException.h; path = src/exceptions/OFUnlockFailedException.h; sourceTree = ""; }; @@ -1380,12 +1380,12 @@ 4B67998A1099E7C50041064A /* OFXMLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFXMLParser.m; path = src/OFXMLParser.m; sourceTree = ""; }; 4B67998B1099E7C50041064A /* threading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = threading.h; path = src/threading.h; sourceTree = ""; }; 4B67998C1099E7C50041064A /* unicode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = unicode.h; path = src/unicode.h; sourceTree = ""; }; 4B6994451D47FB1A007F34DF /* scrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = scrypt.h; path = src/scrypt.h; sourceTree = ""; }; 4B6994461D47FB1A007F34DF /* scrypt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = scrypt.m; path = src/scrypt.m; sourceTree = ""; }; - 4B6AF96F10A8D40E0003FB0A /* iso_8859_15.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iso_8859_15.m; path = src/iso_8859_15.m; sourceTree = ""; }; - 4B6AF97210A8D42E0003FB0A /* windows_1252.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = windows_1252.m; path = src/windows_1252.m; sourceTree = ""; }; + 4B6AF96F10A8D40E0003FB0A /* iso_8859_15.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iso_8859_15.m; path = src/encodings/iso_8859_15.m; sourceTree = ""; }; + 4B6AF97210A8D42E0003FB0A /* windows_1252.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = windows_1252.m; path = src/encodings/windows_1252.m; sourceTree = ""; }; 4B6AF97310A8D4450003FB0A /* ObjFW.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ObjFW.h; path = src/ObjFW.h; sourceTree = ""; }; 4B6C8AD117BD5C2E00B194F2 /* OFRunLoop+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OFRunLoop+Private.h"; path = "src/OFRunLoop+Private.h"; sourceTree = ""; }; 4B6C8AD217BD5C2E00B194F2 /* OFStream+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OFStream+Private.h"; path = "src/OFStream+Private.h"; sourceTree = ""; }; 4B6C8AD417BD5C2E00B194F2 /* OFString_UTF8+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OFString_UTF8+Private.h"; path = "src/OFString_UTF8+Private.h"; sourceTree = ""; }; 4B6C8AD517BD5C2E00B194F2 /* OFThread+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "OFThread+Private.h"; path = "src/OFThread+Private.h"; sourceTree = ""; }; @@ -1518,11 +1518,11 @@ 4BB4B54916776094002A2DCE /* OFHTTPClientTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFHTTPClientTests.m; path = tests/OFHTTPClientTests.m; sourceTree = ""; }; 4BB50DCF12F863C700C9393F /* of_asprintf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = of_asprintf.h; path = src/of_asprintf.h; sourceTree = SOURCE_ROOT; }; 4BB50DD012F863C700C9393F /* of_asprintf.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = of_asprintf.m; path = src/of_asprintf.m; sourceTree = SOURCE_ROOT; }; 4BB524BF143D1E4E0085FBCC /* OFProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFProcess.h; path = src/OFProcess.h; sourceTree = ""; }; 4BB524C0143D1E4E0085FBCC /* OFProcess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFProcess.m; path = src/OFProcess.m; sourceTree = ""; }; - 4BB52CC617B8EA7F00B7EBF5 /* codepage_437.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = codepage_437.m; path = src/codepage_437.m; sourceTree = ""; }; + 4BB52CC617B8EA7F00B7EBF5 /* codepage_437.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = codepage_437.m; path = src/encodings/codepage_437.m; sourceTree = ""; }; 4BBA36C411406AB700CBA3AC /* atomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = atomic.h; path = src/atomic.h; sourceTree = ""; }; 4BBA36C511406AB700CBA3AC /* macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macros.h; path = src/macros.h; sourceTree = ""; }; 4BC090421584F6760040640F /* OFInvalidJSONException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFInvalidJSONException.h; path = src/exceptions/OFInvalidJSONException.h; sourceTree = ""; }; 4BC090431584F6760040640F /* OFInvalidJSONException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFInvalidJSONException.m; path = src/exceptions/OFInvalidJSONException.m; sourceTree = ""; }; 4BC1761F1D04963000C32718 /* OFDeflate64Stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFDeflate64Stream.h; path = src/OFDeflate64Stream.h; sourceTree = ""; }; @@ -1590,16 +1590,16 @@ 4BF1BCCE11C9663F0025511F /* OFXMLAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFXMLAttribute.h; path = src/OFXMLAttribute.h; sourceTree = ""; }; 4BF1BCCF11C9663F0025511F /* OFXMLAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFXMLAttribute.m; path = src/OFXMLAttribute.m; sourceTree = ""; }; 4BF33AF0133807310059CEF7 /* Tests */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Tests; sourceTree = BUILT_PRODUCTS_DIR; }; 4BF33B4213380CD40059CEF7 /* testfile.bin */ = {isa = PBXFileReference; lastKnownFileType = archive.macbinary; name = testfile.bin; path = tests/testfile.bin; sourceTree = ""; }; 4BF33B4313380CD40059CEF7 /* testfile.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = testfile.txt; path = tests/testfile.txt; sourceTree = ""; }; - 4BF3A2281E25EA48002EA46F /* windows_1251.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = windows_1251.m; path = src/windows_1251.m; sourceTree = ""; }; + 4BF3A2281E25EA48002EA46F /* windows_1251.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = windows_1251.m; path = src/encodings/windows_1251.m; sourceTree = ""; }; 4BF48CDF18A95F83000E8D04 /* OFBigDataArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFBigDataArray.h; path = src/OFBigDataArray.h; sourceTree = ""; }; 4BF48CE018A95F83000E8D04 /* OFBigDataArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFBigDataArray.m; path = src/OFBigDataArray.m; sourceTree = ""; }; - 4BF5CB8F1E2DC1D800CF7584 /* iso_8859_2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iso_8859_2.m; path = src/iso_8859_2.m; sourceTree = ""; }; + 4BF5CB8F1E2DC1D800CF7584 /* iso_8859_2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iso_8859_2.m; path = src/encodings/iso_8859_2.m; sourceTree = ""; }; 4BF69CE51BD44F8B00DFFC1B /* platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = platform.h; path = src/platform.h; sourceTree = ""; }; - 4BFBDD1610A0724800051AFB /* unicode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = unicode.m; path = src/unicode.m; sourceTree = ""; }; + 4BFBDD1610A0724800051AFB /* unicode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = unicode.m; path = src/encodings/unicode.m; sourceTree = ""; }; 4BFF3710177E17C100192782 /* OFRemoveItemFailedException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OFRemoveItemFailedException.h; path = src/exceptions/OFRemoveItemFailedException.h; sourceTree = ""; }; 4BFF3711177E17C100192782 /* OFRemoveItemFailedException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OFRemoveItemFailedException.m; path = src/exceptions/OFRemoveItemFailedException.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1901,16 +1901,33 @@ children = ( 4B5C112E17E9AB0C003C917F /* Makefile */, ); name = "Supporting Files"; sourceTree = ""; + }; + 4B610DC41E31A46600AB26BA /* Encodings */ = { + isa = PBXGroup; + children = ( + 4BB52CC617B8EA7F00B7EBF5 /* codepage_437.m */, + 4B5EBFB51E25A8CF004FE6A2 /* codepage_850.m */, + 4B6736111E2B2F6F00681F2C /* codepage_858.m */, + 4BF5CB8F1E2DC1D800CF7584 /* iso_8859_2.m */, + 4B6AF96F10A8D40E0003FB0A /* iso_8859_15.m */, + 4B5EBFB81E25A937004FE6A2 /* mac_roman.m */, + 4BFBDD1610A0724800051AFB /* unicode.m */, + 4BF3A2281E25EA48002EA46F /* windows_1251.m */, + 4B6AF97210A8D42E0003FB0A /* windows_1252.m */, + ); + name = Encodings; + sourceTree = ""; }; 4B6EF66C123535340076B512 /* ObjFW */ = { isa = PBXGroup; children = ( 4B187E07163EA2730049A832 /* Bridge */, 4B17FF6E133A28E0003E6DCD /* Exceptions */, + 4B610DC41E31A46600AB26BA /* Encodings */, 4B5C112717E9AAC1003C917F /* Forwarding */, 4B3D23801337FBC800DD29B8 /* Supporting Files */, 4B175C1D116D130B003C99CB /* OFApplication.h */, 4B175C1E116D130B003C99CB /* OFApplication.m */, 4B67995A1099E7C50041064A /* OFArray.h */, @@ -2157,21 +2174,15 @@ 4B2227A61D4FE23700A41CD3 /* atomic_x86.h */, 4BA9CFA315E129D30076DC74 /* autorelease.h */, 4B3D236D1337FB5800DD29B8 /* base64.h */, 4B3D236E1337FB5800DD29B8 /* base64.m */, 4B837D7716829C5F007A3E83 /* block.h */, - 4BB52CC617B8EA7F00B7EBF5 /* codepage_437.m */, - 4B5EBFB51E25A8CF004FE6A2 /* codepage_850.m */, - 4B6736111E2B2F6F00681F2C /* codepage_858.m */, 4B881D391CCBFE0700E2F7D8 /* crc32.h */, 4B881D3A1CCBFE0700E2F7D8 /* crc32.m */, 4B837D7816829C5F007A3E83 /* instance.h */, - 4B6AF96F10A8D40E0003FB0A /* iso_8859_15.m */, - 4BF5CB8F1E2DC1D800CF7584 /* iso_8859_2.m */, 4BE17AD812FD744C002CEB0B /* foundation-compat.m */, 4BBA36C511406AB700CBA3AC /* macros.h */, - 4B5EBFB81E25A937004FE6A2 /* mac_roman.m */, 4BF1BCBF11C9663F0025511F /* objfw-defs.h.in */, 4BB50DCF12F863C700C9393F /* of_asprintf.h */, 4BB50DD012F863C700C9393F /* of_asprintf.m */, 4BA355BC14879BF700442EF4 /* of_strptime.h */, 4BA355B914879BDD00442EF4 /* of_strptime.m */, @@ -2187,13 +2198,10 @@ 4B7DD58118942FE200990FD6 /* socket_helpers.h */, 4B67998B1099E7C50041064A /* threading.h */, 4B3379CE1979326A0088E97E /* threading.m */, 4BABC29A197A8212006A93BD /* threading_pthread.m */, 4B67998C1099E7C50041064A /* unicode.h */, - 4BFBDD1610A0724800051AFB /* unicode.m */, - 4BF3A2281E25EA48002EA46F /* windows_1251.m */, - 4B6AF97210A8D42E0003FB0A /* windows_1252.m */, ); name = ObjFW; sourceTree = ""; }; 4B6EF66D123535480076B512 /* Tests */ = { @@ -3196,28 +3204,19 @@ 4B2C21851DA292BE00735907 /* OFXMLParser.m in Sources */, 4B2C21861DA292BE00735907 /* OFXMLProcessingInstructions.m in Sources */, 4B2C21871DA292BE00735907 /* OFZIPArchive.m in Sources */, 4B2C21881DA292BE00735907 /* OFZIPArchiveEntry.m in Sources */, 4B2C21891DA292BE00735907 /* base64.m in Sources */, - 4B2C218A1DA292BE00735907 /* codepage_437.m in Sources */, - 4B5EBFB71E25A8CF004FE6A2 /* codepage_850.m in Sources */, - 4B6736131E2B2F6F00681F2C /* codepage_858.m in Sources */, 4B2C218B1DA292BE00735907 /* crc32.m in Sources */, 4B2C218D1DA292BE00735907 /* foundation-compat.m in Sources */, - 4B2C218C1DA292BE00735907 /* iso_8859_15.m in Sources */, - 4BF5CB911E2DC1D800CF7584 /* iso_8859_2.m in Sources */, - 4B5EBFBA1E25A937004FE6A2 /* mac_roman.m in Sources */, 4B2C218E1DA292BE00735907 /* of_asprintf.m in Sources */, 4B2C218F1DA292BE00735907 /* of_strptime.m in Sources */, 4B2C21901DA292BE00735907 /* pbkdf2.m in Sources */, 4B2C21911DA292BE00735907 /* resolver.m in Sources */, 4B2C21921DA292BE00735907 /* scrypt.m in Sources */, 4B2C21931DA292BE00735907 /* socket.m in Sources */, 4B2C21941DA292BE00735907 /* threading.m in Sources */, - 4B2C21961DA292BE00735907 /* unicode.m in Sources */, - 4BF3A22A1E25EA48002EA46F /* windows_1251.m in Sources */, - 4B2C21971DA292BE00735907 /* windows_1252.m in Sources */, 4B2C21981DA292BE00735907 /* OFAcceptFailedException.m in Sources */, 4B2C21991DA292BE00735907 /* OFObject+KeyValueCoding.m in Sources */, 4B2C219A1DA292BE00735907 /* OFAddressTranslationFailedException.m in Sources */, 4B2C219B1DA292BE00735907 /* OFAllocFailedException.m in Sources */, 4B2C219C1DA292BE00735907 /* OFAlreadyConnectedException.m in Sources */, @@ -3274,10 +3273,19 @@ 4B2C21CF1DA292BE00735907 /* OFUnknownXMLEntityException.m in Sources */, 4B2C21D01DA292BE00735907 /* OFUnlockFailedException.m in Sources */, 4B2C21D11DA292BE00735907 /* OFUnsupportedProtocolException.m in Sources */, 4B2C21D21DA292BE00735907 /* OFUnsupportedVersionException.m in Sources */, 4B2C21D31DA292BE00735907 /* OFWriteFailedException.m in Sources */, + 4B2C218A1DA292BE00735907 /* codepage_437.m in Sources */, + 4B5EBFB71E25A8CF004FE6A2 /* codepage_850.m in Sources */, + 4B6736131E2B2F6F00681F2C /* codepage_858.m in Sources */, + 4B2C218C1DA292BE00735907 /* iso_8859_15.m in Sources */, + 4BF5CB911E2DC1D800CF7584 /* iso_8859_2.m in Sources */, + 4B5EBFBA1E25A937004FE6A2 /* mac_roman.m in Sources */, + 4B2C21961DA292BE00735907 /* unicode.m in Sources */, + 4BF3A22A1E25EA48002EA46F /* windows_1251.m in Sources */, + 4B2C21971DA292BE00735907 /* windows_1252.m in Sources */, 4B2C21D41DA292BE00735907 /* forwarding.S in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 4B3D23711337FBC800DD29B8 /* Sources */ = { @@ -3390,28 +3398,19 @@ 4B3D23B11337FC0D00DD29B8 /* OFXMLParser.m in Sources */, 4B48B95514DC23B100546D39 /* OFXMLProcessingInstructions.m in Sources */, 4BE52D2217B990B4005958D1 /* OFZIPArchive.m in Sources */, 4B8B025A17BBA7C7009ED983 /* OFZIPArchiveEntry.m in Sources */, 4B3D23B31337FC0D00DD29B8 /* base64.m in Sources */, - 4BB52CC717B8EA7F00B7EBF5 /* codepage_437.m in Sources */, - 4B5EBFB61E25A8CF004FE6A2 /* codepage_850.m in Sources */, - 4B6736121E2B2F6F00681F2C /* codepage_858.m in Sources */, 4B881D3D1CCBFE2A00E2F7D8 /* crc32.m in Sources */, 4B3D23B51337FC0D00DD29B8 /* foundation-compat.m in Sources */, - 4B3D23B41337FC0D00DD29B8 /* iso_8859_15.m in Sources */, - 4BF5CB901E2DC1D800CF7584 /* iso_8859_2.m in Sources */, - 4B5EBFB91E25A937004FE6A2 /* mac_roman.m in Sources */, 4B3D23EE1337FFD000DD29B8 /* of_asprintf.m in Sources */, 4BA355BA14879BDD00442EF4 /* of_strptime.m in Sources */, 4BD306351D46CEE300E2F372 /* pbkdf2.m in Sources */, 4B7769EE1895C07D00D12284 /* resolver.m in Sources */, 4B6994481D47FB1A007F34DF /* scrypt.m in Sources */, 4B40EC1B189FE2650031E19E /* socket.m in Sources */, 4B3379CF1979326A0088E97E /* threading.m in Sources */, - 4B3D23B91337FC0D00DD29B8 /* unicode.m in Sources */, - 4BF3A2291E25EA48002EA46F /* windows_1251.m in Sources */, - 4B3D23BA1337FC0D00DD29B8 /* windows_1252.m in Sources */, 4B90B79F133AD87D00BD33CB /* OFAcceptFailedException.m in Sources */, 4BC176311D04963000C32718 /* OFObject+KeyValueCoding.m in Sources */, 4B90B7A1133AD87D00BD33CB /* OFAddressTranslationFailedException.m in Sources */, 4B17FF80133A2D17003E6DCD /* OFAllocFailedException.m in Sources */, 4B90B78E133AD46700BD33CB /* OFAlreadyConnectedException.m in Sources */, @@ -3468,10 +3467,19 @@ 4B91FD13196B4F5900C5C25E /* OFUnknownXMLEntityException.m in Sources */, 4B6743F6163C384A00EB1E59 /* OFUnlockFailedException.m in Sources */, 4B17FFB2133A3664003E6DCD /* OFUnsupportedProtocolException.m in Sources */, 4BA4846315CC9F1E00D75360 /* OFUnsupportedVersionException.m in Sources */, 4B55A117133AC24600B58A93 /* OFWriteFailedException.m in Sources */, + 4BB52CC717B8EA7F00B7EBF5 /* codepage_437.m in Sources */, + 4B5EBFB61E25A8CF004FE6A2 /* codepage_850.m in Sources */, + 4B6736121E2B2F6F00681F2C /* codepage_858.m in Sources */, + 4B3D23B41337FC0D00DD29B8 /* iso_8859_15.m in Sources */, + 4BF5CB901E2DC1D800CF7584 /* iso_8859_2.m in Sources */, + 4B5EBFB91E25A937004FE6A2 /* mac_roman.m in Sources */, + 4B3D23B91337FC0D00DD29B8 /* unicode.m in Sources */, + 4BF3A2291E25EA48002EA46F /* windows_1251.m in Sources */, + 4B3D23BA1337FC0D00DD29B8 /* windows_1252.m in Sources */, 4B5C112F17E9AB3E003C917F /* forwarding.S in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 4B5D706D1DA2F87A00B3B2D7 /* Sources */ = { Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -585,20 +585,21 @@ case "$host_os" in mingw*) AC_SUBST(OFSTDIOSTREAM_WIN32CONSOLE_M, "OFStdIOStream_Win32Console.m") ;; esac + +ENCODINGS_SRCS="" AC_ARG_ENABLE(unicode-tables, AS_HELP_STRING([--disable-unicode-tables], [Disable Unicode tables])) AS_IF([test x"$enable_unicode_tables" != x"no"], [ AC_DEFINE(OF_HAVE_UNICODE_TABLES, 1, [Whether to build with Unicode tables]) - AC_SUBST(UNICODE_M, "unicode.m") + ENCODINGS_SRCS="$ENCODINGS_SRCS unicode.m" ]) -ENCODINGS_SRCS="" AC_DEFUN([ENCODING_FLAG], [ AC_ARG_ENABLE($1, AS_HELP_STRING([--disable-$1], [Disables support for $3])) AS_IF([test x"$enable_$2" != x"no"], [ @@ -613,11 +614,24 @@ ENCODING_FLAG(iso-8859-2, iso_8859_2, [ISO 8859-2], HAVE_ISO_8859_2) ENCODING_FLAG(iso-8859-15, iso_8859_15, [ISO 8859-15], HAVE_ISO_8859_15) ENCODING_FLAG(mac-roman, mac_roman, [Mac Roman encoding], HAVE_MAC_ROMAN) ENCODING_FLAG(windows-1251, windows_1251, [Windows-1251], HAVE_WINDOWS_1251) ENCODING_FLAG(windows-1252, windows_1252, [Windows-1252], HAVE_WINDOWS_1252) + AC_SUBST(ENCODINGS_SRCS) +AS_IF([test x"$ENCODINGS_SRCS" != x""], [ + AC_SUBST(ENCODINGS, "encodings") + + AS_IF([test x"$enable_shared" != x"no"], [ + AC_SUBST(ENCODINGS_LIB_A, "encodings.lib.a") + AC_SUBST(ENCODINGS_ENCODINGS_LIB_A, "encodings/encodings.lib.a") + ]) + AS_IF([test x"$enable_static" = x"yes" -o x"$enable_shared" = x"no"], [ + AC_SUBST(ENCODINGS_A, "encodings.a") + AC_SUBST(ENCODINGS_ENCODINGS_A, "encodings/encodings.a") + ]) +]) AC_CHECK_FUNCS(sigaction) AC_CHECK_FUNCS([arc4random random], break) Index: extra.mk.in ================================================================== --- extra.mk.in +++ extra.mk.in @@ -9,10 +9,15 @@ OBJFW_BRIDGE_STATIC_LIB = @OBJFW_BRIDGE_STATIC_LIB@ AUTORELEASE_M = @AUTORELEASE_M@ BIN_PREFIX = @BIN_PREFIX@ BRIDGE = @BRIDGE@ +ENCODINGS = @ENCODINGS@ +ENCODINGS_A = @ENCODINGS_A@ +ENCODINGS_ENCODINGS_A = @ENCODINGS_ENCODINGS_A@ +ENCODINGS_ENCODINGS_LIB_A = @ENCODINGS_ENCODINGS_LIB_A@ +ENCODINGS_LIB_A = @ENCODINGS_LIB_A@ ENCODINGS_SRCS = @ENCODINGS_SRCS@ EXCEPTIONS_A = @EXCEPTIONS_A@ EXCEPTIONS_EXCEPTIONS_A = @EXCEPTIONS_EXCEPTIONS_A@ EXCEPTIONS_EXCEPTIONS_LIB_A = @EXCEPTIONS_EXCEPTIONS_LIB_A@ EXCEPTIONS_LIB_A = @EXCEPTIONS_LIB_A@ @@ -48,11 +53,10 @@ RUNTIME_RUNTIME_LIB_A = @RUNTIME_RUNTIME_LIB_A@ RUN_TESTS = @RUN_TESTS@ TESTPLUGIN = @TESTPLUGIN@ TESTS_LIBS = @TESTS_LIBS@ TEST_LAUNCHER = @TEST_LAUNCHER@ -UNICODE_M = @UNICODE_M@ USE_INCLUDES_ATOMIC = @USE_INCLUDES_ATOMIC@ USE_SRCS_FILES = @USE_SRCS_FILES@ USE_SRCS_PLUGINS = @USE_SRCS_PLUGINS@ USE_SRCS_SOCKETS = @USE_SRCS_SOCKETS@ USE_SRCS_THREADS = @USE_SRCS_THREADS@ Index: src/Makefile ================================================================== --- src/Makefile +++ src/Makefile @@ -1,8 +1,8 @@ include ../extra.mk -SUBDIRS = ${RUNTIME} exceptions forwarding +SUBDIRS = ${RUNTIME} exceptions ${ENCODINGS} forwarding SUBDIRS_AFTER = ${BRIDGE} DISTCLEAN = objfw-defs.h SHARED_LIB = ${OBJFW_SHARED_LIB} STATIC_LIB = ${OBJFW_STATIC_LIB} @@ -152,27 +152,27 @@ OFMutableString_UTF8.m \ OFSet_hashtable.m \ OFString_UTF8.m \ ${AUTORELEASE_M} \ ${FOUNDATION_COMPAT_M} \ - ${INSTANCE_M} \ - ${UNICODE_M} \ - ${ENCODINGS_SRCS} + ${INSTANCE_M} SRCS_FILES += OFSettings_INIFile.m SRCS_SOCKETS += ${OFKERNELEVENTOBSERVER_EPOLL_M} \ ${OFKERNELEVENTOBSERVER_KQUEUE_M} \ ${OFKERNELEVENTOBSERVER_POLL_M} \ ${OFKERNELEVENTOBSERVER_SELECT_M} \ OFTCPSocket+SOCKS5.m OBJS_EXTRA = ${RUNTIME_RUNTIME_A} \ ${EXCEPTIONS_EXCEPTIONS_A} \ + ${ENCODINGS_ENCODINGS_A} \ ${FORWARDING_FORWARDING_A} LIB_OBJS_EXTRA = ${RUNTIME_RUNTIME_LIB_A} \ ${EXCEPTIONS_EXCEPTIONS_LIB_A} \ + ${ENCODINGS_ENCODINGS_LIB_A} \ ${FORWARDING_FORWARDING_LIB_A} include ../buildsys.mk CPPFLAGS += -I. -I.. -Iexceptions -Iruntime -DOF_COMPILING_OBJFW LD = ${OBJC} LDFLAGS += ${REEXPORT_LIBOBJC} DELETED src/codepage_437.m Index: src/codepage_437.m ================================================================== --- src/codepage_437.m +++ src/codepage_437.m @@ -1,454 +0,0 @@ -/* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE.QPL included in - * the packaging of this file. - * - * Alternatively, it may be distributed under the terms of the GNU General - * Public License, either version 2 or 3, which can be found in the file - * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this - * file. - */ - -#include "config.h" - -#import "OFString.h" - -const of_char16_t of_codepage_437[128] = { - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, - 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, - 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, - 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, - 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, - 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, - 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, - 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, - 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, - 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, - 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, - 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 -}; - -bool -of_unicode_to_codepage_437(const of_unichar_t *input, unsigned char *output, - size_t length, bool lossy) -{ - for (size_t i = 0; i < length; i++) { - of_unichar_t c = input[i]; - - if OF_UNLIKELY (c > 0x7F) { - if OF_UNLIKELY (c > 0xFFFF) { - if (lossy) { - output[i] = '?'; - continue; - } else - return false; - } - - switch ((of_char16_t)c) { - case 0xC7: - output[i] = 0x80; - break; - case 0xFC: - output[i] = 0x81; - break; - case 0xE9: - output[i] = 0x82; - break; - case 0xE2: - output[i] = 0x83; - break; - case 0xE4: - output[i] = 0x84; - break; - case 0xE0: - output[i] = 0x85; - break; - case 0xE5: - output[i] = 0x86; - break; - case 0xE7: - output[i] = 0x87; - break; - case 0xEA: - output[i] = 0x88; - break; - case 0xEB: - output[i] = 0x89; - break; - case 0xE8: - output[i] = 0x8A; - break; - case 0xEF: - output[i] = 0x8B; - break; - case 0xEE: - output[i] = 0x8C; - break; - case 0xEC: - output[i] = 0x8D; - break; - case 0xC4: - output[i] = 0x8E; - break; - case 0xC5: - output[i] = 0x8F; - break; - case 0xC9: - output[i] = 0x90; - break; - case 0xE6: - output[i] = 0x91; - break; - case 0xC6: - output[i] = 0x92; - break; - case 0xF4: - output[i] = 0x93; - break; - case 0xF6: - output[i] = 0x94; - break; - case 0xF2: - output[i] = 0x95; - break; - case 0xFB: - output[i] = 0x96; - break; - case 0xF9: - output[i] = 0x97; - break; - case 0xFF: - output[i] = 0x98; - break; - case 0xD6: - output[i] = 0x99; - break; - case 0xDC: - output[i] = 0x9A; - break; - case 0xA2: - output[i] = 0x9B; - break; - case 0xA3: - output[i] = 0x9C; - break; - case 0xA5: - output[i] = 0x9D; - break; - case 0x20A7: - output[i] = 0x9E; - break; - case 0x192: - output[i] = 0x9F; - break; - case 0xE1: - output[i] = 0xA0; - break; - case 0xED: - output[i] = 0xA1; - break; - case 0xF3: - output[i] = 0xA2; - break; - case 0xFA: - output[i] = 0xA3; - break; - case 0xF1: - output[i] = 0xA4; - break; - case 0xD1: - output[i] = 0xA5; - break; - case 0xAA: - output[i] = 0xA6; - break; - case 0xBA: - output[i] = 0xA7; - break; - case 0xBF: - output[i] = 0xA8; - break; - case 0x2310: - output[i] = 0xA9; - break; - case 0xAC: - output[i] = 0xAA; - break; - case 0xBD: - output[i] = 0xAB; - break; - case 0xBC: - output[i] = 0xAC; - break; - case 0xA1: - output[i] = 0xAD; - break; - case 0xAB: - output[i] = 0xAE; - break; - case 0xBB: - output[i] = 0xAF; - break; - case 0x2591: - output[i] = 0xB0; - break; - case 0x2592: - output[i] = 0xB1; - break; - case 0x2593: - output[i] = 0xB2; - break; - case 0x2502: - output[i] = 0xB3; - break; - case 0x2524: - output[i] = 0xB4; - break; - case 0x2561: - output[i] = 0xB5; - break; - case 0x2562: - output[i] = 0xB6; - break; - case 0x2556: - output[i] = 0xB7; - break; - case 0x2555: - output[i] = 0xB8; - break; - case 0x2563: - output[i] = 0xB9; - break; - case 0x2551: - output[i] = 0xBA; - break; - case 0x2557: - output[i] = 0xBB; - break; - case 0x255D: - output[i] = 0xBC; - break; - case 0x255C: - output[i] = 0xBD; - break; - case 0x255B: - output[i] = 0xBE; - break; - case 0x2510: - output[i] = 0xBF; - break; - case 0x2514: - output[i] = 0xC0; - break; - case 0x2534: - output[i] = 0xC1; - break; - case 0x252C: - output[i] = 0xC2; - break; - case 0x251C: - output[i] = 0xC3; - break; - case 0x2500: - output[i] = 0xC4; - break; - case 0x253C: - output[i] = 0xC5; - break; - case 0x255E: - output[i] = 0xC6; - break; - case 0x255F: - output[i] = 0xC7; - break; - case 0x255A: - output[i] = 0xC8; - break; - case 0x2554: - output[i] = 0xC9; - break; - case 0x2569: - output[i] = 0xCA; - break; - case 0x2566: - output[i] = 0xCB; - break; - case 0x2560: - output[i] = 0xCC; - break; - case 0x2550: - output[i] = 0xCD; - break; - case 0x256C: - output[i] = 0xCE; - break; - case 0x2567: - output[i] = 0xCF; - break; - case 0x2568: - output[i] = 0xD0; - break; - case 0x2564: - output[i] = 0xD1; - break; - case 0x2565: - output[i] = 0xD2; - break; - case 0x2559: - output[i] = 0xD3; - break; - case 0x2558: - output[i] = 0xD4; - break; - case 0x2552: - output[i] = 0xD5; - break; - case 0x2553: - output[i] = 0xD6; - break; - case 0x256B: - output[i] = 0xD7; - break; - case 0x256A: - output[i] = 0xD8; - break; - case 0x2518: - output[i] = 0xD9; - break; - case 0x250C: - output[i] = 0xDA; - break; - case 0x2588: - output[i] = 0xDB; - break; - case 0x2584: - output[i] = 0xDC; - break; - case 0x258C: - output[i] = 0xDD; - break; - case 0x2590: - output[i] = 0xDE; - break; - case 0x2580: - output[i] = 0xDF; - break; - case 0x3B1: - output[i] = 0xE0; - break; - case 0xDF: - output[i] = 0xE1; - break; - case 0x393: - output[i] = 0xE2; - break; - case 0x3C0: - output[i] = 0xE3; - break; - case 0x3A3: - output[i] = 0xE4; - break; - case 0x3C3: - output[i] = 0xE5; - break; - case 0xB5: - output[i] = 0xE6; - break; - case 0x3C4: - output[i] = 0xE7; - break; - case 0x3A6: - output[i] = 0xE8; - break; - case 0x398: - output[i] = 0xE9; - break; - case 0x3A9: - output[i] = 0xEA; - break; - case 0x3B4: - output[i] = 0xEB; - break; - case 0x221E: - output[i] = 0xEC; - break; - case 0x3C6: - output[i] = 0xED; - break; - case 0x3B5: - output[i] = 0xEE; - break; - case 0x2229: - output[i] = 0xEF; - break; - case 0x2261: - output[i] = 0xF0; - break; - case 0xB1: - output[i] = 0xF1; - break; - case 0x2265: - output[i] = 0xF2; - break; - case 0x2264: - output[i] = 0xF3; - break; - case 0x2320: - output[i] = 0xF4; - break; - case 0x2321: - output[i] = 0xF5; - break; - case 0xF7: - output[i] = 0xF6; - break; - case 0x2248: - output[i] = 0xF7; - break; - case 0xB0: - output[i] = 0xF8; - break; - case 0x2219: - output[i] = 0xF9; - break; - case 0xB7: - output[i] = 0xFA; - break; - case 0x221A: - output[i] = 0xFB; - break; - case 0x207F: - output[i] = 0xFC; - break; - case 0xB2: - output[i] = 0xFD; - break; - case 0x25A0: - output[i] = 0xFE; - break; - case 0xA0: - output[i] = 0xFF; - break; - default: - if (lossy) - output[i] = '?'; - else - return false; - - break; - } - } else - output[i] = (unsigned char)c; - } - - return true; -} DELETED src/codepage_850.m Index: src/codepage_850.m ================================================================== --- src/codepage_850.m +++ src/codepage_850.m @@ -1,454 +0,0 @@ -/* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE.QPL included in - * the packaging of this file. - * - * Alternatively, it may be distributed under the terms of the GNU General - * Public License, either version 2 or 3, which can be found in the file - * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this - * file. - */ - -#include "config.h" - -#import "OFString.h" - -const of_char16_t of_codepage_850[128] = { - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, - 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, - 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, - 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, - 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, - 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, - 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, - 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE, - 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, - 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, - 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, - 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, - 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 -}; - -bool -of_unicode_to_codepage_850(const of_unichar_t *input, unsigned char *output, - size_t length, bool lossy) -{ - for (size_t i = 0; i < length; i++) { - of_unichar_t c = input[i]; - - if OF_UNLIKELY (c > 0x7F) { - if OF_UNLIKELY (c > 0xFFFF) { - if (lossy) { - output[i] = '?'; - continue; - } else - return false; - } - - switch ((of_char16_t)c) { - case 0xC7: - output[i] = 0x80; - break; - case 0xFC: - output[i] = 0x81; - break; - case 0xE9: - output[i] = 0x82; - break; - case 0xE2: - output[i] = 0x83; - break; - case 0xE4: - output[i] = 0x84; - break; - case 0xE0: - output[i] = 0x85; - break; - case 0xE5: - output[i] = 0x86; - break; - case 0xE7: - output[i] = 0x87; - break; - case 0xEA: - output[i] = 0x88; - break; - case 0xEB: - output[i] = 0x89; - break; - case 0xE8: - output[i] = 0x8A; - break; - case 0xEF: - output[i] = 0x8B; - break; - case 0xEE: - output[i] = 0x8C; - break; - case 0xEC: - output[i] = 0x8D; - break; - case 0xC4: - output[i] = 0x8E; - break; - case 0xC5: - output[i] = 0x8F; - break; - case 0xC9: - output[i] = 0x90; - break; - case 0xE6: - output[i] = 0x91; - break; - case 0xC6: - output[i] = 0x92; - break; - case 0xF4: - output[i] = 0x93; - break; - case 0xF6: - output[i] = 0x94; - break; - case 0xF2: - output[i] = 0x95; - break; - case 0xFB: - output[i] = 0x96; - break; - case 0xF9: - output[i] = 0x97; - break; - case 0xFF: - output[i] = 0x98; - break; - case 0xD6: - output[i] = 0x99; - break; - case 0xDC: - output[i] = 0x9A; - break; - case 0xF8: - output[i] = 0x9B; - break; - case 0xA3: - output[i] = 0x9C; - break; - case 0xD8: - output[i] = 0x9D; - break; - case 0xD7: - output[i] = 0x9E; - break; - case 0x192: - output[i] = 0x9F; - break; - case 0xE1: - output[i] = 0xA0; - break; - case 0xED: - output[i] = 0xA1; - break; - case 0xF3: - output[i] = 0xA2; - break; - case 0xFA: - output[i] = 0xA3; - break; - case 0xF1: - output[i] = 0xA4; - break; - case 0xD1: - output[i] = 0xA5; - break; - case 0xAA: - output[i] = 0xA6; - break; - case 0xBA: - output[i] = 0xA7; - break; - case 0xBF: - output[i] = 0xA8; - break; - case 0xAE: - output[i] = 0xA9; - break; - case 0xAC: - output[i] = 0xAA; - break; - case 0xBD: - output[i] = 0xAB; - break; - case 0xBC: - output[i] = 0xAC; - break; - case 0xA1: - output[i] = 0xAD; - break; - case 0xAB: - output[i] = 0xAE; - break; - case 0xBB: - output[i] = 0xAF; - break; - case 0x2591: - output[i] = 0xB0; - break; - case 0x2592: - output[i] = 0xB1; - break; - case 0x2593: - output[i] = 0xB2; - break; - case 0x2502: - output[i] = 0xB3; - break; - case 0x2524: - output[i] = 0xB4; - break; - case 0xC1: - output[i] = 0xB5; - break; - case 0xC2: - output[i] = 0xB6; - break; - case 0xC0: - output[i] = 0xB7; - break; - case 0xA9: - output[i] = 0xB8; - break; - case 0x2563: - output[i] = 0xB9; - break; - case 0x2551: - output[i] = 0xBA; - break; - case 0x2557: - output[i] = 0xBB; - break; - case 0x255D: - output[i] = 0xBC; - break; - case 0xA2: - output[i] = 0xBD; - break; - case 0xA5: - output[i] = 0xBE; - break; - case 0x2510: - output[i] = 0xBF; - break; - case 0x2514: - output[i] = 0xC0; - break; - case 0x2534: - output[i] = 0xC1; - break; - case 0x252C: - output[i] = 0xC2; - break; - case 0x251C: - output[i] = 0xC3; - break; - case 0x2500: - output[i] = 0xC4; - break; - case 0x253C: - output[i] = 0xC5; - break; - case 0xE3: - output[i] = 0xC6; - break; - case 0xC3: - output[i] = 0xC7; - break; - case 0x255A: - output[i] = 0xC8; - break; - case 0x2554: - output[i] = 0xC9; - break; - case 0x2569: - output[i] = 0xCA; - break; - case 0x2566: - output[i] = 0xCB; - break; - case 0x2560: - output[i] = 0xCC; - break; - case 0x2550: - output[i] = 0xCD; - break; - case 0x256C: - output[i] = 0xCE; - break; - case 0xA4: - output[i] = 0xCF; - break; - case 0xF0: - output[i] = 0xD0; - break; - case 0xD0: - output[i] = 0xD1; - break; - case 0xCA: - output[i] = 0xD2; - break; - case 0xCB: - output[i] = 0xD3; - break; - case 0xC8: - output[i] = 0xD4; - break; - case 0x131: - output[i] = 0xD5; - break; - case 0xCD: - output[i] = 0xD6; - break; - case 0xCE: - output[i] = 0xD7; - break; - case 0xCF: - output[i] = 0xD8; - break; - case 0x2518: - output[i] = 0xD9; - break; - case 0x250C: - output[i] = 0xDA; - break; - case 0x2588: - output[i] = 0xDB; - break; - case 0x2584: - output[i] = 0xDC; - break; - case 0xA6: - output[i] = 0xDD; - break; - case 0xCC: - output[i] = 0xDE; - break; - case 0x2580: - output[i] = 0xDF; - break; - case 0xD3: - output[i] = 0xE0; - break; - case 0xDF: - output[i] = 0xE1; - break; - case 0xD4: - output[i] = 0xE2; - break; - case 0xD2: - output[i] = 0xE3; - break; - case 0xF5: - output[i] = 0xE4; - break; - case 0xD5: - output[i] = 0xE5; - break; - case 0xB5: - output[i] = 0xE6; - break; - case 0xFE: - output[i] = 0xE7; - break; - case 0xDE: - output[i] = 0xE8; - break; - case 0xDA: - output[i] = 0xE9; - break; - case 0xDB: - output[i] = 0xEA; - break; - case 0xD9: - output[i] = 0xEB; - break; - case 0xFD: - output[i] = 0xEC; - break; - case 0xDD: - output[i] = 0xED; - break; - case 0xAF: - output[i] = 0xEE; - break; - case 0xB4: - output[i] = 0xEF; - break; - case 0xAD: - output[i] = 0xF0; - break; - case 0xB1: - output[i] = 0xF1; - break; - case 0x2017: - output[i] = 0xF2; - break; - case 0xBE: - output[i] = 0xF3; - break; - case 0xB6: - output[i] = 0xF4; - break; - case 0xA7: - output[i] = 0xF5; - break; - case 0xF7: - output[i] = 0xF6; - break; - case 0xB8: - output[i] = 0xF7; - break; - case 0xB0: - output[i] = 0xF8; - break; - case 0xA8: - output[i] = 0xF9; - break; - case 0xB7: - output[i] = 0xFA; - break; - case 0xB9: - output[i] = 0xFB; - break; - case 0xB3: - output[i] = 0xFC; - break; - case 0xB2: - output[i] = 0xFD; - break; - case 0x25A0: - output[i] = 0xFE; - break; - case 0xA0: - output[i] = 0xFF; - break; - default: - if (lossy) - output[i] = '?'; - else - return false; - - break; - } - } else - output[i] = (unsigned char)c; - } - - return true; -} DELETED src/codepage_858.m Index: src/codepage_858.m ================================================================== --- src/codepage_858.m +++ src/codepage_858.m @@ -1,454 +0,0 @@ -/* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE.QPL included in - * the packaging of this file. - * - * Alternatively, it may be distributed under the terms of the GNU General - * Public License, either version 2 or 3, which can be found in the file - * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this - * file. - */ - -#include "config.h" - -#import "OFString.h" - -const of_char16_t of_codepage_858[128] = { - 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, - 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, - 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, - 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, - 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, - 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, - 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, - 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, - 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x20AC, 0x00CD, 0x00CE, - 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, - 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, - 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, - 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, - 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 -}; - -bool -of_unicode_to_codepage_858(const of_unichar_t *input, unsigned char *output, - size_t length, bool lossy) -{ - for (size_t i = 0; i < length; i++) { - of_unichar_t c = input[i]; - - if OF_UNLIKELY (c > 0x7F) { - if OF_UNLIKELY (c > 0xFFFF) { - if (lossy) { - output[i] = '?'; - continue; - } else - return false; - } - - switch ((of_char16_t)c) { - case 0xC7: - output[i] = 0x80; - break; - case 0xFC: - output[i] = 0x81; - break; - case 0xE9: - output[i] = 0x82; - break; - case 0xE2: - output[i] = 0x83; - break; - case 0xE4: - output[i] = 0x84; - break; - case 0xE0: - output[i] = 0x85; - break; - case 0xE5: - output[i] = 0x86; - break; - case 0xE7: - output[i] = 0x87; - break; - case 0xEA: - output[i] = 0x88; - break; - case 0xEB: - output[i] = 0x89; - break; - case 0xE8: - output[i] = 0x8A; - break; - case 0xEF: - output[i] = 0x8B; - break; - case 0xEE: - output[i] = 0x8C; - break; - case 0xEC: - output[i] = 0x8D; - break; - case 0xC4: - output[i] = 0x8E; - break; - case 0xC5: - output[i] = 0x8F; - break; - case 0xC9: - output[i] = 0x90; - break; - case 0xE6: - output[i] = 0x91; - break; - case 0xC6: - output[i] = 0x92; - break; - case 0xF4: - output[i] = 0x93; - break; - case 0xF6: - output[i] = 0x94; - break; - case 0xF2: - output[i] = 0x95; - break; - case 0xFB: - output[i] = 0x96; - break; - case 0xF9: - output[i] = 0x97; - break; - case 0xFF: - output[i] = 0x98; - break; - case 0xD6: - output[i] = 0x99; - break; - case 0xDC: - output[i] = 0x9A; - break; - case 0xF8: - output[i] = 0x9B; - break; - case 0xA3: - output[i] = 0x9C; - break; - case 0xD8: - output[i] = 0x9D; - break; - case 0xD7: - output[i] = 0x9E; - break; - case 0x192: - output[i] = 0x9F; - break; - case 0xE1: - output[i] = 0xA0; - break; - case 0xED: - output[i] = 0xA1; - break; - case 0xF3: - output[i] = 0xA2; - break; - case 0xFA: - output[i] = 0xA3; - break; - case 0xF1: - output[i] = 0xA4; - break; - case 0xD1: - output[i] = 0xA5; - break; - case 0xAA: - output[i] = 0xA6; - break; - case 0xBA: - output[i] = 0xA7; - break; - case 0xBF: - output[i] = 0xA8; - break; - case 0xAE: - output[i] = 0xA9; - break; - case 0xAC: - output[i] = 0xAA; - break; - case 0xBD: - output[i] = 0xAB; - break; - case 0xBC: - output[i] = 0xAC; - break; - case 0xA1: - output[i] = 0xAD; - break; - case 0xAB: - output[i] = 0xAE; - break; - case 0xBB: - output[i] = 0xAF; - break; - case 0x2591: - output[i] = 0xB0; - break; - case 0x2592: - output[i] = 0xB1; - break; - case 0x2593: - output[i] = 0xB2; - break; - case 0x2502: - output[i] = 0xB3; - break; - case 0x2524: - output[i] = 0xB4; - break; - case 0xC1: - output[i] = 0xB5; - break; - case 0xC2: - output[i] = 0xB6; - break; - case 0xC0: - output[i] = 0xB7; - break; - case 0xA9: - output[i] = 0xB8; - break; - case 0x2563: - output[i] = 0xB9; - break; - case 0x2551: - output[i] = 0xBA; - break; - case 0x2557: - output[i] = 0xBB; - break; - case 0x255D: - output[i] = 0xBC; - break; - case 0xA2: - output[i] = 0xBD; - break; - case 0xA5: - output[i] = 0xBE; - break; - case 0x2510: - output[i] = 0xBF; - break; - case 0x2514: - output[i] = 0xC0; - break; - case 0x2534: - output[i] = 0xC1; - break; - case 0x252C: - output[i] = 0xC2; - break; - case 0x251C: - output[i] = 0xC3; - break; - case 0x2500: - output[i] = 0xC4; - break; - case 0x253C: - output[i] = 0xC5; - break; - case 0xE3: - output[i] = 0xC6; - break; - case 0xC3: - output[i] = 0xC7; - break; - case 0x255A: - output[i] = 0xC8; - break; - case 0x2554: - output[i] = 0xC9; - break; - case 0x2569: - output[i] = 0xCA; - break; - case 0x2566: - output[i] = 0xCB; - break; - case 0x2560: - output[i] = 0xCC; - break; - case 0x2550: - output[i] = 0xCD; - break; - case 0x256C: - output[i] = 0xCE; - break; - case 0xA4: - output[i] = 0xCF; - break; - case 0xF0: - output[i] = 0xD0; - break; - case 0xD0: - output[i] = 0xD1; - break; - case 0xCA: - output[i] = 0xD2; - break; - case 0xCB: - output[i] = 0xD3; - break; - case 0xC8: - output[i] = 0xD4; - break; - case 0x20AC: - output[i] = 0xD5; - break; - case 0xCD: - output[i] = 0xD6; - break; - case 0xCE: - output[i] = 0xD7; - break; - case 0xCF: - output[i] = 0xD8; - break; - case 0x2518: - output[i] = 0xD9; - break; - case 0x250C: - output[i] = 0xDA; - break; - case 0x2588: - output[i] = 0xDB; - break; - case 0x2584: - output[i] = 0xDC; - break; - case 0xA6: - output[i] = 0xDD; - break; - case 0xCC: - output[i] = 0xDE; - break; - case 0x2580: - output[i] = 0xDF; - break; - case 0xD3: - output[i] = 0xE0; - break; - case 0xDF: - output[i] = 0xE1; - break; - case 0xD4: - output[i] = 0xE2; - break; - case 0xD2: - output[i] = 0xE3; - break; - case 0xF5: - output[i] = 0xE4; - break; - case 0xD5: - output[i] = 0xE5; - break; - case 0xB5: - output[i] = 0xE6; - break; - case 0xFE: - output[i] = 0xE7; - break; - case 0xDE: - output[i] = 0xE8; - break; - case 0xDA: - output[i] = 0xE9; - break; - case 0xDB: - output[i] = 0xEA; - break; - case 0xD9: - output[i] = 0xEB; - break; - case 0xFD: - output[i] = 0xEC; - break; - case 0xDD: - output[i] = 0xED; - break; - case 0xAF: - output[i] = 0xEE; - break; - case 0xB4: - output[i] = 0xEF; - break; - case 0xAD: - output[i] = 0xF0; - break; - case 0xB1: - output[i] = 0xF1; - break; - case 0x2017: - output[i] = 0xF2; - break; - case 0xBE: - output[i] = 0xF3; - break; - case 0xB6: - output[i] = 0xF4; - break; - case 0xA7: - output[i] = 0xF5; - break; - case 0xF7: - output[i] = 0xF6; - break; - case 0xB8: - output[i] = 0xF7; - break; - case 0xB0: - output[i] = 0xF8; - break; - case 0xA8: - output[i] = 0xF9; - break; - case 0xB7: - output[i] = 0xFA; - break; - case 0xB9: - output[i] = 0xFB; - break; - case 0xB3: - output[i] = 0xFC; - break; - case 0xB2: - output[i] = 0xFD; - break; - case 0x25A0: - output[i] = 0xFE; - break; - case 0xA0: - output[i] = 0xFF; - break; - default: - if (lossy) - output[i] = '?'; - else - return false; - - break; - } - } else - output[i] = (unsigned char)c; - } - - return true; -} ADDED src/encodings/Makefile Index: src/encodings/Makefile ================================================================== --- src/encodings/Makefile +++ src/encodings/Makefile @@ -0,0 +1,12 @@ +include ../../extra.mk + +STATIC_PIC_LIB_NOINST = ${ENCODINGS_LIB_A} +STATIC_LIB_NOINST = ${ENCODINGS_A} + +SRCS = ${ENCODINGS_SRCS} + +INCLUDES = ${SRCS:.m=.h} + +include ../../buildsys.mk + +CPPFLAGS += -I. -I.. -I../.. -I../runtime -I../exceptions -DOF_COMPILING_OBJFW ADDED src/encodings/codepage_437.m Index: src/encodings/codepage_437.m ================================================================== --- src/encodings/codepage_437.m +++ src/encodings/codepage_437.m @@ -0,0 +1,454 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "OFString.h" + +const of_char16_t of_codepage_437[128] = { + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, + 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, + 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, + 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, + 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, + 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, + 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, + 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, + 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0 +}; + +bool +of_unicode_to_codepage_437(const of_unichar_t *input, unsigned char *output, + size_t length, bool lossy) +{ + for (size_t i = 0; i < length; i++) { + of_unichar_t c = input[i]; + + if OF_UNLIKELY (c > 0x7F) { + if OF_UNLIKELY (c > 0xFFFF) { + if (lossy) { + output[i] = '?'; + continue; + } else + return false; + } + + switch ((of_char16_t)c) { + case 0xC7: + output[i] = 0x80; + break; + case 0xFC: + output[i] = 0x81; + break; + case 0xE9: + output[i] = 0x82; + break; + case 0xE2: + output[i] = 0x83; + break; + case 0xE4: + output[i] = 0x84; + break; + case 0xE0: + output[i] = 0x85; + break; + case 0xE5: + output[i] = 0x86; + break; + case 0xE7: + output[i] = 0x87; + break; + case 0xEA: + output[i] = 0x88; + break; + case 0xEB: + output[i] = 0x89; + break; + case 0xE8: + output[i] = 0x8A; + break; + case 0xEF: + output[i] = 0x8B; + break; + case 0xEE: + output[i] = 0x8C; + break; + case 0xEC: + output[i] = 0x8D; + break; + case 0xC4: + output[i] = 0x8E; + break; + case 0xC5: + output[i] = 0x8F; + break; + case 0xC9: + output[i] = 0x90; + break; + case 0xE6: + output[i] = 0x91; + break; + case 0xC6: + output[i] = 0x92; + break; + case 0xF4: + output[i] = 0x93; + break; + case 0xF6: + output[i] = 0x94; + break; + case 0xF2: + output[i] = 0x95; + break; + case 0xFB: + output[i] = 0x96; + break; + case 0xF9: + output[i] = 0x97; + break; + case 0xFF: + output[i] = 0x98; + break; + case 0xD6: + output[i] = 0x99; + break; + case 0xDC: + output[i] = 0x9A; + break; + case 0xA2: + output[i] = 0x9B; + break; + case 0xA3: + output[i] = 0x9C; + break; + case 0xA5: + output[i] = 0x9D; + break; + case 0x20A7: + output[i] = 0x9E; + break; + case 0x192: + output[i] = 0x9F; + break; + case 0xE1: + output[i] = 0xA0; + break; + case 0xED: + output[i] = 0xA1; + break; + case 0xF3: + output[i] = 0xA2; + break; + case 0xFA: + output[i] = 0xA3; + break; + case 0xF1: + output[i] = 0xA4; + break; + case 0xD1: + output[i] = 0xA5; + break; + case 0xAA: + output[i] = 0xA6; + break; + case 0xBA: + output[i] = 0xA7; + break; + case 0xBF: + output[i] = 0xA8; + break; + case 0x2310: + output[i] = 0xA9; + break; + case 0xAC: + output[i] = 0xAA; + break; + case 0xBD: + output[i] = 0xAB; + break; + case 0xBC: + output[i] = 0xAC; + break; + case 0xA1: + output[i] = 0xAD; + break; + case 0xAB: + output[i] = 0xAE; + break; + case 0xBB: + output[i] = 0xAF; + break; + case 0x2591: + output[i] = 0xB0; + break; + case 0x2592: + output[i] = 0xB1; + break; + case 0x2593: + output[i] = 0xB2; + break; + case 0x2502: + output[i] = 0xB3; + break; + case 0x2524: + output[i] = 0xB4; + break; + case 0x2561: + output[i] = 0xB5; + break; + case 0x2562: + output[i] = 0xB6; + break; + case 0x2556: + output[i] = 0xB7; + break; + case 0x2555: + output[i] = 0xB8; + break; + case 0x2563: + output[i] = 0xB9; + break; + case 0x2551: + output[i] = 0xBA; + break; + case 0x2557: + output[i] = 0xBB; + break; + case 0x255D: + output[i] = 0xBC; + break; + case 0x255C: + output[i] = 0xBD; + break; + case 0x255B: + output[i] = 0xBE; + break; + case 0x2510: + output[i] = 0xBF; + break; + case 0x2514: + output[i] = 0xC0; + break; + case 0x2534: + output[i] = 0xC1; + break; + case 0x252C: + output[i] = 0xC2; + break; + case 0x251C: + output[i] = 0xC3; + break; + case 0x2500: + output[i] = 0xC4; + break; + case 0x253C: + output[i] = 0xC5; + break; + case 0x255E: + output[i] = 0xC6; + break; + case 0x255F: + output[i] = 0xC7; + break; + case 0x255A: + output[i] = 0xC8; + break; + case 0x2554: + output[i] = 0xC9; + break; + case 0x2569: + output[i] = 0xCA; + break; + case 0x2566: + output[i] = 0xCB; + break; + case 0x2560: + output[i] = 0xCC; + break; + case 0x2550: + output[i] = 0xCD; + break; + case 0x256C: + output[i] = 0xCE; + break; + case 0x2567: + output[i] = 0xCF; + break; + case 0x2568: + output[i] = 0xD0; + break; + case 0x2564: + output[i] = 0xD1; + break; + case 0x2565: + output[i] = 0xD2; + break; + case 0x2559: + output[i] = 0xD3; + break; + case 0x2558: + output[i] = 0xD4; + break; + case 0x2552: + output[i] = 0xD5; + break; + case 0x2553: + output[i] = 0xD6; + break; + case 0x256B: + output[i] = 0xD7; + break; + case 0x256A: + output[i] = 0xD8; + break; + case 0x2518: + output[i] = 0xD9; + break; + case 0x250C: + output[i] = 0xDA; + break; + case 0x2588: + output[i] = 0xDB; + break; + case 0x2584: + output[i] = 0xDC; + break; + case 0x258C: + output[i] = 0xDD; + break; + case 0x2590: + output[i] = 0xDE; + break; + case 0x2580: + output[i] = 0xDF; + break; + case 0x3B1: + output[i] = 0xE0; + break; + case 0xDF: + output[i] = 0xE1; + break; + case 0x393: + output[i] = 0xE2; + break; + case 0x3C0: + output[i] = 0xE3; + break; + case 0x3A3: + output[i] = 0xE4; + break; + case 0x3C3: + output[i] = 0xE5; + break; + case 0xB5: + output[i] = 0xE6; + break; + case 0x3C4: + output[i] = 0xE7; + break; + case 0x3A6: + output[i] = 0xE8; + break; + case 0x398: + output[i] = 0xE9; + break; + case 0x3A9: + output[i] = 0xEA; + break; + case 0x3B4: + output[i] = 0xEB; + break; + case 0x221E: + output[i] = 0xEC; + break; + case 0x3C6: + output[i] = 0xED; + break; + case 0x3B5: + output[i] = 0xEE; + break; + case 0x2229: + output[i] = 0xEF; + break; + case 0x2261: + output[i] = 0xF0; + break; + case 0xB1: + output[i] = 0xF1; + break; + case 0x2265: + output[i] = 0xF2; + break; + case 0x2264: + output[i] = 0xF3; + break; + case 0x2320: + output[i] = 0xF4; + break; + case 0x2321: + output[i] = 0xF5; + break; + case 0xF7: + output[i] = 0xF6; + break; + case 0x2248: + output[i] = 0xF7; + break; + case 0xB0: + output[i] = 0xF8; + break; + case 0x2219: + output[i] = 0xF9; + break; + case 0xB7: + output[i] = 0xFA; + break; + case 0x221A: + output[i] = 0xFB; + break; + case 0x207F: + output[i] = 0xFC; + break; + case 0xB2: + output[i] = 0xFD; + break; + case 0x25A0: + output[i] = 0xFE; + break; + case 0xA0: + output[i] = 0xFF; + break; + default: + if (lossy) + output[i] = '?'; + else + return false; + + break; + } + } else + output[i] = (unsigned char)c; + } + + return true; +} ADDED src/encodings/codepage_850.m Index: src/encodings/codepage_850.m ================================================================== --- src/encodings/codepage_850.m +++ src/encodings/codepage_850.m @@ -0,0 +1,454 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "OFString.h" + +const of_char16_t of_codepage_850[128] = { + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, + 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, + 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, + 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, + 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x0131, 0x00CD, 0x00CE, + 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, + 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, + 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, + 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, + 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 +}; + +bool +of_unicode_to_codepage_850(const of_unichar_t *input, unsigned char *output, + size_t length, bool lossy) +{ + for (size_t i = 0; i < length; i++) { + of_unichar_t c = input[i]; + + if OF_UNLIKELY (c > 0x7F) { + if OF_UNLIKELY (c > 0xFFFF) { + if (lossy) { + output[i] = '?'; + continue; + } else + return false; + } + + switch ((of_char16_t)c) { + case 0xC7: + output[i] = 0x80; + break; + case 0xFC: + output[i] = 0x81; + break; + case 0xE9: + output[i] = 0x82; + break; + case 0xE2: + output[i] = 0x83; + break; + case 0xE4: + output[i] = 0x84; + break; + case 0xE0: + output[i] = 0x85; + break; + case 0xE5: + output[i] = 0x86; + break; + case 0xE7: + output[i] = 0x87; + break; + case 0xEA: + output[i] = 0x88; + break; + case 0xEB: + output[i] = 0x89; + break; + case 0xE8: + output[i] = 0x8A; + break; + case 0xEF: + output[i] = 0x8B; + break; + case 0xEE: + output[i] = 0x8C; + break; + case 0xEC: + output[i] = 0x8D; + break; + case 0xC4: + output[i] = 0x8E; + break; + case 0xC5: + output[i] = 0x8F; + break; + case 0xC9: + output[i] = 0x90; + break; + case 0xE6: + output[i] = 0x91; + break; + case 0xC6: + output[i] = 0x92; + break; + case 0xF4: + output[i] = 0x93; + break; + case 0xF6: + output[i] = 0x94; + break; + case 0xF2: + output[i] = 0x95; + break; + case 0xFB: + output[i] = 0x96; + break; + case 0xF9: + output[i] = 0x97; + break; + case 0xFF: + output[i] = 0x98; + break; + case 0xD6: + output[i] = 0x99; + break; + case 0xDC: + output[i] = 0x9A; + break; + case 0xF8: + output[i] = 0x9B; + break; + case 0xA3: + output[i] = 0x9C; + break; + case 0xD8: + output[i] = 0x9D; + break; + case 0xD7: + output[i] = 0x9E; + break; + case 0x192: + output[i] = 0x9F; + break; + case 0xE1: + output[i] = 0xA0; + break; + case 0xED: + output[i] = 0xA1; + break; + case 0xF3: + output[i] = 0xA2; + break; + case 0xFA: + output[i] = 0xA3; + break; + case 0xF1: + output[i] = 0xA4; + break; + case 0xD1: + output[i] = 0xA5; + break; + case 0xAA: + output[i] = 0xA6; + break; + case 0xBA: + output[i] = 0xA7; + break; + case 0xBF: + output[i] = 0xA8; + break; + case 0xAE: + output[i] = 0xA9; + break; + case 0xAC: + output[i] = 0xAA; + break; + case 0xBD: + output[i] = 0xAB; + break; + case 0xBC: + output[i] = 0xAC; + break; + case 0xA1: + output[i] = 0xAD; + break; + case 0xAB: + output[i] = 0xAE; + break; + case 0xBB: + output[i] = 0xAF; + break; + case 0x2591: + output[i] = 0xB0; + break; + case 0x2592: + output[i] = 0xB1; + break; + case 0x2593: + output[i] = 0xB2; + break; + case 0x2502: + output[i] = 0xB3; + break; + case 0x2524: + output[i] = 0xB4; + break; + case 0xC1: + output[i] = 0xB5; + break; + case 0xC2: + output[i] = 0xB6; + break; + case 0xC0: + output[i] = 0xB7; + break; + case 0xA9: + output[i] = 0xB8; + break; + case 0x2563: + output[i] = 0xB9; + break; + case 0x2551: + output[i] = 0xBA; + break; + case 0x2557: + output[i] = 0xBB; + break; + case 0x255D: + output[i] = 0xBC; + break; + case 0xA2: + output[i] = 0xBD; + break; + case 0xA5: + output[i] = 0xBE; + break; + case 0x2510: + output[i] = 0xBF; + break; + case 0x2514: + output[i] = 0xC0; + break; + case 0x2534: + output[i] = 0xC1; + break; + case 0x252C: + output[i] = 0xC2; + break; + case 0x251C: + output[i] = 0xC3; + break; + case 0x2500: + output[i] = 0xC4; + break; + case 0x253C: + output[i] = 0xC5; + break; + case 0xE3: + output[i] = 0xC6; + break; + case 0xC3: + output[i] = 0xC7; + break; + case 0x255A: + output[i] = 0xC8; + break; + case 0x2554: + output[i] = 0xC9; + break; + case 0x2569: + output[i] = 0xCA; + break; + case 0x2566: + output[i] = 0xCB; + break; + case 0x2560: + output[i] = 0xCC; + break; + case 0x2550: + output[i] = 0xCD; + break; + case 0x256C: + output[i] = 0xCE; + break; + case 0xA4: + output[i] = 0xCF; + break; + case 0xF0: + output[i] = 0xD0; + break; + case 0xD0: + output[i] = 0xD1; + break; + case 0xCA: + output[i] = 0xD2; + break; + case 0xCB: + output[i] = 0xD3; + break; + case 0xC8: + output[i] = 0xD4; + break; + case 0x131: + output[i] = 0xD5; + break; + case 0xCD: + output[i] = 0xD6; + break; + case 0xCE: + output[i] = 0xD7; + break; + case 0xCF: + output[i] = 0xD8; + break; + case 0x2518: + output[i] = 0xD9; + break; + case 0x250C: + output[i] = 0xDA; + break; + case 0x2588: + output[i] = 0xDB; + break; + case 0x2584: + output[i] = 0xDC; + break; + case 0xA6: + output[i] = 0xDD; + break; + case 0xCC: + output[i] = 0xDE; + break; + case 0x2580: + output[i] = 0xDF; + break; + case 0xD3: + output[i] = 0xE0; + break; + case 0xDF: + output[i] = 0xE1; + break; + case 0xD4: + output[i] = 0xE2; + break; + case 0xD2: + output[i] = 0xE3; + break; + case 0xF5: + output[i] = 0xE4; + break; + case 0xD5: + output[i] = 0xE5; + break; + case 0xB5: + output[i] = 0xE6; + break; + case 0xFE: + output[i] = 0xE7; + break; + case 0xDE: + output[i] = 0xE8; + break; + case 0xDA: + output[i] = 0xE9; + break; + case 0xDB: + output[i] = 0xEA; + break; + case 0xD9: + output[i] = 0xEB; + break; + case 0xFD: + output[i] = 0xEC; + break; + case 0xDD: + output[i] = 0xED; + break; + case 0xAF: + output[i] = 0xEE; + break; + case 0xB4: + output[i] = 0xEF; + break; + case 0xAD: + output[i] = 0xF0; + break; + case 0xB1: + output[i] = 0xF1; + break; + case 0x2017: + output[i] = 0xF2; + break; + case 0xBE: + output[i] = 0xF3; + break; + case 0xB6: + output[i] = 0xF4; + break; + case 0xA7: + output[i] = 0xF5; + break; + case 0xF7: + output[i] = 0xF6; + break; + case 0xB8: + output[i] = 0xF7; + break; + case 0xB0: + output[i] = 0xF8; + break; + case 0xA8: + output[i] = 0xF9; + break; + case 0xB7: + output[i] = 0xFA; + break; + case 0xB9: + output[i] = 0xFB; + break; + case 0xB3: + output[i] = 0xFC; + break; + case 0xB2: + output[i] = 0xFD; + break; + case 0x25A0: + output[i] = 0xFE; + break; + case 0xA0: + output[i] = 0xFF; + break; + default: + if (lossy) + output[i] = '?'; + else + return false; + + break; + } + } else + output[i] = (unsigned char)c; + } + + return true; +} ADDED src/encodings/codepage_858.m Index: src/encodings/codepage_858.m ================================================================== --- src/encodings/codepage_858.m +++ src/encodings/codepage_858.m @@ -0,0 +1,454 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "OFString.h" + +const of_char16_t of_codepage_858[128] = { + 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, + 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5, + 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, + 0x00FF, 0x00D6, 0x00DC, 0x00F8, 0x00A3, 0x00D8, 0x00D7, 0x0192, + 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, + 0x00BF, 0x00AE, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00C1, 0x00C2, 0x00C0, + 0x00A9, 0x2563, 0x2551, 0x2557, 0x255D, 0x00A2, 0x00A5, 0x2510, + 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x00E3, 0x00C3, + 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x00A4, + 0x00F0, 0x00D0, 0x00CA, 0x00CB, 0x00C8, 0x20AC, 0x00CD, 0x00CE, + 0x00CF, 0x2518, 0x250C, 0x2588, 0x2584, 0x00A6, 0x00CC, 0x2580, + 0x00D3, 0x00DF, 0x00D4, 0x00D2, 0x00F5, 0x00D5, 0x00B5, 0x00FE, + 0x00DE, 0x00DA, 0x00DB, 0x00D9, 0x00FD, 0x00DD, 0x00AF, 0x00B4, + 0x00AD, 0x00B1, 0x2017, 0x00BE, 0x00B6, 0x00A7, 0x00F7, 0x00B8, + 0x00B0, 0x00A8, 0x00B7, 0x00B9, 0x00B3, 0x00B2, 0x25A0, 0x00A0 +}; + +bool +of_unicode_to_codepage_858(const of_unichar_t *input, unsigned char *output, + size_t length, bool lossy) +{ + for (size_t i = 0; i < length; i++) { + of_unichar_t c = input[i]; + + if OF_UNLIKELY (c > 0x7F) { + if OF_UNLIKELY (c > 0xFFFF) { + if (lossy) { + output[i] = '?'; + continue; + } else + return false; + } + + switch ((of_char16_t)c) { + case 0xC7: + output[i] = 0x80; + break; + case 0xFC: + output[i] = 0x81; + break; + case 0xE9: + output[i] = 0x82; + break; + case 0xE2: + output[i] = 0x83; + break; + case 0xE4: + output[i] = 0x84; + break; + case 0xE0: + output[i] = 0x85; + break; + case 0xE5: + output[i] = 0x86; + break; + case 0xE7: + output[i] = 0x87; + break; + case 0xEA: + output[i] = 0x88; + break; + case 0xEB: + output[i] = 0x89; + break; + case 0xE8: + output[i] = 0x8A; + break; + case 0xEF: + output[i] = 0x8B; + break; + case 0xEE: + output[i] = 0x8C; + break; + case 0xEC: + output[i] = 0x8D; + break; + case 0xC4: + output[i] = 0x8E; + break; + case 0xC5: + output[i] = 0x8F; + break; + case 0xC9: + output[i] = 0x90; + break; + case 0xE6: + output[i] = 0x91; + break; + case 0xC6: + output[i] = 0x92; + break; + case 0xF4: + output[i] = 0x93; + break; + case 0xF6: + output[i] = 0x94; + break; + case 0xF2: + output[i] = 0x95; + break; + case 0xFB: + output[i] = 0x96; + break; + case 0xF9: + output[i] = 0x97; + break; + case 0xFF: + output[i] = 0x98; + break; + case 0xD6: + output[i] = 0x99; + break; + case 0xDC: + output[i] = 0x9A; + break; + case 0xF8: + output[i] = 0x9B; + break; + case 0xA3: + output[i] = 0x9C; + break; + case 0xD8: + output[i] = 0x9D; + break; + case 0xD7: + output[i] = 0x9E; + break; + case 0x192: + output[i] = 0x9F; + break; + case 0xE1: + output[i] = 0xA0; + break; + case 0xED: + output[i] = 0xA1; + break; + case 0xF3: + output[i] = 0xA2; + break; + case 0xFA: + output[i] = 0xA3; + break; + case 0xF1: + output[i] = 0xA4; + break; + case 0xD1: + output[i] = 0xA5; + break; + case 0xAA: + output[i] = 0xA6; + break; + case 0xBA: + output[i] = 0xA7; + break; + case 0xBF: + output[i] = 0xA8; + break; + case 0xAE: + output[i] = 0xA9; + break; + case 0xAC: + output[i] = 0xAA; + break; + case 0xBD: + output[i] = 0xAB; + break; + case 0xBC: + output[i] = 0xAC; + break; + case 0xA1: + output[i] = 0xAD; + break; + case 0xAB: + output[i] = 0xAE; + break; + case 0xBB: + output[i] = 0xAF; + break; + case 0x2591: + output[i] = 0xB0; + break; + case 0x2592: + output[i] = 0xB1; + break; + case 0x2593: + output[i] = 0xB2; + break; + case 0x2502: + output[i] = 0xB3; + break; + case 0x2524: + output[i] = 0xB4; + break; + case 0xC1: + output[i] = 0xB5; + break; + case 0xC2: + output[i] = 0xB6; + break; + case 0xC0: + output[i] = 0xB7; + break; + case 0xA9: + output[i] = 0xB8; + break; + case 0x2563: + output[i] = 0xB9; + break; + case 0x2551: + output[i] = 0xBA; + break; + case 0x2557: + output[i] = 0xBB; + break; + case 0x255D: + output[i] = 0xBC; + break; + case 0xA2: + output[i] = 0xBD; + break; + case 0xA5: + output[i] = 0xBE; + break; + case 0x2510: + output[i] = 0xBF; + break; + case 0x2514: + output[i] = 0xC0; + break; + case 0x2534: + output[i] = 0xC1; + break; + case 0x252C: + output[i] = 0xC2; + break; + case 0x251C: + output[i] = 0xC3; + break; + case 0x2500: + output[i] = 0xC4; + break; + case 0x253C: + output[i] = 0xC5; + break; + case 0xE3: + output[i] = 0xC6; + break; + case 0xC3: + output[i] = 0xC7; + break; + case 0x255A: + output[i] = 0xC8; + break; + case 0x2554: + output[i] = 0xC9; + break; + case 0x2569: + output[i] = 0xCA; + break; + case 0x2566: + output[i] = 0xCB; + break; + case 0x2560: + output[i] = 0xCC; + break; + case 0x2550: + output[i] = 0xCD; + break; + case 0x256C: + output[i] = 0xCE; + break; + case 0xA4: + output[i] = 0xCF; + break; + case 0xF0: + output[i] = 0xD0; + break; + case 0xD0: + output[i] = 0xD1; + break; + case 0xCA: + output[i] = 0xD2; + break; + case 0xCB: + output[i] = 0xD3; + break; + case 0xC8: + output[i] = 0xD4; + break; + case 0x20AC: + output[i] = 0xD5; + break; + case 0xCD: + output[i] = 0xD6; + break; + case 0xCE: + output[i] = 0xD7; + break; + case 0xCF: + output[i] = 0xD8; + break; + case 0x2518: + output[i] = 0xD9; + break; + case 0x250C: + output[i] = 0xDA; + break; + case 0x2588: + output[i] = 0xDB; + break; + case 0x2584: + output[i] = 0xDC; + break; + case 0xA6: + output[i] = 0xDD; + break; + case 0xCC: + output[i] = 0xDE; + break; + case 0x2580: + output[i] = 0xDF; + break; + case 0xD3: + output[i] = 0xE0; + break; + case 0xDF: + output[i] = 0xE1; + break; + case 0xD4: + output[i] = 0xE2; + break; + case 0xD2: + output[i] = 0xE3; + break; + case 0xF5: + output[i] = 0xE4; + break; + case 0xD5: + output[i] = 0xE5; + break; + case 0xB5: + output[i] = 0xE6; + break; + case 0xFE: + output[i] = 0xE7; + break; + case 0xDE: + output[i] = 0xE8; + break; + case 0xDA: + output[i] = 0xE9; + break; + case 0xDB: + output[i] = 0xEA; + break; + case 0xD9: + output[i] = 0xEB; + break; + case 0xFD: + output[i] = 0xEC; + break; + case 0xDD: + output[i] = 0xED; + break; + case 0xAF: + output[i] = 0xEE; + break; + case 0xB4: + output[i] = 0xEF; + break; + case 0xAD: + output[i] = 0xF0; + break; + case 0xB1: + output[i] = 0xF1; + break; + case 0x2017: + output[i] = 0xF2; + break; + case 0xBE: + output[i] = 0xF3; + break; + case 0xB6: + output[i] = 0xF4; + break; + case 0xA7: + output[i] = 0xF5; + break; + case 0xF7: + output[i] = 0xF6; + break; + case 0xB8: + output[i] = 0xF7; + break; + case 0xB0: + output[i] = 0xF8; + break; + case 0xA8: + output[i] = 0xF9; + break; + case 0xB7: + output[i] = 0xFA; + break; + case 0xB9: + output[i] = 0xFB; + break; + case 0xB3: + output[i] = 0xFC; + break; + case 0xB2: + output[i] = 0xFD; + break; + case 0x25A0: + output[i] = 0xFE; + break; + case 0xA0: + output[i] = 0xFF; + break; + default: + if (lossy) + output[i] = '?'; + else + return false; + + break; + } + } else + output[i] = (unsigned char)c; + } + + return true; +} ADDED src/encodings/iso_8859_15.m Index: src/encodings/iso_8859_15.m ================================================================== --- src/encodings/iso_8859_15.m +++ src/encodings/iso_8859_15.m @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "OFString.h" + +const of_char16_t of_iso_8859_15[128] = { + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, + 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, + 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF, + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF +}; + +bool +of_unicode_to_iso_8859_15(const of_unichar_t *input, unsigned char *output, + size_t length, bool lossy) +{ + for (size_t i = 0; i < length; i++) { + of_unichar_t c = input[i]; + + if OF_UNLIKELY (c > 0xFF) { + if OF_UNLIKELY (c > 0xFFFF) { + if (lossy) { + output[i] = '?'; + continue; + } else + return false; + } + + switch ((of_char16_t)c) { + case 0x20AC: + output[i] = 0xA4; + break; + case 0x160: + output[i] = 0xA6; + break; + case 0x161: + output[i] = 0xA8; + break; + case 0x17D: + output[i] = 0xB4; + break; + case 0x17E: + output[i] = 0xB8; + break; + case 0x152: + output[i] = 0xBC; + break; + case 0x153: + output[i] = 0xBD; + break; + case 0x178: + output[i] = 0xBE; + break; + default: + if (lossy) + output[i] = '?'; + else + return false; + + break; + } + } else { + switch (c) { + case 0xA4: + case 0xA6: + case 0xA8: + case 0xB4: + case 0xB8: + case 0xBC: + case 0xBD: + case 0xBE: + if (lossy) + output[i] = '?'; + else + return false; + + break; + default: + output[i] = (unsigned char)c; + break; + } + } + } + + return true; +} ADDED src/encodings/iso_8859_2.m Index: src/encodings/iso_8859_2.m ================================================================== --- src/encodings/iso_8859_2.m +++ src/encodings/iso_8859_2.m @@ -0,0 +1,362 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "OFString.h" + +const of_char16_t of_iso_8859_2[128] = { + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, + 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, + 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, + 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, + 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, + 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, + 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, + 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, + 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, + 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, + 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, + 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, + 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 +}; + +bool +of_unicode_to_iso_8859_2(const of_unichar_t *input, unsigned char *output, + size_t length, bool lossy) +{ + for (size_t i = 0; i < length; i++) { + of_unichar_t c = input[i]; + + if OF_UNLIKELY (c > 0x7F) { + if OF_UNLIKELY (c > 0xFFFF) { + if (lossy) { + output[i] = '?'; + continue; + } else + return false; + } + + if OF_UNLIKELY (c >= 0x80 && c <= 0x9F) + output[i] = c; + else { + switch ((of_char16_t)c) { + case 0xA0: + output[i] = 0xA0; + break; + case 0x104: + output[i] = 0xA1; + break; + case 0x2D8: + output[i] = 0xA2; + break; + case 0x141: + output[i] = 0xA3; + break; + case 0xA4: + output[i] = 0xA4; + break; + case 0x13D: + output[i] = 0xA5; + break; + case 0x15A: + output[i] = 0xA6; + break; + case 0xA7: + output[i] = 0xA7; + break; + case 0xA8: + output[i] = 0xA8; + break; + case 0x160: + output[i] = 0xA9; + break; + case 0x15E: + output[i] = 0xAA; + break; + case 0x164: + output[i] = 0xAB; + break; + case 0x179: + output[i] = 0xAC; + break; + case 0xAD: + output[i] = 0xAD; + break; + case 0x17D: + output[i] = 0xAE; + break; + case 0x17B: + output[i] = 0xAF; + break; + case 0xB0: + output[i] = 0xB0; + break; + case 0x105: + output[i] = 0xB1; + break; + case 0x2DB: + output[i] = 0xB2; + break; + case 0x142: + output[i] = 0xB3; + break; + case 0xB4: + output[i] = 0xB4; + break; + case 0x13E: + output[i] = 0xB5; + break; + case 0x15B: + output[i] = 0xB6; + break; + case 0x2C7: + output[i] = 0xB7; + break; + case 0xB8: + output[i] = 0xB8; + break; + case 0x161: + output[i] = 0xB9; + break; + case 0x15F: + output[i] = 0xBA; + break; + case 0x165: + output[i] = 0xBB; + break; + case 0x17A: + output[i] = 0xBC; + break; + case 0x2DD: + output[i] = 0xBD; + break; + case 0x17E: + output[i] = 0xBE; + break; + case 0x17C: + output[i] = 0xBF; + break; + case 0x154: + output[i] = 0xC0; + break; + case 0xC1: + output[i] = 0xC1; + break; + case 0xC2: + output[i] = 0xC2; + break; + case 0x102: + output[i] = 0xC3; + break; + case 0xC4: + output[i] = 0xC4; + break; + case 0x139: + output[i] = 0xC5; + break; + case 0x106: + output[i] = 0xC6; + break; + case 0xC7: + output[i] = 0xC7; + break; + case 0x10C: + output[i] = 0xC8; + break; + case 0xC9: + output[i] = 0xC9; + break; + case 0x118: + output[i] = 0xCA; + break; + case 0xCB: + output[i] = 0xCB; + break; + case 0x11A: + output[i] = 0xCC; + break; + case 0xCD: + output[i] = 0xCD; + break; + case 0xCE: + output[i] = 0xCE; + break; + case 0x10E: + output[i] = 0xCF; + break; + case 0x110: + output[i] = 0xD0; + break; + case 0x143: + output[i] = 0xD1; + break; + case 0x147: + output[i] = 0xD2; + break; + case 0xD3: + output[i] = 0xD3; + break; + case 0xD4: + output[i] = 0xD4; + break; + case 0x150: + output[i] = 0xD5; + break; + case 0xD6: + output[i] = 0xD6; + break; + case 0xD7: + output[i] = 0xD7; + break; + case 0x158: + output[i] = 0xD8; + break; + case 0x16E: + output[i] = 0xD9; + break; + case 0xDA: + output[i] = 0xDA; + break; + case 0x170: + output[i] = 0xDB; + break; + case 0xDC: + output[i] = 0xDC; + break; + case 0xDD: + output[i] = 0xDD; + break; + case 0x162: + output[i] = 0xDE; + break; + case 0xDF: + output[i] = 0xDF; + break; + case 0x155: + output[i] = 0xE0; + break; + case 0xE1: + output[i] = 0xE1; + break; + case 0xE2: + output[i] = 0xE2; + break; + case 0x103: + output[i] = 0xE3; + break; + case 0xE4: + output[i] = 0xE4; + break; + case 0x13A: + output[i] = 0xE5; + break; + case 0x107: + output[i] = 0xE6; + break; + case 0xE7: + output[i] = 0xE7; + break; + case 0x10D: + output[i] = 0xE8; + break; + case 0xE9: + output[i] = 0xE9; + break; + case 0x119: + output[i] = 0xEA; + break; + case 0xEB: + output[i] = 0xEB; + break; + case 0x11B: + output[i] = 0xEC; + break; + case 0xED: + output[i] = 0xED; + break; + case 0xEE: + output[i] = 0xEE; + break; + case 0x10F: + output[i] = 0xEF; + break; + case 0x111: + output[i] = 0xF0; + break; + case 0x144: + output[i] = 0xF1; + break; + case 0x148: + output[i] = 0xF2; + break; + case 0xF3: + output[i] = 0xF3; + break; + case 0xF4: + output[i] = 0xF4; + break; + case 0x151: + output[i] = 0xF5; + break; + case 0xF6: + output[i] = 0xF6; + break; + case 0xF7: + output[i] = 0xF7; + break; + case 0x159: + output[i] = 0xF8; + break; + case 0x16F: + output[i] = 0xF9; + break; + case 0xFA: + output[i] = 0xFA; + break; + case 0x171: + output[i] = 0xFB; + break; + case 0xFC: + output[i] = 0xFC; + break; + case 0xFD: + output[i] = 0xFD; + break; + case 0x163: + output[i] = 0xFE; + break; + case 0x2D9: + output[i] = 0xFF; + break; + default: + if (lossy) + output[i] = '?'; + else + return false; + + break; + } + } + } else + output[i] = (unsigned char)c; + } + + return true; +} ADDED src/encodings/mac_roman.m Index: src/encodings/mac_roman.m ================================================================== --- src/encodings/mac_roman.m +++ src/encodings/mac_roman.m @@ -0,0 +1,454 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "OFString.h" + +const of_char16_t of_mac_roman[128] = { + 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 +}; + +bool +of_unicode_to_mac_roman(const of_unichar_t *input, unsigned char *output, + size_t length, bool lossy) +{ + for (size_t i = 0; i < length; i++) { + of_unichar_t c = input[i]; + + if OF_UNLIKELY (c > 0x7F) { + if OF_UNLIKELY (c > 0xFFFF) { + if (lossy) { + output[i] = '?'; + continue; + } else + return false; + } + + switch ((of_char16_t)c) { + case 0xC4: + output[i] = 0x80; + break; + case 0xC5: + output[i] = 0x81; + break; + case 0xC7: + output[i] = 0x82; + break; + case 0xC9: + output[i] = 0x83; + break; + case 0xD1: + output[i] = 0x84; + break; + case 0xD6: + output[i] = 0x85; + break; + case 0xDC: + output[i] = 0x86; + break; + case 0xE1: + output[i] = 0x87; + break; + case 0xE0: + output[i] = 0x88; + break; + case 0xE2: + output[i] = 0x89; + break; + case 0xE4: + output[i] = 0x8A; + break; + case 0xE3: + output[i] = 0x8B; + break; + case 0xE5: + output[i] = 0x8C; + break; + case 0xE7: + output[i] = 0x8D; + break; + case 0xE9: + output[i] = 0x8E; + break; + case 0xE8: + output[i] = 0x8F; + break; + case 0xEA: + output[i] = 0x90; + break; + case 0xEB: + output[i] = 0x91; + break; + case 0xED: + output[i] = 0x92; + break; + case 0xEC: + output[i] = 0x93; + break; + case 0xEE: + output[i] = 0x94; + break; + case 0xEF: + output[i] = 0x95; + break; + case 0xF1: + output[i] = 0x96; + break; + case 0xF3: + output[i] = 0x97; + break; + case 0xF2: + output[i] = 0x98; + break; + case 0xF4: + output[i] = 0x99; + break; + case 0xF6: + output[i] = 0x9A; + break; + case 0xF5: + output[i] = 0x9B; + break; + case 0xFA: + output[i] = 0x9C; + break; + case 0xF9: + output[i] = 0x9D; + break; + case 0xFB: + output[i] = 0x9E; + break; + case 0xFC: + output[i] = 0x9F; + break; + case 0x2020: + output[i] = 0xA0; + break; + case 0xB0: + output[i] = 0xA1; + break; + case 0xA2: + output[i] = 0xA2; + break; + case 0xA3: + output[i] = 0xA3; + break; + case 0xA7: + output[i] = 0xA4; + break; + case 0x2022: + output[i] = 0xA5; + break; + case 0xB6: + output[i] = 0xA6; + break; + case 0xDF: + output[i] = 0xA7; + break; + case 0xAE: + output[i] = 0xA8; + break; + case 0xA9: + output[i] = 0xA9; + break; + case 0x2122: + output[i] = 0xAA; + break; + case 0xB4: + output[i] = 0xAB; + break; + case 0xA8: + output[i] = 0xAC; + break; + case 0x2260: + output[i] = 0xAD; + break; + case 0xC6: + output[i] = 0xAE; + break; + case 0xD8: + output[i] = 0xAF; + break; + case 0x221E: + output[i] = 0xB0; + break; + case 0xB1: + output[i] = 0xB1; + break; + case 0x2264: + output[i] = 0xB2; + break; + case 0x2265: + output[i] = 0xB3; + break; + case 0xA5: + output[i] = 0xB4; + break; + case 0xB5: + output[i] = 0xB5; + break; + case 0x2202: + output[i] = 0xB6; + break; + case 0x2211: + output[i] = 0xB7; + break; + case 0x220F: + output[i] = 0xB8; + break; + case 0x3C0: + output[i] = 0xB9; + break; + case 0x222B: + output[i] = 0xBA; + break; + case 0xAA: + output[i] = 0xBB; + break; + case 0xBA: + output[i] = 0xBC; + break; + case 0x3A9: + output[i] = 0xBD; + break; + case 0xE6: + output[i] = 0xBE; + break; + case 0xF8: + output[i] = 0xBF; + break; + case 0xBF: + output[i] = 0xC0; + break; + case 0xA1: + output[i] = 0xC1; + break; + case 0xAC: + output[i] = 0xC2; + break; + case 0x221A: + output[i] = 0xC3; + break; + case 0x192: + output[i] = 0xC4; + break; + case 0x2248: + output[i] = 0xC5; + break; + case 0x2206: + output[i] = 0xC6; + break; + case 0xAB: + output[i] = 0xC7; + break; + case 0xBB: + output[i] = 0xC8; + break; + case 0x2026: + output[i] = 0xC9; + break; + case 0xA0: + output[i] = 0xCA; + break; + case 0xC0: + output[i] = 0xCB; + break; + case 0xC3: + output[i] = 0xCC; + break; + case 0xD5: + output[i] = 0xCD; + break; + case 0x152: + output[i] = 0xCE; + break; + case 0x153: + output[i] = 0xCF; + break; + case 0x2013: + output[i] = 0xD0; + break; + case 0x2014: + output[i] = 0xD1; + break; + case 0x201C: + output[i] = 0xD2; + break; + case 0x201D: + output[i] = 0xD3; + break; + case 0x2018: + output[i] = 0xD4; + break; + case 0x2019: + output[i] = 0xD5; + break; + case 0xF7: + output[i] = 0xD6; + break; + case 0x25CA: + output[i] = 0xD7; + break; + case 0xFF: + output[i] = 0xD8; + break; + case 0x178: + output[i] = 0xD9; + break; + case 0x2044: + output[i] = 0xDA; + break; + case 0x20AC: + output[i] = 0xDB; + break; + case 0x2039: + output[i] = 0xDC; + break; + case 0x203A: + output[i] = 0xDD; + break; + case 0xFB01: + output[i] = 0xDE; + break; + case 0xFB02: + output[i] = 0xDF; + break; + case 0x2021: + output[i] = 0xE0; + break; + case 0xB7: + output[i] = 0xE1; + break; + case 0x201A: + output[i] = 0xE2; + break; + case 0x201E: + output[i] = 0xE3; + break; + case 0x2030: + output[i] = 0xE4; + break; + case 0xC2: + output[i] = 0xE5; + break; + case 0xCA: + output[i] = 0xE6; + break; + case 0xC1: + output[i] = 0xE7; + break; + case 0xCB: + output[i] = 0xE8; + break; + case 0xC8: + output[i] = 0xE9; + break; + case 0xCD: + output[i] = 0xEA; + break; + case 0xCE: + output[i] = 0xEB; + break; + case 0xCF: + output[i] = 0xEC; + break; + case 0xCC: + output[i] = 0xED; + break; + case 0xD3: + output[i] = 0xEE; + break; + case 0xD4: + output[i] = 0xEF; + break; + case 0xF8FF: + output[i] = 0xF0; + break; + case 0xD2: + output[i] = 0xF1; + break; + case 0xDA: + output[i] = 0xF2; + break; + case 0xDB: + output[i] = 0xF3; + break; + case 0xD9: + output[i] = 0xF4; + break; + case 0x131: + output[i] = 0xF5; + break; + case 0x2C6: + output[i] = 0xF6; + break; + case 0x2DC: + output[i] = 0xF7; + break; + case 0xAF: + output[i] = 0xF8; + break; + case 0x2D8: + output[i] = 0xF9; + break; + case 0x2D9: + output[i] = 0xFA; + break; + case 0x2DA: + output[i] = 0xFB; + break; + case 0xB8: + output[i] = 0xFC; + break; + case 0x2DD: + output[i] = 0xFD; + break; + case 0x2DB: + output[i] = 0xFE; + break; + case 0x2C7: + output[i] = 0xFF; + break; + default: + if (lossy) + output[i] = '?'; + else + return false; + + break; + } + } else + output[i] = (unsigned char)c; + } + + return true; +} ADDED src/encodings/unicode.m Index: src/encodings/unicode.m ================================================================== --- src/encodings/unicode.m +++ src/encodings/unicode.m @@ -0,0 +1,2386 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "OFString.h" + +static const of_unichar_t emptyPage[0x100] = { 0 }; + +static const of_unichar_t uppercasePage0[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 924, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 0, + 216, 217, 218, 219, 220, 221, 222, 376, +}; + +static const of_unichar_t uppercasePage1[0x100] = { + 0, 256, 0, 258, 0, 260, 0, 262, + 0, 264, 0, 266, 0, 268, 0, 270, + 0, 272, 0, 274, 0, 276, 0, 278, + 0, 280, 0, 282, 0, 284, 0, 286, + 0, 288, 0, 290, 0, 292, 0, 294, + 0, 296, 0, 298, 0, 300, 0, 302, + 0, 73, 0, 306, 0, 308, 0, 310, + 0, 0, 313, 0, 315, 0, 317, 0, + 319, 0, 321, 0, 323, 0, 325, 0, + 327, 0, 0, 330, 0, 332, 0, 334, + 0, 336, 0, 338, 0, 340, 0, 342, + 0, 344, 0, 346, 0, 348, 0, 350, + 0, 352, 0, 354, 0, 356, 0, 358, + 0, 360, 0, 362, 0, 364, 0, 366, + 0, 368, 0, 370, 0, 372, 0, 374, + 0, 0, 377, 0, 379, 0, 381, 83, + 579, 0, 0, 386, 0, 388, 0, 0, + 391, 0, 0, 0, 395, 0, 0, 0, + 0, 0, 401, 0, 0, 502, 0, 0, + 0, 408, 573, 0, 0, 0, 544, 0, + 0, 416, 0, 418, 0, 420, 0, 0, + 423, 0, 0, 0, 0, 428, 0, 0, + 431, 0, 0, 0, 435, 0, 437, 0, + 0, 440, 0, 0, 0, 444, 0, 503, + 0, 0, 0, 0, 0, 452, 452, 0, + 455, 455, 0, 458, 458, 0, 461, 0, + 463, 0, 465, 0, 467, 0, 469, 0, + 471, 0, 473, 0, 475, 398, 0, 478, + 0, 480, 0, 482, 0, 484, 0, 486, + 0, 488, 0, 490, 0, 492, 0, 494, + 0, 0, 497, 497, 0, 500, 0, 0, + 0, 504, 0, 506, 0, 508, 0, 510, +}; + +static const of_unichar_t uppercasePage2[0x100] = { + 0, 512, 0, 514, 0, 516, 0, 518, + 0, 520, 0, 522, 0, 524, 0, 526, + 0, 528, 0, 530, 0, 532, 0, 534, + 0, 536, 0, 538, 0, 540, 0, 542, + 0, 0, 0, 546, 0, 548, 0, 550, + 0, 552, 0, 554, 0, 556, 0, 558, + 0, 560, 0, 562, 0, 0, 0, 0, + 0, 0, 0, 0, 571, 0, 0, 11390, + 11391, 0, 577, 0, 0, 0, 0, 582, + 0, 584, 0, 586, 0, 588, 0, 590, + 11375, 11373, 11376, 385, 390, 0, 393, 394, + 0, 399, 0, 400, 42923, 0, 0, 0, + 403, 42924, 0, 404, 0, 42893, 42922, 0, + 407, 406, 42926, 11362, 42925, 0, 0, 412, + 0, 11374, 413, 0, 0, 415, 0, 0, + 0, 0, 0, 0, 0, 11364, 0, 0, + 422, 0, 0, 425, 0, 0, 0, 42929, + 430, 580, 433, 434, 581, 0, 0, 0, + 0, 0, 439, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42930, 42928, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage3[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 921, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 880, 0, 882, 0, 0, 0, 886, + 0, 0, 0, 1021, 1022, 1023, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 902, 904, 905, 906, + 0, 913, 914, 915, 916, 917, 918, 919, + 920, 921, 922, 923, 924, 925, 926, 927, + 928, 929, 931, 931, 932, 933, 934, 935, + 936, 937, 938, 939, 908, 910, 911, 0, + 914, 920, 0, 0, 0, 934, 928, 975, + 0, 984, 0, 986, 0, 988, 0, 990, + 0, 992, 0, 994, 0, 996, 0, 998, + 0, 1000, 0, 1002, 0, 1004, 0, 1006, + 922, 929, 1017, 895, 0, 917, 0, 0, + 1015, 0, 0, 1018, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage4[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, + 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, + 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, + 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, + 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, + 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, + 0, 1120, 0, 1122, 0, 1124, 0, 1126, + 0, 1128, 0, 1130, 0, 1132, 0, 1134, + 0, 1136, 0, 1138, 0, 1140, 0, 1142, + 0, 1144, 0, 1146, 0, 1148, 0, 1150, + 0, 1152, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1162, 0, 1164, 0, 1166, + 0, 1168, 0, 1170, 0, 1172, 0, 1174, + 0, 1176, 0, 1178, 0, 1180, 0, 1182, + 0, 1184, 0, 1186, 0, 1188, 0, 1190, + 0, 1192, 0, 1194, 0, 1196, 0, 1198, + 0, 1200, 0, 1202, 0, 1204, 0, 1206, + 0, 1208, 0, 1210, 0, 1212, 0, 1214, + 0, 0, 1217, 0, 1219, 0, 1221, 0, + 1223, 0, 1225, 0, 1227, 0, 1229, 1216, + 0, 1232, 0, 1234, 0, 1236, 0, 1238, + 0, 1240, 0, 1242, 0, 1244, 0, 1246, + 0, 1248, 0, 1250, 0, 1252, 0, 1254, + 0, 1256, 0, 1258, 0, 1260, 0, 1262, + 0, 1264, 0, 1266, 0, 1268, 0, 1270, + 0, 1272, 0, 1274, 0, 1276, 0, 1278, +}; + +static const of_unichar_t uppercasePage5[0x100] = { + 0, 1280, 0, 1282, 0, 1284, 0, 1286, + 0, 1288, 0, 1290, 0, 1292, 0, 1294, + 0, 1296, 0, 1298, 0, 1300, 0, 1302, + 0, 1304, 0, 1306, 0, 1308, 0, 1310, + 0, 1312, 0, 1314, 0, 1316, 0, 1318, + 0, 1320, 0, 1322, 0, 1324, 0, 1326, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1329, 1330, 1331, 1332, 1333, 1334, 1335, + 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, + 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, + 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, + 1360, 1361, 1362, 1363, 1364, 1365, 1366, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage19[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 5104, 5105, 5106, 5107, 5108, 5109, 0, 0, +}; + +static const of_unichar_t uppercasePage28[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1042, 1044, 1054, 1057, 1058, 1058, 1066, 1122, + 42570, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage29[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 42877, 0, 0, 0, 11363, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage30[0x100] = { + 0, 7680, 0, 7682, 0, 7684, 0, 7686, + 0, 7688, 0, 7690, 0, 7692, 0, 7694, + 0, 7696, 0, 7698, 0, 7700, 0, 7702, + 0, 7704, 0, 7706, 0, 7708, 0, 7710, + 0, 7712, 0, 7714, 0, 7716, 0, 7718, + 0, 7720, 0, 7722, 0, 7724, 0, 7726, + 0, 7728, 0, 7730, 0, 7732, 0, 7734, + 0, 7736, 0, 7738, 0, 7740, 0, 7742, + 0, 7744, 0, 7746, 0, 7748, 0, 7750, + 0, 7752, 0, 7754, 0, 7756, 0, 7758, + 0, 7760, 0, 7762, 0, 7764, 0, 7766, + 0, 7768, 0, 7770, 0, 7772, 0, 7774, + 0, 7776, 0, 7778, 0, 7780, 0, 7782, + 0, 7784, 0, 7786, 0, 7788, 0, 7790, + 0, 7792, 0, 7794, 0, 7796, 0, 7798, + 0, 7800, 0, 7802, 0, 7804, 0, 7806, + 0, 7808, 0, 7810, 0, 7812, 0, 7814, + 0, 7816, 0, 7818, 0, 7820, 0, 7822, + 0, 7824, 0, 7826, 0, 7828, 0, 0, + 0, 0, 0, 7776, 0, 0, 0, 0, + 0, 7840, 0, 7842, 0, 7844, 0, 7846, + 0, 7848, 0, 7850, 0, 7852, 0, 7854, + 0, 7856, 0, 7858, 0, 7860, 0, 7862, + 0, 7864, 0, 7866, 0, 7868, 0, 7870, + 0, 7872, 0, 7874, 0, 7876, 0, 7878, + 0, 7880, 0, 7882, 0, 7884, 0, 7886, + 0, 7888, 0, 7890, 0, 7892, 0, 7894, + 0, 7896, 0, 7898, 0, 7900, 0, 7902, + 0, 7904, 0, 7906, 0, 7908, 0, 7910, + 0, 7912, 0, 7914, 0, 7916, 0, 7918, + 0, 7920, 0, 7922, 0, 7924, 0, 7926, + 0, 7928, 0, 7930, 0, 7932, 0, 7934, +}; + +static const of_unichar_t uppercasePage31[0x100] = { + 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, + 0, 0, 0, 0, 0, 0, 0, 0, + 7960, 7961, 7962, 7963, 7964, 7965, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 7976, 7977, 7978, 7979, 7980, 7981, 7982, 7983, + 0, 0, 0, 0, 0, 0, 0, 0, + 7992, 7993, 7994, 7995, 7996, 7997, 7998, 7999, + 0, 0, 0, 0, 0, 0, 0, 0, + 8008, 8009, 8010, 8011, 8012, 8013, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8025, 0, 8027, 0, 8029, 0, 8031, + 0, 0, 0, 0, 0, 0, 0, 0, + 8040, 8041, 8042, 8043, 8044, 8045, 8046, 8047, + 0, 0, 0, 0, 0, 0, 0, 0, + 8122, 8123, 8136, 8137, 8138, 8139, 8154, 8155, + 8184, 8185, 8170, 8171, 8186, 8187, 0, 0, + 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, + 0, 0, 0, 0, 0, 0, 0, 0, + 8088, 8089, 8090, 8091, 8092, 8093, 8094, 8095, + 0, 0, 0, 0, 0, 0, 0, 0, + 8104, 8105, 8106, 8107, 8108, 8109, 8110, 8111, + 0, 0, 0, 0, 0, 0, 0, 0, + 8120, 8121, 0, 8124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 921, 0, + 0, 0, 0, 8140, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8152, 8153, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8168, 8169, 0, 0, 0, 8172, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8188, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage33[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 8498, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, + 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, + 0, 0, 0, 0, 8579, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage36[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, + 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, + 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421, + 9422, 9423, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage44[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 11264, 11265, 11266, 11267, 11268, 11269, 11270, 11271, + 11272, 11273, 11274, 11275, 11276, 11277, 11278, 11279, + 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, + 11288, 11289, 11290, 11291, 11292, 11293, 11294, 11295, + 11296, 11297, 11298, 11299, 11300, 11301, 11302, 11303, + 11304, 11305, 11306, 11307, 11308, 11309, 11310, 0, + 0, 11360, 0, 0, 0, 570, 574, 0, + 11367, 0, 11369, 0, 11371, 0, 0, 0, + 0, 0, 0, 11378, 0, 0, 11381, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 11392, 0, 11394, 0, 11396, 0, 11398, + 0, 11400, 0, 11402, 0, 11404, 0, 11406, + 0, 11408, 0, 11410, 0, 11412, 0, 11414, + 0, 11416, 0, 11418, 0, 11420, 0, 11422, + 0, 11424, 0, 11426, 0, 11428, 0, 11430, + 0, 11432, 0, 11434, 0, 11436, 0, 11438, + 0, 11440, 0, 11442, 0, 11444, 0, 11446, + 0, 11448, 0, 11450, 0, 11452, 0, 11454, + 0, 11456, 0, 11458, 0, 11460, 0, 11462, + 0, 11464, 0, 11466, 0, 11468, 0, 11470, + 0, 11472, 0, 11474, 0, 11476, 0, 11478, + 0, 11480, 0, 11482, 0, 11484, 0, 11486, + 0, 11488, 0, 11490, 0, 0, 0, 0, + 0, 0, 0, 0, 11499, 0, 11501, 0, + 0, 0, 0, 11506, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage45[0x100] = { + 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, + 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, + 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, + 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, + 4288, 4289, 4290, 4291, 4292, 4293, 0, 4295, + 0, 0, 0, 0, 0, 4301, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage166[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 42560, 0, 42562, 0, 42564, 0, 42566, + 0, 42568, 0, 42570, 0, 42572, 0, 42574, + 0, 42576, 0, 42578, 0, 42580, 0, 42582, + 0, 42584, 0, 42586, 0, 42588, 0, 42590, + 0, 42592, 0, 42594, 0, 42596, 0, 42598, + 0, 42600, 0, 42602, 0, 42604, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 42624, 0, 42626, 0, 42628, 0, 42630, + 0, 42632, 0, 42634, 0, 42636, 0, 42638, + 0, 42640, 0, 42642, 0, 42644, 0, 42646, + 0, 42648, 0, 42650, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage167[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 42786, 0, 42788, 0, 42790, + 0, 42792, 0, 42794, 0, 42796, 0, 42798, + 0, 0, 0, 42802, 0, 42804, 0, 42806, + 0, 42808, 0, 42810, 0, 42812, 0, 42814, + 0, 42816, 0, 42818, 0, 42820, 0, 42822, + 0, 42824, 0, 42826, 0, 42828, 0, 42830, + 0, 42832, 0, 42834, 0, 42836, 0, 42838, + 0, 42840, 0, 42842, 0, 42844, 0, 42846, + 0, 42848, 0, 42850, 0, 42852, 0, 42854, + 0, 42856, 0, 42858, 0, 42860, 0, 42862, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 42873, 0, 42875, 0, 0, 42878, + 0, 42880, 0, 42882, 0, 42884, 0, 42886, + 0, 0, 0, 0, 42891, 0, 0, 0, + 0, 42896, 0, 42898, 0, 0, 0, 42902, + 0, 42904, 0, 42906, 0, 42908, 0, 42910, + 0, 42912, 0, 42914, 0, 42916, 0, 42918, + 0, 42920, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42932, 0, 42934, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage171[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 42931, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, + 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, + 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, + 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, + 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, + 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, + 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, + 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, + 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, + 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage255[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 65313, 65314, 65315, 65316, 65317, 65318, 65319, + 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, + 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, + 65336, 65337, 65338, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage260[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 66560, 66561, 66562, 66563, 66564, 66565, 66566, 66567, + 66568, 66569, 66570, 66571, 66572, 66573, 66574, 66575, + 66576, 66577, 66578, 66579, 66580, 66581, 66582, 66583, + 66584, 66585, 66586, 66587, 66588, 66589, 66590, 66591, + 66592, 66593, 66594, 66595, 66596, 66597, 66598, 66599, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 66736, 66737, 66738, 66739, 66740, 66741, 66742, 66743, + 66744, 66745, 66746, 66747, 66748, 66749, 66750, 66751, + 66752, 66753, 66754, 66755, 66756, 66757, 66758, 66759, + 66760, 66761, 66762, 66763, 66764, 66765, 66766, 66767, + 66768, 66769, 66770, 66771, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage268[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 68736, 68737, 68738, 68739, 68740, 68741, 68742, 68743, + 68744, 68745, 68746, 68747, 68748, 68749, 68750, 68751, + 68752, 68753, 68754, 68755, 68756, 68757, 68758, 68759, + 68760, 68761, 68762, 68763, 68764, 68765, 68766, 68767, + 68768, 68769, 68770, 68771, 68772, 68773, 68774, 68775, + 68776, 68777, 68778, 68779, 68780, 68781, 68782, 68783, + 68784, 68785, 68786, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage280[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 71840, 71841, 71842, 71843, 71844, 71845, 71846, 71847, + 71848, 71849, 71850, 71851, 71852, 71853, 71854, 71855, + 71856, 71857, 71858, 71859, 71860, 71861, 71862, 71863, + 71864, 71865, 71866, 71867, 71868, 71869, 71870, 71871, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t uppercasePage489[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 125184, 125185, 125186, 125187, 125188, 125189, + 125190, 125191, 125192, 125193, 125194, 125195, 125196, 125197, + 125198, 125199, 125200, 125201, 125202, 125203, 125204, 125205, + 125206, 125207, 125208, 125209, 125210, 125211, 125212, 125213, + 125214, 125215, 125216, 125217, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage0[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 0, + 248, 249, 250, 251, 252, 253, 254, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage1[0x100] = { + 257, 0, 259, 0, 261, 0, 263, 0, + 265, 0, 267, 0, 269, 0, 271, 0, + 273, 0, 275, 0, 277, 0, 279, 0, + 281, 0, 283, 0, 285, 0, 287, 0, + 289, 0, 291, 0, 293, 0, 295, 0, + 297, 0, 299, 0, 301, 0, 303, 0, + 105, 0, 307, 0, 309, 0, 311, 0, + 0, 314, 0, 316, 0, 318, 0, 320, + 0, 322, 0, 324, 0, 326, 0, 328, + 0, 0, 331, 0, 333, 0, 335, 0, + 337, 0, 339, 0, 341, 0, 343, 0, + 345, 0, 347, 0, 349, 0, 351, 0, + 353, 0, 355, 0, 357, 0, 359, 0, + 361, 0, 363, 0, 365, 0, 367, 0, + 369, 0, 371, 0, 373, 0, 375, 0, + 255, 378, 0, 380, 0, 382, 0, 0, + 0, 595, 387, 0, 389, 0, 596, 392, + 0, 598, 599, 396, 0, 0, 477, 601, + 603, 402, 0, 608, 611, 0, 617, 616, + 409, 0, 0, 0, 623, 626, 0, 629, + 417, 0, 419, 0, 421, 0, 640, 424, + 0, 643, 0, 0, 429, 0, 648, 432, + 0, 650, 651, 436, 0, 438, 0, 658, + 441, 0, 0, 0, 445, 0, 0, 0, + 0, 0, 0, 0, 454, 454, 0, 457, + 457, 0, 460, 460, 0, 462, 0, 464, + 0, 466, 0, 468, 0, 470, 0, 472, + 0, 474, 0, 476, 0, 0, 479, 0, + 481, 0, 483, 0, 485, 0, 487, 0, + 489, 0, 491, 0, 493, 0, 495, 0, + 0, 499, 499, 0, 501, 0, 405, 447, + 505, 0, 507, 0, 509, 0, 511, 0, +}; + +static const of_unichar_t lowercasePage2[0x100] = { + 513, 0, 515, 0, 517, 0, 519, 0, + 521, 0, 523, 0, 525, 0, 527, 0, + 529, 0, 531, 0, 533, 0, 535, 0, + 537, 0, 539, 0, 541, 0, 543, 0, + 414, 0, 547, 0, 549, 0, 551, 0, + 553, 0, 555, 0, 557, 0, 559, 0, + 561, 0, 563, 0, 0, 0, 0, 0, + 0, 0, 11365, 572, 0, 410, 11366, 0, + 0, 578, 0, 384, 649, 652, 583, 0, + 585, 0, 587, 0, 589, 0, 591, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage3[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 881, 0, 883, 0, 0, 0, 887, 0, + 0, 0, 0, 0, 0, 0, 0, 1011, + 0, 0, 0, 0, 0, 0, 940, 0, + 941, 942, 943, 0, 972, 0, 973, 974, + 0, 945, 946, 947, 948, 949, 950, 951, + 952, 953, 954, 955, 956, 957, 958, 959, + 960, 961, 0, 963, 964, 965, 966, 967, + 968, 969, 970, 971, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 983, + 0, 0, 0, 0, 0, 0, 0, 0, + 985, 0, 987, 0, 989, 0, 991, 0, + 993, 0, 995, 0, 997, 0, 999, 0, + 1001, 0, 1003, 0, 1005, 0, 1007, 0, + 0, 0, 0, 0, 952, 0, 0, 1016, + 0, 1010, 1019, 0, 0, 891, 892, 893, +}; + +static const of_unichar_t lowercasePage4[0x100] = { + 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, + 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, + 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, + 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, + 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, + 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1121, 0, 1123, 0, 1125, 0, 1127, 0, + 1129, 0, 1131, 0, 1133, 0, 1135, 0, + 1137, 0, 1139, 0, 1141, 0, 1143, 0, + 1145, 0, 1147, 0, 1149, 0, 1151, 0, + 1153, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1163, 0, 1165, 0, 1167, 0, + 1169, 0, 1171, 0, 1173, 0, 1175, 0, + 1177, 0, 1179, 0, 1181, 0, 1183, 0, + 1185, 0, 1187, 0, 1189, 0, 1191, 0, + 1193, 0, 1195, 0, 1197, 0, 1199, 0, + 1201, 0, 1203, 0, 1205, 0, 1207, 0, + 1209, 0, 1211, 0, 1213, 0, 1215, 0, + 1231, 1218, 0, 1220, 0, 1222, 0, 1224, + 0, 1226, 0, 1228, 0, 1230, 0, 0, + 1233, 0, 1235, 0, 1237, 0, 1239, 0, + 1241, 0, 1243, 0, 1245, 0, 1247, 0, + 1249, 0, 1251, 0, 1253, 0, 1255, 0, + 1257, 0, 1259, 0, 1261, 0, 1263, 0, + 1265, 0, 1267, 0, 1269, 0, 1271, 0, + 1273, 0, 1275, 0, 1277, 0, 1279, 0, +}; + +static const of_unichar_t lowercasePage5[0x100] = { + 1281, 0, 1283, 0, 1285, 0, 1287, 0, + 1289, 0, 1291, 0, 1293, 0, 1295, 0, + 1297, 0, 1299, 0, 1301, 0, 1303, 0, + 1305, 0, 1307, 0, 1309, 0, 1311, 0, + 1313, 0, 1315, 0, 1317, 0, 1319, 0, + 1321, 0, 1323, 0, 1325, 0, 1327, 0, + 0, 1377, 1378, 1379, 1380, 1381, 1382, 1383, + 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, + 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, + 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, + 1408, 1409, 1410, 1411, 1412, 1413, 1414, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage16[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 11520, 11521, 11522, 11523, 11524, 11525, 11526, 11527, + 11528, 11529, 11530, 11531, 11532, 11533, 11534, 11535, + 11536, 11537, 11538, 11539, 11540, 11541, 11542, 11543, + 11544, 11545, 11546, 11547, 11548, 11549, 11550, 11551, + 11552, 11553, 11554, 11555, 11556, 11557, 0, 11559, + 0, 0, 0, 0, 0, 11565, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage19[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 43888, 43889, 43890, 43891, 43892, 43893, 43894, 43895, + 43896, 43897, 43898, 43899, 43900, 43901, 43902, 43903, + 43904, 43905, 43906, 43907, 43908, 43909, 43910, 43911, + 43912, 43913, 43914, 43915, 43916, 43917, 43918, 43919, + 43920, 43921, 43922, 43923, 43924, 43925, 43926, 43927, + 43928, 43929, 43930, 43931, 43932, 43933, 43934, 43935, + 43936, 43937, 43938, 43939, 43940, 43941, 43942, 43943, + 43944, 43945, 43946, 43947, 43948, 43949, 43950, 43951, + 43952, 43953, 43954, 43955, 43956, 43957, 43958, 43959, + 43960, 43961, 43962, 43963, 43964, 43965, 43966, 43967, + 5112, 5113, 5114, 5115, 5116, 5117, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage30[0x100] = { + 7681, 0, 7683, 0, 7685, 0, 7687, 0, + 7689, 0, 7691, 0, 7693, 0, 7695, 0, + 7697, 0, 7699, 0, 7701, 0, 7703, 0, + 7705, 0, 7707, 0, 7709, 0, 7711, 0, + 7713, 0, 7715, 0, 7717, 0, 7719, 0, + 7721, 0, 7723, 0, 7725, 0, 7727, 0, + 7729, 0, 7731, 0, 7733, 0, 7735, 0, + 7737, 0, 7739, 0, 7741, 0, 7743, 0, + 7745, 0, 7747, 0, 7749, 0, 7751, 0, + 7753, 0, 7755, 0, 7757, 0, 7759, 0, + 7761, 0, 7763, 0, 7765, 0, 7767, 0, + 7769, 0, 7771, 0, 7773, 0, 7775, 0, + 7777, 0, 7779, 0, 7781, 0, 7783, 0, + 7785, 0, 7787, 0, 7789, 0, 7791, 0, + 7793, 0, 7795, 0, 7797, 0, 7799, 0, + 7801, 0, 7803, 0, 7805, 0, 7807, 0, + 7809, 0, 7811, 0, 7813, 0, 7815, 0, + 7817, 0, 7819, 0, 7821, 0, 7823, 0, + 7825, 0, 7827, 0, 7829, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 223, 0, + 7841, 0, 7843, 0, 7845, 0, 7847, 0, + 7849, 0, 7851, 0, 7853, 0, 7855, 0, + 7857, 0, 7859, 0, 7861, 0, 7863, 0, + 7865, 0, 7867, 0, 7869, 0, 7871, 0, + 7873, 0, 7875, 0, 7877, 0, 7879, 0, + 7881, 0, 7883, 0, 7885, 0, 7887, 0, + 7889, 0, 7891, 0, 7893, 0, 7895, 0, + 7897, 0, 7899, 0, 7901, 0, 7903, 0, + 7905, 0, 7907, 0, 7909, 0, 7911, 0, + 7913, 0, 7915, 0, 7917, 0, 7919, 0, + 7921, 0, 7923, 0, 7925, 0, 7927, 0, + 7929, 0, 7931, 0, 7933, 0, 7935, 0, +}; + +static const of_unichar_t lowercasePage31[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 7936, 7937, 7938, 7939, 7940, 7941, 7942, 7943, + 0, 0, 0, 0, 0, 0, 0, 0, + 7952, 7953, 7954, 7955, 7956, 7957, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, + 0, 0, 0, 0, 0, 0, 0, 0, + 7984, 7985, 7986, 7987, 7988, 7989, 7990, 7991, + 0, 0, 0, 0, 0, 0, 0, 0, + 8000, 8001, 8002, 8003, 8004, 8005, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8017, 0, 8019, 0, 8021, 0, 8023, + 0, 0, 0, 0, 0, 0, 0, 0, + 8032, 8033, 8034, 8035, 8036, 8037, 8038, 8039, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, + 0, 0, 0, 0, 0, 0, 0, 0, + 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, + 0, 0, 0, 0, 0, 0, 0, 0, + 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, + 0, 0, 0, 0, 0, 0, 0, 0, + 8112, 8113, 8048, 8049, 8115, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8050, 8051, 8052, 8053, 8131, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8144, 8145, 8054, 8055, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8160, 8161, 8058, 8059, 8165, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8056, 8057, 8060, 8061, 8179, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage33[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 969, 0, + 0, 0, 107, 229, 0, 0, 0, 0, + 0, 0, 8526, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, + 8568, 8569, 8570, 8571, 8572, 8573, 8574, 8575, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8580, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage36[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9424, 9425, + 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, + 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, + 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage44[0x100] = { + 11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, + 11320, 11321, 11322, 11323, 11324, 11325, 11326, 11327, + 11328, 11329, 11330, 11331, 11332, 11333, 11334, 11335, + 11336, 11337, 11338, 11339, 11340, 11341, 11342, 11343, + 11344, 11345, 11346, 11347, 11348, 11349, 11350, 11351, + 11352, 11353, 11354, 11355, 11356, 11357, 11358, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 11361, 0, 619, 7549, 637, 0, 0, 11368, + 0, 11370, 0, 11372, 0, 593, 625, 592, + 594, 0, 11379, 0, 0, 11382, 0, 0, + 0, 0, 0, 0, 0, 0, 575, 576, + 11393, 0, 11395, 0, 11397, 0, 11399, 0, + 11401, 0, 11403, 0, 11405, 0, 11407, 0, + 11409, 0, 11411, 0, 11413, 0, 11415, 0, + 11417, 0, 11419, 0, 11421, 0, 11423, 0, + 11425, 0, 11427, 0, 11429, 0, 11431, 0, + 11433, 0, 11435, 0, 11437, 0, 11439, 0, + 11441, 0, 11443, 0, 11445, 0, 11447, 0, + 11449, 0, 11451, 0, 11453, 0, 11455, 0, + 11457, 0, 11459, 0, 11461, 0, 11463, 0, + 11465, 0, 11467, 0, 11469, 0, 11471, 0, + 11473, 0, 11475, 0, 11477, 0, 11479, 0, + 11481, 0, 11483, 0, 11485, 0, 11487, 0, + 11489, 0, 11491, 0, 0, 0, 0, 0, + 0, 0, 0, 11500, 0, 11502, 0, 0, + 0, 0, 11507, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage166[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 42561, 0, 42563, 0, 42565, 0, 42567, 0, + 42569, 0, 42571, 0, 42573, 0, 42575, 0, + 42577, 0, 42579, 0, 42581, 0, 42583, 0, + 42585, 0, 42587, 0, 42589, 0, 42591, 0, + 42593, 0, 42595, 0, 42597, 0, 42599, 0, + 42601, 0, 42603, 0, 42605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 42625, 0, 42627, 0, 42629, 0, 42631, 0, + 42633, 0, 42635, 0, 42637, 0, 42639, 0, + 42641, 0, 42643, 0, 42645, 0, 42647, 0, + 42649, 0, 42651, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage167[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 42787, 0, 42789, 0, 42791, 0, + 42793, 0, 42795, 0, 42797, 0, 42799, 0, + 0, 0, 42803, 0, 42805, 0, 42807, 0, + 42809, 0, 42811, 0, 42813, 0, 42815, 0, + 42817, 0, 42819, 0, 42821, 0, 42823, 0, + 42825, 0, 42827, 0, 42829, 0, 42831, 0, + 42833, 0, 42835, 0, 42837, 0, 42839, 0, + 42841, 0, 42843, 0, 42845, 0, 42847, 0, + 42849, 0, 42851, 0, 42853, 0, 42855, 0, + 42857, 0, 42859, 0, 42861, 0, 42863, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 42874, 0, 42876, 0, 7545, 42879, 0, + 42881, 0, 42883, 0, 42885, 0, 42887, 0, + 0, 0, 0, 42892, 0, 613, 0, 0, + 42897, 0, 42899, 0, 0, 0, 42903, 0, + 42905, 0, 42907, 0, 42909, 0, 42911, 0, + 42913, 0, 42915, 0, 42917, 0, 42919, 0, + 42921, 0, 614, 604, 609, 620, 618, 0, + 670, 647, 669, 43859, 42933, 0, 42935, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage255[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 65345, 65346, 65347, 65348, 65349, 65350, 65351, + 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, + 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, + 65368, 65369, 65370, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage260[0x100] = { + 66600, 66601, 66602, 66603, 66604, 66605, 66606, 66607, + 66608, 66609, 66610, 66611, 66612, 66613, 66614, 66615, + 66616, 66617, 66618, 66619, 66620, 66621, 66622, 66623, + 66624, 66625, 66626, 66627, 66628, 66629, 66630, 66631, + 66632, 66633, 66634, 66635, 66636, 66637, 66638, 66639, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 66776, 66777, 66778, 66779, 66780, 66781, 66782, 66783, + 66784, 66785, 66786, 66787, 66788, 66789, 66790, 66791, + 66792, 66793, 66794, 66795, 66796, 66797, 66798, 66799, + 66800, 66801, 66802, 66803, 66804, 66805, 66806, 66807, + 66808, 66809, 66810, 66811, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage268[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 68800, 68801, 68802, 68803, 68804, 68805, 68806, 68807, + 68808, 68809, 68810, 68811, 68812, 68813, 68814, 68815, + 68816, 68817, 68818, 68819, 68820, 68821, 68822, 68823, + 68824, 68825, 68826, 68827, 68828, 68829, 68830, 68831, + 68832, 68833, 68834, 68835, 68836, 68837, 68838, 68839, + 68840, 68841, 68842, 68843, 68844, 68845, 68846, 68847, + 68848, 68849, 68850, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage280[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 71872, 71873, 71874, 71875, 71876, 71877, 71878, 71879, + 71880, 71881, 71882, 71883, 71884, 71885, 71886, 71887, + 71888, 71889, 71890, 71891, 71892, 71893, 71894, 71895, + 71896, 71897, 71898, 71899, 71900, 71901, 71902, 71903, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t lowercasePage489[0x100] = { + 125218, 125219, 125220, 125221, 125222, 125223, 125224, 125225, + 125226, 125227, 125228, 125229, 125230, 125231, 125232, 125233, + 125234, 125235, 125236, 125237, 125238, 125239, 125240, 125241, + 125242, 125243, 125244, 125245, 125246, 125247, 125248, 125249, + 125250, 125251, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t titlecasePage1[0x100] = { + 0, 256, 0, 258, 0, 260, 0, 262, + 0, 264, 0, 266, 0, 268, 0, 270, + 0, 272, 0, 274, 0, 276, 0, 278, + 0, 280, 0, 282, 0, 284, 0, 286, + 0, 288, 0, 290, 0, 292, 0, 294, + 0, 296, 0, 298, 0, 300, 0, 302, + 0, 73, 0, 306, 0, 308, 0, 310, + 0, 0, 313, 0, 315, 0, 317, 0, + 319, 0, 321, 0, 323, 0, 325, 0, + 327, 0, 0, 330, 0, 332, 0, 334, + 0, 336, 0, 338, 0, 340, 0, 342, + 0, 344, 0, 346, 0, 348, 0, 350, + 0, 352, 0, 354, 0, 356, 0, 358, + 0, 360, 0, 362, 0, 364, 0, 366, + 0, 368, 0, 370, 0, 372, 0, 374, + 0, 0, 377, 0, 379, 0, 381, 83, + 579, 0, 0, 386, 0, 388, 0, 0, + 391, 0, 0, 0, 395, 0, 0, 0, + 0, 0, 401, 0, 0, 502, 0, 0, + 0, 408, 573, 0, 0, 0, 544, 0, + 0, 416, 0, 418, 0, 420, 0, 0, + 423, 0, 0, 0, 0, 428, 0, 0, + 431, 0, 0, 0, 435, 0, 437, 0, + 0, 440, 0, 0, 0, 444, 0, 503, + 0, 0, 0, 0, 453, 453, 453, 456, + 456, 456, 459, 459, 459, 0, 461, 0, + 463, 0, 465, 0, 467, 0, 469, 0, + 471, 0, 473, 0, 475, 398, 0, 478, + 0, 480, 0, 482, 0, 484, 0, 486, + 0, 488, 0, 490, 0, 492, 0, 494, + 0, 498, 498, 498, 0, 500, 0, 0, + 0, 504, 0, 506, 0, 508, 0, 510, +}; + +static const of_unichar_t casefoldingPage0[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 956, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 0, + 248, 249, 250, 251, 252, 253, 254, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t casefoldingPage1[0x100] = { + 257, 0, 259, 0, 261, 0, 263, 0, + 265, 0, 267, 0, 269, 0, 271, 0, + 273, 0, 275, 0, 277, 0, 279, 0, + 281, 0, 283, 0, 285, 0, 287, 0, + 289, 0, 291, 0, 293, 0, 295, 0, + 297, 0, 299, 0, 301, 0, 303, 0, + 0, 0, 307, 0, 309, 0, 311, 0, + 0, 314, 0, 316, 0, 318, 0, 320, + 0, 322, 0, 324, 0, 326, 0, 328, + 0, 0, 331, 0, 333, 0, 335, 0, + 337, 0, 339, 0, 341, 0, 343, 0, + 345, 0, 347, 0, 349, 0, 351, 0, + 353, 0, 355, 0, 357, 0, 359, 0, + 361, 0, 363, 0, 365, 0, 367, 0, + 369, 0, 371, 0, 373, 0, 375, 0, + 255, 378, 0, 380, 0, 382, 0, 115, + 0, 595, 387, 0, 389, 0, 596, 392, + 0, 598, 599, 396, 0, 0, 477, 601, + 603, 402, 0, 608, 611, 0, 617, 616, + 409, 0, 0, 0, 623, 626, 0, 629, + 417, 0, 419, 0, 421, 0, 640, 424, + 0, 643, 0, 0, 429, 0, 648, 432, + 0, 650, 651, 436, 0, 438, 0, 658, + 441, 0, 0, 0, 445, 0, 0, 0, + 0, 0, 0, 0, 454, 454, 0, 457, + 457, 0, 460, 460, 0, 462, 0, 464, + 0, 466, 0, 468, 0, 470, 0, 472, + 0, 474, 0, 476, 0, 0, 479, 0, + 481, 0, 483, 0, 485, 0, 487, 0, + 489, 0, 491, 0, 493, 0, 495, 0, + 0, 499, 499, 0, 501, 0, 405, 447, + 505, 0, 507, 0, 509, 0, 511, 0, +}; + +static const of_unichar_t casefoldingPage3[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 953, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 881, 0, 883, 0, 0, 0, 887, 0, + 0, 0, 0, 0, 0, 0, 0, 1011, + 0, 0, 0, 0, 0, 0, 940, 0, + 941, 942, 943, 0, 972, 0, 973, 974, + 0, 945, 946, 947, 948, 949, 950, 951, + 952, 953, 954, 955, 956, 957, 958, 959, + 960, 961, 0, 963, 964, 965, 966, 967, + 968, 969, 970, 971, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 963, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 983, + 946, 952, 0, 0, 0, 966, 960, 0, + 985, 0, 987, 0, 989, 0, 991, 0, + 993, 0, 995, 0, 997, 0, 999, 0, + 1001, 0, 1003, 0, 1005, 0, 1007, 0, + 954, 961, 0, 0, 952, 949, 0, 1016, + 0, 1010, 1019, 0, 0, 891, 892, 893, +}; + +static const of_unichar_t casefoldingPage19[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 5104, 5105, 5106, 5107, 5108, 5109, 0, 0, +}; + +static const of_unichar_t casefoldingPage28[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1074, 1076, 1086, 1089, 1090, 1090, 1098, 1123, + 42571, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +static const of_unichar_t casefoldingPage30[0x100] = { + 7681, 0, 7683, 0, 7685, 0, 7687, 0, + 7689, 0, 7691, 0, 7693, 0, 7695, 0, + 7697, 0, 7699, 0, 7701, 0, 7703, 0, + 7705, 0, 7707, 0, 7709, 0, 7711, 0, + 7713, 0, 7715, 0, 7717, 0, 7719, 0, + 7721, 0, 7723, 0, 7725, 0, 7727, 0, + 7729, 0, 7731, 0, 7733, 0, 7735, 0, + 7737, 0, 7739, 0, 7741, 0, 7743, 0, + 7745, 0, 7747, 0, 7749, 0, 7751, 0, + 7753, 0, 7755, 0, 7757, 0, 7759, 0, + 7761, 0, 7763, 0, 7765, 0, 7767, 0, + 7769, 0, 7771, 0, 7773, 0, 7775, 0, + 7777, 0, 7779, 0, 7781, 0, 7783, 0, + 7785, 0, 7787, 0, 7789, 0, 7791, 0, + 7793, 0, 7795, 0, 7797, 0, 7799, 0, + 7801, 0, 7803, 0, 7805, 0, 7807, 0, + 7809, 0, 7811, 0, 7813, 0, 7815, 0, + 7817, 0, 7819, 0, 7821, 0, 7823, 0, + 7825, 0, 7827, 0, 7829, 0, 0, 0, + 0, 0, 0, 7777, 0, 0, 223, 0, + 7841, 0, 7843, 0, 7845, 0, 7847, 0, + 7849, 0, 7851, 0, 7853, 0, 7855, 0, + 7857, 0, 7859, 0, 7861, 0, 7863, 0, + 7865, 0, 7867, 0, 7869, 0, 7871, 0, + 7873, 0, 7875, 0, 7877, 0, 7879, 0, + 7881, 0, 7883, 0, 7885, 0, 7887, 0, + 7889, 0, 7891, 0, 7893, 0, 7895, 0, + 7897, 0, 7899, 0, 7901, 0, 7903, 0, + 7905, 0, 7907, 0, 7909, 0, 7911, 0, + 7913, 0, 7915, 0, 7917, 0, 7919, 0, + 7921, 0, 7923, 0, 7925, 0, 7927, 0, + 7929, 0, 7931, 0, 7933, 0, 7935, 0, +}; + +static const of_unichar_t casefoldingPage31[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 7936, 7937, 7938, 7939, 7940, 7941, 7942, 7943, + 0, 0, 0, 0, 0, 0, 0, 0, + 7952, 7953, 7954, 7955, 7956, 7957, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, + 0, 0, 0, 0, 0, 0, 0, 0, + 7984, 7985, 7986, 7987, 7988, 7989, 7990, 7991, + 0, 0, 0, 0, 0, 0, 0, 0, + 8000, 8001, 8002, 8003, 8004, 8005, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8017, 0, 8019, 0, 8021, 0, 8023, + 0, 0, 0, 0, 0, 0, 0, 0, + 8032, 8033, 8034, 8035, 8036, 8037, 8038, 8039, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, + 0, 0, 0, 0, 0, 0, 0, 0, + 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, + 0, 0, 0, 0, 0, 0, 0, 0, + 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, + 0, 0, 0, 0, 0, 0, 0, 0, + 8112, 8113, 8048, 8049, 8115, 0, 953, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8050, 8051, 8052, 8053, 8131, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8144, 8145, 8054, 8055, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8160, 8161, 8058, 8059, 8165, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8056, 8057, 8060, 8061, 8179, 0, 0, 0, +}; + +static const of_unichar_t casefoldingPage171[0x100] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, + 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, + 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, + 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, + 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, + 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, + 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, + 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, + 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, + 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +const of_unichar_t *const of_unicode_uppercase_table[0x1EA] = { + uppercasePage0, uppercasePage1, uppercasePage2, uppercasePage3, + uppercasePage4, uppercasePage5, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, uppercasePage19, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + uppercasePage28, uppercasePage29, uppercasePage30, uppercasePage31, + emptyPage, uppercasePage33, emptyPage, emptyPage, + uppercasePage36, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + uppercasePage44, uppercasePage45, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, uppercasePage166, uppercasePage167, + emptyPage, emptyPage, emptyPage, uppercasePage171, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, uppercasePage255, + emptyPage, emptyPage, emptyPage, emptyPage, + uppercasePage260, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + uppercasePage268, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + uppercasePage280, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, uppercasePage489 +}; + +const of_unichar_t *const of_unicode_lowercase_table[0x1EA] = { + lowercasePage0, lowercasePage1, lowercasePage2, lowercasePage3, + lowercasePage4, lowercasePage5, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + lowercasePage16, emptyPage, emptyPage, lowercasePage19, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, lowercasePage30, lowercasePage31, + emptyPage, lowercasePage33, emptyPage, emptyPage, + lowercasePage36, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + lowercasePage44, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, lowercasePage166, lowercasePage167, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, lowercasePage255, + emptyPage, emptyPage, emptyPage, emptyPage, + lowercasePage260, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + lowercasePage268, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + lowercasePage280, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, lowercasePage489 +}; + +const of_unichar_t *const of_unicode_titlecase_table[0x1EA] = { + uppercasePage0, titlecasePage1, uppercasePage2, uppercasePage3, + uppercasePage4, uppercasePage5, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, uppercasePage19, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + uppercasePage28, uppercasePage29, uppercasePage30, uppercasePage31, + emptyPage, uppercasePage33, emptyPage, emptyPage, + uppercasePage36, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + uppercasePage44, uppercasePage45, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, uppercasePage166, uppercasePage167, + emptyPage, emptyPage, emptyPage, uppercasePage171, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, uppercasePage255, + emptyPage, emptyPage, emptyPage, emptyPage, + uppercasePage260, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + uppercasePage268, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + uppercasePage280, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, emptyPage, + emptyPage, uppercasePage489 +}; + +const of_unichar_t *const of_unicode_casefolding_table[0x1EA] = { + casefoldingPage0, casefoldingPage1, lowercasePage2, + casefoldingPage3, lowercasePage4, lowercasePage5, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, lowercasePage16, emptyPage, + emptyPage, casefoldingPage19, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, casefoldingPage28, emptyPage, + casefoldingPage30, casefoldingPage31, emptyPage, + lowercasePage33, emptyPage, emptyPage, + lowercasePage36, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, lowercasePage44, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, lowercasePage166, lowercasePage167, + emptyPage, emptyPage, emptyPage, + casefoldingPage171, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + lowercasePage255, emptyPage, emptyPage, + emptyPage, emptyPage, lowercasePage260, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, lowercasePage268, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, lowercasePage280, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + emptyPage, emptyPage, emptyPage, + lowercasePage489 +}; ADDED src/encodings/windows_1251.m Index: src/encodings/windows_1251.m ================================================================== --- src/encodings/windows_1251.m +++ src/encodings/windows_1251.m @@ -0,0 +1,263 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "OFString.h" + +const of_char16_t of_windows_1251[128] = { + 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, + 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, + 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, + 0xFFFF, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, + 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, + 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, + 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, + 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F +}; + +bool +of_unicode_to_windows_1251(const of_unichar_t *input, unsigned char *output, + size_t length, bool lossy) +{ + for (size_t i = 0; i < length; i++) { + of_unichar_t c = input[i]; + + if OF_UNLIKELY (c > 0x7F) { + if OF_UNLIKELY (c > 0xFFFF) { + if (lossy) { + output[i] = '?'; + continue; + } else + return false; + } + + if OF_LIKELY (c >= 0x410 && c <= 0x44F) + output[i] = 0xC0 + (c - 0x410); + else { + switch ((of_char16_t)c) { + case 0x402: + output[i] = 0x80; + break; + case 0x403: + output[i] = 0x81; + break; + case 0x201A: + output[i] = 0x82; + break; + case 0x453: + output[i] = 0x83; + break; + case 0x201E: + output[i] = 0x84; + break; + case 0x2026: + output[i] = 0x85; + break; + case 0x2020: + output[i] = 0x86; + break; + case 0x2021: + output[i] = 0x87; + break; + case 0x20AC: + output[i] = 0x88; + break; + case 0x2030: + output[i] = 0x89; + break; + case 0x409: + output[i] = 0x8A; + break; + case 0x2039: + output[i] = 0x8B; + break; + case 0x40A: + output[i] = 0x8C; + break; + case 0x40C: + output[i] = 0x8D; + break; + case 0x40B: + output[i] = 0x8E; + break; + case 0x40F: + output[i] = 0x8F; + break; + case 0x452: + output[i] = 0x90; + break; + case 0x2018: + output[i] = 0x91; + break; + case 0x2019: + output[i] = 0x92; + break; + case 0x201C: + output[i] = 0x93; + break; + case 0x201D: + output[i] = 0x94; + break; + case 0x2022: + output[i] = 0x95; + break; + case 0x2013: + output[i] = 0x96; + break; + case 0x2014: + output[i] = 0x97; + break; + case 0x2122: + output[i] = 0x99; + break; + case 0x459: + output[i] = 0x9A; + break; + case 0x203A: + output[i] = 0x9B; + break; + case 0x45A: + output[i] = 0x9C; + break; + case 0x45C: + output[i] = 0x9D; + break; + case 0x45B: + output[i] = 0x9E; + break; + case 0x45F: + output[i] = 0x9F; + break; + case 0xA0: + output[i] = 0xA0; + break; + case 0x40E: + output[i] = 0xA1; + break; + case 0x45E: + output[i] = 0xA2; + break; + case 0x408: + output[i] = 0xA3; + break; + case 0xA4: + output[i] = 0xA4; + break; + case 0x490: + output[i] = 0xA5; + break; + case 0xA6: + output[i] = 0xA6; + break; + case 0xA7: + output[i] = 0xA7; + break; + case 0x401: + output[i] = 0xA8; + break; + case 0xA9: + output[i] = 0xA9; + break; + case 0x404: + output[i] = 0xAA; + break; + case 0xAB: + output[i] = 0xAB; + break; + case 0xAC: + output[i] = 0xAC; + break; + case 0xAD: + output[i] = 0xAD; + break; + case 0xAE: + output[i] = 0xAE; + break; + case 0x407: + output[i] = 0xAF; + break; + case 0xB0: + output[i] = 0xB0; + break; + case 0xB1: + output[i] = 0xB1; + break; + case 0x406: + output[i] = 0xB2; + break; + case 0x456: + output[i] = 0xB3; + break; + case 0x491: + output[i] = 0xB4; + break; + case 0xB5: + output[i] = 0xB5; + break; + case 0xB6: + output[i] = 0xB6; + break; + case 0xB7: + output[i] = 0xB7; + break; + case 0x451: + output[i] = 0xB8; + break; + case 0x2116: + output[i] = 0xB9; + break; + case 0x454: + output[i] = 0xBA; + break; + case 0xBB: + output[i] = 0xBB; + break; + case 0x458: + output[i] = 0xBC; + break; + case 0x405: + output[i] = 0xBD; + break; + case 0x455: + output[i] = 0xBE; + break; + case 0x457: + output[i] = 0xBF; + break; + default: + if (lossy) + output[i] = '?'; + else + return false; + + break; + } + } + } else + output[i] = (unsigned char)c; + } + + return true; +} ADDED src/encodings/windows_1252.m Index: src/encodings/windows_1252.m ================================================================== --- src/encodings/windows_1252.m +++ src/encodings/windows_1252.m @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "OFString.h" + +const of_char16_t of_windows_1252[128] = { + 0x20AC, 0xFFFF, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, + 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0xFFFF, 0x017D, 0xFFFF, + 0xFFFF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, + 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFF, 0x017E, 0x0178, + 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, + 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, + 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, + 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, + 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, + 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, + 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, + 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, + 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, + 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, + 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, + 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF +}; + +bool +of_unicode_to_windows_1252(const of_unichar_t *input, unsigned char *output, + size_t length, bool lossy) +{ + for (size_t i = 0; i < length; i++) { + of_unichar_t c = input[i]; + + if OF_UNLIKELY (c > 0xFF) { + if OF_UNLIKELY (c > 0xFFFF) { + if (lossy) { + output[i] = '?'; + continue; + } else + return false; + } + + switch ((of_char16_t)c) { + case 0x20AC: + output[i] = 0x80; + break; + case 0x201A: + output[i] = 0x82; + break; + case 0x192: + output[i] = 0x83; + break; + case 0x201E: + output[i] = 0x84; + break; + case 0x2026: + output[i] = 0x85; + break; + case 0x2020: + output[i] = 0x86; + break; + case 0x2021: + output[i] = 0x87; + break; + case 0x2C6: + output[i] = 0x88; + break; + case 0x2030: + output[i] = 0x89; + break; + case 0x160: + output[i] = 0x8A; + break; + case 0x2039: + output[i] = 0x8B; + break; + case 0x152: + output[i] = 0x8C; + break; + case 0x17D: + output[i] = 0x8E; + break; + case 0x2018: + output[i] = 0x91; + break; + case 0x2019: + output[i] = 0x92; + break; + case 0x201C: + output[i] = 0x93; + break; + case 0x201D: + output[i] = 0x94; + break; + case 0x2022: + output[i] = 0x95; + break; + case 0x2013: + output[i] = 0x96; + break; + case 0x2014: + output[i] = 0x97; + break; + case 0x2DC: + output[i] = 0x98; + break; + case 0x2122: + output[i] = 0x99; + break; + case 0x161: + output[i] = 0x9A; + break; + case 0x203A: + output[i] = 0x9B; + break; + case 0x153: + output[i] = 0x9C; + break; + case 0x17E: + output[i] = 0x9E; + break; + case 0x178: + output[i] = 0x9F; + break; + default: + if (lossy) + output[i] = '?'; + else + return false; + + break; + } + } else { + if OF_UNLIKELY (c >= 0x80 && c <= 0x9F) { + if (lossy) + output[i] = '?'; + else + return false; + } else + output[i] = (unsigned char)c; + } + } + + return true; +} DELETED src/iso_8859_15.m Index: src/iso_8859_15.m ================================================================== --- src/iso_8859_15.m +++ src/iso_8859_15.m @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE.QPL included in - * the packaging of this file. - * - * Alternatively, it may be distributed under the terms of the GNU General - * Public License, either version 2 or 3, which can be found in the file - * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this - * file. - */ - -#include "config.h" - -#import "OFString.h" - -const of_char16_t of_iso_8859_15[128] = { - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, - 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, - 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, - 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF, - 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, - 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, - 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, - 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, - 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF -}; - -bool -of_unicode_to_iso_8859_15(const of_unichar_t *input, unsigned char *output, - size_t length, bool lossy) -{ - for (size_t i = 0; i < length; i++) { - of_unichar_t c = input[i]; - - if OF_UNLIKELY (c > 0xFF) { - if OF_UNLIKELY (c > 0xFFFF) { - if (lossy) { - output[i] = '?'; - continue; - } else - return false; - } - - switch ((of_char16_t)c) { - case 0x20AC: - output[i] = 0xA4; - break; - case 0x160: - output[i] = 0xA6; - break; - case 0x161: - output[i] = 0xA8; - break; - case 0x17D: - output[i] = 0xB4; - break; - case 0x17E: - output[i] = 0xB8; - break; - case 0x152: - output[i] = 0xBC; - break; - case 0x153: - output[i] = 0xBD; - break; - case 0x178: - output[i] = 0xBE; - break; - default: - if (lossy) - output[i] = '?'; - else - return false; - - break; - } - } else { - switch (c) { - case 0xA4: - case 0xA6: - case 0xA8: - case 0xB4: - case 0xB8: - case 0xBC: - case 0xBD: - case 0xBE: - if (lossy) - output[i] = '?'; - else - return false; - - break; - default: - output[i] = (unsigned char)c; - break; - } - } - } - - return true; -} DELETED src/iso_8859_2.m Index: src/iso_8859_2.m ================================================================== --- src/iso_8859_2.m +++ src/iso_8859_2.m @@ -1,362 +0,0 @@ -/* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE.QPL included in - * the packaging of this file. - * - * Alternatively, it may be distributed under the terms of the GNU General - * Public License, either version 2 or 3, which can be found in the file - * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this - * file. - */ - -#include "config.h" - -#import "OFString.h" - -const of_char16_t of_iso_8859_2[128] = { - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, - 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, - 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, - 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, - 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C, - 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, - 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E, - 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, - 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF, - 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, - 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F, - 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, - 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9 -}; - -bool -of_unicode_to_iso_8859_2(const of_unichar_t *input, unsigned char *output, - size_t length, bool lossy) -{ - for (size_t i = 0; i < length; i++) { - of_unichar_t c = input[i]; - - if OF_UNLIKELY (c > 0x7F) { - if OF_UNLIKELY (c > 0xFFFF) { - if (lossy) { - output[i] = '?'; - continue; - } else - return false; - } - - if OF_UNLIKELY (c >= 0x80 && c <= 0x9F) - output[i] = c; - else { - switch ((of_char16_t)c) { - case 0xA0: - output[i] = 0xA0; - break; - case 0x104: - output[i] = 0xA1; - break; - case 0x2D8: - output[i] = 0xA2; - break; - case 0x141: - output[i] = 0xA3; - break; - case 0xA4: - output[i] = 0xA4; - break; - case 0x13D: - output[i] = 0xA5; - break; - case 0x15A: - output[i] = 0xA6; - break; - case 0xA7: - output[i] = 0xA7; - break; - case 0xA8: - output[i] = 0xA8; - break; - case 0x160: - output[i] = 0xA9; - break; - case 0x15E: - output[i] = 0xAA; - break; - case 0x164: - output[i] = 0xAB; - break; - case 0x179: - output[i] = 0xAC; - break; - case 0xAD: - output[i] = 0xAD; - break; - case 0x17D: - output[i] = 0xAE; - break; - case 0x17B: - output[i] = 0xAF; - break; - case 0xB0: - output[i] = 0xB0; - break; - case 0x105: - output[i] = 0xB1; - break; - case 0x2DB: - output[i] = 0xB2; - break; - case 0x142: - output[i] = 0xB3; - break; - case 0xB4: - output[i] = 0xB4; - break; - case 0x13E: - output[i] = 0xB5; - break; - case 0x15B: - output[i] = 0xB6; - break; - case 0x2C7: - output[i] = 0xB7; - break; - case 0xB8: - output[i] = 0xB8; - break; - case 0x161: - output[i] = 0xB9; - break; - case 0x15F: - output[i] = 0xBA; - break; - case 0x165: - output[i] = 0xBB; - break; - case 0x17A: - output[i] = 0xBC; - break; - case 0x2DD: - output[i] = 0xBD; - break; - case 0x17E: - output[i] = 0xBE; - break; - case 0x17C: - output[i] = 0xBF; - break; - case 0x154: - output[i] = 0xC0; - break; - case 0xC1: - output[i] = 0xC1; - break; - case 0xC2: - output[i] = 0xC2; - break; - case 0x102: - output[i] = 0xC3; - break; - case 0xC4: - output[i] = 0xC4; - break; - case 0x139: - output[i] = 0xC5; - break; - case 0x106: - output[i] = 0xC6; - break; - case 0xC7: - output[i] = 0xC7; - break; - case 0x10C: - output[i] = 0xC8; - break; - case 0xC9: - output[i] = 0xC9; - break; - case 0x118: - output[i] = 0xCA; - break; - case 0xCB: - output[i] = 0xCB; - break; - case 0x11A: - output[i] = 0xCC; - break; - case 0xCD: - output[i] = 0xCD; - break; - case 0xCE: - output[i] = 0xCE; - break; - case 0x10E: - output[i] = 0xCF; - break; - case 0x110: - output[i] = 0xD0; - break; - case 0x143: - output[i] = 0xD1; - break; - case 0x147: - output[i] = 0xD2; - break; - case 0xD3: - output[i] = 0xD3; - break; - case 0xD4: - output[i] = 0xD4; - break; - case 0x150: - output[i] = 0xD5; - break; - case 0xD6: - output[i] = 0xD6; - break; - case 0xD7: - output[i] = 0xD7; - break; - case 0x158: - output[i] = 0xD8; - break; - case 0x16E: - output[i] = 0xD9; - break; - case 0xDA: - output[i] = 0xDA; - break; - case 0x170: - output[i] = 0xDB; - break; - case 0xDC: - output[i] = 0xDC; - break; - case 0xDD: - output[i] = 0xDD; - break; - case 0x162: - output[i] = 0xDE; - break; - case 0xDF: - output[i] = 0xDF; - break; - case 0x155: - output[i] = 0xE0; - break; - case 0xE1: - output[i] = 0xE1; - break; - case 0xE2: - output[i] = 0xE2; - break; - case 0x103: - output[i] = 0xE3; - break; - case 0xE4: - output[i] = 0xE4; - break; - case 0x13A: - output[i] = 0xE5; - break; - case 0x107: - output[i] = 0xE6; - break; - case 0xE7: - output[i] = 0xE7; - break; - case 0x10D: - output[i] = 0xE8; - break; - case 0xE9: - output[i] = 0xE9; - break; - case 0x119: - output[i] = 0xEA; - break; - case 0xEB: - output[i] = 0xEB; - break; - case 0x11B: - output[i] = 0xEC; - break; - case 0xED: - output[i] = 0xED; - break; - case 0xEE: - output[i] = 0xEE; - break; - case 0x10F: - output[i] = 0xEF; - break; - case 0x111: - output[i] = 0xF0; - break; - case 0x144: - output[i] = 0xF1; - break; - case 0x148: - output[i] = 0xF2; - break; - case 0xF3: - output[i] = 0xF3; - break; - case 0xF4: - output[i] = 0xF4; - break; - case 0x151: - output[i] = 0xF5; - break; - case 0xF6: - output[i] = 0xF6; - break; - case 0xF7: - output[i] = 0xF7; - break; - case 0x159: - output[i] = 0xF8; - break; - case 0x16F: - output[i] = 0xF9; - break; - case 0xFA: - output[i] = 0xFA; - break; - case 0x171: - output[i] = 0xFB; - break; - case 0xFC: - output[i] = 0xFC; - break; - case 0xFD: - output[i] = 0xFD; - break; - case 0x163: - output[i] = 0xFE; - break; - case 0x2D9: - output[i] = 0xFF; - break; - default: - if (lossy) - output[i] = '?'; - else - return false; - - break; - } - } - } else - output[i] = (unsigned char)c; - } - - return true; -} DELETED src/mac_roman.m Index: src/mac_roman.m ================================================================== --- src/mac_roman.m +++ src/mac_roman.m @@ -1,454 +0,0 @@ -/* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE.QPL included in - * the packaging of this file. - * - * Alternatively, it may be distributed under the terms of the GNU General - * Public License, either version 2 or 3, which can be found in the file - * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this - * file. - */ - -#include "config.h" - -#import "OFString.h" - -const of_char16_t of_mac_roman[128] = { - 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 -}; - -bool -of_unicode_to_mac_roman(const of_unichar_t *input, unsigned char *output, - size_t length, bool lossy) -{ - for (size_t i = 0; i < length; i++) { - of_unichar_t c = input[i]; - - if OF_UNLIKELY (c > 0x7F) { - if OF_UNLIKELY (c > 0xFFFF) { - if (lossy) { - output[i] = '?'; - continue; - } else - return false; - } - - switch ((of_char16_t)c) { - case 0xC4: - output[i] = 0x80; - break; - case 0xC5: - output[i] = 0x81; - break; - case 0xC7: - output[i] = 0x82; - break; - case 0xC9: - output[i] = 0x83; - break; - case 0xD1: - output[i] = 0x84; - break; - case 0xD6: - output[i] = 0x85; - break; - case 0xDC: - output[i] = 0x86; - break; - case 0xE1: - output[i] = 0x87; - break; - case 0xE0: - output[i] = 0x88; - break; - case 0xE2: - output[i] = 0x89; - break; - case 0xE4: - output[i] = 0x8A; - break; - case 0xE3: - output[i] = 0x8B; - break; - case 0xE5: - output[i] = 0x8C; - break; - case 0xE7: - output[i] = 0x8D; - break; - case 0xE9: - output[i] = 0x8E; - break; - case 0xE8: - output[i] = 0x8F; - break; - case 0xEA: - output[i] = 0x90; - break; - case 0xEB: - output[i] = 0x91; - break; - case 0xED: - output[i] = 0x92; - break; - case 0xEC: - output[i] = 0x93; - break; - case 0xEE: - output[i] = 0x94; - break; - case 0xEF: - output[i] = 0x95; - break; - case 0xF1: - output[i] = 0x96; - break; - case 0xF3: - output[i] = 0x97; - break; - case 0xF2: - output[i] = 0x98; - break; - case 0xF4: - output[i] = 0x99; - break; - case 0xF6: - output[i] = 0x9A; - break; - case 0xF5: - output[i] = 0x9B; - break; - case 0xFA: - output[i] = 0x9C; - break; - case 0xF9: - output[i] = 0x9D; - break; - case 0xFB: - output[i] = 0x9E; - break; - case 0xFC: - output[i] = 0x9F; - break; - case 0x2020: - output[i] = 0xA0; - break; - case 0xB0: - output[i] = 0xA1; - break; - case 0xA2: - output[i] = 0xA2; - break; - case 0xA3: - output[i] = 0xA3; - break; - case 0xA7: - output[i] = 0xA4; - break; - case 0x2022: - output[i] = 0xA5; - break; - case 0xB6: - output[i] = 0xA6; - break; - case 0xDF: - output[i] = 0xA7; - break; - case 0xAE: - output[i] = 0xA8; - break; - case 0xA9: - output[i] = 0xA9; - break; - case 0x2122: - output[i] = 0xAA; - break; - case 0xB4: - output[i] = 0xAB; - break; - case 0xA8: - output[i] = 0xAC; - break; - case 0x2260: - output[i] = 0xAD; - break; - case 0xC6: - output[i] = 0xAE; - break; - case 0xD8: - output[i] = 0xAF; - break; - case 0x221E: - output[i] = 0xB0; - break; - case 0xB1: - output[i] = 0xB1; - break; - case 0x2264: - output[i] = 0xB2; - break; - case 0x2265: - output[i] = 0xB3; - break; - case 0xA5: - output[i] = 0xB4; - break; - case 0xB5: - output[i] = 0xB5; - break; - case 0x2202: - output[i] = 0xB6; - break; - case 0x2211: - output[i] = 0xB7; - break; - case 0x220F: - output[i] = 0xB8; - break; - case 0x3C0: - output[i] = 0xB9; - break; - case 0x222B: - output[i] = 0xBA; - break; - case 0xAA: - output[i] = 0xBB; - break; - case 0xBA: - output[i] = 0xBC; - break; - case 0x3A9: - output[i] = 0xBD; - break; - case 0xE6: - output[i] = 0xBE; - break; - case 0xF8: - output[i] = 0xBF; - break; - case 0xBF: - output[i] = 0xC0; - break; - case 0xA1: - output[i] = 0xC1; - break; - case 0xAC: - output[i] = 0xC2; - break; - case 0x221A: - output[i] = 0xC3; - break; - case 0x192: - output[i] = 0xC4; - break; - case 0x2248: - output[i] = 0xC5; - break; - case 0x2206: - output[i] = 0xC6; - break; - case 0xAB: - output[i] = 0xC7; - break; - case 0xBB: - output[i] = 0xC8; - break; - case 0x2026: - output[i] = 0xC9; - break; - case 0xA0: - output[i] = 0xCA; - break; - case 0xC0: - output[i] = 0xCB; - break; - case 0xC3: - output[i] = 0xCC; - break; - case 0xD5: - output[i] = 0xCD; - break; - case 0x152: - output[i] = 0xCE; - break; - case 0x153: - output[i] = 0xCF; - break; - case 0x2013: - output[i] = 0xD0; - break; - case 0x2014: - output[i] = 0xD1; - break; - case 0x201C: - output[i] = 0xD2; - break; - case 0x201D: - output[i] = 0xD3; - break; - case 0x2018: - output[i] = 0xD4; - break; - case 0x2019: - output[i] = 0xD5; - break; - case 0xF7: - output[i] = 0xD6; - break; - case 0x25CA: - output[i] = 0xD7; - break; - case 0xFF: - output[i] = 0xD8; - break; - case 0x178: - output[i] = 0xD9; - break; - case 0x2044: - output[i] = 0xDA; - break; - case 0x20AC: - output[i] = 0xDB; - break; - case 0x2039: - output[i] = 0xDC; - break; - case 0x203A: - output[i] = 0xDD; - break; - case 0xFB01: - output[i] = 0xDE; - break; - case 0xFB02: - output[i] = 0xDF; - break; - case 0x2021: - output[i] = 0xE0; - break; - case 0xB7: - output[i] = 0xE1; - break; - case 0x201A: - output[i] = 0xE2; - break; - case 0x201E: - output[i] = 0xE3; - break; - case 0x2030: - output[i] = 0xE4; - break; - case 0xC2: - output[i] = 0xE5; - break; - case 0xCA: - output[i] = 0xE6; - break; - case 0xC1: - output[i] = 0xE7; - break; - case 0xCB: - output[i] = 0xE8; - break; - case 0xC8: - output[i] = 0xE9; - break; - case 0xCD: - output[i] = 0xEA; - break; - case 0xCE: - output[i] = 0xEB; - break; - case 0xCF: - output[i] = 0xEC; - break; - case 0xCC: - output[i] = 0xED; - break; - case 0xD3: - output[i] = 0xEE; - break; - case 0xD4: - output[i] = 0xEF; - break; - case 0xF8FF: - output[i] = 0xF0; - break; - case 0xD2: - output[i] = 0xF1; - break; - case 0xDA: - output[i] = 0xF2; - break; - case 0xDB: - output[i] = 0xF3; - break; - case 0xD9: - output[i] = 0xF4; - break; - case 0x131: - output[i] = 0xF5; - break; - case 0x2C6: - output[i] = 0xF6; - break; - case 0x2DC: - output[i] = 0xF7; - break; - case 0xAF: - output[i] = 0xF8; - break; - case 0x2D8: - output[i] = 0xF9; - break; - case 0x2D9: - output[i] = 0xFA; - break; - case 0x2DA: - output[i] = 0xFB; - break; - case 0xB8: - output[i] = 0xFC; - break; - case 0x2DD: - output[i] = 0xFD; - break; - case 0x2DB: - output[i] = 0xFE; - break; - case 0x2C7: - output[i] = 0xFF; - break; - default: - if (lossy) - output[i] = '?'; - else - return false; - - break; - } - } else - output[i] = (unsigned char)c; - } - - return true; -} DELETED src/unicode.m Index: src/unicode.m ================================================================== --- src/unicode.m +++ src/unicode.m @@ -1,2386 +0,0 @@ -/* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE.QPL included in - * the packaging of this file. - * - * Alternatively, it may be distributed under the terms of the GNU General - * Public License, either version 2 or 3, which can be found in the file - * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this - * file. - */ - -#include "config.h" - -#import "OFString.h" - -static const of_unichar_t emptyPage[0x100] = { 0 }; - -static const of_unichar_t uppercasePage0[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 924, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 0, - 216, 217, 218, 219, 220, 221, 222, 376, -}; - -static const of_unichar_t uppercasePage1[0x100] = { - 0, 256, 0, 258, 0, 260, 0, 262, - 0, 264, 0, 266, 0, 268, 0, 270, - 0, 272, 0, 274, 0, 276, 0, 278, - 0, 280, 0, 282, 0, 284, 0, 286, - 0, 288, 0, 290, 0, 292, 0, 294, - 0, 296, 0, 298, 0, 300, 0, 302, - 0, 73, 0, 306, 0, 308, 0, 310, - 0, 0, 313, 0, 315, 0, 317, 0, - 319, 0, 321, 0, 323, 0, 325, 0, - 327, 0, 0, 330, 0, 332, 0, 334, - 0, 336, 0, 338, 0, 340, 0, 342, - 0, 344, 0, 346, 0, 348, 0, 350, - 0, 352, 0, 354, 0, 356, 0, 358, - 0, 360, 0, 362, 0, 364, 0, 366, - 0, 368, 0, 370, 0, 372, 0, 374, - 0, 0, 377, 0, 379, 0, 381, 83, - 579, 0, 0, 386, 0, 388, 0, 0, - 391, 0, 0, 0, 395, 0, 0, 0, - 0, 0, 401, 0, 0, 502, 0, 0, - 0, 408, 573, 0, 0, 0, 544, 0, - 0, 416, 0, 418, 0, 420, 0, 0, - 423, 0, 0, 0, 0, 428, 0, 0, - 431, 0, 0, 0, 435, 0, 437, 0, - 0, 440, 0, 0, 0, 444, 0, 503, - 0, 0, 0, 0, 0, 452, 452, 0, - 455, 455, 0, 458, 458, 0, 461, 0, - 463, 0, 465, 0, 467, 0, 469, 0, - 471, 0, 473, 0, 475, 398, 0, 478, - 0, 480, 0, 482, 0, 484, 0, 486, - 0, 488, 0, 490, 0, 492, 0, 494, - 0, 0, 497, 497, 0, 500, 0, 0, - 0, 504, 0, 506, 0, 508, 0, 510, -}; - -static const of_unichar_t uppercasePage2[0x100] = { - 0, 512, 0, 514, 0, 516, 0, 518, - 0, 520, 0, 522, 0, 524, 0, 526, - 0, 528, 0, 530, 0, 532, 0, 534, - 0, 536, 0, 538, 0, 540, 0, 542, - 0, 0, 0, 546, 0, 548, 0, 550, - 0, 552, 0, 554, 0, 556, 0, 558, - 0, 560, 0, 562, 0, 0, 0, 0, - 0, 0, 0, 0, 571, 0, 0, 11390, - 11391, 0, 577, 0, 0, 0, 0, 582, - 0, 584, 0, 586, 0, 588, 0, 590, - 11375, 11373, 11376, 385, 390, 0, 393, 394, - 0, 399, 0, 400, 42923, 0, 0, 0, - 403, 42924, 0, 404, 0, 42893, 42922, 0, - 407, 406, 42926, 11362, 42925, 0, 0, 412, - 0, 11374, 413, 0, 0, 415, 0, 0, - 0, 0, 0, 0, 0, 11364, 0, 0, - 422, 0, 0, 425, 0, 0, 0, 42929, - 430, 580, 433, 434, 581, 0, 0, 0, - 0, 0, 439, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 42930, 42928, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage3[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 921, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 880, 0, 882, 0, 0, 0, 886, - 0, 0, 0, 1021, 1022, 1023, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 902, 904, 905, 906, - 0, 913, 914, 915, 916, 917, 918, 919, - 920, 921, 922, 923, 924, 925, 926, 927, - 928, 929, 931, 931, 932, 933, 934, 935, - 936, 937, 938, 939, 908, 910, 911, 0, - 914, 920, 0, 0, 0, 934, 928, 975, - 0, 984, 0, 986, 0, 988, 0, 990, - 0, 992, 0, 994, 0, 996, 0, 998, - 0, 1000, 0, 1002, 0, 1004, 0, 1006, - 922, 929, 1017, 895, 0, 917, 0, 0, - 1015, 0, 0, 1018, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage4[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, - 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, - 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, - 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, - 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, - 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, - 0, 1120, 0, 1122, 0, 1124, 0, 1126, - 0, 1128, 0, 1130, 0, 1132, 0, 1134, - 0, 1136, 0, 1138, 0, 1140, 0, 1142, - 0, 1144, 0, 1146, 0, 1148, 0, 1150, - 0, 1152, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1162, 0, 1164, 0, 1166, - 0, 1168, 0, 1170, 0, 1172, 0, 1174, - 0, 1176, 0, 1178, 0, 1180, 0, 1182, - 0, 1184, 0, 1186, 0, 1188, 0, 1190, - 0, 1192, 0, 1194, 0, 1196, 0, 1198, - 0, 1200, 0, 1202, 0, 1204, 0, 1206, - 0, 1208, 0, 1210, 0, 1212, 0, 1214, - 0, 0, 1217, 0, 1219, 0, 1221, 0, - 1223, 0, 1225, 0, 1227, 0, 1229, 1216, - 0, 1232, 0, 1234, 0, 1236, 0, 1238, - 0, 1240, 0, 1242, 0, 1244, 0, 1246, - 0, 1248, 0, 1250, 0, 1252, 0, 1254, - 0, 1256, 0, 1258, 0, 1260, 0, 1262, - 0, 1264, 0, 1266, 0, 1268, 0, 1270, - 0, 1272, 0, 1274, 0, 1276, 0, 1278, -}; - -static const of_unichar_t uppercasePage5[0x100] = { - 0, 1280, 0, 1282, 0, 1284, 0, 1286, - 0, 1288, 0, 1290, 0, 1292, 0, 1294, - 0, 1296, 0, 1298, 0, 1300, 0, 1302, - 0, 1304, 0, 1306, 0, 1308, 0, 1310, - 0, 1312, 0, 1314, 0, 1316, 0, 1318, - 0, 1320, 0, 1322, 0, 1324, 0, 1326, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1329, 1330, 1331, 1332, 1333, 1334, 1335, - 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, - 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, - 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, - 1360, 1361, 1362, 1363, 1364, 1365, 1366, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage19[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 5104, 5105, 5106, 5107, 5108, 5109, 0, 0, -}; - -static const of_unichar_t uppercasePage28[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1042, 1044, 1054, 1057, 1058, 1058, 1066, 1122, - 42570, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage29[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 42877, 0, 0, 0, 11363, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage30[0x100] = { - 0, 7680, 0, 7682, 0, 7684, 0, 7686, - 0, 7688, 0, 7690, 0, 7692, 0, 7694, - 0, 7696, 0, 7698, 0, 7700, 0, 7702, - 0, 7704, 0, 7706, 0, 7708, 0, 7710, - 0, 7712, 0, 7714, 0, 7716, 0, 7718, - 0, 7720, 0, 7722, 0, 7724, 0, 7726, - 0, 7728, 0, 7730, 0, 7732, 0, 7734, - 0, 7736, 0, 7738, 0, 7740, 0, 7742, - 0, 7744, 0, 7746, 0, 7748, 0, 7750, - 0, 7752, 0, 7754, 0, 7756, 0, 7758, - 0, 7760, 0, 7762, 0, 7764, 0, 7766, - 0, 7768, 0, 7770, 0, 7772, 0, 7774, - 0, 7776, 0, 7778, 0, 7780, 0, 7782, - 0, 7784, 0, 7786, 0, 7788, 0, 7790, - 0, 7792, 0, 7794, 0, 7796, 0, 7798, - 0, 7800, 0, 7802, 0, 7804, 0, 7806, - 0, 7808, 0, 7810, 0, 7812, 0, 7814, - 0, 7816, 0, 7818, 0, 7820, 0, 7822, - 0, 7824, 0, 7826, 0, 7828, 0, 0, - 0, 0, 0, 7776, 0, 0, 0, 0, - 0, 7840, 0, 7842, 0, 7844, 0, 7846, - 0, 7848, 0, 7850, 0, 7852, 0, 7854, - 0, 7856, 0, 7858, 0, 7860, 0, 7862, - 0, 7864, 0, 7866, 0, 7868, 0, 7870, - 0, 7872, 0, 7874, 0, 7876, 0, 7878, - 0, 7880, 0, 7882, 0, 7884, 0, 7886, - 0, 7888, 0, 7890, 0, 7892, 0, 7894, - 0, 7896, 0, 7898, 0, 7900, 0, 7902, - 0, 7904, 0, 7906, 0, 7908, 0, 7910, - 0, 7912, 0, 7914, 0, 7916, 0, 7918, - 0, 7920, 0, 7922, 0, 7924, 0, 7926, - 0, 7928, 0, 7930, 0, 7932, 0, 7934, -}; - -static const of_unichar_t uppercasePage31[0x100] = { - 7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, - 0, 0, 0, 0, 0, 0, 0, 0, - 7960, 7961, 7962, 7963, 7964, 7965, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 7976, 7977, 7978, 7979, 7980, 7981, 7982, 7983, - 0, 0, 0, 0, 0, 0, 0, 0, - 7992, 7993, 7994, 7995, 7996, 7997, 7998, 7999, - 0, 0, 0, 0, 0, 0, 0, 0, - 8008, 8009, 8010, 8011, 8012, 8013, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8025, 0, 8027, 0, 8029, 0, 8031, - 0, 0, 0, 0, 0, 0, 0, 0, - 8040, 8041, 8042, 8043, 8044, 8045, 8046, 8047, - 0, 0, 0, 0, 0, 0, 0, 0, - 8122, 8123, 8136, 8137, 8138, 8139, 8154, 8155, - 8184, 8185, 8170, 8171, 8186, 8187, 0, 0, - 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, - 0, 0, 0, 0, 0, 0, 0, 0, - 8088, 8089, 8090, 8091, 8092, 8093, 8094, 8095, - 0, 0, 0, 0, 0, 0, 0, 0, - 8104, 8105, 8106, 8107, 8108, 8109, 8110, 8111, - 0, 0, 0, 0, 0, 0, 0, 0, - 8120, 8121, 0, 8124, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 921, 0, - 0, 0, 0, 8140, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8152, 8153, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8168, 8169, 0, 0, 0, 8172, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8188, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage33[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8498, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, - 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, - 0, 0, 0, 0, 8579, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage36[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, - 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, - 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421, - 9422, 9423, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage44[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 11264, 11265, 11266, 11267, 11268, 11269, 11270, 11271, - 11272, 11273, 11274, 11275, 11276, 11277, 11278, 11279, - 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287, - 11288, 11289, 11290, 11291, 11292, 11293, 11294, 11295, - 11296, 11297, 11298, 11299, 11300, 11301, 11302, 11303, - 11304, 11305, 11306, 11307, 11308, 11309, 11310, 0, - 0, 11360, 0, 0, 0, 570, 574, 0, - 11367, 0, 11369, 0, 11371, 0, 0, 0, - 0, 0, 0, 11378, 0, 0, 11381, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11392, 0, 11394, 0, 11396, 0, 11398, - 0, 11400, 0, 11402, 0, 11404, 0, 11406, - 0, 11408, 0, 11410, 0, 11412, 0, 11414, - 0, 11416, 0, 11418, 0, 11420, 0, 11422, - 0, 11424, 0, 11426, 0, 11428, 0, 11430, - 0, 11432, 0, 11434, 0, 11436, 0, 11438, - 0, 11440, 0, 11442, 0, 11444, 0, 11446, - 0, 11448, 0, 11450, 0, 11452, 0, 11454, - 0, 11456, 0, 11458, 0, 11460, 0, 11462, - 0, 11464, 0, 11466, 0, 11468, 0, 11470, - 0, 11472, 0, 11474, 0, 11476, 0, 11478, - 0, 11480, 0, 11482, 0, 11484, 0, 11486, - 0, 11488, 0, 11490, 0, 0, 0, 0, - 0, 0, 0, 0, 11499, 0, 11501, 0, - 0, 0, 0, 11506, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage45[0x100] = { - 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, - 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, - 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, - 4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, - 4288, 4289, 4290, 4291, 4292, 4293, 0, 4295, - 0, 0, 0, 0, 0, 4301, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage166[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 42560, 0, 42562, 0, 42564, 0, 42566, - 0, 42568, 0, 42570, 0, 42572, 0, 42574, - 0, 42576, 0, 42578, 0, 42580, 0, 42582, - 0, 42584, 0, 42586, 0, 42588, 0, 42590, - 0, 42592, 0, 42594, 0, 42596, 0, 42598, - 0, 42600, 0, 42602, 0, 42604, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 42624, 0, 42626, 0, 42628, 0, 42630, - 0, 42632, 0, 42634, 0, 42636, 0, 42638, - 0, 42640, 0, 42642, 0, 42644, 0, 42646, - 0, 42648, 0, 42650, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage167[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 42786, 0, 42788, 0, 42790, - 0, 42792, 0, 42794, 0, 42796, 0, 42798, - 0, 0, 0, 42802, 0, 42804, 0, 42806, - 0, 42808, 0, 42810, 0, 42812, 0, 42814, - 0, 42816, 0, 42818, 0, 42820, 0, 42822, - 0, 42824, 0, 42826, 0, 42828, 0, 42830, - 0, 42832, 0, 42834, 0, 42836, 0, 42838, - 0, 42840, 0, 42842, 0, 42844, 0, 42846, - 0, 42848, 0, 42850, 0, 42852, 0, 42854, - 0, 42856, 0, 42858, 0, 42860, 0, 42862, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 42873, 0, 42875, 0, 0, 42878, - 0, 42880, 0, 42882, 0, 42884, 0, 42886, - 0, 0, 0, 0, 42891, 0, 0, 0, - 0, 42896, 0, 42898, 0, 0, 0, 42902, - 0, 42904, 0, 42906, 0, 42908, 0, 42910, - 0, 42912, 0, 42914, 0, 42916, 0, 42918, - 0, 42920, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 42932, 0, 42934, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage171[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 42931, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, - 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, - 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, - 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, - 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, - 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, - 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, - 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, - 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, - 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage255[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 65313, 65314, 65315, 65316, 65317, 65318, 65319, - 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, - 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, - 65336, 65337, 65338, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage260[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 66560, 66561, 66562, 66563, 66564, 66565, 66566, 66567, - 66568, 66569, 66570, 66571, 66572, 66573, 66574, 66575, - 66576, 66577, 66578, 66579, 66580, 66581, 66582, 66583, - 66584, 66585, 66586, 66587, 66588, 66589, 66590, 66591, - 66592, 66593, 66594, 66595, 66596, 66597, 66598, 66599, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 66736, 66737, 66738, 66739, 66740, 66741, 66742, 66743, - 66744, 66745, 66746, 66747, 66748, 66749, 66750, 66751, - 66752, 66753, 66754, 66755, 66756, 66757, 66758, 66759, - 66760, 66761, 66762, 66763, 66764, 66765, 66766, 66767, - 66768, 66769, 66770, 66771, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage268[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 68736, 68737, 68738, 68739, 68740, 68741, 68742, 68743, - 68744, 68745, 68746, 68747, 68748, 68749, 68750, 68751, - 68752, 68753, 68754, 68755, 68756, 68757, 68758, 68759, - 68760, 68761, 68762, 68763, 68764, 68765, 68766, 68767, - 68768, 68769, 68770, 68771, 68772, 68773, 68774, 68775, - 68776, 68777, 68778, 68779, 68780, 68781, 68782, 68783, - 68784, 68785, 68786, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage280[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 71840, 71841, 71842, 71843, 71844, 71845, 71846, 71847, - 71848, 71849, 71850, 71851, 71852, 71853, 71854, 71855, - 71856, 71857, 71858, 71859, 71860, 71861, 71862, 71863, - 71864, 71865, 71866, 71867, 71868, 71869, 71870, 71871, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t uppercasePage489[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 125184, 125185, 125186, 125187, 125188, 125189, - 125190, 125191, 125192, 125193, 125194, 125195, 125196, 125197, - 125198, 125199, 125200, 125201, 125202, 125203, 125204, 125205, - 125206, 125207, 125208, 125209, 125210, 125211, 125212, 125213, - 125214, 125215, 125216, 125217, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage0[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 0, - 248, 249, 250, 251, 252, 253, 254, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage1[0x100] = { - 257, 0, 259, 0, 261, 0, 263, 0, - 265, 0, 267, 0, 269, 0, 271, 0, - 273, 0, 275, 0, 277, 0, 279, 0, - 281, 0, 283, 0, 285, 0, 287, 0, - 289, 0, 291, 0, 293, 0, 295, 0, - 297, 0, 299, 0, 301, 0, 303, 0, - 105, 0, 307, 0, 309, 0, 311, 0, - 0, 314, 0, 316, 0, 318, 0, 320, - 0, 322, 0, 324, 0, 326, 0, 328, - 0, 0, 331, 0, 333, 0, 335, 0, - 337, 0, 339, 0, 341, 0, 343, 0, - 345, 0, 347, 0, 349, 0, 351, 0, - 353, 0, 355, 0, 357, 0, 359, 0, - 361, 0, 363, 0, 365, 0, 367, 0, - 369, 0, 371, 0, 373, 0, 375, 0, - 255, 378, 0, 380, 0, 382, 0, 0, - 0, 595, 387, 0, 389, 0, 596, 392, - 0, 598, 599, 396, 0, 0, 477, 601, - 603, 402, 0, 608, 611, 0, 617, 616, - 409, 0, 0, 0, 623, 626, 0, 629, - 417, 0, 419, 0, 421, 0, 640, 424, - 0, 643, 0, 0, 429, 0, 648, 432, - 0, 650, 651, 436, 0, 438, 0, 658, - 441, 0, 0, 0, 445, 0, 0, 0, - 0, 0, 0, 0, 454, 454, 0, 457, - 457, 0, 460, 460, 0, 462, 0, 464, - 0, 466, 0, 468, 0, 470, 0, 472, - 0, 474, 0, 476, 0, 0, 479, 0, - 481, 0, 483, 0, 485, 0, 487, 0, - 489, 0, 491, 0, 493, 0, 495, 0, - 0, 499, 499, 0, 501, 0, 405, 447, - 505, 0, 507, 0, 509, 0, 511, 0, -}; - -static const of_unichar_t lowercasePage2[0x100] = { - 513, 0, 515, 0, 517, 0, 519, 0, - 521, 0, 523, 0, 525, 0, 527, 0, - 529, 0, 531, 0, 533, 0, 535, 0, - 537, 0, 539, 0, 541, 0, 543, 0, - 414, 0, 547, 0, 549, 0, 551, 0, - 553, 0, 555, 0, 557, 0, 559, 0, - 561, 0, 563, 0, 0, 0, 0, 0, - 0, 0, 11365, 572, 0, 410, 11366, 0, - 0, 578, 0, 384, 649, 652, 583, 0, - 585, 0, 587, 0, 589, 0, 591, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage3[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 881, 0, 883, 0, 0, 0, 887, 0, - 0, 0, 0, 0, 0, 0, 0, 1011, - 0, 0, 0, 0, 0, 0, 940, 0, - 941, 942, 943, 0, 972, 0, 973, 974, - 0, 945, 946, 947, 948, 949, 950, 951, - 952, 953, 954, 955, 956, 957, 958, 959, - 960, 961, 0, 963, 964, 965, 966, 967, - 968, 969, 970, 971, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 983, - 0, 0, 0, 0, 0, 0, 0, 0, - 985, 0, 987, 0, 989, 0, 991, 0, - 993, 0, 995, 0, 997, 0, 999, 0, - 1001, 0, 1003, 0, 1005, 0, 1007, 0, - 0, 0, 0, 0, 952, 0, 0, 1016, - 0, 1010, 1019, 0, 0, 891, 892, 893, -}; - -static const of_unichar_t lowercasePage4[0x100] = { - 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, - 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, - 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, - 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, - 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, - 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1121, 0, 1123, 0, 1125, 0, 1127, 0, - 1129, 0, 1131, 0, 1133, 0, 1135, 0, - 1137, 0, 1139, 0, 1141, 0, 1143, 0, - 1145, 0, 1147, 0, 1149, 0, 1151, 0, - 1153, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1163, 0, 1165, 0, 1167, 0, - 1169, 0, 1171, 0, 1173, 0, 1175, 0, - 1177, 0, 1179, 0, 1181, 0, 1183, 0, - 1185, 0, 1187, 0, 1189, 0, 1191, 0, - 1193, 0, 1195, 0, 1197, 0, 1199, 0, - 1201, 0, 1203, 0, 1205, 0, 1207, 0, - 1209, 0, 1211, 0, 1213, 0, 1215, 0, - 1231, 1218, 0, 1220, 0, 1222, 0, 1224, - 0, 1226, 0, 1228, 0, 1230, 0, 0, - 1233, 0, 1235, 0, 1237, 0, 1239, 0, - 1241, 0, 1243, 0, 1245, 0, 1247, 0, - 1249, 0, 1251, 0, 1253, 0, 1255, 0, - 1257, 0, 1259, 0, 1261, 0, 1263, 0, - 1265, 0, 1267, 0, 1269, 0, 1271, 0, - 1273, 0, 1275, 0, 1277, 0, 1279, 0, -}; - -static const of_unichar_t lowercasePage5[0x100] = { - 1281, 0, 1283, 0, 1285, 0, 1287, 0, - 1289, 0, 1291, 0, 1293, 0, 1295, 0, - 1297, 0, 1299, 0, 1301, 0, 1303, 0, - 1305, 0, 1307, 0, 1309, 0, 1311, 0, - 1313, 0, 1315, 0, 1317, 0, 1319, 0, - 1321, 0, 1323, 0, 1325, 0, 1327, 0, - 0, 1377, 1378, 1379, 1380, 1381, 1382, 1383, - 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, - 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, - 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, - 1408, 1409, 1410, 1411, 1412, 1413, 1414, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage16[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 11520, 11521, 11522, 11523, 11524, 11525, 11526, 11527, - 11528, 11529, 11530, 11531, 11532, 11533, 11534, 11535, - 11536, 11537, 11538, 11539, 11540, 11541, 11542, 11543, - 11544, 11545, 11546, 11547, 11548, 11549, 11550, 11551, - 11552, 11553, 11554, 11555, 11556, 11557, 0, 11559, - 0, 0, 0, 0, 0, 11565, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage19[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 43888, 43889, 43890, 43891, 43892, 43893, 43894, 43895, - 43896, 43897, 43898, 43899, 43900, 43901, 43902, 43903, - 43904, 43905, 43906, 43907, 43908, 43909, 43910, 43911, - 43912, 43913, 43914, 43915, 43916, 43917, 43918, 43919, - 43920, 43921, 43922, 43923, 43924, 43925, 43926, 43927, - 43928, 43929, 43930, 43931, 43932, 43933, 43934, 43935, - 43936, 43937, 43938, 43939, 43940, 43941, 43942, 43943, - 43944, 43945, 43946, 43947, 43948, 43949, 43950, 43951, - 43952, 43953, 43954, 43955, 43956, 43957, 43958, 43959, - 43960, 43961, 43962, 43963, 43964, 43965, 43966, 43967, - 5112, 5113, 5114, 5115, 5116, 5117, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage30[0x100] = { - 7681, 0, 7683, 0, 7685, 0, 7687, 0, - 7689, 0, 7691, 0, 7693, 0, 7695, 0, - 7697, 0, 7699, 0, 7701, 0, 7703, 0, - 7705, 0, 7707, 0, 7709, 0, 7711, 0, - 7713, 0, 7715, 0, 7717, 0, 7719, 0, - 7721, 0, 7723, 0, 7725, 0, 7727, 0, - 7729, 0, 7731, 0, 7733, 0, 7735, 0, - 7737, 0, 7739, 0, 7741, 0, 7743, 0, - 7745, 0, 7747, 0, 7749, 0, 7751, 0, - 7753, 0, 7755, 0, 7757, 0, 7759, 0, - 7761, 0, 7763, 0, 7765, 0, 7767, 0, - 7769, 0, 7771, 0, 7773, 0, 7775, 0, - 7777, 0, 7779, 0, 7781, 0, 7783, 0, - 7785, 0, 7787, 0, 7789, 0, 7791, 0, - 7793, 0, 7795, 0, 7797, 0, 7799, 0, - 7801, 0, 7803, 0, 7805, 0, 7807, 0, - 7809, 0, 7811, 0, 7813, 0, 7815, 0, - 7817, 0, 7819, 0, 7821, 0, 7823, 0, - 7825, 0, 7827, 0, 7829, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 223, 0, - 7841, 0, 7843, 0, 7845, 0, 7847, 0, - 7849, 0, 7851, 0, 7853, 0, 7855, 0, - 7857, 0, 7859, 0, 7861, 0, 7863, 0, - 7865, 0, 7867, 0, 7869, 0, 7871, 0, - 7873, 0, 7875, 0, 7877, 0, 7879, 0, - 7881, 0, 7883, 0, 7885, 0, 7887, 0, - 7889, 0, 7891, 0, 7893, 0, 7895, 0, - 7897, 0, 7899, 0, 7901, 0, 7903, 0, - 7905, 0, 7907, 0, 7909, 0, 7911, 0, - 7913, 0, 7915, 0, 7917, 0, 7919, 0, - 7921, 0, 7923, 0, 7925, 0, 7927, 0, - 7929, 0, 7931, 0, 7933, 0, 7935, 0, -}; - -static const of_unichar_t lowercasePage31[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 7936, 7937, 7938, 7939, 7940, 7941, 7942, 7943, - 0, 0, 0, 0, 0, 0, 0, 0, - 7952, 7953, 7954, 7955, 7956, 7957, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, - 0, 0, 0, 0, 0, 0, 0, 0, - 7984, 7985, 7986, 7987, 7988, 7989, 7990, 7991, - 0, 0, 0, 0, 0, 0, 0, 0, - 8000, 8001, 8002, 8003, 8004, 8005, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8017, 0, 8019, 0, 8021, 0, 8023, - 0, 0, 0, 0, 0, 0, 0, 0, - 8032, 8033, 8034, 8035, 8036, 8037, 8038, 8039, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, - 0, 0, 0, 0, 0, 0, 0, 0, - 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, - 0, 0, 0, 0, 0, 0, 0, 0, - 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, - 0, 0, 0, 0, 0, 0, 0, 0, - 8112, 8113, 8048, 8049, 8115, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8050, 8051, 8052, 8053, 8131, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8144, 8145, 8054, 8055, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8160, 8161, 8058, 8059, 8165, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8056, 8057, 8060, 8061, 8179, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage33[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 969, 0, - 0, 0, 107, 229, 0, 0, 0, 0, - 0, 0, 8526, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, - 8568, 8569, 8570, 8571, 8572, 8573, 8574, 8575, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8580, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage36[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9424, 9425, - 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, - 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, - 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage44[0x100] = { - 11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, - 11320, 11321, 11322, 11323, 11324, 11325, 11326, 11327, - 11328, 11329, 11330, 11331, 11332, 11333, 11334, 11335, - 11336, 11337, 11338, 11339, 11340, 11341, 11342, 11343, - 11344, 11345, 11346, 11347, 11348, 11349, 11350, 11351, - 11352, 11353, 11354, 11355, 11356, 11357, 11358, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 11361, 0, 619, 7549, 637, 0, 0, 11368, - 0, 11370, 0, 11372, 0, 593, 625, 592, - 594, 0, 11379, 0, 0, 11382, 0, 0, - 0, 0, 0, 0, 0, 0, 575, 576, - 11393, 0, 11395, 0, 11397, 0, 11399, 0, - 11401, 0, 11403, 0, 11405, 0, 11407, 0, - 11409, 0, 11411, 0, 11413, 0, 11415, 0, - 11417, 0, 11419, 0, 11421, 0, 11423, 0, - 11425, 0, 11427, 0, 11429, 0, 11431, 0, - 11433, 0, 11435, 0, 11437, 0, 11439, 0, - 11441, 0, 11443, 0, 11445, 0, 11447, 0, - 11449, 0, 11451, 0, 11453, 0, 11455, 0, - 11457, 0, 11459, 0, 11461, 0, 11463, 0, - 11465, 0, 11467, 0, 11469, 0, 11471, 0, - 11473, 0, 11475, 0, 11477, 0, 11479, 0, - 11481, 0, 11483, 0, 11485, 0, 11487, 0, - 11489, 0, 11491, 0, 0, 0, 0, 0, - 0, 0, 0, 11500, 0, 11502, 0, 0, - 0, 0, 11507, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage166[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 42561, 0, 42563, 0, 42565, 0, 42567, 0, - 42569, 0, 42571, 0, 42573, 0, 42575, 0, - 42577, 0, 42579, 0, 42581, 0, 42583, 0, - 42585, 0, 42587, 0, 42589, 0, 42591, 0, - 42593, 0, 42595, 0, 42597, 0, 42599, 0, - 42601, 0, 42603, 0, 42605, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 42625, 0, 42627, 0, 42629, 0, 42631, 0, - 42633, 0, 42635, 0, 42637, 0, 42639, 0, - 42641, 0, 42643, 0, 42645, 0, 42647, 0, - 42649, 0, 42651, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage167[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 42787, 0, 42789, 0, 42791, 0, - 42793, 0, 42795, 0, 42797, 0, 42799, 0, - 0, 0, 42803, 0, 42805, 0, 42807, 0, - 42809, 0, 42811, 0, 42813, 0, 42815, 0, - 42817, 0, 42819, 0, 42821, 0, 42823, 0, - 42825, 0, 42827, 0, 42829, 0, 42831, 0, - 42833, 0, 42835, 0, 42837, 0, 42839, 0, - 42841, 0, 42843, 0, 42845, 0, 42847, 0, - 42849, 0, 42851, 0, 42853, 0, 42855, 0, - 42857, 0, 42859, 0, 42861, 0, 42863, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 42874, 0, 42876, 0, 7545, 42879, 0, - 42881, 0, 42883, 0, 42885, 0, 42887, 0, - 0, 0, 0, 42892, 0, 613, 0, 0, - 42897, 0, 42899, 0, 0, 0, 42903, 0, - 42905, 0, 42907, 0, 42909, 0, 42911, 0, - 42913, 0, 42915, 0, 42917, 0, 42919, 0, - 42921, 0, 614, 604, 609, 620, 618, 0, - 670, 647, 669, 43859, 42933, 0, 42935, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage255[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 65345, 65346, 65347, 65348, 65349, 65350, 65351, - 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, - 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, - 65368, 65369, 65370, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage260[0x100] = { - 66600, 66601, 66602, 66603, 66604, 66605, 66606, 66607, - 66608, 66609, 66610, 66611, 66612, 66613, 66614, 66615, - 66616, 66617, 66618, 66619, 66620, 66621, 66622, 66623, - 66624, 66625, 66626, 66627, 66628, 66629, 66630, 66631, - 66632, 66633, 66634, 66635, 66636, 66637, 66638, 66639, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 66776, 66777, 66778, 66779, 66780, 66781, 66782, 66783, - 66784, 66785, 66786, 66787, 66788, 66789, 66790, 66791, - 66792, 66793, 66794, 66795, 66796, 66797, 66798, 66799, - 66800, 66801, 66802, 66803, 66804, 66805, 66806, 66807, - 66808, 66809, 66810, 66811, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage268[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 68800, 68801, 68802, 68803, 68804, 68805, 68806, 68807, - 68808, 68809, 68810, 68811, 68812, 68813, 68814, 68815, - 68816, 68817, 68818, 68819, 68820, 68821, 68822, 68823, - 68824, 68825, 68826, 68827, 68828, 68829, 68830, 68831, - 68832, 68833, 68834, 68835, 68836, 68837, 68838, 68839, - 68840, 68841, 68842, 68843, 68844, 68845, 68846, 68847, - 68848, 68849, 68850, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage280[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 71872, 71873, 71874, 71875, 71876, 71877, 71878, 71879, - 71880, 71881, 71882, 71883, 71884, 71885, 71886, 71887, - 71888, 71889, 71890, 71891, 71892, 71893, 71894, 71895, - 71896, 71897, 71898, 71899, 71900, 71901, 71902, 71903, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t lowercasePage489[0x100] = { - 125218, 125219, 125220, 125221, 125222, 125223, 125224, 125225, - 125226, 125227, 125228, 125229, 125230, 125231, 125232, 125233, - 125234, 125235, 125236, 125237, 125238, 125239, 125240, 125241, - 125242, 125243, 125244, 125245, 125246, 125247, 125248, 125249, - 125250, 125251, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t titlecasePage1[0x100] = { - 0, 256, 0, 258, 0, 260, 0, 262, - 0, 264, 0, 266, 0, 268, 0, 270, - 0, 272, 0, 274, 0, 276, 0, 278, - 0, 280, 0, 282, 0, 284, 0, 286, - 0, 288, 0, 290, 0, 292, 0, 294, - 0, 296, 0, 298, 0, 300, 0, 302, - 0, 73, 0, 306, 0, 308, 0, 310, - 0, 0, 313, 0, 315, 0, 317, 0, - 319, 0, 321, 0, 323, 0, 325, 0, - 327, 0, 0, 330, 0, 332, 0, 334, - 0, 336, 0, 338, 0, 340, 0, 342, - 0, 344, 0, 346, 0, 348, 0, 350, - 0, 352, 0, 354, 0, 356, 0, 358, - 0, 360, 0, 362, 0, 364, 0, 366, - 0, 368, 0, 370, 0, 372, 0, 374, - 0, 0, 377, 0, 379, 0, 381, 83, - 579, 0, 0, 386, 0, 388, 0, 0, - 391, 0, 0, 0, 395, 0, 0, 0, - 0, 0, 401, 0, 0, 502, 0, 0, - 0, 408, 573, 0, 0, 0, 544, 0, - 0, 416, 0, 418, 0, 420, 0, 0, - 423, 0, 0, 0, 0, 428, 0, 0, - 431, 0, 0, 0, 435, 0, 437, 0, - 0, 440, 0, 0, 0, 444, 0, 503, - 0, 0, 0, 0, 453, 453, 453, 456, - 456, 456, 459, 459, 459, 0, 461, 0, - 463, 0, 465, 0, 467, 0, 469, 0, - 471, 0, 473, 0, 475, 398, 0, 478, - 0, 480, 0, 482, 0, 484, 0, 486, - 0, 488, 0, 490, 0, 492, 0, 494, - 0, 498, 498, 498, 0, 500, 0, 0, - 0, 504, 0, 506, 0, 508, 0, 510, -}; - -static const of_unichar_t casefoldingPage0[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 956, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 0, - 248, 249, 250, 251, 252, 253, 254, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t casefoldingPage1[0x100] = { - 257, 0, 259, 0, 261, 0, 263, 0, - 265, 0, 267, 0, 269, 0, 271, 0, - 273, 0, 275, 0, 277, 0, 279, 0, - 281, 0, 283, 0, 285, 0, 287, 0, - 289, 0, 291, 0, 293, 0, 295, 0, - 297, 0, 299, 0, 301, 0, 303, 0, - 0, 0, 307, 0, 309, 0, 311, 0, - 0, 314, 0, 316, 0, 318, 0, 320, - 0, 322, 0, 324, 0, 326, 0, 328, - 0, 0, 331, 0, 333, 0, 335, 0, - 337, 0, 339, 0, 341, 0, 343, 0, - 345, 0, 347, 0, 349, 0, 351, 0, - 353, 0, 355, 0, 357, 0, 359, 0, - 361, 0, 363, 0, 365, 0, 367, 0, - 369, 0, 371, 0, 373, 0, 375, 0, - 255, 378, 0, 380, 0, 382, 0, 115, - 0, 595, 387, 0, 389, 0, 596, 392, - 0, 598, 599, 396, 0, 0, 477, 601, - 603, 402, 0, 608, 611, 0, 617, 616, - 409, 0, 0, 0, 623, 626, 0, 629, - 417, 0, 419, 0, 421, 0, 640, 424, - 0, 643, 0, 0, 429, 0, 648, 432, - 0, 650, 651, 436, 0, 438, 0, 658, - 441, 0, 0, 0, 445, 0, 0, 0, - 0, 0, 0, 0, 454, 454, 0, 457, - 457, 0, 460, 460, 0, 462, 0, 464, - 0, 466, 0, 468, 0, 470, 0, 472, - 0, 474, 0, 476, 0, 0, 479, 0, - 481, 0, 483, 0, 485, 0, 487, 0, - 489, 0, 491, 0, 493, 0, 495, 0, - 0, 499, 499, 0, 501, 0, 405, 447, - 505, 0, 507, 0, 509, 0, 511, 0, -}; - -static const of_unichar_t casefoldingPage3[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 953, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 881, 0, 883, 0, 0, 0, 887, 0, - 0, 0, 0, 0, 0, 0, 0, 1011, - 0, 0, 0, 0, 0, 0, 940, 0, - 941, 942, 943, 0, 972, 0, 973, 974, - 0, 945, 946, 947, 948, 949, 950, 951, - 952, 953, 954, 955, 956, 957, 958, 959, - 960, 961, 0, 963, 964, 965, 966, 967, - 968, 969, 970, 971, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 963, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 983, - 946, 952, 0, 0, 0, 966, 960, 0, - 985, 0, 987, 0, 989, 0, 991, 0, - 993, 0, 995, 0, 997, 0, 999, 0, - 1001, 0, 1003, 0, 1005, 0, 1007, 0, - 954, 961, 0, 0, 952, 949, 0, 1016, - 0, 1010, 1019, 0, 0, 891, 892, 893, -}; - -static const of_unichar_t casefoldingPage19[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 5104, 5105, 5106, 5107, 5108, 5109, 0, 0, -}; - -static const of_unichar_t casefoldingPage28[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1074, 1076, 1086, 1089, 1090, 1090, 1098, 1123, - 42571, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const of_unichar_t casefoldingPage30[0x100] = { - 7681, 0, 7683, 0, 7685, 0, 7687, 0, - 7689, 0, 7691, 0, 7693, 0, 7695, 0, - 7697, 0, 7699, 0, 7701, 0, 7703, 0, - 7705, 0, 7707, 0, 7709, 0, 7711, 0, - 7713, 0, 7715, 0, 7717, 0, 7719, 0, - 7721, 0, 7723, 0, 7725, 0, 7727, 0, - 7729, 0, 7731, 0, 7733, 0, 7735, 0, - 7737, 0, 7739, 0, 7741, 0, 7743, 0, - 7745, 0, 7747, 0, 7749, 0, 7751, 0, - 7753, 0, 7755, 0, 7757, 0, 7759, 0, - 7761, 0, 7763, 0, 7765, 0, 7767, 0, - 7769, 0, 7771, 0, 7773, 0, 7775, 0, - 7777, 0, 7779, 0, 7781, 0, 7783, 0, - 7785, 0, 7787, 0, 7789, 0, 7791, 0, - 7793, 0, 7795, 0, 7797, 0, 7799, 0, - 7801, 0, 7803, 0, 7805, 0, 7807, 0, - 7809, 0, 7811, 0, 7813, 0, 7815, 0, - 7817, 0, 7819, 0, 7821, 0, 7823, 0, - 7825, 0, 7827, 0, 7829, 0, 0, 0, - 0, 0, 0, 7777, 0, 0, 223, 0, - 7841, 0, 7843, 0, 7845, 0, 7847, 0, - 7849, 0, 7851, 0, 7853, 0, 7855, 0, - 7857, 0, 7859, 0, 7861, 0, 7863, 0, - 7865, 0, 7867, 0, 7869, 0, 7871, 0, - 7873, 0, 7875, 0, 7877, 0, 7879, 0, - 7881, 0, 7883, 0, 7885, 0, 7887, 0, - 7889, 0, 7891, 0, 7893, 0, 7895, 0, - 7897, 0, 7899, 0, 7901, 0, 7903, 0, - 7905, 0, 7907, 0, 7909, 0, 7911, 0, - 7913, 0, 7915, 0, 7917, 0, 7919, 0, - 7921, 0, 7923, 0, 7925, 0, 7927, 0, - 7929, 0, 7931, 0, 7933, 0, 7935, 0, -}; - -static const of_unichar_t casefoldingPage31[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 7936, 7937, 7938, 7939, 7940, 7941, 7942, 7943, - 0, 0, 0, 0, 0, 0, 0, 0, - 7952, 7953, 7954, 7955, 7956, 7957, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, - 0, 0, 0, 0, 0, 0, 0, 0, - 7984, 7985, 7986, 7987, 7988, 7989, 7990, 7991, - 0, 0, 0, 0, 0, 0, 0, 0, - 8000, 8001, 8002, 8003, 8004, 8005, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8017, 0, 8019, 0, 8021, 0, 8023, - 0, 0, 0, 0, 0, 0, 0, 0, - 8032, 8033, 8034, 8035, 8036, 8037, 8038, 8039, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8064, 8065, 8066, 8067, 8068, 8069, 8070, 8071, - 0, 0, 0, 0, 0, 0, 0, 0, - 8080, 8081, 8082, 8083, 8084, 8085, 8086, 8087, - 0, 0, 0, 0, 0, 0, 0, 0, - 8096, 8097, 8098, 8099, 8100, 8101, 8102, 8103, - 0, 0, 0, 0, 0, 0, 0, 0, - 8112, 8113, 8048, 8049, 8115, 0, 953, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8050, 8051, 8052, 8053, 8131, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8144, 8145, 8054, 8055, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8160, 8161, 8058, 8059, 8165, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 8056, 8057, 8060, 8061, 8179, 0, 0, 0, -}; - -static const of_unichar_t casefoldingPage171[0x100] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, - 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, - 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, - 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055, - 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063, - 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, - 5072, 5073, 5074, 5075, 5076, 5077, 5078, 5079, - 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, - 5088, 5089, 5090, 5091, 5092, 5093, 5094, 5095, - 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -}; - -const of_unichar_t *const of_unicode_uppercase_table[0x1EA] = { - uppercasePage0, uppercasePage1, uppercasePage2, uppercasePage3, - uppercasePage4, uppercasePage5, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, uppercasePage19, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - uppercasePage28, uppercasePage29, uppercasePage30, uppercasePage31, - emptyPage, uppercasePage33, emptyPage, emptyPage, - uppercasePage36, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - uppercasePage44, uppercasePage45, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, uppercasePage166, uppercasePage167, - emptyPage, emptyPage, emptyPage, uppercasePage171, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, uppercasePage255, - emptyPage, emptyPage, emptyPage, emptyPage, - uppercasePage260, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - uppercasePage268, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - uppercasePage280, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, uppercasePage489 -}; - -const of_unichar_t *const of_unicode_lowercase_table[0x1EA] = { - lowercasePage0, lowercasePage1, lowercasePage2, lowercasePage3, - lowercasePage4, lowercasePage5, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - lowercasePage16, emptyPage, emptyPage, lowercasePage19, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, lowercasePage30, lowercasePage31, - emptyPage, lowercasePage33, emptyPage, emptyPage, - lowercasePage36, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - lowercasePage44, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, lowercasePage166, lowercasePage167, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, lowercasePage255, - emptyPage, emptyPage, emptyPage, emptyPage, - lowercasePage260, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - lowercasePage268, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - lowercasePage280, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, lowercasePage489 -}; - -const of_unichar_t *const of_unicode_titlecase_table[0x1EA] = { - uppercasePage0, titlecasePage1, uppercasePage2, uppercasePage3, - uppercasePage4, uppercasePage5, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, uppercasePage19, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - uppercasePage28, uppercasePage29, uppercasePage30, uppercasePage31, - emptyPage, uppercasePage33, emptyPage, emptyPage, - uppercasePage36, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - uppercasePage44, uppercasePage45, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, uppercasePage166, uppercasePage167, - emptyPage, emptyPage, emptyPage, uppercasePage171, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, uppercasePage255, - emptyPage, emptyPage, emptyPage, emptyPage, - uppercasePage260, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - uppercasePage268, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - uppercasePage280, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, emptyPage, - emptyPage, uppercasePage489 -}; - -const of_unichar_t *const of_unicode_casefolding_table[0x1EA] = { - casefoldingPage0, casefoldingPage1, lowercasePage2, - casefoldingPage3, lowercasePage4, lowercasePage5, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, lowercasePage16, emptyPage, - emptyPage, casefoldingPage19, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, casefoldingPage28, emptyPage, - casefoldingPage30, casefoldingPage31, emptyPage, - lowercasePage33, emptyPage, emptyPage, - lowercasePage36, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, lowercasePage44, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, lowercasePage166, lowercasePage167, - emptyPage, emptyPage, emptyPage, - casefoldingPage171, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - lowercasePage255, emptyPage, emptyPage, - emptyPage, emptyPage, lowercasePage260, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, lowercasePage268, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, lowercasePage280, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - emptyPage, emptyPage, emptyPage, - lowercasePage489 -}; DELETED src/windows_1251.m Index: src/windows_1251.m ================================================================== --- src/windows_1251.m +++ src/windows_1251.m @@ -1,263 +0,0 @@ -/* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE.QPL included in - * the packaging of this file. - * - * Alternatively, it may be distributed under the terms of the GNU General - * Public License, either version 2 or 3, which can be found in the file - * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this - * file. - */ - -#include "config.h" - -#import "OFString.h" - -const of_char16_t of_windows_1251[128] = { - 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, - 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, - 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0xFFFF, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, - 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, - 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, - 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, - 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F -}; - -bool -of_unicode_to_windows_1251(const of_unichar_t *input, unsigned char *output, - size_t length, bool lossy) -{ - for (size_t i = 0; i < length; i++) { - of_unichar_t c = input[i]; - - if OF_UNLIKELY (c > 0x7F) { - if OF_UNLIKELY (c > 0xFFFF) { - if (lossy) { - output[i] = '?'; - continue; - } else - return false; - } - - if OF_LIKELY (c >= 0x410 && c <= 0x44F) - output[i] = 0xC0 + (c - 0x410); - else { - switch ((of_char16_t)c) { - case 0x402: - output[i] = 0x80; - break; - case 0x403: - output[i] = 0x81; - break; - case 0x201A: - output[i] = 0x82; - break; - case 0x453: - output[i] = 0x83; - break; - case 0x201E: - output[i] = 0x84; - break; - case 0x2026: - output[i] = 0x85; - break; - case 0x2020: - output[i] = 0x86; - break; - case 0x2021: - output[i] = 0x87; - break; - case 0x20AC: - output[i] = 0x88; - break; - case 0x2030: - output[i] = 0x89; - break; - case 0x409: - output[i] = 0x8A; - break; - case 0x2039: - output[i] = 0x8B; - break; - case 0x40A: - output[i] = 0x8C; - break; - case 0x40C: - output[i] = 0x8D; - break; - case 0x40B: - output[i] = 0x8E; - break; - case 0x40F: - output[i] = 0x8F; - break; - case 0x452: - output[i] = 0x90; - break; - case 0x2018: - output[i] = 0x91; - break; - case 0x2019: - output[i] = 0x92; - break; - case 0x201C: - output[i] = 0x93; - break; - case 0x201D: - output[i] = 0x94; - break; - case 0x2022: - output[i] = 0x95; - break; - case 0x2013: - output[i] = 0x96; - break; - case 0x2014: - output[i] = 0x97; - break; - case 0x2122: - output[i] = 0x99; - break; - case 0x459: - output[i] = 0x9A; - break; - case 0x203A: - output[i] = 0x9B; - break; - case 0x45A: - output[i] = 0x9C; - break; - case 0x45C: - output[i] = 0x9D; - break; - case 0x45B: - output[i] = 0x9E; - break; - case 0x45F: - output[i] = 0x9F; - break; - case 0xA0: - output[i] = 0xA0; - break; - case 0x40E: - output[i] = 0xA1; - break; - case 0x45E: - output[i] = 0xA2; - break; - case 0x408: - output[i] = 0xA3; - break; - case 0xA4: - output[i] = 0xA4; - break; - case 0x490: - output[i] = 0xA5; - break; - case 0xA6: - output[i] = 0xA6; - break; - case 0xA7: - output[i] = 0xA7; - break; - case 0x401: - output[i] = 0xA8; - break; - case 0xA9: - output[i] = 0xA9; - break; - case 0x404: - output[i] = 0xAA; - break; - case 0xAB: - output[i] = 0xAB; - break; - case 0xAC: - output[i] = 0xAC; - break; - case 0xAD: - output[i] = 0xAD; - break; - case 0xAE: - output[i] = 0xAE; - break; - case 0x407: - output[i] = 0xAF; - break; - case 0xB0: - output[i] = 0xB0; - break; - case 0xB1: - output[i] = 0xB1; - break; - case 0x406: - output[i] = 0xB2; - break; - case 0x456: - output[i] = 0xB3; - break; - case 0x491: - output[i] = 0xB4; - break; - case 0xB5: - output[i] = 0xB5; - break; - case 0xB6: - output[i] = 0xB6; - break; - case 0xB7: - output[i] = 0xB7; - break; - case 0x451: - output[i] = 0xB8; - break; - case 0x2116: - output[i] = 0xB9; - break; - case 0x454: - output[i] = 0xBA; - break; - case 0xBB: - output[i] = 0xBB; - break; - case 0x458: - output[i] = 0xBC; - break; - case 0x405: - output[i] = 0xBD; - break; - case 0x455: - output[i] = 0xBE; - break; - case 0x457: - output[i] = 0xBF; - break; - default: - if (lossy) - output[i] = '?'; - else - return false; - - break; - } - } - } else - output[i] = (unsigned char)c; - } - - return true; -} DELETED src/windows_1252.m Index: src/windows_1252.m ================================================================== --- src/windows_1252.m +++ src/windows_1252.m @@ -1,158 +0,0 @@ -/* - * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 - * Jonathan Schleifer - * - * All rights reserved. - * - * This file is part of ObjFW. It may be distributed under the terms of the - * Q Public License 1.0, which can be found in the file LICENSE.QPL included in - * the packaging of this file. - * - * Alternatively, it may be distributed under the terms of the GNU General - * Public License, either version 2 or 3, which can be found in the file - * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this - * file. - */ - -#include "config.h" - -#import "OFString.h" - -const of_char16_t of_windows_1252[128] = { - 0x20AC, 0xFFFF, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, - 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0xFFFF, 0x017D, 0xFFFF, - 0xFFFF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFF, 0x017E, 0x0178, - 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, - 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, - 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, - 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, - 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, - 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, - 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, - 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, - 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, - 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, - 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, - 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF -}; - -bool -of_unicode_to_windows_1252(const of_unichar_t *input, unsigned char *output, - size_t length, bool lossy) -{ - for (size_t i = 0; i < length; i++) { - of_unichar_t c = input[i]; - - if OF_UNLIKELY (c > 0xFF) { - if OF_UNLIKELY (c > 0xFFFF) { - if (lossy) { - output[i] = '?'; - continue; - } else - return false; - } - - switch ((of_char16_t)c) { - case 0x20AC: - output[i] = 0x80; - break; - case 0x201A: - output[i] = 0x82; - break; - case 0x192: - output[i] = 0x83; - break; - case 0x201E: - output[i] = 0x84; - break; - case 0x2026: - output[i] = 0x85; - break; - case 0x2020: - output[i] = 0x86; - break; - case 0x2021: - output[i] = 0x87; - break; - case 0x2C6: - output[i] = 0x88; - break; - case 0x2030: - output[i] = 0x89; - break; - case 0x160: - output[i] = 0x8A; - break; - case 0x2039: - output[i] = 0x8B; - break; - case 0x152: - output[i] = 0x8C; - break; - case 0x17D: - output[i] = 0x8E; - break; - case 0x2018: - output[i] = 0x91; - break; - case 0x2019: - output[i] = 0x92; - break; - case 0x201C: - output[i] = 0x93; - break; - case 0x201D: - output[i] = 0x94; - break; - case 0x2022: - output[i] = 0x95; - break; - case 0x2013: - output[i] = 0x96; - break; - case 0x2014: - output[i] = 0x97; - break; - case 0x2DC: - output[i] = 0x98; - break; - case 0x2122: - output[i] = 0x99; - break; - case 0x161: - output[i] = 0x9A; - break; - case 0x203A: - output[i] = 0x9B; - break; - case 0x153: - output[i] = 0x9C; - break; - case 0x17E: - output[i] = 0x9E; - break; - case 0x178: - output[i] = 0x9F; - break; - default: - if (lossy) - output[i] = '?'; - else - return false; - - break; - } - } else { - if OF_UNLIKELY (c >= 0x80 && c <= 0x9F) { - if (lossy) - output[i] = '?'; - else - return false; - } else - output[i] = (unsigned char)c; - } - } - - return true; -}