{$codepage utf8} {$ifdef go32v2} {$define USE_INTERNAL_UNICODE} {$endif} {$ifdef USE_INTERNAL_UNICODE} {$define USE_FPWIDESTRING_UNIT} {$define USE_UNICODEDUCET_UNIT} {$define USE_CPALL_UNIT} {$endif} uses {$ifndef USE_INTERNAL_UNICODE} {$ifdef unix} {$ifdef darwin}iosxwstr{$else}cwstring{$endif}, {$endif unix} {$endif ndef USE_INTERNAL_UNICODE} {$ifdef USE_UNICODEDUCET_UNIT} unicodeducet, {$endif} {$ifdef USE_FPWIDESTRING_UNIT} fpwidestring, {$endif} {$ifdef USE_CPALL_UNIT} cpall, {$endif} sysutils; const cwc=widechar('a'); c2=widechar('é'); c3=widestring('é'); var c: char; wc,wc2: widechar; s,s2,a: ansistring; w: widestring; ss: shortstring; begin SetMultiByteConversionCodePage(CP_UTF8); c:=#0; w:=c; if (length(w)<>1) or (w[1]<>#0) then halt(1); s:='é'; w:=s; wc:=w[1]; s2:=wc; if (w <> s2) or (s <> s2) then halt(2); c:=#0; wc:=c; c:=wc; if (c<>#0) or (wc<>#0) then halt(5); ss:=wc; wc:=ss[1]; if (length(ss)<>1) or (ss[1]<>#0) or (wc<>#0) then halt(6); a:=wc; wc:=a[1]; if (length(a)<>1) or (a[1]<>#0) or (wc<>#0) then halt(7); c:='a'; wc:=c; c:=wc; if (c<>'a') or (wc<>'a') then halt(8); ss:=wc; wc:=ss[1]; if (length(ss)<>1) or (ss[1]<>'a') or (wc<>'a') then halt(9); a:=wc; wc:=a[1]; if (length(a)<>1) or (a[1]<>'a') or (wc<>'a') then halt(10); wc2:=cwc; if (wc2<>'a') or (wc2<>cwc) then halt(3); ss:=cwc; if (length(ss)<>1) or (ss[1] <> 'a') then halt(4); c:=cwc; if (c<>'a') or (c<>cwc) then halt(13); w:=cwc; if (length(w)<>1) or (w[1] <> 'a') then halt(11); s:=cwc; if (length(s)<>1) or (s[1] <> 'a') then halt(12); wc:=c2; c:=c2; wc2:=c; if ((c<>c2) and (c<>'?')) or (wc<>c2) or ((wc2<>c2) and (wc2<>'?')) then halt(14); ss:=c2; w:=ss; wc:=w[1]; if (length(w)<>1) or (w[1]<>c2) or (wc<>c2) then halt(15); a:=c2; w:=a; wc:=w[1]; if (length(w)<>1) or (w[1]<>c2) or (wc<>c2) then halt(16); ss:=c3; w:=ss; wc:=w[1]; if (length(w)<>1) or (wc <> c2) then halt(17); c:=c3[1]; if ((c<>c2) and (c<>'?')) then halt(18); w:=c3; if (length(w)<>1) or (w[1] <> c2) then halt(19); s:=c3; w:=s; if (length(w)<>1) or (w[1] <> c2) then halt(20); ss:=c3; w:=ss; if (length(w)<>1) or (w[1] <> c2) then halt(21); wc:=c2; writestr(s,wc); w:=s; if (length(w)<>1) or (w[1]<>c2) then halt(22); end.