ICU-5891 Implementation of CSS2 escaping.
X-SVN-Rev: 22703
This commit is contained in:
parent
17fc0d7fbf
commit
65457ffe5b
@ -40,12 +40,14 @@
|
||||
#define UNICODE_PLUS_CODEPOINT 0x002B
|
||||
#define UNICODE_LEFT_CURLY_CODEPOINT 0x007B
|
||||
#define UNICODE_RIGHT_CURLY_CODEPOINT 0x007D
|
||||
#define UNICODE_SPACE_CODEPOINT 0x0020
|
||||
#define UCNV_PRV_ESCAPE_ICU 0
|
||||
#define UCNV_PRV_ESCAPE_C 'C'
|
||||
#define UCNV_PRV_ESCAPE_XML_DEC 'D'
|
||||
#define UCNV_PRV_ESCAPE_XML_HEX 'X'
|
||||
#define UCNV_PRV_ESCAPE_JAVA 'J'
|
||||
#define UCNV_PRV_ESCAPE_UNICODE 'U'
|
||||
#define UCNV_PRV_ESCAPE_CSS2 'S'
|
||||
#define UCNV_PRV_STOP_ON_ILLEGAL 'i'
|
||||
|
||||
/*Function Pointer STOPS at the ILLEGAL_SEQUENCE */
|
||||
@ -241,6 +243,18 @@ UCNV_FROM_U_CALLBACK_ESCAPE (
|
||||
valueString[valueStringLength++] = (UChar) UNICODE_RIGHT_CURLY_CODEPOINT; /* adding } */
|
||||
break;
|
||||
|
||||
case UCNV_PRV_ESCAPE_CSS2:
|
||||
valueString[valueStringLength++] = (UChar) UNICODE_RS_CODEPOINT; /* adding \ */
|
||||
if (length == 2) {
|
||||
valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, codePoint, 16, 0);
|
||||
} else {
|
||||
valueStringLength += uprv_itou (valueString + valueStringLength, VALUE_STRING_LENGTH - valueStringLength, (uint16_t)codeUnits[0], 16, 0);
|
||||
}
|
||||
/* Always add space character, becase the next character might be whitespace,
|
||||
which would erroneously be considered the termination of the escape sequence. */
|
||||
valueString[valueStringLength++] = (UChar) UNICODE_SPACE_CODEPOINT;
|
||||
break;
|
||||
|
||||
default:
|
||||
while (i < length)
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
**********************************************************************
|
||||
* Copyright (C) 1999-2005, International Business Machines
|
||||
* Copyright (C) 1999-2007, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
**********************************************************************
|
||||
*
|
||||
@ -134,11 +134,18 @@ typedef struct UConverter UConverter;
|
||||
*/
|
||||
#define UCNV_ESCAPE_XML_HEX "X"
|
||||
/**
|
||||
* FROM_U_CALLBACK_ESCAPE context option to escape teh code unit according to Unicode (U+XXXXX)
|
||||
* FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to Unicode (U+XXXXX)
|
||||
* @stable ICU 2.0
|
||||
*/
|
||||
#define UCNV_ESCAPE_UNICODE "U"
|
||||
|
||||
/**
|
||||
* FROM_U_CALLBACK_ESCAPE context option to escape the code unit according to CSS2 conventions (\\X{XXXXX} followed by
|
||||
* a space.
|
||||
* @stable ICU 4.0
|
||||
*/
|
||||
#define UCNV_ESCAPE_CSS2 "S"
|
||||
|
||||
/**
|
||||
* The process condition code to be used with the callbacks.
|
||||
* Codes which are greater than UCNV_IRREGULAR should be
|
||||
|
@ -1,6 +1,6 @@
|
||||
/********************************************************************
|
||||
* COPYRIGHT:
|
||||
* Copyright (c) 1997-2006, International Business Machines Corporation and
|
||||
* Copyright (c) 1997-2007, International Business Machines Corporation and
|
||||
* others. All Rights Reserved.
|
||||
********************************************************************/
|
||||
/*
|
||||
@ -2177,6 +2177,39 @@ static void TestSubWithValue(int32_t inputsize, int32_t outputsize)
|
||||
UCNV_FROM_U_CALLBACK_ESCAPE, from_iso_2022_cnOffs7_v2, NULL, 0,"K" ,U_ZERO_ERROR ))
|
||||
log_err("u-> iso-2022-cn with sub & K did not match.\n");
|
||||
|
||||
}
|
||||
{
|
||||
static const UChar iso_2022_cn_inputText8[]={
|
||||
0x3000,
|
||||
0xD84D, 0xDC56,
|
||||
0x3001,
|
||||
0xD84D, 0xDC56,
|
||||
0xDBFF, 0xDFFF,
|
||||
0x0042,
|
||||
0x0902};
|
||||
static const uint8_t to_iso_2022_cn8_v2[]={
|
||||
0x1b, 0x24, 0x29, 0x41, 0x0e, 0x21, 0x21,
|
||||
0x0f, 0x5c, 0x32, 0x33, 0x34, 0x35, 0x36, 0x20,
|
||||
0x0e, 0x21, 0x22,
|
||||
0x0f, 0x5c, 0x32, 0x33, 0x34, 0x35, 0x36, 0x20,
|
||||
0x5c, 0x31, 0x30, 0x46, 0x46, 0x46, 0x46, 0x20,
|
||||
0x42,
|
||||
0x5c, 0x39, 0x30, 0x32, 0x20
|
||||
};
|
||||
static const int32_t from_iso_2022_cnOffs8_v2 [] ={
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
3, 3, 3,
|
||||
4, 4, 4, 4, 4, 4, 4, 4,
|
||||
6, 6, 6, 6, 6, 6, 6, 6,
|
||||
8,
|
||||
9, 9, 9, 9, 9
|
||||
};
|
||||
if(!testConvertFromUnicodeWithContext(iso_2022_cn_inputText8, sizeof(iso_2022_cn_inputText8)/sizeof(iso_2022_cn_inputText8[0]),
|
||||
to_iso_2022_cn8_v2, sizeof(to_iso_2022_cn8_v2), "iso-2022-cn",
|
||||
UCNV_FROM_U_CALLBACK_ESCAPE, from_iso_2022_cnOffs8_v2, NULL, 0,UCNV_ESCAPE_CSS2,U_ZERO_ERROR ))
|
||||
log_err("u-> iso-2022-cn with sub & UCNV_ESCAPE_CSS2 did not match.\n");
|
||||
|
||||
}
|
||||
{
|
||||
static const uint8_t to_iso_2022_cn4_v3[]={
|
||||
@ -3351,4 +3384,3 @@ static void TestCallBackFailure(void) {
|
||||
log_err("Error: ucnv_cbToUWriteUChars did not react correctly to a bad UErrorCode\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user