From 2e5b5a3c03c441c97406948c65d4e68b09a7ab49 Mon Sep 17 00:00:00 2001 From: julien-cpsn Date: Sun, 28 Jan 2024 00:17:02 +0100 Subject: [PATCH] Added printer tester --- packages/preview/printer-tester/0.1.0/LICENSE | 21 ++++ .../preview/printer-tester/0.1.0/README.md | 42 +++++++ .../printer-tester/0.1.0/examples/example.pdf | Bin 0 -> 64844 bytes .../printer-tester/0.1.0/examples/example.typ | 77 +++++++++++++ packages/preview/printer-tester/0.1.0/lib.typ | 109 ++++++++++++++++++ .../preview/printer-tester/0.1.0/typst.toml | 19 +++ 6 files changed, 268 insertions(+) create mode 100644 packages/preview/printer-tester/0.1.0/LICENSE create mode 100644 packages/preview/printer-tester/0.1.0/README.md create mode 100644 packages/preview/printer-tester/0.1.0/examples/example.pdf create mode 100644 packages/preview/printer-tester/0.1.0/examples/example.typ create mode 100644 packages/preview/printer-tester/0.1.0/lib.typ create mode 100644 packages/preview/printer-tester/0.1.0/typst.toml diff --git a/packages/preview/printer-tester/0.1.0/LICENSE b/packages/preview/printer-tester/0.1.0/LICENSE new file mode 100644 index 000000000..771f07247 --- /dev/null +++ b/packages/preview/printer-tester/0.1.0/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Julien Caposiena + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/preview/printer-tester/0.1.0/README.md b/packages/preview/printer-tester/0.1.0/README.md new file mode 100644 index 000000000..94f99773b --- /dev/null +++ b/packages/preview/printer-tester/0.1.0/README.md @@ -0,0 +1,42 @@ +# [Printer tester](https://github.com/julien-cpsn/typst-printer-tester) + +Generate printer tests directly in Typst. +For now, only generates with CMYK colors (as it is by far the most used). + +I personally place one of these test on all my exam papers to ensure the printer's quality over time. + +## Documentation + +To import any of the functions needed, you may want to use the following line: + +```typst +#import "@preview/printer-tester:0.1.0": square-printer-test, gradient-printer-test, circular-printer-test, crosshair-printer-test +``` + +### Square test + +```typst +#square-printer-test() +``` + +### Gradient test + +```typst +#gradient-printer-test() +``` + +### Circular test + +```typst +#circular-printer-test() +``` + +### Crosshair test + +```typst +#crosshair-printer-test() +``` + +## Contributors + +- [Julien-cpsn](https://github.com/julien-cpsn) \ No newline at end of file diff --git a/packages/preview/printer-tester/0.1.0/examples/example.pdf b/packages/preview/printer-tester/0.1.0/examples/example.pdf new file mode 100644 index 0000000000000000000000000000000000000000..424241b85974e7a4ab2c953c08308bda7a73cf65 GIT binary patch literal 64844 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 z
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 Gb^j0R$rD=u literal 0 HcmV?d00001 diff --git a/packages/preview/printer-tester/0.1.0/examples/example.typ b/packages/preview/printer-tester/0.1.0/examples/example.typ new file mode 100644 index 000000000..18a4c0d63 --- /dev/null +++ b/packages/preview/printer-tester/0.1.0/examples/example.typ @@ -0,0 +1,77 @@ +#import "../lib.typ": square-printer-test, gradient-printer-test, circular-printer-test, crosshair-printer-test + +#set text( + font: "Arial" +) + += #underline[All together] + +#raw("#square-printer-test()", lang: "typst") +#square-printer-test() + +#raw("#gradient-printer-test()", lang: "typst") +#gradient-printer-test() + +#raw("#circular-printer-test()", lang: "typst") +#circular-printer-test() + +#raw("#crosshair-printer-test()", lang: "typst") +#crosshair-printer-test() + +#pagebreak() + +== #underline[Square test] + +#raw("#square-printer-test(dir: rtl)", lang: "typst") +#square-printer-test(dir: rtl) + +#raw("#square-printer-test(dir: ttb)", lang: "typst") +#square-printer-test(dir: ttb) + +#raw("#square-printer-test(size: 50pt)", lang: "typst") +#square-printer-test(size: 50pt) + +#raw("#square-printer-test(dir: ttb, size: 5pt)", lang: "typst") +#square-printer-test(dir: ttb, size: 5pt) + +#pagebreak() + +== #underline[Gradient test] + +#raw("#gradient-printer-test(dir: rtl)", lang: "typst") +#gradient-printer-test(dir: rtl) + +#raw("#gradient-printer-test(dir: btt)", lang: "typst") +#gradient-printer-test(dir: btt) + +#raw("#gradient-printer-test(width: 50pt)", lang: "typst") +#gradient-printer-test(width: 50pt) + +#raw("#gradient-printer-test(height: 40pt)", lang: "typst") +#gradient-printer-test(height: 40pt) + +#raw("#gradient-printer-test(width: 400pt, height: 10pt)", lang: "typst") +#gradient-printer-test(width: 400pt, height: 10pt) + +#pagebreak() + +== #underline[Circular test] + +#raw("#circular-printer-test(size: 15pt)", lang: "typst") +#circular-printer-test(size: 15pt) + +#raw("#circular-printer-test(size: 200pt)", lang: "typst") +#circular-printer-test(size: 200pt) + +#pagebreak() + +== #underline[Crosshair test] + +#raw("#crosshair-printer-test(dir: rtl)", lang: "typst") +#crosshair-printer-test(dir: rtl) + +#raw("#crosshair-printer-test(dir: ttb)", lang: "typst") +#crosshair-printer-test(dir: ttb) + +#raw("#crosshair-printer-test(size: 75pt)", lang: "typst") +#crosshair-printer-test(size: 75pt) \ No newline at end of file diff --git a/packages/preview/printer-tester/0.1.0/lib.typ b/packages/preview/printer-tester/0.1.0/lib.typ new file mode 100644 index 000000000..6dc841584 --- /dev/null +++ b/packages/preview/printer-tester/0.1.0/lib.typ @@ -0,0 +1,109 @@ +#let cyan = cmyk(100%, 0%, 0%, 0%) +#let magenta = cmyk(0%, 100%, 0%, 0%) +#let yellow = cmyk(0%, 0%, 100%, 0%) +#let transparent = rgb(100%, 100%, 100%, 0) + +#let cyan-gradient = gradient.linear(cyan, transparent, angle: 0deg) +#let magenta-gradient = gradient.linear(magenta, transparent, angle: 0deg) +#let yellow-gradient = gradient.linear(yellow, transparent, angle: 0deg) +#let black-gradient = gradient.linear(black, transparent, angle: 0deg) + +#let cyan-mid-opacity = rgb(cyan.to-hex() + "88") +#let magenta-mid-opacity = rgb(magenta.to-hex() + "88") +#let yellow-mid-opacity = rgb(yellow.to-hex() + "88") + +#let square-printer-test(dir: ltr, size: 15pt) = [ + #stack( + dir: dir, + spacing: 5pt, + square(width: size, height: size, fill: cyan), + square(width: size, height: size, fill: magenta), + square(width: size, height: size, fill: yellow), + square(width: size, height: size, fill: black) + ) +] + +#let gradient-printer-test(dir: ttb, width: 100pt, height: 15pt) = [ + #stack( + dir: dir, + spacing: 5pt, + rect(width: width, height: height, fill: cyan-gradient), + rect(width: width, height: height, fill: magenta-gradient), + rect(width: width, height: height, fill: yellow-gradient), + rect(width: width, height: height, fill: black-gradient) + ) +] + +#let circular-printer-test(size: 100pt) = [ + #let adjusted-size = size/3.5 + + #rect(width: size, height: size*0.93, fill: transparent) + + #place( + dx: 0pt, + dy: -size - 6pt, + circle(radius: adjusted-size, fill: cyan-mid-opacity) + ) + #place( + dx: adjusted-size*0.75, + dy: -size - 6pt + adjusted-size*1.25, + circle(radius: adjusted-size, fill: magenta-mid-opacity) + ) + #place( + dx: adjusted-size*1.5, + dy: -size - 6pt, + circle(radius: adjusted-size, fill: yellow-mid-opacity) + ) +] + +#let crosshair(size: 20pt, stroke: black) = [ + #place( + line(start: (0pt, size/2), end: (size, size/2), stroke: stroke) + ) + #place( + line(start: (size/2, 0pt), end: (size/2, size), stroke: stroke) + ) + #place( + dx: size*0.1, + dy: size*0.1, + circle(radius: size*0.4, stroke: stroke) + ) + #place( + dx: size*0.15, + dy: size*0.15, + circle(radius: size*0.35, stroke: stroke) + ) + #place( + dx: size*0.2, + dy: size*0.2, + circle(radius: size*0.3, stroke: stroke) + ) + #place( + dx: size*0.25, + dy: size*0.25, + circle(radius: size*0.25, stroke: stroke) + ) + #place( + dx: size*0.3, + dy: size*0.3, + circle(radius: size*0.2, stroke: stroke) + ) + #place( + dx: size*0.35, + dy: size*0.35, + circle(radius: size*0.15, stroke: stroke) + ) + + #square(size: size, fill: transparent) +] + +#let crosshair-printer-test(dir: ltr, size: 40pt) = [ + #stack( + dir: dir, + spacing: 5pt, + crosshair(size: size, stroke: cyan), + crosshair(size: size, stroke: magenta), + crosshair(size: size, stroke: yellow), + crosshair(size: size, stroke: black) + ) +] \ No newline at end of file diff --git a/packages/preview/printer-tester/0.1.0/typst.toml b/packages/preview/printer-tester/0.1.0/typst.toml new file mode 100644 index 000000000..2b3c9f155 --- /dev/null +++ b/packages/preview/printer-tester/0.1.0/typst.toml @@ -0,0 +1,19 @@ +[package] +name = "printer-tester" +version = "0.1.0" +entrypoint = "lib.typ" +authors = ["Julien Caposiena"] +license = "MIT" +description = "Generate printer tests (likely CMYK) in typst." + +homepage = "https://github.com/julien-cpsn/typst-printer-tester" +repository = "https://github.com/julien-cpsn/typst-printer-tester" +keywords = [ + "printer", + "test", + "color", + "colour", + "generate", + "generator", + "CMYK" +] \ No newline at end of file