diff options
author | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2016-06-05 19:50:07 +0000 |
---|---|---|
committer | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2016-06-05 19:50:07 +0000 |
commit | 5123e13ca8b14448ff9e2792136cb1f87cbd1994 (patch) | |
tree | 779b23071d2aba11b9dc688eab71a48a61821f69 | |
parent | b85b231e1ef8fadc41ce674653524c4b146b4fe2 (diff) | |
download | fpc-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.pp | 54 |
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; |