paper_size.nbt 884 B

1234567891011121314151617181920212223242526272829303132333435
  1. # Compute ISO 216 paper sizes for the A series
  2. #
  3. # https://en.wikipedia.org/wiki/ISO_216
  4. struct PaperSize {
  5. width: Length,
  6. height: Length,
  7. }
  8. fn paper_size_A(n: Scalar) -> PaperSize =
  9. if n == 0
  10. then
  11. PaperSize {
  12. width: 841 mm,
  13. height: 1189 mm
  14. }
  15. else
  16. PaperSize {
  17. width: floor(paper_size_A(n - 1).height / 2),
  18. height: paper_size_A(n - 1).width,
  19. }
  20. assert_eq(paper_size_A(4).width, 210 mm)
  21. assert_eq(paper_size_A(4).height, 297 mm)
  22. fn paper_area(size: PaperSize) -> Area =
  23. size.width * size.height
  24. fn size_as_string(size: PaperSize) = "{size.width:>4} × {size.height:>5} {paper_area(size) -> cm²:>6.1f}"
  25. fn row(n) = "A{n:<3} {size_as_string(paper_size_A(n))}"
  26. print("Name Width Height Area ")
  27. print("---- ------- -------- ----------")
  28. print(join(map(row, range(0, 10)), "\n"))