From 649c101f07f6de4791dc9b6091dff4a85112a15c Mon Sep 17 00:00:00 2001 From: Martin Haug Date: Mon, 25 Apr 2022 12:58:10 +0200 Subject: [PATCH] Add blind text function --- Cargo.lock | 41 +++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/library/mod.rs | 1 + src/library/utility/blind.rs | 9 ++++++++ src/library/utility/mod.rs | 2 ++ tests/ref/utility/blind.png | Bin 0 -> 27575 bytes tests/typ/utility/blind.typ | 32 +++++++++++++++++++++++++++ 7 files changed, 86 insertions(+) create mode 100644 src/library/utility/blind.rs create mode 100644 tests/ref/utility/blind.png create mode 100644 tests/typ/utility/blind.typ diff --git a/Cargo.lock b/Cargo.lock index 5a2e079eb..e429f4676 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -334,6 +334,15 @@ dependencies = [ "safemem", ] +[[package]] +name = "lipsum" +version = "0.8.0" +source = "git+https://github.com/reknih/lipsum#c97ce95ba01ed2cce1d1b0b230b6b78295b0720b" +dependencies = [ + "rand", + "rand_chacha", +] + [[package]] name = "lock_api" version = "0.4.6" @@ -543,6 +552,12 @@ dependencies = [ "miniz_oxide 0.5.1", ] +[[package]] +name = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + [[package]] name = "proc-macro2" version = "1.0.36" @@ -561,6 +576,31 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" + [[package]] name = "rctree" version = "0.4.0" @@ -854,6 +894,7 @@ dependencies = [ "iai", "image", "kurbo", + "lipsum", "memmap2", "miniz_oxide 0.4.4", "once_cell", diff --git a/Cargo.toml b/Cargo.toml index 341a96d10..1dbe7450a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ typst-macros = { path = "./macros" } bytemuck = "1" either = "1" fxhash = "0.2" +lipsum = { git = "https://github.com/reknih/lipsum", default-features = false } once_cell = "1" serde = { version = "1", features = ["derive"] } typed-arena = "2" diff --git a/src/library/mod.rs b/src/library/mod.rs index d3ed98da5..c68915c8a 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -88,6 +88,7 @@ pub fn new() -> Scope { std.def_fn("letter", utility::letter); std.def_fn("roman", utility::roman); std.def_fn("symbol", utility::symbol); + std.def_fn("lipsum", utility::lipsum); // Predefined colors. std.def_const("black", Color::BLACK); diff --git a/src/library/utility/blind.rs b/src/library/utility/blind.rs new file mode 100644 index 000000000..a4cfec90b --- /dev/null +++ b/src/library/utility/blind.rs @@ -0,0 +1,9 @@ +use lipsum::lipsum_from_seed; + +use crate::library::prelude::*; + +/// Create blind text. +pub fn lipsum(_: &mut Context, args: &mut Args) -> TypResult { + let words: usize = args.expect("number of words")?; + Ok(Value::Str(lipsum_from_seed(words, 97).into())) +} diff --git a/src/library/utility/mod.rs b/src/library/utility/mod.rs index 13220242b..4244ccbf1 100644 --- a/src/library/utility/mod.rs +++ b/src/library/utility/mod.rs @@ -1,9 +1,11 @@ //! Computational utility functions. +mod blind; mod color; mod math; mod string; +pub use blind::*; pub use color::*; pub use math::*; pub use string::*; diff --git a/tests/ref/utility/blind.png b/tests/ref/utility/blind.png new file mode 100644 index 0000000000000000000000000000000000000000..e972567e080909dfdcddce16e5672f2bc22b2702 GIT binary patch literal 27575 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 J3YcZ+{{=$H`wsvB literal 0 HcmV?d00001 diff --git a/tests/typ/utility/blind.typ b/tests/typ/utility/blind.typ new file mode 100644 index 000000000..7d1cb9694 --- /dev/null +++ b/tests/typ/utility/blind.typ @@ -0,0 +1,32 @@ +// Test blind text. + +--- +// Test basic call. +#lipsum(19) + +--- +// Test custom paragraphs with user code. +#set text(8pt) + +{ + let sentences = lipsum(59) + .split(".") + .filter(s => s != "") + .map(s => s + ".") + + let used = 0 + for s in sentences { + if used < 2 { + used += 1 + } else { + parbreak() + used = 0 + } + s.trim() + [ ] + } +} + +--- +// Error: 8-10 missing argument: number of words +#lipsum()