From 3ca5b238238e1128aa7bbfbd5db9e632045d8600 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Mon, 28 Feb 2022 15:50:48 +0100 Subject: [PATCH] Reorganize library --- src/eval/class.rs | 2 +- src/eval/layout.rs | 4 +- src/eval/mod.rs | 16 +- src/eval/styles.rs | 3 +- src/eval/template.rs | 7 +- src/library/deco.rs | 74 --- src/library/{ => elements}/heading.rs | 6 +- src/library/{ => elements}/image.rs | 6 +- src/library/{ => elements}/list.rs | 16 +- src/library/{ => elements}/math.rs | 4 +- src/library/elements/mod.rs | 15 + src/library/{ => elements}/shape.rs | 26 +- src/library/{ => elements}/table.rs | 6 +- src/library/{ => layout}/align.rs | 6 +- src/library/{ => layout}/columns.rs | 6 +- src/library/{ => layout}/container.rs | 8 +- src/library/{ => layout}/flow.rs | 7 +- src/library/{ => layout}/grid.rs | 4 +- src/library/{ => layout}/hide.rs | 4 +- src/library/layout/mod.rs | 27 + src/library/{ => layout}/pad.rs | 4 +- src/library/{ => layout}/page.rs | 4 +- src/library/{ => layout}/place.rs | 4 +- src/library/{ => layout}/spacing.rs | 4 +- src/library/{ => layout}/stack.rs | 4 +- src/library/{ => layout}/transform.rs | 19 +- src/library/mod.rs | 206 +++---- src/library/prelude.rs | 20 + src/library/text/deco.rs | 250 ++++++++ src/library/{ => text}/link.rs | 4 +- src/library/text/mod.rs | 409 +++++++++++++ src/library/{ => text}/par.rs | 219 +++---- src/library/{ => text}/raw.rs | 6 +- src/library/{text.rs => text/shaping.rs} | 578 +----------------- src/library/utility/math.rs | 114 ++++ src/library/{utility.rs => utility/mod.rs} | 149 +---- src/library/{ => utility}/numbering.rs | 86 ++- .../{markup/enums.png => elements/enum.png} | Bin tests/ref/{markup => elements}/heading.png | Bin tests/ref/{layout => elements}/image.png | Bin .../{markup/lists.png => elements/list.png} | Bin tests/ref/{markup => elements}/math.png | Bin .../ref/{layout => elements}/shape-aspect.png | Bin .../ref/{layout => elements}/shape-circle.png | Bin .../{layout => elements}/shape-ellipse.png | Bin .../shape-fill-stroke.png | Bin tests/ref/{layout => elements}/shape-rect.png | Bin .../ref/{layout => elements}/shape-square.png | Bin tests/ref/{layout => elements}/table.png | Bin .../layout/{box-block.png => container.png} | Bin tests/ref/markup/linebreak.png | Bin 641 -> 0 bytes tests/ref/text/{decorations.png => deco.png} | Bin tests/ref/{markup => text}/emph-strong.png | Bin tests/ref/{markup => text}/escape.png | Bin .../text/{linebreaks.png => linebreak.png} | Bin tests/ref/text/{links.png => link.png} | Bin tests/ref/{markup => text}/raw.png | Bin tests/ref/{markup => text}/shorthands.png | Bin .../{markup/enums.typ => elements/enum.typ} | 0 tests/typ/{markup => elements}/heading.typ | 0 tests/typ/{layout => elements}/image.typ | 0 .../{markup/lists.typ => elements/list.typ} | 0 tests/typ/{markup => elements}/math.typ | 0 .../typ/{layout => elements}/shape-aspect.typ | 0 .../typ/{layout => elements}/shape-circle.typ | 0 .../{layout => elements}/shape-ellipse.typ | 0 .../shape-fill-stroke.typ | 0 tests/typ/{layout => elements}/shape-rect.typ | 0 .../typ/{layout => elements}/shape-square.typ | 0 tests/typ/{layout => elements}/table.typ | 0 .../layout/{box-block.typ => container.typ} | 0 tests/typ/markup/linebreak.typ | 4 - tests/typ/text/{decorations.typ => deco.typ} | 0 tests/typ/{markup => text}/emph-strong.typ | 0 tests/typ/{markup => text}/escape.typ | 0 .../text/{linebreaks.typ => linebreak.typ} | 2 +- tests/typ/text/{links.typ => link.typ} | 0 tests/typ/{markup => text}/raw.typ | 0 tests/typ/{markup => text}/shorthands.typ | 0 tests/typ/utility/collection.typ | 6 - tests/typ/utility/strings.typ | 12 +- tests/typeset.rs | 3 +- 82 files changed, 1174 insertions(+), 1180 deletions(-) delete mode 100644 src/library/deco.rs rename src/library/{ => elements}/heading.rs (97%) rename src/library/{ => elements}/image.rs (98%) rename src/library/{ => elements}/list.rs (95%) rename src/library/{ => elements}/math.rs (95%) create mode 100644 src/library/elements/mod.rs rename src/library/{ => elements}/shape.rs (90%) rename src/library/{ => elements}/table.rs (97%) rename src/library/{ => layout}/align.rs (95%) rename src/library/{ => layout}/columns.rs (98%) rename src/library/{ => layout}/container.rs (74%) rename src/library/{ => layout}/flow.rs (98%) rename src/library/{ => layout}/grid.rs (99%) rename src/library/{ => layout}/hide.rs (90%) create mode 100644 src/library/layout/mod.rs rename src/library/{ => layout}/pad.rs (97%) rename src/library/{ => layout}/page.rs (99%) rename src/library/{ => layout}/place.rs (97%) rename src/library/{ => layout}/spacing.rs (94%) rename src/library/{ => layout}/stack.rs (99%) rename src/library/{ => layout}/transform.rs (83%) create mode 100644 src/library/prelude.rs create mode 100644 src/library/text/deco.rs rename src/library/{ => text}/link.rs (97%) create mode 100644 src/library/text/mod.rs rename src/library/{ => text}/par.rs (96%) rename src/library/{ => text}/raw.rs (97%) rename src/library/{text.rs => text/shaping.rs} (50%) create mode 100644 src/library/utility/math.rs rename src/library/{utility.rs => utility/mod.rs} (60%) rename src/library/{ => utility}/numbering.rs (95%) rename tests/ref/{markup/enums.png => elements/enum.png} (100%) rename tests/ref/{markup => elements}/heading.png (100%) rename tests/ref/{layout => elements}/image.png (100%) rename tests/ref/{markup/lists.png => elements/list.png} (100%) rename tests/ref/{markup => elements}/math.png (100%) rename tests/ref/{layout => elements}/shape-aspect.png (100%) rename tests/ref/{layout => elements}/shape-circle.png (100%) rename tests/ref/{layout => elements}/shape-ellipse.png (100%) rename tests/ref/{layout => elements}/shape-fill-stroke.png (100%) rename tests/ref/{layout => elements}/shape-rect.png (100%) rename tests/ref/{layout => elements}/shape-square.png (100%) rename tests/ref/{layout => elements}/table.png (100%) rename tests/ref/layout/{box-block.png => container.png} (100%) delete mode 100644 tests/ref/markup/linebreak.png rename tests/ref/text/{decorations.png => deco.png} (100%) rename tests/ref/{markup => text}/emph-strong.png (100%) rename tests/ref/{markup => text}/escape.png (100%) rename tests/ref/text/{linebreaks.png => linebreak.png} (100%) rename tests/ref/text/{links.png => link.png} (100%) rename tests/ref/{markup => text}/raw.png (100%) rename tests/ref/{markup => text}/shorthands.png (100%) rename tests/typ/{markup/enums.typ => elements/enum.typ} (100%) rename tests/typ/{markup => elements}/heading.typ (100%) rename tests/typ/{layout => elements}/image.typ (100%) rename tests/typ/{markup/lists.typ => elements/list.typ} (100%) rename tests/typ/{markup => elements}/math.typ (100%) rename tests/typ/{layout => elements}/shape-aspect.typ (100%) rename tests/typ/{layout => elements}/shape-circle.typ (100%) rename tests/typ/{layout => elements}/shape-ellipse.typ (100%) rename tests/typ/{layout => elements}/shape-fill-stroke.typ (100%) rename tests/typ/{layout => elements}/shape-rect.typ (100%) rename tests/typ/{layout => elements}/shape-square.typ (100%) rename tests/typ/{layout => elements}/table.typ (100%) rename tests/typ/layout/{box-block.typ => container.typ} (100%) delete mode 100644 tests/typ/markup/linebreak.typ rename tests/typ/text/{decorations.typ => deco.typ} (100%) rename tests/typ/{markup => text}/emph-strong.typ (100%) rename tests/typ/{markup => text}/escape.typ (100%) rename tests/typ/text/{linebreaks.typ => linebreak.typ} (94%) rename tests/typ/text/{links.typ => link.typ} (100%) rename tests/typ/{markup => text}/raw.typ (100%) rename tests/typ/{markup => text}/shorthands.typ (100%) diff --git a/src/eval/class.rs b/src/eval/class.rs index 5e1857d7b..2cced74d5 100644 --- a/src/eval/class.rs +++ b/src/eval/class.rs @@ -33,7 +33,7 @@ use crate::Context; /// ``` /// /// [construct]: Self::construct -/// [`TextNode`]: crate::library::TextNode +/// [`TextNode`]: crate::library::text::TextNode /// [`set`]: Self::set #[derive(Clone)] pub struct Class { diff --git a/src/eval/layout.rs b/src/eval/layout.rs index 38ad39771..029125448 100644 --- a/src/eval/layout.rs +++ b/src/eval/layout.rs @@ -9,7 +9,7 @@ use crate::diag::TypResult; use crate::eval::StyleChain; use crate::frame::{Element, Frame, Geometry, Shape, Stroke}; use crate::geom::{Align, Length, Linear, Paint, Point, Sides, Size, Spec, Transform}; -use crate::library::{AlignNode, PadNode, TransformNode, MOVE}; +use crate::library::layout::{AlignNode, MoveNode, PadNode}; use crate::util::Prehashed; use crate::Context; @@ -203,7 +203,7 @@ impl LayoutNode { /// Transform this node's contents without affecting layout. pub fn moved(self, offset: Point) -> Self { if !offset.is_zero() { - TransformNode:: { + MoveNode { transform: Transform::translation(offset.x, offset.y), child: self, } diff --git a/src/eval/mod.rs b/src/eval/mod.rs index 380e9e9d1..f8b4b0f0c 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -120,7 +120,7 @@ impl Eval for StrongNode { type Output = Template; fn eval(&self, ctx: &mut Context, scp: &mut Scopes) -> EvalResult { - Ok(Template::show(library::StrongNode( + Ok(Template::show(library::text::StrongNode( self.body().eval(ctx, scp)?, ))) } @@ -130,7 +130,7 @@ impl Eval for EmphNode { type Output = Template; fn eval(&self, ctx: &mut Context, scp: &mut Scopes) -> EvalResult { - Ok(Template::show(library::EmphNode( + Ok(Template::show(library::text::EmphNode( self.body().eval(ctx, scp)?, ))) } @@ -140,12 +140,12 @@ impl Eval for RawNode { type Output = Template; fn eval(&self, _: &mut Context, _: &mut Scopes) -> EvalResult { - let template = Template::show(library::RawNode { + let template = Template::show(library::text::RawNode { text: self.text.clone(), block: self.block, }); Ok(match self.lang { - Some(_) => template.styled(library::RawNode::LANG, self.lang.clone()), + Some(_) => template.styled(library::text::RawNode::LANG, self.lang.clone()), None => template, }) } @@ -155,7 +155,7 @@ impl Eval for MathNode { type Output = Template; fn eval(&self, _: &mut Context, _: &mut Scopes) -> EvalResult { - Ok(Template::show(library::MathNode { + Ok(Template::show(library::elements::MathNode { formula: self.formula.clone(), display: self.display, })) @@ -166,7 +166,7 @@ impl Eval for HeadingNode { type Output = Template; fn eval(&self, ctx: &mut Context, scp: &mut Scopes) -> EvalResult { - Ok(Template::show(library::HeadingNode { + Ok(Template::show(library::elements::HeadingNode { body: self.body().eval(ctx, scp)?, level: self.level(), })) @@ -177,7 +177,7 @@ impl Eval for ListNode { type Output = Template; fn eval(&self, ctx: &mut Context, scp: &mut Scopes) -> EvalResult { - Ok(Template::List(library::ListItem { + Ok(Template::List(library::elements::ListItem { number: None, body: Box::new(self.body().eval(ctx, scp)?), })) @@ -188,7 +188,7 @@ impl Eval for EnumNode { type Output = Template; fn eval(&self, ctx: &mut Context, scp: &mut Scopes) -> EvalResult { - Ok(Template::Enum(library::ListItem { + Ok(Template::Enum(library::elements::ListItem { number: self.number(), body: Box::new(self.body().eval(ctx, scp)?), })) diff --git a/src/eval/styles.rs b/src/eval/styles.rs index 8e7bd4b65..5a8371a96 100644 --- a/src/eval/styles.rs +++ b/src/eval/styles.rs @@ -5,7 +5,8 @@ use std::sync::Arc; use super::{Args, Func, Span, Template, Value}; use crate::diag::{At, TypResult}; -use crate::library::{PageNode, ParNode}; +use crate::library::layout::PageNode; +use crate::library::text::ParNode; use crate::Context; /// A map of style properties. diff --git a/src/eval/template.rs b/src/eval/template.rs index 747e5d442..94cc0aff9 100644 --- a/src/eval/template.rs +++ b/src/eval/template.rs @@ -10,11 +10,10 @@ use super::{ StyleMap, StyleVecBuilder, }; use crate::diag::StrResult; +use crate::library::elements::{ListItem, ListKind, ListNode, ORDERED, UNORDERED}; +use crate::library::layout::{FlowChild, FlowNode, PageNode, PlaceNode, SpacingKind}; use crate::library::prelude::*; -use crate::library::{ - DecoNode, FlowChild, FlowNode, ListItem, ListKind, ListNode, PageNode, ParChild, - ParNode, PlaceNode, SpacingKind, TextNode, ORDERED, UNDERLINE, UNORDERED, -}; +use crate::library::text::{DecoNode, ParChild, ParNode, TextNode, UNDERLINE}; use crate::util::EcoString; /// Composable representation of styled content. diff --git a/src/library/deco.rs b/src/library/deco.rs deleted file mode 100644 index 8c2b5a9a5..000000000 --- a/src/library/deco.rs +++ /dev/null @@ -1,74 +0,0 @@ -//! Text decorations. - -use super::prelude::*; -use super::TextNode; - -/// Typeset underline, striken-through or overlined text. -#[derive(Debug, Hash)] -pub struct DecoNode(pub Template); - -#[class] -impl DecoNode { - /// Stroke color of the line, defaults to the text color if `None`. - #[shorthand] - pub const STROKE: Option = None; - /// Thickness of the line's strokes (dependent on scaled font size), read - /// from the font tables if `None`. - #[shorthand] - pub const THICKNESS: Option = None; - /// Position of the line relative to the baseline (dependent on scaled font - /// size), read from the font tables if `None`. - pub const OFFSET: Option = None; - /// Amount that the line will be longer or shorter than its associated text - /// (dependent on scaled font size). - pub const EXTENT: Linear = Linear::zero(); - /// Whether the line skips sections in which it would collide - /// with the glyphs. Does not apply to strikethrough. - pub const EVADE: bool = true; - - fn construct(_: &mut Context, args: &mut Args) -> TypResult