tgetnumericvalue.pp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. program tgetnumericvalue;
  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 , k: Integer;
  33. uc : UnicodeChar;
  34. d : Double;
  35. begin
  36. e := 1;
  37. k := 0;
  38. for i := Low(Word) to High(Word) do begin
  39. uc := UnicodeChar(i);
  40. if (TCharacter.GetUnicodeCategory(uc) in
  41. [ TUnicodeCategory.ucDecimalNumber,
  42. TUnicodeCategory.ucLetterNumber,
  43. TUnicodeCategory.ucOtherNumber
  44. ] //TCharacter.IsNumber(uc)
  45. )
  46. then begin
  47. WriteLn('CodePoint = ',IntToHex(Ord(uc),4), ' ; Value = ',TCharacter.GetNumericValue(uc));
  48. Inc(k);
  49. end;
  50. end;
  51. WriteLn(k, ' numbers',sLineBreak);
  52. Inc(e);
  53. for i := 0 to 9 do begin
  54. uc := IntToStr(i)[1];
  55. d := i;
  56. if (TCharacter.GetNumericValue(uc) <> d) then
  57. DoError(e,uc);
  58. end;
  59. WriteLn('ok');
  60. end.