tlowercase.pp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. program tlowercase;
  2. {$ifdef FPC}
  3. {$mode objfpc}
  4. {$H+}
  5. {$PACKENUM 1}
  6. {$endif fpc}
  7. {$ifndef FPC}
  8. {$APPTYPE CONSOLE}
  9. {$endif}
  10. uses
  11. SysUtils,
  12. character;
  13. {$ifndef FPC}
  14. type UnicodeChar = WideChar;
  15. {$endif}
  16. procedure DoError(ACode : Integer); overload;
  17. begin
  18. WriteLn('Error #',ACode);
  19. Halt(Acode);
  20. end;
  21. procedure DoError(ACode : Integer; ACodePoint : Integer); overload;
  22. begin
  23. WriteLn('Error #',ACode,' ; CodePoint = ',IntToHex(ACodePoint,4));
  24. Halt(Acode);
  25. end;
  26. procedure DoError(ACode : Integer; ACodePoint : UnicodeChar); overload;
  27. begin
  28. WriteLn('Error #',ACode,' ; CodePoint = ',IntToHex(Ord(ACodePoint),4));
  29. Halt(Acode);
  30. end;
  31. var
  32. e, i : Integer;
  33. uc : UnicodeChar;
  34. begin
  35. e := 1;
  36. for i := Ord('a') to Ord('z') do begin
  37. uc := UnicodeChar(i);
  38. if not TCharacter.IsLower(uc) then
  39. DoError(e,i);
  40. end;
  41. Inc(e);
  42. for i := Ord('A') to Ord('Z') do begin
  43. uc := UnicodeChar(i);
  44. if TCharacter.IsLower(uc) then
  45. DoError(e,i);
  46. end;
  47. Inc(e);
  48. for i := Low(Word) to High(Word) do begin
  49. uc := UnicodeChar(i);
  50. if (TCharacter.GetUnicodeCategory(uc) = TUnicodeCategory.ucLowercaseLetter) then begin
  51. if not TCharacter.IsLower(uc) then
  52. DoError(e,uc);
  53. end;
  54. end;
  55. Inc(e);
  56. for i := Low(Word) to High(Word) do begin
  57. uc := UnicodeChar(i);
  58. if (TCharacter.GetUnicodeCategory(uc) <> TUnicodeCategory.ucLowercaseLetter) then begin
  59. if TCharacter.IsLower(uc) then
  60. DoError(e,uc);
  61. end;
  62. end;
  63. WriteLn('ok');
  64. end.