rendered paste bodyFærdig kode:
procedure XStrCatC(var Ref: XStr; const Src: XStr; const Index: XIndex; const Count: XCount); xcc;
var
SrcFmt: XStrFmt;
DstFmt: XStrFmt;
begin
if not Assigned(Src) or (Count = 0) then
Exit;
XStrNewRef(Src);
SrcFmt := _Src^.Format;
if not Assigned(Ref) then
begin
if XStrAlloc(Ref, SrcFmt) < 0 then
Exit;
end;
DstFmt := _Ref^.Format;
case DstFmt of
xStrFmt7Bit:
case SrcFmt of
xStrFmt7Bit: __cat_u7bit_to_u7bit(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs2: __cat_uucs2_to_u7bit(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs4: __cat_uucs4_to_u7bit(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf8: __cat_uutf8_to_u7bit(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf16: __cat_uutf6_to_u7bit(Ref, nil, Src, nil, Index, Count);
else __cat_ucmap_to_u7bit(Ref, nil, Src, nil, Index, Count);
end;
xStrFmtUcs2:
case SrcFmt of
xStrFmt7Bit: __cat_u7bit_to_uucs2(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs2: __cat_uucs2_to_uucs2(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs4: __cat_uucs4_to_uucs2(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf8: __cat_uutf8_to_uucs2(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf16: __cat_uutf6_to_uucs2(Ref, nil, Src, nil, Index, Count);
else __cat_ucmap_to_uucs2(Ref, nil, Src, nil, Index, Count);
end;
xStrFmtUcs4:
case SrcFmt of
xStrFmt7Bit: __cat_u7bit_to_uucs4(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs2: __cat_uucs2_to_uucs4(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs4: __cat_uucs4_to_uucs4(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf8: __cat_uutf8_to_uucs4(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf16: __cat_uutf6_to_uucs4(Ref, nil, Src, nil, Index, Count);
else __cat_ucmap_to_uucs4(Ref, nil, Src, nil, Index, Count);
end;
xStrFmtUtf8:
case SrcFmt of
xStrFmt7Bit: __cat_u7bit_to_uutf8(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs2: __cat_uucs2_to_uutf8(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs4: __cat_uucs4_to_uutf8(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf8: __cat_uutf8_to_uutf8(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf16: __cat_uutf6_to_uutf8(Ref, nil, Src, nil, Index, Count);
else __cat_ucmap_to_uutf8(Ref, nil, Src, nil, Index, Count);
end;
xStrFmtUtf16:
case SrcFmt of
xStrFmt7Bit: __cat_u7bit_to_uutf6(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs2: __cat_uucs2_to_uutf6(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs4: __cat_uucs4_to_uutf6(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf8: __cat_uutf8_to_uutf6(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf16: __cat_uutf6_to_uutf6(Ref, nil, Src, nil, Index, Count);
else __cat_ucmap_to_uutf6(Ref, nil, Src, nil, Index, Count);
end;
else
case SrcFmt of
xStrFmt7Bit: __cat_u7bit_to_ucmap(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs2: __cat_uucs2_to_ucmap(Ref, nil, Src, nil, Index, Count);
xStrFmtUcs4: __cat_uucs4_to_ucmap(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf8: __cat_uutf8_to_ucmap(Ref, nil, Src, nil, Index, Count);
xStrFmtUtf16: __cat_uutf6_to_ucmap(Ref, nil, Src, nil, Index, Count);
else __cat_ucmap_to_ucmap(Ref, nil, Src, nil, Index, Count);
end;
end;
XStrReleaseRef(Src);
end;
Metakode:
procedure XStrCatC(var Ref: XStr; const Src: XStr; const Index: XIndex; const Count: XCount); xcc;
var
SrcFmt: XStrFmt;
DstFmt: XStrFmt;
begin
if not Assigned(Src) or (Count = 0) then
Exit;
XStrNewRef(Src);
SrcFmt := _Src^.Format;
if not Assigned(Ref) then
begin
if XStrAlloc(Ref, SrcFmt) < 0 then
Exit;
end;
DstFmt := _Ref^.Format;
case DstFmt of
#foreach dstfmt in U_STR
%str_strfmt_case(dstfmt)
case SrcFmt of
#foreach srcfmt in U_STR
%str_strfmt_case(srcfmt) __cat_%(srcfmt)_to_%(dstfmt)(Ref, nil, Src, nil, Index, Count);
#end
end;
#end
end;
XStrReleaseRef(Src);
end;