utf8_prog.mod 944 B

123456789101112131415161718192021
  1. MODULE Utf8Prog;
  2. (* Utf8 codec: Encode/Decode round-trips. Exit 127. *)
  3. IMPORT Utf8;
  4. VAR ExitCode : INTEGER;
  5. VAR buf : ARRAY [0 .. 3] OF CHAR;
  6. VAR n : CARDINAL;
  7. VAR cp : UCHAR;
  8. VAR next : CARDINAL;
  9. BEGIN
  10. n := Utf8.Encode(U'é', buf); (* C3 A9 *)
  11. IF n = 2 THEN ExitCode := ExitCode + 1 ELSE ExitCode := 100 END;
  12. IF ORD(buf[0]) = 195 THEN ExitCode := ExitCode + 2 ELSE ExitCode := 100 END;
  13. IF ORD(buf[1]) = 169 THEN ExitCode := ExitCode + 4 ELSE ExitCode := 100 END;
  14. n := Utf8.Encode(U'😀', buf); (* F0 9F 98 80 *)
  15. IF n = 4 THEN ExitCode := ExitCode + 8 ELSE ExitCode := 100 END;
  16. IF ORD(buf[0]) = 240 THEN ExitCode := ExitCode + 16 ELSE ExitCode := 100 END;
  17. IF Utf8.Decode("é", 0, cp, next) THEN
  18. IF UORD(cp) = 233 THEN ExitCode := ExitCode + 32 ELSE ExitCode := 100 END;
  19. IF next = 2 THEN ExitCode := ExitCode + 64 ELSE ExitCode := 100 END
  20. ELSE ExitCode := 100 END
  21. END Utf8Prog.