From 33928a00dc58250e24da1dae4e5db17e7b598d70 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 3 Nov 2022 16:50:26 +0100 Subject: [PATCH] Tidy up library --- cli/src/main.rs | 3 +- library/src/{utility/math.rs => base/calc.rs} | 0 library/src/{utility => base}/color.rs | 0 library/src/{utility => base}/data.rs | 2 +- library/src/{utility => base}/mod.rs | 6 +- library/src/{utility => base}/string.rs | 0 library/src/ext.rs | 2 +- library/src/layout/flow.rs | 12 ++-- library/src/layout/grid.rs | 6 +- library/src/layout/mod.rs | 40 ++++++------ library/src/layout/page.rs | 1 + library/src/layout/stack.rs | 22 +++---- library/src/lib.rs | 58 +++++++++--------- library/src/math/tex.rs | 2 +- library/src/prelude.rs | 17 ++--- library/src/structure/list.rs | 4 +- library/src/structure/reference.rs | 1 + library/src/text/deco.rs | 4 +- library/src/text/mod.rs | 14 ++--- library/src/text/quotes.rs | 4 +- library/src/text/shaping.rs | 8 +-- library/src/text/shift.rs | 16 ++--- tests/ref/{utility => base}/blind.png | Bin tests/ref/{utility => base}/collection.png | Bin tests/ref/{utility => base}/color.png | Bin tests/ref/{utility => base}/data.png | Bin tests/ref/{utility => base}/eval.png | Bin tests/ref/{utility => base}/numbering.png | Bin tests/ref/{utility => base}/string.png | Bin tests/ref/{math/basic.png => layout/math.png} | Bin tests/ref/text/{basic.png => plain.png} | Bin tests/src/benches.rs | 3 +- tests/src/tests.rs | 5 +- .../{utility/basics.typ => base/assert.typ} | 3 +- tests/typ/{utility => base}/blind.typ | 0 tests/typ/{utility/math.typ => base/calc.typ} | 0 tests/typ/{utility => base}/collection.typ | 0 tests/typ/{utility => base}/color.typ | 0 tests/typ/{utility => base}/data.typ | 2 +- tests/typ/{utility => base}/eval.typ | 0 tests/typ/{utility => base}/string.typ | 0 tests/typ/base/type.typ | 7 +++ tests/typ/{math/basic.typ => layout/math.typ} | 0 tests/typ/text/{basic.typ => plain.typ} | 2 +- 44 files changed, 119 insertions(+), 125 deletions(-) rename library/src/{utility/math.rs => base/calc.rs} (100%) rename library/src/{utility => base}/color.rs (100%) rename library/src/{utility => base}/data.rs (98%) rename library/src/{utility => base}/mod.rs (95%) rename library/src/{utility => base}/string.rs (100%) rename tests/ref/{utility => base}/blind.png (100%) rename tests/ref/{utility => base}/collection.png (100%) rename tests/ref/{utility => base}/color.png (100%) rename tests/ref/{utility => base}/data.png (100%) rename tests/ref/{utility => base}/eval.png (100%) rename tests/ref/{utility => base}/numbering.png (100%) rename tests/ref/{utility => base}/string.png (100%) rename tests/ref/{math/basic.png => layout/math.png} (100%) rename tests/ref/text/{basic.png => plain.png} (100%) rename tests/typ/{utility/basics.typ => base/assert.typ} (94%) rename tests/typ/{utility => base}/blind.typ (100%) rename tests/typ/{utility/math.typ => base/calc.typ} (100%) rename tests/typ/{utility => base}/collection.typ (100%) rename tests/typ/{utility => base}/color.typ (100%) rename tests/typ/{utility => base}/data.typ (94%) rename tests/typ/{utility => base}/eval.typ (100%) rename tests/typ/{utility => base}/string.typ (100%) create mode 100644 tests/typ/base/type.typ rename tests/typ/{math/basic.typ => layout/math.typ} (100%) rename tests/typ/text/{basic.typ => plain.typ} (98%) diff --git a/cli/src/main.rs b/cli/src/main.rs index 62cad8ab5..c7eb2977a 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -17,13 +17,12 @@ use pico_args::Arguments; use same_file::{is_same_file, Handle}; use siphasher::sip128::{Hasher128, SipHasher}; use termcolor::{ColorChoice, StandardStream, WriteColor}; -use walkdir::WalkDir; - use typst::diag::{FileError, FileResult, SourceError, StrResult}; use typst::font::{Font, FontBook, FontInfo, FontVariant}; use typst::syntax::{Source, SourceId}; use typst::util::{Buffer, PathExt}; use typst::{Config, World}; +use walkdir::WalkDir; type CodespanResult = Result; type CodespanError = codespan_reporting::files::Error; diff --git a/library/src/utility/math.rs b/library/src/base/calc.rs similarity index 100% rename from library/src/utility/math.rs rename to library/src/base/calc.rs diff --git a/library/src/utility/color.rs b/library/src/base/color.rs similarity index 100% rename from library/src/utility/color.rs rename to library/src/base/color.rs diff --git a/library/src/utility/data.rs b/library/src/base/data.rs similarity index 98% rename from library/src/utility/data.rs rename to library/src/base/data.rs index 3edade55c..1199056fb 100644 --- a/library/src/utility/data.rs +++ b/library/src/base/data.rs @@ -1,6 +1,6 @@ use std::fmt::Write; -use typst::diag::format_xml_like_error; +use typst::diag::{format_xml_like_error, FileError}; use crate::prelude::*; diff --git a/library/src/utility/mod.rs b/library/src/base/mod.rs similarity index 95% rename from library/src/utility/mod.rs rename to library/src/base/mod.rs index 402944cdf..bb1c8c51b 100644 --- a/library/src/utility/mod.rs +++ b/library/src/base/mod.rs @@ -1,13 +1,13 @@ -//! Computational utility functions. +//! Foundational functions. +mod calc; mod color; mod data; -mod math; mod string; +pub use calc::*; pub use color::*; pub use data::*; -pub use math::*; pub use string::*; use comemo::Track; diff --git a/library/src/utility/string.rs b/library/src/base/string.rs similarity index 100% rename from library/src/utility/string.rs rename to library/src/base/string.rs diff --git a/library/src/ext.rs b/library/src/ext.rs index 72ef484b6..6f5b1b67b 100644 --- a/library/src/ext.rs +++ b/library/src/ext.rs @@ -115,7 +115,7 @@ impl StyleMapExt for StyleMap { fn set_family(&mut self, preferred: text::FontFamily, existing: StyleChain) { self.set( text::TextNode::FAMILY, - FallbackList( + text::FallbackList( std::iter::once(preferred) .chain(existing.get(text::TextNode::FAMILY).0.iter().cloned()) .collect(), diff --git a/library/src/layout/flow.rs b/library/src/layout/flow.rs index a59927962..347c1dd88 100644 --- a/library/src/layout/flow.rs +++ b/library/src/layout/flow.rs @@ -80,7 +80,7 @@ impl PartialOrd for FlowChild { } /// Performs flow layout. -pub struct FlowLayouter { +struct FlowLayouter { /// The regions to layout children into. regions: Regions, /// Whether the flow should expand to fill the region. @@ -112,7 +112,7 @@ enum FlowItem { impl FlowLayouter { /// Create a new flow layouter. - pub fn new(regions: &Regions) -> Self { + fn new(regions: &Regions) -> Self { let expand = regions.expand; let full = regions.first; @@ -132,7 +132,7 @@ impl FlowLayouter { } /// Layout spacing. - pub fn layout_spacing(&mut self, spacing: Spacing, styles: StyleChain) { + fn layout_spacing(&mut self, spacing: Spacing, styles: StyleChain) { match spacing { Spacing::Relative(v) => { // Resolve the spacing and limit it to the remaining space. @@ -150,7 +150,7 @@ impl FlowLayouter { } /// Layout a block. - pub fn layout_block( + fn layout_block( &mut self, world: Tracked, block: &Content, @@ -206,7 +206,7 @@ impl FlowLayouter { } /// Finish the frame for one region. - pub fn finish_region(&mut self) { + fn finish_region(&mut self) { // Determine the size of the flow in this region dependening on whether // the region expands. let mut size = self.expand.select(self.full, self.used); @@ -254,7 +254,7 @@ impl FlowLayouter { } /// Finish layouting and return the resulting frames. - pub fn finish(mut self) -> Vec { + fn finish(mut self) -> Vec { if self.expand.y { while !self.regions.backlog.is_empty() { self.finish_region(); diff --git a/library/src/layout/grid.rs b/library/src/layout/grid.rs index f6610d78e..a6f93ab65 100644 --- a/library/src/layout/grid.rs +++ b/library/src/layout/grid.rs @@ -99,7 +99,7 @@ castable! { } /// Performs grid layout. -pub struct GridLayouter<'a> { +struct GridLayouter<'a> { /// The core context. world: Tracked<'a, dyn World>, /// The grid cells. @@ -140,7 +140,7 @@ impl<'a> GridLayouter<'a> { /// Create a new grid layouter. /// /// This prepares grid layout by unifying content and gutter tracks. - pub fn new( + fn new( world: Tracked<'a, dyn World>, tracks: Axes<&[TrackSizing]>, gutter: Axes<&[TrackSizing]>, @@ -211,7 +211,7 @@ impl<'a> GridLayouter<'a> { } /// Determines the columns sizes and then layouts the grid row-by-row. - pub fn layout(mut self) -> SourceResult> { + fn layout(mut self) -> SourceResult> { self.measure_columns()?; for y in 0 .. self.rows.len() { diff --git a/library/src/layout/mod.rs b/library/src/layout/mod.rs index ddfaa3513..5ab5f42e7 100644 --- a/library/src/layout/mod.rs +++ b/library/src/layout/mod.rs @@ -44,16 +44,16 @@ use crate::text::{ LinebreakNode, ParChild, ParNode, ParbreakNode, SmartQuoteNode, SpaceNode, TextNode, }; -/// The root-level layout. +/// Root-level layout. #[capability] -pub trait Layout: 'static + Sync + Send { +pub trait LayoutRoot: 'static + Sync + Send { /// Layout into one frame per page. - fn layout(&self, world: Tracked) -> SourceResult>; + fn layout_root(&self, world: Tracked) -> SourceResult>; } -impl Layout for Content { +impl LayoutRoot for Content { #[comemo::memoize] - fn layout(&self, world: Tracked) -> SourceResult> { + fn layout_root(&self, world: Tracked) -> SourceResult> { let styles = StyleChain::with_root(&world.config().styles); let scratch = Scratch::default(); @@ -259,7 +259,7 @@ struct Scratch<'a> { /// Determines whether a style could interrupt some composable structure. #[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd)] -pub enum Interruption { +enum Interruption { /// The style forces a list break. List, /// The style forces a paragraph break. @@ -269,11 +269,7 @@ pub enum Interruption { } impl<'a> Builder<'a> { - pub fn new( - world: Tracked<'a, dyn World>, - scratch: &'a Scratch<'a>, - top: bool, - ) -> Self { + fn new(world: Tracked<'a, dyn World>, scratch: &'a Scratch<'a>, top: bool) -> Self { Self { world, scratch, @@ -284,7 +280,7 @@ impl<'a> Builder<'a> { } } - pub fn into_doc( + fn into_doc( mut self, styles: StyleChain<'a>, ) -> SourceResult<(DocNode, StyleChain<'a>)> { @@ -293,7 +289,7 @@ impl<'a> Builder<'a> { Ok((DocNode(pages), shared)) } - pub fn into_flow( + fn into_flow( mut self, styles: StyleChain<'a>, ) -> SourceResult<(FlowNode, StyleChain<'a>)> { @@ -302,7 +298,7 @@ impl<'a> Builder<'a> { Ok((FlowNode(children), shared)) } - pub fn accept( + fn accept( &mut self, content: &'a Content, styles: StyleChain<'a>, @@ -740,7 +736,7 @@ enum Last { impl<'a, T> CollapsingBuilder<'a, T> { /// Create a new style-vec builder. - pub fn new() -> Self { + fn new() -> Self { Self { builder: StyleVecBuilder::new(), staged: vec![], @@ -749,7 +745,7 @@ impl<'a, T> CollapsingBuilder<'a, T> { } /// Whether the builder is empty. - pub fn is_empty(&self) -> bool { + fn is_empty(&self) -> bool { self.builder.is_empty() && self.staged.is_empty() } @@ -760,7 +756,7 @@ impl<'a, T> CollapsingBuilder<'a, T> { /// Between weak items, there may be at least one per layer and among the /// candidates the strongest one (smallest `weakness`) wins. When tied, /// the one that compares larger through `PartialOrd` wins. - pub fn weak(&mut self, item: T, styles: StyleChain<'a>, weakness: u8) + fn weak(&mut self, item: T, styles: StyleChain<'a>, weakness: u8) where T: PartialOrd, { @@ -788,31 +784,31 @@ impl<'a, T> CollapsingBuilder<'a, T> { } /// Forces nearby weak items to collapse. - pub fn destructive(&mut self, item: T, styles: StyleChain<'a>) { + fn destructive(&mut self, item: T, styles: StyleChain<'a>) { self.flush(false); self.builder.push(item, styles); self.last = Last::Destructive; } /// Allows nearby weak items to exist. - pub fn supportive(&mut self, item: T, styles: StyleChain<'a>) { + fn supportive(&mut self, item: T, styles: StyleChain<'a>) { self.flush(true); self.builder.push(item, styles); self.last = Last::Supportive; } /// Has no influence on other items. - pub fn ignorant(&mut self, item: T, styles: StyleChain<'a>) { + fn ignorant(&mut self, item: T, styles: StyleChain<'a>) { self.staged.push((item, styles, None)); } /// Iterate over the contained items. - pub fn items(&self) -> impl DoubleEndedIterator { + fn items(&self) -> impl DoubleEndedIterator { self.builder.items().chain(self.staged.iter().map(|(item, ..)| item)) } /// Return the finish style vec and the common prefix chain. - pub fn finish(mut self) -> (StyleVec, StyleChain<'a>) { + fn finish(mut self) -> (StyleVec, StyleChain<'a>) { self.flush(false); self.builder.finish() } diff --git a/library/src/layout/page.rs b/library/src/layout/page.rs index 53a8cbc7b..7ce0d633f 100644 --- a/library/src/layout/page.rs +++ b/library/src/layout/page.rs @@ -2,6 +2,7 @@ use std::str::FromStr; use super::ColumnsNode; use crate::prelude::*; +use crate::text::TextNode; /// Layouts its child onto one or multiple pages. #[derive(PartialEq, Clone, Hash)] diff --git a/library/src/layout/stack.rs b/library/src/layout/stack.rs index 44bcbf670..ec1063fd1 100644 --- a/library/src/layout/stack.rs +++ b/library/src/layout/stack.rs @@ -89,7 +89,7 @@ castable! { } /// Performs stack layout. -pub struct StackLayouter<'a> { +struct StackLayouter<'a> { /// The stacking direction. dir: Dir, /// The axis of the stacking direction. @@ -125,7 +125,7 @@ enum StackItem { impl<'a> StackLayouter<'a> { /// Create a new stack layouter. - pub fn new(dir: Dir, regions: &Regions, styles: StyleChain<'a>) -> Self { + fn new(dir: Dir, regions: &Regions, styles: StyleChain<'a>) -> Self { let axis = dir.axis(); let expand = regions.expand; let full = regions.first; @@ -149,7 +149,7 @@ impl<'a> StackLayouter<'a> { } /// Add spacing along the spacing direction. - pub fn layout_spacing(&mut self, spacing: Spacing) { + fn layout_spacing(&mut self, spacing: Spacing) { match spacing { Spacing::Relative(v) => { // Resolve the spacing and limit it to the remaining space. @@ -169,7 +169,7 @@ impl<'a> StackLayouter<'a> { } /// Layout an arbitrary block. - pub fn layout_block( + fn layout_block( &mut self, world: Tracked, block: &Content, @@ -223,7 +223,7 @@ impl<'a> StackLayouter<'a> { } /// Advance to the next region. - pub fn finish_region(&mut self) { + fn finish_region(&mut self) { // Determine the size of the stack in this region dependening on whether // the region expands. let used = self.used.to_axes(self.axis); @@ -279,7 +279,7 @@ impl<'a> StackLayouter<'a> { } /// Finish layouting and return the resulting frames. - pub fn finish(mut self) -> Vec { + fn finish(mut self) -> Vec { self.finish_region(); self.finished } @@ -287,7 +287,7 @@ impl<'a> StackLayouter<'a> { /// A container with a main and cross component. #[derive(Default, Copy, Clone, Eq, PartialEq, Hash)] -pub struct Gen { +struct Gen { /// The main component. pub cross: T, /// The cross component. @@ -296,12 +296,12 @@ pub struct Gen { impl Gen { /// Create a new instance from the two components. - pub const fn new(cross: T, main: T) -> Self { + const fn new(cross: T, main: T) -> Self { Self { cross, main } } /// Convert to the specific representation, given the current main axis. - pub fn to_axes(self, main: Axis) -> Axes { + fn to_axes(self, main: Axis) -> Axes { match main { Axis::X => Axes::new(self.main, self.cross), Axis::Y => Axes::new(self.cross, self.main), @@ -311,12 +311,12 @@ impl Gen { impl Gen { /// The zero value. - pub fn zero() -> Self { + fn zero() -> Self { Self { cross: Abs::zero(), main: Abs::zero() } } /// Convert to a point. - pub fn to_point(self, main: Axis) -> Point { + fn to_point(self, main: Axis) -> Point { self.to_axes(main).to_point() } } diff --git a/library/src/lib.rs b/library/src/lib.rs index ed332a063..7ffb490c1 100644 --- a/library/src/lib.rs +++ b/library/src/lib.rs @@ -1,19 +1,19 @@ //! Typst's standard library. +pub mod base; pub mod graphics; pub mod layout; pub mod math; pub mod prelude; pub mod structure; pub mod text; -pub mod utility; mod ext; use typst::geom::{Align, Color, Dir, GenAlign}; use typst::model::{LangItems, Node, Scope, StyleMap}; -use self::layout::Layout; +use self::layout::LayoutRoot; /// Construct the standard library scope. pub fn scope() -> Scope { @@ -83,32 +83,32 @@ pub fn scope() -> Scope { std.define("NN", "ℕ"); std.define("RR", "ℝ"); - // Utility. - std.def_fn("type", utility::type_); - std.def_fn("assert", utility::assert); - std.def_fn("eval", utility::eval); - std.def_fn("int", utility::int); - std.def_fn("float", utility::float); - std.def_fn("abs", utility::abs); - std.def_fn("min", utility::min); - std.def_fn("max", utility::max); - std.def_fn("even", utility::even); - std.def_fn("odd", utility::odd); - std.def_fn("mod", utility::mod_); - std.def_fn("range", utility::range); - std.def_fn("luma", utility::luma); - std.def_fn("rgb", utility::rgb); - std.def_fn("cmyk", utility::cmyk); - std.def_fn("repr", utility::repr); - std.def_fn("str", utility::str); - std.def_fn("regex", utility::regex); - std.def_fn("letter", utility::letter); - std.def_fn("roman", utility::roman); - std.def_fn("symbol", utility::symbol); - std.def_fn("lorem", utility::lorem); - std.def_fn("csv", utility::csv); - std.def_fn("json", utility::json); - std.def_fn("xml", utility::xml); + // Base. + std.def_fn("type", base::type_); + std.def_fn("assert", base::assert); + std.def_fn("eval", base::eval); + std.def_fn("int", base::int); + std.def_fn("float", base::float); + std.def_fn("abs", base::abs); + std.def_fn("min", base::min); + std.def_fn("max", base::max); + std.def_fn("even", base::even); + std.def_fn("odd", base::odd); + std.def_fn("mod", base::mod_); + std.def_fn("range", base::range); + std.def_fn("luma", base::luma); + std.def_fn("rgb", base::rgb); + std.def_fn("cmyk", base::cmyk); + std.def_fn("repr", base::repr); + std.def_fn("str", base::str); + std.def_fn("regex", base::regex); + std.def_fn("letter", base::letter); + std.def_fn("roman", base::roman); + std.def_fn("symbol", base::symbol); + std.def_fn("lorem", base::lorem); + std.def_fn("csv", base::csv); + std.def_fn("json", base::json); + std.def_fn("xml", base::xml); // Predefined colors. std.define("black", Color::BLACK); @@ -155,7 +155,7 @@ pub fn styles() -> StyleMap { /// Construct the standard lang item mapping. pub fn items() -> LangItems { LangItems { - root: |world, content| content.layout(world), + root: |world, content| content.layout_root(world), em: |styles| styles.get(text::TextNode::SIZE), dir: |styles| styles.get(text::TextNode::DIR), space: || text::SpaceNode.pack(), diff --git a/library/src/math/tex.rs b/library/src/math/tex.rs index 7b40aa2bc..7de68d7bb 100644 --- a/library/src/math/tex.rs +++ b/library/src/math/tex.rs @@ -5,7 +5,7 @@ use rex::parser::color::RGBA; use rex::render::{Backend, Cursor, Renderer}; use typst::font::Font; -use super::*; +use super::MathNode; use crate::prelude::*; use crate::text::{variant, LinebreakNode, SpaceNode, TextNode}; diff --git a/library/src/prelude.rs b/library/src/prelude.rs index 0c3b0eb19..11095c67c 100644 --- a/library/src/prelude.rs +++ b/library/src/prelude.rs @@ -1,27 +1,20 @@ //! Helpful imports for creating library functionality. pub use std::fmt::{self, Debug, Formatter}; -pub use std::hash::Hash; -pub use std::io; pub use std::num::NonZeroUsize; -pub use std::sync::Arc; pub use comemo::Tracked; -pub use typst::diag::{ - bail, error, with_alternative, At, FileError, FileResult, SourceError, SourceResult, - StrResult, -}; +pub use typst::diag::{bail, error, with_alternative, At, SourceResult, StrResult}; pub use typst::frame::*; pub use typst::geom::*; pub use typst::model::{ - array, capability, castable, dict, dynamic, format_str, node, Args, Array, - Capability, Cast, Content, Dict, Dynamic, Fold, Func, Key, LangItems, Node, Resolve, - Scope, Selector, Show, Smart, Str, StyleChain, StyleMap, StyleVec, Value, Vm, + array, capability, castable, dict, dynamic, format_str, node, Args, Array, Cast, + Content, Dict, Fold, Func, Key, Node, Resolve, Scope, Selector, Show, Smart, Str, + StyleChain, StyleMap, StyleVec, Value, Vm, }; pub use typst::syntax::{Span, Spanned}; pub use typst::util::{format_eco, EcoString}; pub use typst::World; pub use super::ext::{ContentExt, StyleMapExt}; -pub use super::layout::{Layout, LayoutBlock, LayoutInline, Regions}; -pub use super::text::{FallbackList, TextNode}; +pub use super::layout::{LayoutBlock, LayoutInline, Regions}; diff --git a/library/src/structure/list.rs b/library/src/structure/list.rs index 2015f19ba..d461ef2dd 100644 --- a/library/src/structure/list.rs +++ b/library/src/structure/list.rs @@ -1,9 +1,9 @@ use unscanny::Scanner; +use crate::base::Numbering; use crate::layout::{BlockSpacing, GridNode, HNode, TrackSizing}; use crate::prelude::*; -use crate::text::{ParNode, SpaceNode}; -use crate::utility::Numbering; +use crate::text::{ParNode, SpaceNode, TextNode}; /// An unordered (bulleted) or ordered (numbered) list. #[derive(Debug, Hash)] diff --git a/library/src/structure/reference.rs b/library/src/structure/reference.rs index 632ecba5f..56f8b8e33 100644 --- a/library/src/structure/reference.rs +++ b/library/src/structure/reference.rs @@ -1,4 +1,5 @@ use crate::prelude::*; +use crate::text::TextNode; /// A reference to a label. #[derive(Debug, Hash)] diff --git a/library/src/text/deco.rs b/library/src/text/deco.rs index cd3acef54..aaf6cfa81 100644 --- a/library/src/text/deco.rs +++ b/library/src/text/deco.rs @@ -70,7 +70,7 @@ impl Show for DecoNode { /// /// For more details, see [`DecoNode`]. #[derive(Debug, Clone, Eq, PartialEq, Hash)] -pub struct Decoration { +pub(super) struct Decoration { pub line: DecoLine, pub stroke: PartialStroke, pub offset: Smart, @@ -91,7 +91,7 @@ pub const STRIKETHROUGH: DecoLine = 1; pub const OVERLINE: DecoLine = 2; /// Add line decorations to a single run of shaped text. -pub fn decorate( +pub(super) fn decorate( frame: &mut Frame, deco: &Decoration, text: &Text, diff --git a/library/src/text/mod.rs b/library/src/text/mod.rs index d793f6148..61edacbec 100644 --- a/library/src/text/mod.rs +++ b/library/src/text/mod.rs @@ -11,7 +11,6 @@ mod shift; pub use deco::*; pub use link::*; pub use par::*; -pub use quotes::*; pub use raw::*; pub use shaping::*; pub use shift::*; @@ -22,6 +21,7 @@ use rustybuzz::Tag; use typst::font::{FontMetrics, FontStretch, FontStyle, FontWeight, VerticalFontMetric}; use typst::util::EcoString; +use self::quotes::*; use crate::prelude::*; /// A single run of text with the same style. @@ -107,22 +107,22 @@ impl TextNode { /// Whether the font weight should be increased by 300. #[property(skip, fold)] - pub const BOLD: Toggle = false; + pub(super) const BOLD: Toggle = false; /// Whether the font style should be inverted. #[property(skip, fold)] - pub const ITALIC: Toggle = false; + pub(super) const ITALIC: Toggle = false; /// A case transformation that should be applied to the text. #[property(skip)] - pub const CASE: Option = None; + pub(super) const CASE: Option = None; /// Whether small capital glyphs should be used. ("smcp") #[property(skip)] - pub const SMALLCAPS: bool = false; + pub(super) const SMALLCAPS: bool = false; /// A destination the text should be linked to. #[property(skip, referenced)] - pub const LINK: Option = None; + pub(crate) const LINK: Option = None; /// Decorative lines. #[property(skip, fold)] - pub const DECO: Decoration = vec![]; + pub(super) const DECO: Decoration = vec![]; fn construct(_: &mut Vm, args: &mut Args) -> SourceResult { // The text constructor is special: It doesn't create a text node. diff --git a/library/src/text/quotes.rs b/library/src/text/quotes.rs index ab4d3f9dd..af10de46c 100644 --- a/library/src/text/quotes.rs +++ b/library/src/text/quotes.rs @@ -4,7 +4,7 @@ use super::{Lang, Region}; /// State machine for smart quote subtitution. #[derive(Debug, Clone)] -pub struct Quoter { +pub(super) struct Quoter { /// How many quotes have been opened. quote_depth: usize, /// Whether an opening quote might follow. @@ -68,7 +68,7 @@ fn is_opening_bracket(c: char) -> bool { } /// Decides which quotes to subtitute smart quotes with. -pub struct Quotes<'s> { +pub(super) struct Quotes<'s> { /// The opening single quote. pub single_open: &'s str, /// The closing single quote. diff --git a/library/src/text/shaping.rs b/library/src/text/shaping.rs index 32143862c..bab02eca6 100644 --- a/library/src/text/shaping.rs +++ b/library/src/text/shaping.rs @@ -13,7 +13,7 @@ use crate::prelude::*; /// This type contains owned or borrowed shaped text runs, which can be /// measured, used to reshape substrings more quickly and converted into a /// frame. -pub struct ShapedText<'a> { +pub(super) struct ShapedText<'a> { /// The text that was shaped. pub text: &'a str, /// The text direction. @@ -32,7 +32,7 @@ pub struct ShapedText<'a> { /// A single glyph resulting from shaping. #[derive(Debug, Clone)] -pub struct ShapedGlyph { +pub(super) struct ShapedGlyph { /// The font the glyph is contained in. pub font: Font, /// The glyph's index in the font. @@ -318,7 +318,7 @@ struct ShapingContext<'a> { } /// Shape text into [`ShapedText`]. -pub fn shape<'a>( +pub(super) fn shape<'a>( world: Tracked, text: &'a str, styles: StyleChain<'a>, @@ -534,7 +534,7 @@ fn nbsp_delta(font: &Font) -> Option { Some(font.advance(nbsp)? - font.advance(space)?) } -/// Resolve the font variant with `BOLD` and `ITALIC` factored in. +/// Resolve the font variant. pub fn variant(styles: StyleChain) -> FontVariant { let mut variant = FontVariant::new( styles.get(TextNode::STYLE), diff --git a/library/src/text/shift.rs b/library/src/text/shift.rs index e5f142dde..856d0f969 100644 --- a/library/src/text/shift.rs +++ b/library/src/text/shift.rs @@ -11,7 +11,7 @@ use crate::prelude::*; /// codepoints. If that fails, we fall back to rendering shrunk normal letters /// in a raised way. #[derive(Debug, Hash)] -pub struct ShiftNode(pub Content); +pub struct ShiftNode(pub Content); /// Shift the text into superscript. pub type SuperNode = ShiftNode; @@ -20,7 +20,7 @@ pub type SuperNode = ShiftNode; pub type SubNode = ShiftNode; #[node(Show)] -impl ShiftNode { +impl ShiftNode { /// Whether to prefer the dedicated sub- and superscript characters of the /// font. pub const TYPOGRAPHIC: bool = true; @@ -35,7 +35,7 @@ impl ShiftNode { } } -impl Show for ShiftNode { +impl Show for ShiftNode { fn unguard_parts(&self, _: Selector) -> Content { Self(self.0.clone()).pack() } @@ -72,7 +72,7 @@ impl Show for ShiftNode { /// Find and transform the text contained in `content` to the given script kind /// if and only if it only consists of `Text`, `Space`, and `Empty` leaf nodes. -fn search_text(content: &Content, mode: ScriptKind) -> Option { +fn search_text(content: &Content, mode: ShiftKind) -> Option { if content.is_empty() { Some(EcoString::new()) } else if content.is::() { @@ -114,7 +114,7 @@ fn is_shapable(world: Tracked, text: &str, styles: StyleChain) -> boo /// Convert a string to sub- or superscript codepoints if all characters /// can be mapped to such a codepoint. -fn convert_script(text: &str, mode: ScriptKind) -> Option { +fn convert_script(text: &str, mode: ShiftKind) -> Option { let mut result = EcoString::with_capacity(text.len()); let converter = match mode { SUPERSCRIPT => to_superscript_codepoint, @@ -179,10 +179,10 @@ fn to_subscript_codepoint(c: char) -> Option { } /// A category of script. -pub type ScriptKind = usize; +pub type ShiftKind = usize; /// Text that is rendered smaller and raised, also known as superior. -const SUPERSCRIPT: ScriptKind = 0; +const SUPERSCRIPT: ShiftKind = 0; /// Text that is rendered smaller and lowered, also known as inferior. -const SUBSCRIPT: ScriptKind = 1; +const SUBSCRIPT: ShiftKind = 1; diff --git a/tests/ref/utility/blind.png b/tests/ref/base/blind.png similarity index 100% rename from tests/ref/utility/blind.png rename to tests/ref/base/blind.png diff --git a/tests/ref/utility/collection.png b/tests/ref/base/collection.png similarity index 100% rename from tests/ref/utility/collection.png rename to tests/ref/base/collection.png diff --git a/tests/ref/utility/color.png b/tests/ref/base/color.png similarity index 100% rename from tests/ref/utility/color.png rename to tests/ref/base/color.png diff --git a/tests/ref/utility/data.png b/tests/ref/base/data.png similarity index 100% rename from tests/ref/utility/data.png rename to tests/ref/base/data.png diff --git a/tests/ref/utility/eval.png b/tests/ref/base/eval.png similarity index 100% rename from tests/ref/utility/eval.png rename to tests/ref/base/eval.png diff --git a/tests/ref/utility/numbering.png b/tests/ref/base/numbering.png similarity index 100% rename from tests/ref/utility/numbering.png rename to tests/ref/base/numbering.png diff --git a/tests/ref/utility/string.png b/tests/ref/base/string.png similarity index 100% rename from tests/ref/utility/string.png rename to tests/ref/base/string.png diff --git a/tests/ref/math/basic.png b/tests/ref/layout/math.png similarity index 100% rename from tests/ref/math/basic.png rename to tests/ref/layout/math.png diff --git a/tests/ref/text/basic.png b/tests/ref/text/plain.png similarity index 100% rename from tests/ref/text/basic.png rename to tests/ref/text/plain.png diff --git a/tests/src/benches.rs b/tests/src/benches.rs index 3af2db6eb..e3c276bcf 100644 --- a/tests/src/benches.rs +++ b/tests/src/benches.rs @@ -2,13 +2,12 @@ use std::path::{Path, PathBuf}; use comemo::{Prehashed, Track, Tracked}; use iai::{black_box, main, Iai}; -use unscanny::Scanner; - use typst::diag::{FileError, FileResult}; use typst::font::{Font, FontBook}; use typst::syntax::{Source, SourceId, TokenMode, Tokens}; use typst::util::Buffer; use typst::{Config, World}; +use unscanny::Scanner; const TEXT: &str = include_str!("../typ/benches/bench.typ"); const FONT: &[u8] = include_bytes!("../../fonts/IBMPlexSans-Regular.ttf"); diff --git a/tests/src/tests.rs b/tests/src/tests.rs index 620c1e7b2..54afd0346 100644 --- a/tests/src/tests.rs +++ b/tests/src/tests.rs @@ -11,9 +11,6 @@ use comemo::Prehashed; use elsa::FrozenVec; use once_cell::unsync::OnceCell; use tiny_skia as sk; -use unscanny::Scanner; -use walkdir::WalkDir; - use typst::diag::{bail, FileError, FileResult}; use typst::font::{Font, FontBook}; use typst::frame::{Element, Frame}; @@ -24,6 +21,8 @@ use typst::util::{Buffer, PathExt}; use typst::{Config, World}; use typst_library::layout::PageNode; use typst_library::text::{TextNode, TextSize}; +use unscanny::Scanner; +use walkdir::WalkDir; const TYP_DIR: &str = "typ"; const REF_DIR: &str = "ref"; diff --git a/tests/typ/utility/basics.typ b/tests/typ/base/assert.typ similarity index 94% rename from tests/typ/utility/basics.typ rename to tests/typ/base/assert.typ index 83d192c4e..b0c8aafd4 100644 --- a/tests/typ/utility/basics.typ +++ b/tests/typ/base/assert.typ @@ -1,8 +1,7 @@ -// Test basic functions. +// Test the `assert` function. // Ref: false --- -// Test the `assert` function. #assert(1 + 1 == 2) #assert(range(2, 5) == (2, 3, 4)) #assert(not false) diff --git a/tests/typ/utility/blind.typ b/tests/typ/base/blind.typ similarity index 100% rename from tests/typ/utility/blind.typ rename to tests/typ/base/blind.typ diff --git a/tests/typ/utility/math.typ b/tests/typ/base/calc.typ similarity index 100% rename from tests/typ/utility/math.typ rename to tests/typ/base/calc.typ diff --git a/tests/typ/utility/collection.typ b/tests/typ/base/collection.typ similarity index 100% rename from tests/typ/utility/collection.typ rename to tests/typ/base/collection.typ diff --git a/tests/typ/utility/color.typ b/tests/typ/base/color.typ similarity index 100% rename from tests/typ/utility/color.typ rename to tests/typ/base/color.typ diff --git a/tests/typ/utility/data.typ b/tests/typ/base/data.typ similarity index 94% rename from tests/typ/utility/data.typ rename to tests/typ/base/data.typ index e90c1b0d5..96b12ff5b 100644 --- a/tests/typ/utility/data.typ +++ b/tests/typ/base/data.typ @@ -10,7 +10,7 @@ #table(columns: data(0).len(), ..cells) --- -// Error: 6-16 file not found (searched at typ/utility/nope.csv) +// Error: 6-16 file not found (searched at typ/base/nope.csv) #csv("nope.csv") --- diff --git a/tests/typ/utility/eval.typ b/tests/typ/base/eval.typ similarity index 100% rename from tests/typ/utility/eval.typ rename to tests/typ/base/eval.typ diff --git a/tests/typ/utility/string.typ b/tests/typ/base/string.typ similarity index 100% rename from tests/typ/utility/string.typ rename to tests/typ/base/string.typ diff --git a/tests/typ/base/type.typ b/tests/typ/base/type.typ new file mode 100644 index 000000000..37cf86239 --- /dev/null +++ b/tests/typ/base/type.typ @@ -0,0 +1,7 @@ +// Test the `type` function. +// Ref: false + +--- +#test(type(1), "integer") +#test(type(ltr), "direction") +#test(type(10 / 3), "float") diff --git a/tests/typ/math/basic.typ b/tests/typ/layout/math.typ similarity index 100% rename from tests/typ/math/basic.typ rename to tests/typ/layout/math.typ diff --git a/tests/typ/text/basic.typ b/tests/typ/text/plain.typ similarity index 98% rename from tests/typ/text/basic.typ rename to tests/typ/text/plain.typ index a074a046b..34a2d626d 100644 --- a/tests/typ/text/basic.typ +++ b/tests/typ/text/plain.typ @@ -1,4 +1,4 @@ -// Test simple text. +// Test plain text. --- #set page(width: 250pt, height: 120pt)