diff --git a/Foundation/CPString.j b/Foundation/CPString.j index d9992ed8f..69e9caf8a 100644 --- a/Foundation/CPString.j +++ b/Foundation/CPString.j @@ -345,6 +345,7 @@ var CPStringUIDs = new CFMutableDictionary(), specified mask which can be a combination of:
CPCaseInsensitiveSearch
+ CPDiacriticInsensitiveSearch
CPLiteralSearch
CPBackwardsSearch
CPAnchoredSearch
@@ -366,6 +367,7 @@ var CPStringUIDs = new CFMutableDictionary(),
options specified in the specified mask which can be a combination of:
CPCaseInsensitiveSearch
+ CPDiacriticInsensitiveSearch
CPLiteralSearch
CPBackwardsSearch
CPAnchoredSearch
@@ -393,6 +395,11 @@ var CPStringUIDs = new CFMutableDictionary(),
string = string.toLowerCase();
aString = aString.toLowerCase();
}
+ if (aMask & CPDiacriticInsensitiveSearch)
+ {
+ string = string.stripDiacritics();
+ aString = aString.stripDiacritics();
+ }
if (aMask & CPBackwardsSearch)
{
@@ -682,6 +689,14 @@ var CPStringNull = [CPNull null];
return self.toUpperCase();
}
+/*!
+ Returns a copy of the string stripped of diacritical marks.
+*/
+- (CPString)stripDiacritics
+{
+ return self.stripDiacritics();
+}
+
/*!
Returns the text as a floating point value.
*/
@@ -948,9 +963,9 @@ var CPStringNull = [CPNull null];
@end
-
-var diacritics = [[192,198],[224,230],[231,231],[232,235],[236,239],[242,246],[249,252]], // Basic Latin ; Latin-1 Supplement.
- normalized = [65,97,99,101,105,111,117];
+var diacritics = [[192,198],[200,203],[204,207],[210,214],[217,220],[224,230],
+ [231,231],[232,235],[236,239],[242,246],[249,252]], // Basic Latin ; Latin-1 Supplement.
+ normalized = [65,69,73,79,85,97,99,101,105,111,117];
String.prototype.stripDiacritics = function()
{
diff --git a/Tests/Foundation/CPStringTest.j b/Tests/Foundation/CPStringTest.j
index 3bc97c334..f3e4c9454 100644
--- a/Tests/Foundation/CPStringTest.j
+++ b/Tests/Foundation/CPStringTest.j
@@ -572,4 +572,11 @@
[self assertThrows:function () { [@"Objective-J" compare:[CPNull null]] }];
}
+- (void)testStripDiacritics
+{
+ [self assert:[@"áa ée íi óo úu" stripDiacritics] equals:@"aa ee ii oo uu"];
+ [self assert:[@"ÁA ÉE ÍI ÓO ÚU" stripDiacritics] equals:@"AA EE II OO UU"];
+ [self assert:[@"Å Ã Ê í ö û" stripDiacritics] equals:@"A A E i o u"];
+}
+
@end