use crate::prelude::*; /// # Repeat /// Repeats content to fill a line. /// /// This can be useful when implementing a custom index, reference, or outline. /// /// Space may be inserted between the instances of the body parameter, so be /// sure to include negative space if you need the instances to overlap. /// /// ## Example /// ```example /// Sign on the dotted line: #repeat[.] /// /// #set text(10pt) /// #v(8pt, weak: true) /// #align(right)[ /// Berlin, the 22nd of December, 2022 /// ] /// ``` /// /// ## Parameters /// - body: `Content` (positional, required) /// The content to repeat. /// /// ## Category /// layout #[func] #[capable(Layout)] #[derive(Debug, Hash)] pub struct RepeatNode(pub Content); #[node] impl RepeatNode { fn construct(_: &Vm, args: &mut Args) -> SourceResult { Ok(Self(args.expect("body")?).pack()) } fn field(&self, name: &str) -> Option { match name { "body" => Some(Value::Content(self.0.clone())), _ => None, } } } impl Layout for RepeatNode { fn layout( &self, vt: &mut Vt, styles: StyleChain, regions: Regions, ) -> SourceResult { self.0.layout(vt, styles, regions) } }