intl/uconv/ucvko/nsCP949ToUnicode.cpp

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

michael@0 1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
michael@0 2 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 3 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 5
michael@0 6 #include "nsCP949ToUnicode.h"
michael@0 7 #include "nsUCvKODll.h"
michael@0 8 #include "nsUCConstructors.h"
michael@0 9
michael@0 10 //----------------------------------------------------------------------
michael@0 11 // Global functions and data [declaration]
michael@0 12
michael@0 13 static const uScanClassID g_CP949ScanClassIDs[] = {
michael@0 14 u1ByteCharset,
michael@0 15 // This is necessary to decode 8byte sequence representation of Hangul
michael@0 16 // syllables. This representation is uniq to EUC-KR and is not used
michael@0 17 // in CP949. However, this converter is for both EUC-KR and CP949
michael@0 18 // so that this class ID is put here. See bug 131388.
michael@0 19 uDecomposedHangulCharset,
michael@0 20 u2BytesGRCharset, // EUC_KR
michael@0 21 u2BytesGR128Charset, // CP949 High
michael@0 22 u2BytesCharset // CP949 Low
michael@0 23 };
michael@0 24
michael@0 25 // CP949(non-EUC-KR portion) to Unicode
michael@0 26 static const uint16_t g_utCP949NoKSCHangulMapping[] = {
michael@0 27 #include "u20cp949hangul.ut"
michael@0 28 };
michael@0 29
michael@0 30 static const uRange g_CP949Ranges[] = {
michael@0 31 { 0x00, 0x7F },
michael@0 32 { 0xA4, 0xA4 }, // 8byte seq. for Hangul syllables not available
michael@0 33 // in pre-composed form in KS X 1001
michael@0 34 { 0xA1, 0xFE },
michael@0 35 { 0xA1, 0xC6 }, // CP949 extension B. ends at 0xC6.
michael@0 36 { 0x80, 0xA0 }
michael@0 37 };
michael@0 38
michael@0 39 static const uint16_t *g_CP949MappingTableSet [] ={
michael@0 40 g_ASCIIMappingTable,
michael@0 41 g_HangulNullMapping,
michael@0 42 g_utKSC5601Mapping,
michael@0 43 g_utCP949NoKSCHangulMapping,
michael@0 44 g_utCP949NoKSCHangulMapping
michael@0 45 //g_CP949HighMapping,
michael@0 46 //g_CP949LowMapping
michael@0 47 };
michael@0 48
michael@0 49
michael@0 50 nsresult
michael@0 51 nsCP949ToUnicodeConstructor(nsISupports *aOuter, REFNSIID aIID,
michael@0 52 void **aResult)
michael@0 53 {
michael@0 54 return CreateMultiTableDecoder(sizeof(g_CP949Ranges) / sizeof(g_CP949Ranges[0]),
michael@0 55 (const uRange*) &g_CP949Ranges,
michael@0 56 (uScanClassID*) &g_CP949ScanClassIDs,
michael@0 57 (uMappingTable**) &g_CP949MappingTableSet, 1,
michael@0 58 aOuter, aIID, aResult);
michael@0 59 }
michael@0 60

mercurial