OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008 Tony Chang <idealisms@gmail.com> | 3 * Copyright (C) 2008 Tony Chang <idealisms@gmail.com> |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * | 8 * |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 // This is mostly a port of the code in WebCore/editing/SmartReplaceCF.cpp | 46 // This is mostly a port of the code in WebCore/editing/SmartReplaceCF.cpp |
47 // except we use icu in place of CoreFoundations character classes. | 47 // except we use icu in place of CoreFoundations character classes. |
48 static USet* getSmartSet(bool isPreviousCharacter) | 48 static USet* getSmartSet(bool isPreviousCharacter) |
49 { | 49 { |
50 static USet* preSmartSet = NULL; | 50 static USet* preSmartSet = NULL; |
51 static USet* postSmartSet = NULL; | 51 static USet* postSmartSet = NULL; |
52 USet* smartSet = isPreviousCharacter ? preSmartSet : postSmartSet; | 52 USet* smartSet = isPreviousCharacter ? preSmartSet : postSmartSet; |
53 if (!smartSet) { | 53 if (!smartSet) { |
54 // Whitespace and newline (kCFCharacterSetWhitespaceAndNewline) | 54 // Whitespace and newline (kCFCharacterSetWhitespaceAndNewline) |
55 UErrorCode ec = U_ZERO_ERROR; | 55 UErrorCode ec = U_ZERO_ERROR; |
56 String whitespaceAndNewline = ASCIILiteral("[[:WSpace:] [\\u000A\\u000B\
\u000C\\u000D\\u0085]]"); | 56 String whitespaceAndNewline("[[:WSpace:] [\\u000A\\u000B\\u000C\\u000D\\
u0085]]"); |
57 smartSet = uset_openPattern(whitespaceAndNewline.charactersWithNullTermi
nation().data(), whitespaceAndNewline.length(), &ec); | 57 smartSet = uset_openPattern(whitespaceAndNewline.charactersWithNullTermi
nation().data(), whitespaceAndNewline.length(), &ec); |
58 ASSERT(U_SUCCESS(ec)); | 58 ASSERT(U_SUCCESS(ec)); |
59 | 59 |
60 // CJK ranges | 60 // CJK ranges |
61 uset_addRange(smartSet, 0x1100, 0x1100 + 256); // Hangul Jamo (0x1100 -
0x11FF) | 61 uset_addRange(smartSet, 0x1100, 0x1100 + 256); // Hangul Jamo (0x1100 -
0x11FF) |
62 uset_addRange(smartSet, 0x2E80, 0x2E80 + 352); // CJK & Kangxi Radicals
(0x2E80 - 0x2FDF) | 62 uset_addRange(smartSet, 0x2E80, 0x2E80 + 352); // CJK & Kangxi Radicals
(0x2E80 - 0x2FDF) |
63 uset_addRange(smartSet, 0x2FF0, 0x2FF0 + 464); // Ideograph Descriptions
, CJK Symbols, Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun,
& Bopomofo Ext (0x2FF0 - 0x31BF) | 63 uset_addRange(smartSet, 0x2FF0, 0x2FF0 + 464); // Ideograph Descriptions
, CJK Symbols, Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun,
& Bopomofo Ext (0x2FF0 - 0x31BF) |
64 uset_addRange(smartSet, 0x3200, 0x3200 + 29392); // Enclosed CJK, CJK Id
eographs (Uni Han & Ext A), & Yi (0x3200 - 0xA4CF) | 64 uset_addRange(smartSet, 0x3200, 0x3200 + 29392); // Enclosed CJK, CJK Id
eographs (Uni Han & Ext A), & Yi (0x3200 - 0xA4CF) |
65 uset_addRange(smartSet, 0xAC00, 0xAC00 + 11183); // Hangul Syllables (0x
AC00 - 0xD7AF) | 65 uset_addRange(smartSet, 0xAC00, 0xAC00 + 11183); // Hangul Syllables (0x
AC00 - 0xD7AF) |
66 uset_addRange(smartSet, 0xF900, 0xF900 + 352); // CJK Compatibility Ideo
graphs (0xF900 - 0xFA5F) | 66 uset_addRange(smartSet, 0xF900, 0xF900 + 352); // CJK Compatibility Ideo
graphs (0xF900 - 0xFA5F) |
67 uset_addRange(smartSet, 0xFE30, 0xFE30 + 32); // CJK Compatibility From
(0xFE30 - 0xFE4F) | 67 uset_addRange(smartSet, 0xFE30, 0xFE30 + 32); // CJK Compatibility From
(0xFE30 - 0xFE4F) |
68 uset_addRange(smartSet, 0xFF00, 0xFF00 + 240); // Half/Full Width Form (
0xFF00 - 0xFFEF) | 68 uset_addRange(smartSet, 0xFF00, 0xFF00 + 240); // Half/Full Width Form (
0xFF00 - 0xFFEF) |
69 uset_addRange(smartSet, 0x20000, 0x20000 + 0xA6D7); // CJK Ideograph Exn
tension B | 69 uset_addRange(smartSet, 0x20000, 0x20000 + 0xA6D7); // CJK Ideograph Exn
tension B |
70 uset_addRange(smartSet, 0x2F800, 0x2F800 + 0x021E); // CJK Compatibility
Ideographs (0x2F800 - 0x2FA1D) | 70 uset_addRange(smartSet, 0x2F800, 0x2F800 + 0x021E); // CJK Compatibility
Ideographs (0x2F800 - 0x2FA1D) |
71 | 71 |
72 if (isPreviousCharacter) { | 72 if (isPreviousCharacter) { |
73 addAllCodePoints(smartSet, ASCIILiteral("([\"\'#$/-`{")); | 73 addAllCodePoints(smartSet, "([\"\'#$/-`{"); |
74 preSmartSet = smartSet; | 74 preSmartSet = smartSet; |
75 } else { | 75 } else { |
76 addAllCodePoints(smartSet, ASCIILiteral(")].,;:?\'!\"%*-/}")); | 76 addAllCodePoints(smartSet, ")].,;:?\'!\"%*-/}"); |
77 | 77 |
78 // Punctuation (kCFCharacterSetPunctuation) | 78 // Punctuation (kCFCharacterSetPunctuation) |
79 UErrorCode ec = U_ZERO_ERROR; | 79 UErrorCode ec = U_ZERO_ERROR; |
80 String punctuationClass = ASCIILiteral("[:P:]"); | 80 String punctuationClass("[:P:]"); |
81 USet* icuPunct = uset_openPattern(punctuationClass.charactersWithNul
lTermination().data(), punctuationClass.length(), &ec); | 81 USet* icuPunct = uset_openPattern(punctuationClass.charactersWithNul
lTermination().data(), punctuationClass.length(), &ec); |
82 ASSERT(U_SUCCESS(ec)); | 82 ASSERT(U_SUCCESS(ec)); |
83 uset_addAll(smartSet, icuPunct); | 83 uset_addAll(smartSet, icuPunct); |
84 uset_close(icuPunct); | 84 uset_close(icuPunct); |
85 | 85 |
86 postSmartSet = smartSet; | 86 postSmartSet = smartSet; |
87 } | 87 } |
88 } | 88 } |
89 return smartSet; | 89 return smartSet; |
90 } | 90 } |
91 | 91 |
92 bool isCharacterSmartReplaceExempt(UChar32 c, bool isPreviousCharacter) | 92 bool isCharacterSmartReplaceExempt(UChar32 c, bool isPreviousCharacter) |
93 { | 93 { |
94 return uset_contains(getSmartSet(isPreviousCharacter), c); | 94 return uset_contains(getSmartSet(isPreviousCharacter), c); |
95 } | 95 } |
96 | 96 |
97 } | 97 } |
98 | 98 |
99 #endif // !USE(CF) | 99 #endif // !USE(CF) |
OLD | NEW |