summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2016-06-05 19:50:07 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2016-06-05 19:50:07 +0000
commit5123e13ca8b14448ff9e2792136cb1f87cbd1994 (patch)
tree779b23071d2aba11b9dc688eab71a48a61821f69
parentb85b231e1ef8fadc41ce674653524c4b146b4fe2 (diff)
downloadfpc-5123e13ca8b14448ff9e2792136cb1f87cbd1994.tar.gz
--- Merging r32328 into '.':
U rtl/android/cwstring.pp --- Recording mergeinfo for merge of r32328 into '.': U . --- Merging r32345 into '.': G rtl/android/cwstring.pp --- Recording mergeinfo for merge of r32345 into '.': G . --- Merging r32538 into '.': G rtl/android/cwstring.pp --- Recording mergeinfo for merge of r32538 into '.': G . # revisions: 32328,32345,32538 git-svn-id: http://svn.freepascal.org/svn/fpc/branches/fixes_3_0@33921 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--rtl/android/cwstring.pp54
1 files changed, 21 insertions, 33 deletions
diff --git a/rtl/android/cwstring.pp b/rtl/android/cwstring.pp
index 5e93c07117..5743d0ba66 100644
--- a/rtl/android/cwstring.pp
+++ b/rtl/android/cwstring.pp
@@ -253,21 +253,7 @@ begin
result:=Count1 - Count2;
end;
-function CompareUnicodeString(const s1, s2 : UnicodeString) : PtrInt;
-begin
- if hlibICU = 0 then begin
- // fallback implementation
- Result:=_CompareStr(s1, s2);
- exit;
- end;
- InitThreadData;
- if DefColl <> nil then
- Result:=ucol_strcoll(DefColl, PUnicodeChar(s1), Length(s1), PUnicodeChar(s2), Length(s2))
- else
- Result:=u_strCompare(PUnicodeChar(s1), Length(s1), PUnicodeChar(s2), Length(s2), True);
-end;
-
-function CompareTextUnicodeString(const s1, s2 : UnicodeString): PtrInt;
+function CompareUnicodeString(const s1, s2 : UnicodeString; Options : TCompareOptions) : PtrInt;
const
U_COMPARE_CODE_POINT_ORDER = $8000;
var
@@ -275,11 +261,20 @@ var
begin
if hlibICU = 0 then begin
// fallback implementation
- Result:=_CompareStr(UpperUnicodeString(s1), UpperUnicodeString(s2));
+ Result:=_CompareStr(s1, s2);
exit;
end;
- err:=0;
- Result:=u_strCaseCompare(PUnicodeChar(s1), Length(s1), PUnicodeChar(s2), Length(s2), U_COMPARE_CODE_POINT_ORDER, err);
+ if (coIgnoreCase in Options) then begin
+ err:=0;
+ Result:=u_strCaseCompare(PUnicodeChar(s1), Length(s1), PUnicodeChar(s2), Length(s2), U_COMPARE_CODE_POINT_ORDER, err);
+ end
+ else begin
+ InitThreadData;
+ if DefColl <> nil then
+ Result:=ucol_strcoll(DefColl, PUnicodeChar(s1), Length(s1), PUnicodeChar(s2), Length(s2))
+ else
+ Result:=u_strCompare(PUnicodeChar(s1), Length(s1), PUnicodeChar(s2), Length(s2), True);
+ end;
end;
function UpperAnsiString(const s : AnsiString) : AnsiString;
@@ -294,22 +289,22 @@ end;
function CompareStrAnsiString(const s1, s2: ansistring): PtrInt;
begin
- Result:=CompareUnicodeString(UnicodeString(s1), UnicodeString(s2));
+ Result:=CompareUnicodeString(UnicodeString(s1), UnicodeString(s2), []);
end;
function StrCompAnsi(s1,s2 : PChar): PtrInt;
begin
- Result:=CompareUnicodeString(UnicodeString(s1), UnicodeString(s2));
+ Result:=CompareUnicodeString(UnicodeString(s1), UnicodeString(s2), []);
end;
function AnsiCompareText(const S1, S2: ansistring): PtrInt;
begin
- Result:=CompareTextUnicodeString(UnicodeString(s1), UnicodeString(s2));
+ Result:=CompareUnicodeString(UnicodeString(s1), UnicodeString(s2), [coIgnoreCase]);
end;
function AnsiStrIComp(S1, S2: PChar): PtrInt;
begin
- Result:=CompareTextUnicodeString(UnicodeString(s1), UnicodeString(s2));
+ Result:=CompareUnicodeString(UnicodeString(s1), UnicodeString(s2), [coIgnoreCase]);
end;
function AnsiStrLComp(S1, S2: PChar; MaxLen: PtrUInt): PtrInt;
@@ -318,7 +313,7 @@ var
begin
SetString(as1, S1, MaxLen);
SetString(as2, S2, MaxLen);
- Result:=CompareUnicodeString(UnicodeString(as1), UnicodeString(as2));
+ Result:=CompareUnicodeString(UnicodeString(as1), UnicodeString(as2), []);
end;
function AnsiStrLIComp(S1, S2: PChar; MaxLen: PtrUInt): PtrInt;
@@ -327,7 +322,7 @@ var
begin
SetString(as1, S1, MaxLen);
SetString(as2, S2, MaxLen);
- Result:=CompareTextUnicodeString(UnicodeString(as1), UnicodeString(as2));
+ Result:=CompareUnicodeString(UnicodeString(as1), UnicodeString(as2), [coIgnoreCase]);
end;
function AnsiStrLower(Str: PChar): PChar;
@@ -418,14 +413,9 @@ begin
Result:=LowerUnicodeString(s);
end;
-function CompareWideString(const s1, s2 : WideString) : PtrInt;
-begin
- Result:=CompareUnicodeString(s1, s2);
-end;
-
-function CompareTextWideString(const s1, s2 : WideString): PtrInt;
+function CompareWideString(const s1, s2 : WideString; Options : TCompareOptions) : PtrInt;
begin
- Result:=CompareTextUnicodeString(s1, s2);
+ Result:=CompareUnicodeString(s1, s2, Options);
end;
Procedure SetCWideStringManager;
@@ -440,7 +430,6 @@ begin
UpperWideStringProc:=@UpperWideString;
LowerWideStringProc:=@LowerWideString;
CompareWideStringProc:=@CompareWideString;
- CompareTextWideStringProc:=@CompareTextWideString;
UpperAnsiStringProc:=@UpperAnsiString;
LowerAnsiStringProc:=@LowerAnsiString;
@@ -458,7 +447,6 @@ begin
UpperUnicodeStringProc:=@UpperUnicodeString;
LowerUnicodeStringProc:=@LowerUnicodeString;
CompareUnicodeStringProc:=@CompareUnicodeString;
- CompareTextUnicodeStringProc:=@CompareTextUnicodeString;
GetStandardCodePageProc:=@GetStandardCodePage;
CodePointLengthProc:=@CodePointLength;