diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-12-21 00:16:07 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-12-21 00:26:20 +0100 |
| commit | ee732468c7487c81aa6470571077988b75d36ebb (patch) | |
| tree | e0361bb75b8bbc3359b711f4009e165459d66248 /library/src/layout | |
| parent | 15cd273c82a96128a63781981a4405fcd2b1e846 (diff) | |
Document text category
Diffstat (limited to 'library/src/layout')
| -rw-r--r-- | library/src/layout/columns.rs | 15 | ||||
| -rw-r--r-- | library/src/layout/container.rs | 14 | ||||
| -rw-r--r-- | library/src/layout/grid.rs | 27 | ||||
| -rw-r--r-- | library/src/layout/hide.rs | 7 | ||||
| -rw-r--r-- | library/src/layout/pad.rs | 7 | ||||
| -rw-r--r-- | library/src/layout/page.rs | 14 | ||||
| -rw-r--r-- | library/src/layout/par.rs | 2 | ||||
| -rw-r--r-- | library/src/layout/place.rs | 7 | ||||
| -rw-r--r-- | library/src/layout/repeat.rs | 7 | ||||
| -rw-r--r-- | library/src/layout/spacing.rs | 34 | ||||
| -rw-r--r-- | library/src/layout/stack.rs | 20 | ||||
| -rw-r--r-- | library/src/layout/transform.rs | 22 |
12 files changed, 174 insertions, 2 deletions
diff --git a/library/src/layout/columns.rs b/library/src/layout/columns.rs index c03ff433..a5f67b94 100644 --- a/library/src/layout/columns.rs +++ b/library/src/layout/columns.rs @@ -65,6 +65,14 @@ impl ColumnsNode { } .pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "count" => Some(Value::Int(self.count.get() as i64)), + "body" => Some(Value::Content(self.body.clone())), + _ => None, + } + } } impl Layout for ColumnsNode { @@ -186,6 +194,13 @@ impl ColbreakNode { let weak = args.named("weak")?.unwrap_or(false); Ok(Self { weak }.pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "weak" => Some(Value::Bool(self.weak)), + _ => None, + } + } } impl Behave for ColbreakNode { diff --git a/library/src/layout/container.rs b/library/src/layout/container.rs index 62e129b4..112c6f03 100644 --- a/library/src/layout/container.rs +++ b/library/src/layout/container.rs @@ -50,6 +50,13 @@ impl BoxNode { let body = args.eat::<Content>()?.unwrap_or_default(); Ok(Self { sizing: Axes::new(width, height), body }.pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "body" => Some(Value::Content(self.body.clone())), + _ => None, + } + } } impl Layout for BoxNode { @@ -163,6 +170,13 @@ impl BlockNode { args.named("below")?.map(VNode::block_around).or(spacing), ); } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "body" => Some(Value::Content(self.0.clone())), + _ => None, + } + } } impl Layout for BlockNode { diff --git a/library/src/layout/grid.rs b/library/src/layout/grid.rs index 85d464b1..eafe644f 100644 --- a/library/src/layout/grid.rs +++ b/library/src/layout/grid.rs @@ -120,6 +120,19 @@ impl GridNode { } .pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "columns" => Some(TrackSizing::encode_slice(&self.tracks.x)), + "rows" => Some(TrackSizing::encode_slice(&self.tracks.y)), + "column-gutter" => Some(TrackSizing::encode_slice(&self.gutter.x)), + "row-gutter" => Some(TrackSizing::encode_slice(&self.gutter.y)), + "cells" => Some(Value::Array( + self.cells.iter().cloned().map(Value::Content).collect(), + )), + _ => None, + } + } } impl Layout for GridNode { @@ -157,6 +170,20 @@ pub enum TrackSizing { Fractional(Fr), } +impl TrackSizing { + pub fn encode(self) -> Value { + match self { + Self::Auto => Value::Auto, + Self::Relative(rel) => Spacing::Relative(rel).encode(), + Self::Fractional(fr) => Spacing::Fractional(fr).encode(), + } + } + + pub fn encode_slice(vec: &[TrackSizing]) -> Value { + Value::Array(vec.iter().copied().map(Self::encode).collect()) + } +} + impl From<Spacing> for TrackSizing { fn from(spacing: Spacing) -> Self { match spacing { diff --git a/library/src/layout/hide.rs b/library/src/layout/hide.rs index dec6dd1c..6d168d35 100644 --- a/library/src/layout/hide.rs +++ b/library/src/layout/hide.rs @@ -30,6 +30,13 @@ impl HideNode { fn construct(_: &Vm, args: &mut Args) -> SourceResult<Content> { Ok(Self(args.expect("body")?).pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "body" => Some(Value::Content(self.0.clone())), + _ => None, + } + } } impl Layout for HideNode { diff --git a/library/src/layout/pad.rs b/library/src/layout/pad.rs index 13b573bf..bbd55225 100644 --- a/library/src/layout/pad.rs +++ b/library/src/layout/pad.rs @@ -67,6 +67,13 @@ impl PadNode { let padding = Sides::new(left, top, right, bottom); Ok(Self { padding, body }.pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "body" => Some(Value::Content(self.body.clone())), + _ => None, + } + } } impl Layout for PadNode { diff --git a/library/src/layout/page.rs b/library/src/layout/page.rs index 105638a7..8e146126 100644 --- a/library/src/layout/page.rs +++ b/library/src/layout/page.rs @@ -64,6 +64,13 @@ impl PageNode { styles.set(Self::HEIGHT, Smart::Custom(paper.height().into())); } } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "body" => Some(Value::Content(self.0.clone())), + _ => None, + } + } } impl PageNode { @@ -190,6 +197,13 @@ impl PagebreakNode { let weak = args.named("weak")?.unwrap_or(false); Ok(Self { weak }.pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "weak" => Some(Value::Bool(self.weak)), + _ => None, + } + } } /// A header, footer, foreground or background definition. diff --git a/library/src/layout/par.rs b/library/src/layout/par.rs index f966d30b..412a279e 100644 --- a/library/src/layout/par.rs +++ b/library/src/layout/par.rs @@ -467,7 +467,7 @@ fn collect<'a>( Segment::Text(c.len_utf8()) } else if let Some(node) = child.to::<SmartQuoteNode>() { let prev = full.len(); - if styles.get(TextNode::SMART_QUOTES) { + if styles.get(SmartQuoteNode::ENABLED) { let lang = styles.get(TextNode::LANG); let region = styles.get(TextNode::REGION); let quotes = Quotes::from_lang(lang, region); diff --git a/library/src/layout/place.rs b/library/src/layout/place.rs index ed3d71bf..406aa862 100644 --- a/library/src/layout/place.rs +++ b/library/src/layout/place.rs @@ -33,6 +33,13 @@ impl PlaceNode { let out_of_flow = aligns.y.is_some(); Ok(Self(body.moved(Axes::new(dx, dy)).aligned(aligns), out_of_flow).pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "body" => Some(Value::Content(self.0.clone())), + _ => None, + } + } } impl Layout for PlaceNode { diff --git a/library/src/layout/repeat.rs b/library/src/layout/repeat.rs index 864454c4..04610fca 100644 --- a/library/src/layout/repeat.rs +++ b/library/src/layout/repeat.rs @@ -19,6 +19,13 @@ impl RepeatNode { fn construct(_: &Vm, args: &mut Args) -> SourceResult<Content> { Ok(Self(args.expect("body")?).pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "body" => Some(Value::Content(self.0.clone())), + _ => None, + } + } } impl Layout for RepeatNode { diff --git a/library/src/layout/spacing.rs b/library/src/layout/spacing.rs index 91b36661..35f6aa9b 100644 --- a/library/src/layout/spacing.rs +++ b/library/src/layout/spacing.rs @@ -54,10 +54,18 @@ pub struct HNode { #[node] impl HNode { fn construct(_: &Vm, args: &mut Args) -> SourceResult<Content> { - let amount = args.expect("spacing")?; + let amount = args.expect("amount")?; let weak = args.named("weak")?.unwrap_or(false); Ok(Self { amount, weak }.pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "amount" => Some(self.amount.encode()), + "weak" => Some(Value::Bool(self.weak)), + _ => None, + } + } } impl HNode { @@ -159,6 +167,14 @@ impl VNode { }; Ok(node.pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "amount" => Some(self.amount.encode()), + "weak" => Some(Value::Bool(self.weakness != 0)), + _ => None, + } + } } impl VNode { @@ -220,6 +236,22 @@ impl Spacing { pub fn is_fractional(self) -> bool { matches!(self, Self::Fractional(_)) } + + /// Encode into a value. + pub fn encode(self) -> Value { + match self { + Self::Relative(rel) => { + if rel.rel.is_zero() { + Value::Length(rel.abs) + } else if rel.abs.is_zero() { + Value::Ratio(rel.rel) + } else { + Value::Relative(rel) + } + } + Self::Fractional(fr) => Value::Fraction(fr), + } + } } impl From<Abs> for Spacing { diff --git a/library/src/layout/stack.rs b/library/src/layout/stack.rs index f83f4e41..c423b1a3 100644 --- a/library/src/layout/stack.rs +++ b/library/src/layout/stack.rs @@ -40,6 +40,26 @@ impl StackNode { } .pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "dir" => Some(Value::dynamic(self.dir)), + "spacing" => Some(match self.spacing { + Some(spacing) => spacing.encode(), + None => Value::None, + }), + "items" => Some(Value::Array( + self.children + .iter() + .map(|child| match child { + StackChild::Spacing(spacing) => spacing.encode(), + StackChild::Block(content) => Value::Content(content.clone()), + }) + .collect(), + )), + _ => None, + } + } } impl Layout for StackNode { diff --git a/library/src/layout/transform.rs b/library/src/layout/transform.rs index 92a31780..57a6c069 100644 --- a/library/src/layout/transform.rs +++ b/library/src/layout/transform.rs @@ -31,6 +31,7 @@ use crate::prelude::*; /// ### Example /// ``` /// Hello, world!#move(dy: -2pt)[!]#move(dy: 2pt)[!] +/// ``` /// /// - dx: Rel<Length> (named) /// The horizontal displacement of the content. @@ -61,6 +62,13 @@ impl MoveNode { } .pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "body" => Some(Value::Content(self.body.clone())), + _ => None, + } + } } impl Layout for MoveNode { @@ -130,6 +138,13 @@ impl RotateNode { } .pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "body" => Some(Value::Content(self.body.clone())), + _ => None, + } + } } impl Layout for RotateNode { @@ -209,6 +224,13 @@ impl ScaleNode { } .pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "body" => Some(Value::Content(self.body.clone())), + _ => None, + } + } } impl Layout for ScaleNode { |
