|
@@ -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;
|