From e6b532391deb1e30dc356c4d20dd48199f748f29 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 11 Mar 2022 11:58:56 +0100 Subject: [PATCH] More restructuring --- src/eval/layout.rs | 3 +- src/eval/mod.rs | 8 ++-- src/eval/template.rs | 2 +- src/library/elements/mod.rs | 15 ------- src/library/{layout => graphics}/hide.rs | 0 src/library/{elements => graphics}/image.rs | 0 src/library/graphics/mod.rs | 11 +++++ src/library/{elements => graphics}/shape.rs | 0 src/library/{layout => graphics}/transform.rs | 0 src/library/layout/mod.rs | 4 -- src/library/{elements/math.rs => math/mod.rs} | 0 src/library/mod.rs | 40 ++++++++++-------- .../{elements => structure}/heading.rs | 0 src/library/{elements => structure}/list.rs | 0 src/library/structure/mod.rs | 9 ++++ src/library/{elements => structure}/table.rs | 0 tests/ref/{layout => graphics}/hide.png | Bin tests/ref/{elements => graphics}/image.png | Bin .../{elements => graphics}/shape-aspect.png | Bin .../{elements => graphics}/shape-circle.png | Bin .../{elements => graphics}/shape-ellipse.png | Bin .../shape-fill-stroke.png | Bin .../ref/{elements => graphics}/shape-rect.png | Bin .../{elements => graphics}/shape-square.png | Bin tests/ref/{layout => graphics}/transform.png | Bin .../ref/{elements/math.png => math/basic.png} | Bin tests/ref/{elements => structure}/enum.png | Bin tests/ref/{elements => structure}/heading.png | Bin tests/ref/{elements => structure}/list.png | Bin tests/ref/{elements => structure}/table.png | Bin .../utility/{strings.png => numbering.png} | Bin tests/typ/{layout => graphics}/hide.typ | 0 tests/typ/{elements => graphics}/image.typ | 0 .../{elements => graphics}/shape-aspect.typ | 0 .../{elements => graphics}/shape-circle.typ | 0 .../{elements => graphics}/shape-ellipse.typ | 0 .../shape-fill-stroke.typ | 0 .../typ/{elements => graphics}/shape-rect.typ | 0 .../{elements => graphics}/shape-square.typ | 0 tests/typ/{layout => graphics}/transform.typ | 0 .../typ/{elements/math.typ => math/basic.typ} | 0 tests/typ/{elements => structure}/enum.typ | 0 tests/typ/{elements => structure}/heading.typ | 0 tests/typ/{elements => structure}/list.typ | 0 tests/typ/{elements => structure}/table.typ | 0 tests/typ/utility/collection.typ | 11 +++++ tests/typ/utility/numbering.typ | 19 +++++++++ tests/typ/utility/strings.typ | 34 --------------- 48 files changed, 80 insertions(+), 76 deletions(-) delete mode 100644 src/library/elements/mod.rs rename src/library/{layout => graphics}/hide.rs (100%) rename src/library/{elements => graphics}/image.rs (100%) create mode 100644 src/library/graphics/mod.rs rename src/library/{elements => graphics}/shape.rs (100%) rename src/library/{layout => graphics}/transform.rs (100%) rename src/library/{elements/math.rs => math/mod.rs} (100%) rename src/library/{elements => structure}/heading.rs (100%) rename src/library/{elements => structure}/list.rs (100%) create mode 100644 src/library/structure/mod.rs rename src/library/{elements => structure}/table.rs (100%) rename tests/ref/{layout => graphics}/hide.png (100%) rename tests/ref/{elements => graphics}/image.png (100%) rename tests/ref/{elements => graphics}/shape-aspect.png (100%) rename tests/ref/{elements => graphics}/shape-circle.png (100%) rename tests/ref/{elements => graphics}/shape-ellipse.png (100%) rename tests/ref/{elements => graphics}/shape-fill-stroke.png (100%) rename tests/ref/{elements => graphics}/shape-rect.png (100%) rename tests/ref/{elements => graphics}/shape-square.png (100%) rename tests/ref/{layout => graphics}/transform.png (100%) rename tests/ref/{elements/math.png => math/basic.png} (100%) rename tests/ref/{elements => structure}/enum.png (100%) rename tests/ref/{elements => structure}/heading.png (100%) rename tests/ref/{elements => structure}/list.png (100%) rename tests/ref/{elements => structure}/table.png (100%) rename tests/ref/utility/{strings.png => numbering.png} (100%) rename tests/typ/{layout => graphics}/hide.typ (100%) rename tests/typ/{elements => graphics}/image.typ (100%) rename tests/typ/{elements => graphics}/shape-aspect.typ (100%) rename tests/typ/{elements => graphics}/shape-circle.typ (100%) rename tests/typ/{elements => graphics}/shape-ellipse.typ (100%) rename tests/typ/{elements => graphics}/shape-fill-stroke.typ (100%) rename tests/typ/{elements => graphics}/shape-rect.typ (100%) rename tests/typ/{elements => graphics}/shape-square.typ (100%) rename tests/typ/{layout => graphics}/transform.typ (100%) rename tests/typ/{elements/math.typ => math/basic.typ} (100%) rename tests/typ/{elements => structure}/enum.typ (100%) rename tests/typ/{elements => structure}/heading.typ (100%) rename tests/typ/{elements => structure}/list.typ (100%) rename tests/typ/{elements => structure}/table.typ (100%) create mode 100644 tests/typ/utility/numbering.typ delete mode 100644 tests/typ/utility/strings.typ diff --git a/src/eval/layout.rs b/src/eval/layout.rs index 029125448..135e5e048 100644 --- a/src/eval/layout.rs +++ b/src/eval/layout.rs @@ -9,7 +9,8 @@ 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::layout::{AlignNode, MoveNode, PadNode}; +use crate::library::graphics::MoveNode; +use crate::library::layout::{AlignNode, PadNode}; use crate::util::Prehashed; use crate::Context; diff --git a/src/eval/mod.rs b/src/eval/mod.rs index f8b4b0f0c..590b84633 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -155,7 +155,7 @@ impl Eval for MathNode { type Output = Template; fn eval(&self, _: &mut Context, _: &mut Scopes) -> EvalResult { - Ok(Template::show(library::elements::MathNode { + Ok(Template::show(library::math::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::elements::HeadingNode { + Ok(Template::show(library::structure::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::elements::ListItem { + Ok(Template::List(library::structure::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::elements::ListItem { + Ok(Template::Enum(library::structure::ListItem { number: self.number(), body: Box::new(self.body().eval(ctx, scp)?), })) diff --git a/src/eval/template.rs b/src/eval/template.rs index 94cc0aff9..3e88b6d7c 100644 --- a/src/eval/template.rs +++ b/src/eval/template.rs @@ -10,9 +10,9 @@ 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::structure::{ListItem, ListKind, ListNode, ORDERED, UNORDERED}; use crate::library::text::{DecoNode, ParChild, ParNode, TextNode, UNDERLINE}; use crate::util::EcoString; diff --git a/src/library/elements/mod.rs b/src/library/elements/mod.rs deleted file mode 100644 index 572010bba..000000000 --- a/src/library/elements/mod.rs +++ /dev/null @@ -1,15 +0,0 @@ -//! Primitive and semantic elements. - -mod heading; -mod image; -mod list; -mod math; -mod shape; -mod table; - -pub use self::image::*; -pub use heading::*; -pub use list::*; -pub use math::*; -pub use shape::*; -pub use table::*; diff --git a/src/library/layout/hide.rs b/src/library/graphics/hide.rs similarity index 100% rename from src/library/layout/hide.rs rename to src/library/graphics/hide.rs diff --git a/src/library/elements/image.rs b/src/library/graphics/image.rs similarity index 100% rename from src/library/elements/image.rs rename to src/library/graphics/image.rs diff --git a/src/library/graphics/mod.rs b/src/library/graphics/mod.rs new file mode 100644 index 000000000..353f09ca8 --- /dev/null +++ b/src/library/graphics/mod.rs @@ -0,0 +1,11 @@ +//! Graphical elements and effects. + +mod hide; +mod image; +mod shape; +mod transform; + +pub use self::image::*; +pub use hide::*; +pub use shape::*; +pub use transform::*; diff --git a/src/library/elements/shape.rs b/src/library/graphics/shape.rs similarity index 100% rename from src/library/elements/shape.rs rename to src/library/graphics/shape.rs diff --git a/src/library/layout/transform.rs b/src/library/graphics/transform.rs similarity index 100% rename from src/library/layout/transform.rs rename to src/library/graphics/transform.rs diff --git a/src/library/layout/mod.rs b/src/library/layout/mod.rs index 944548ab0..588b15aa1 100644 --- a/src/library/layout/mod.rs +++ b/src/library/layout/mod.rs @@ -5,23 +5,19 @@ mod columns; mod container; mod flow; mod grid; -mod hide; mod pad; mod page; mod place; mod spacing; mod stack; -mod transform; pub use align::*; pub use columns::*; pub use container::*; pub use flow::*; pub use grid::*; -pub use hide::*; pub use pad::*; pub use page::*; pub use place::*; pub use spacing::*; pub use stack::*; -pub use transform::*; diff --git a/src/library/elements/math.rs b/src/library/math/mod.rs similarity index 100% rename from src/library/elements/math.rs rename to src/library/math/mod.rs diff --git a/src/library/mod.rs b/src/library/mod.rs index 4a80ef435..ceb5a5571 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -3,9 +3,11 @@ //! Call [`new`] to obtain a [`Scope`] containing all standard library //! definitions. -pub mod elements; +pub mod graphics; pub mod layout; +pub mod math; pub mod prelude; +pub mod structure; pub mod text; pub mod utility; @@ -18,8 +20,8 @@ pub fn new() -> Scope { // Text. std.def_class::("text"); std.def_class::("par"); - std.def_class::("parbreak"); std.def_class::("linebreak"); + std.def_class::("parbreak"); std.def_class::("strong"); std.def_class::("emph"); std.def_class::("raw"); @@ -28,17 +30,11 @@ pub fn new() -> Scope { std.def_class::("overline"); std.def_class::("link"); - // Elements. - std.def_class::("math"); - std.def_class::("heading"); - std.def_class::("list"); - std.def_class::("enum"); - std.def_class::("table"); - std.def_class::("image"); - std.def_class::("rect"); - std.def_class::("square"); - std.def_class::("ellipse"); - std.def_class::("circle"); + // Structure. + std.def_class::("heading"); + std.def_class::("list"); + std.def_class::("enum"); + std.def_class::("table"); // Layout. std.def_class::("page"); @@ -54,10 +50,20 @@ pub fn new() -> Scope { std.def_class::("columns"); std.def_class::("colbreak"); std.def_class::("place"); - std.def_class::("move"); - std.def_class::("scale"); - std.def_class::("rotate"); - std.def_class::("hide"); + + // Graphics. + std.def_class::("image"); + std.def_class::("rect"); + std.def_class::("square"); + std.def_class::("ellipse"); + std.def_class::("circle"); + std.def_class::("move"); + std.def_class::("scale"); + std.def_class::("rotate"); + std.def_class::("hide"); + + // Math. + std.def_class::("math"); // Utility functions. std.def_func("assert", utility::assert); diff --git a/src/library/elements/heading.rs b/src/library/structure/heading.rs similarity index 100% rename from src/library/elements/heading.rs rename to src/library/structure/heading.rs diff --git a/src/library/elements/list.rs b/src/library/structure/list.rs similarity index 100% rename from src/library/elements/list.rs rename to src/library/structure/list.rs diff --git a/src/library/structure/mod.rs b/src/library/structure/mod.rs new file mode 100644 index 000000000..073d52e90 --- /dev/null +++ b/src/library/structure/mod.rs @@ -0,0 +1,9 @@ +//! Document structuring. + +mod heading; +mod list; +mod table; + +pub use heading::*; +pub use list::*; +pub use table::*; diff --git a/src/library/elements/table.rs b/src/library/structure/table.rs similarity index 100% rename from src/library/elements/table.rs rename to src/library/structure/table.rs diff --git a/tests/ref/layout/hide.png b/tests/ref/graphics/hide.png similarity index 100% rename from tests/ref/layout/hide.png rename to tests/ref/graphics/hide.png diff --git a/tests/ref/elements/image.png b/tests/ref/graphics/image.png similarity index 100% rename from tests/ref/elements/image.png rename to tests/ref/graphics/image.png diff --git a/tests/ref/elements/shape-aspect.png b/tests/ref/graphics/shape-aspect.png similarity index 100% rename from tests/ref/elements/shape-aspect.png rename to tests/ref/graphics/shape-aspect.png diff --git a/tests/ref/elements/shape-circle.png b/tests/ref/graphics/shape-circle.png similarity index 100% rename from tests/ref/elements/shape-circle.png rename to tests/ref/graphics/shape-circle.png diff --git a/tests/ref/elements/shape-ellipse.png b/tests/ref/graphics/shape-ellipse.png similarity index 100% rename from tests/ref/elements/shape-ellipse.png rename to tests/ref/graphics/shape-ellipse.png diff --git a/tests/ref/elements/shape-fill-stroke.png b/tests/ref/graphics/shape-fill-stroke.png similarity index 100% rename from tests/ref/elements/shape-fill-stroke.png rename to tests/ref/graphics/shape-fill-stroke.png diff --git a/tests/ref/elements/shape-rect.png b/tests/ref/graphics/shape-rect.png similarity index 100% rename from tests/ref/elements/shape-rect.png rename to tests/ref/graphics/shape-rect.png diff --git a/tests/ref/elements/shape-square.png b/tests/ref/graphics/shape-square.png similarity index 100% rename from tests/ref/elements/shape-square.png rename to tests/ref/graphics/shape-square.png diff --git a/tests/ref/layout/transform.png b/tests/ref/graphics/transform.png similarity index 100% rename from tests/ref/layout/transform.png rename to tests/ref/graphics/transform.png diff --git a/tests/ref/elements/math.png b/tests/ref/math/basic.png similarity index 100% rename from tests/ref/elements/math.png rename to tests/ref/math/basic.png diff --git a/tests/ref/elements/enum.png b/tests/ref/structure/enum.png similarity index 100% rename from tests/ref/elements/enum.png rename to tests/ref/structure/enum.png diff --git a/tests/ref/elements/heading.png b/tests/ref/structure/heading.png similarity index 100% rename from tests/ref/elements/heading.png rename to tests/ref/structure/heading.png diff --git a/tests/ref/elements/list.png b/tests/ref/structure/list.png similarity index 100% rename from tests/ref/elements/list.png rename to tests/ref/structure/list.png diff --git a/tests/ref/elements/table.png b/tests/ref/structure/table.png similarity index 100% rename from tests/ref/elements/table.png rename to tests/ref/structure/table.png diff --git a/tests/ref/utility/strings.png b/tests/ref/utility/numbering.png similarity index 100% rename from tests/ref/utility/strings.png rename to tests/ref/utility/numbering.png diff --git a/tests/typ/layout/hide.typ b/tests/typ/graphics/hide.typ similarity index 100% rename from tests/typ/layout/hide.typ rename to tests/typ/graphics/hide.typ diff --git a/tests/typ/elements/image.typ b/tests/typ/graphics/image.typ similarity index 100% rename from tests/typ/elements/image.typ rename to tests/typ/graphics/image.typ diff --git a/tests/typ/elements/shape-aspect.typ b/tests/typ/graphics/shape-aspect.typ similarity index 100% rename from tests/typ/elements/shape-aspect.typ rename to tests/typ/graphics/shape-aspect.typ diff --git a/tests/typ/elements/shape-circle.typ b/tests/typ/graphics/shape-circle.typ similarity index 100% rename from tests/typ/elements/shape-circle.typ rename to tests/typ/graphics/shape-circle.typ diff --git a/tests/typ/elements/shape-ellipse.typ b/tests/typ/graphics/shape-ellipse.typ similarity index 100% rename from tests/typ/elements/shape-ellipse.typ rename to tests/typ/graphics/shape-ellipse.typ diff --git a/tests/typ/elements/shape-fill-stroke.typ b/tests/typ/graphics/shape-fill-stroke.typ similarity index 100% rename from tests/typ/elements/shape-fill-stroke.typ rename to tests/typ/graphics/shape-fill-stroke.typ diff --git a/tests/typ/elements/shape-rect.typ b/tests/typ/graphics/shape-rect.typ similarity index 100% rename from tests/typ/elements/shape-rect.typ rename to tests/typ/graphics/shape-rect.typ diff --git a/tests/typ/elements/shape-square.typ b/tests/typ/graphics/shape-square.typ similarity index 100% rename from tests/typ/elements/shape-square.typ rename to tests/typ/graphics/shape-square.typ diff --git a/tests/typ/layout/transform.typ b/tests/typ/graphics/transform.typ similarity index 100% rename from tests/typ/layout/transform.typ rename to tests/typ/graphics/transform.typ diff --git a/tests/typ/elements/math.typ b/tests/typ/math/basic.typ similarity index 100% rename from tests/typ/elements/math.typ rename to tests/typ/math/basic.typ diff --git a/tests/typ/elements/enum.typ b/tests/typ/structure/enum.typ similarity index 100% rename from tests/typ/elements/enum.typ rename to tests/typ/structure/enum.typ diff --git a/tests/typ/elements/heading.typ b/tests/typ/structure/heading.typ similarity index 100% rename from tests/typ/elements/heading.typ rename to tests/typ/structure/heading.typ diff --git a/tests/typ/elements/list.typ b/tests/typ/structure/list.typ similarity index 100% rename from tests/typ/elements/list.typ rename to tests/typ/structure/list.typ diff --git a/tests/typ/elements/table.typ b/tests/typ/structure/table.typ similarity index 100% rename from tests/typ/elements/table.typ rename to tests/typ/structure/table.typ diff --git a/tests/typ/utility/collection.typ b/tests/typ/utility/collection.typ index a4bc817e2..649be4f79 100644 --- a/tests/typ/utility/collection.typ +++ b/tests/typ/utility/collection.typ @@ -16,6 +16,17 @@ // Error: 6-10 expected string, array or dictionary, found length #len(12pt) +--- +// Test the `upper` and `lower` functions. +#let memes = "ArE mEmEs gReAt?"; +#test(lower(memes), "are memes great?") +#test(upper(memes), "ARE MEMES GREAT?") +#test(upper("Ελλάδα"), "ΕΛΛΆΔΑ") + +--- +// Error: 8-9 expected string or template, found integer +#upper(1) + --- // Test the `sorted` function. #test(sorted(()), ()) diff --git a/tests/typ/utility/numbering.typ b/tests/typ/utility/numbering.typ new file mode 100644 index 000000000..65dc12d00 --- /dev/null +++ b/tests/typ/utility/numbering.typ @@ -0,0 +1,19 @@ +// Test numbering formatting functions. + +--- +#upper("Abc 8") +#upper[def] + +#lower("SCREAMING MUST BE SILENCED in " + roman(1672) + " years") + +#for i in range(9) { + symbol(i) + [ and ] + roman(i) + [ for #i] + parbreak() +} + +--- +// Error: 9-11 must be at least zero +#symbol(-1) diff --git a/tests/typ/utility/strings.typ b/tests/typ/utility/strings.typ deleted file mode 100644 index 4222266bd..000000000 --- a/tests/typ/utility/strings.typ +++ /dev/null @@ -1,34 +0,0 @@ -// Test string handling functions. -// Ref: false - ---- -// Test the `upper`, `lower`, and number formatting functions. -#let memes = "ArE mEmEs gReAt?"; -#test(lower(memes), "are memes great?") -#test(upper(memes), "ARE MEMES GREAT?") -#test(upper("Ελλάδα"), "ΕΛΛΆΔΑ") - ---- -// Test numbering formatting functions. -// Ref: true - -#upper("Abc 8") -#upper[def] - -#lower("SCREAMING MUST BE SILENCED in " + roman(1672) + " years") - -#for i in range(9) { - symbol(i) - [ and ] - roman(i) - [ for #i] - parbreak() -} - ---- -// Error: 8-9 expected string or template, found integer -#upper(1) - ---- -// Error: 9-11 must be at least zero -#symbol(-1)