summaryrefslogtreecommitdiff
path: root/crates/typst-library/src/layout/hide.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/typst-library/src/layout/hide.rs')
-rw-r--r--crates/typst-library/src/layout/hide.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/crates/typst-library/src/layout/hide.rs b/crates/typst-library/src/layout/hide.rs
new file mode 100644
index 00000000..c6e83e0c
--- /dev/null
+++ b/crates/typst-library/src/layout/hide.rs
@@ -0,0 +1,30 @@
+use crate::prelude::*;
+
+/// Hides content without affecting layout.
+///
+/// The `hide` function allows you to hide content while the layout still 'sees'
+/// it. This is useful to create whitespace that is exactly as large as some
+/// content. It may also be useful to redact content because its arguments are
+/// not included in the output.
+///
+/// ## Example { #example }
+/// ```example
+/// Hello Jane \
+/// #hide[Hello] Joe
+/// ```
+///
+/// Display: Hide
+/// Category: layout
+#[element(Show)]
+pub struct HideElem {
+ /// The content to hide.
+ #[required]
+ pub body: Content,
+}
+
+impl Show for HideElem {
+ #[tracing::instrument(name = "HideElem::show", skip(self))]
+ fn show(&self, _: &mut Vt, _: StyleChain) -> SourceResult<Content> {
+ Ok(self.body().styled(MetaElem::set_data(vec![Meta::Hide])))
+ }
+}