summaryrefslogtreecommitdiff
path: root/crates/typst-library/src/routines.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2025-07-09 10:16:36 +0200
committerGitHub <noreply@github.com>2025-07-09 08:16:36 +0000
commite5e1dcd9c01341d2cd3473ac94a70223d5966086 (patch)
treed648efad9463cb10270d55ba35210eeb1e91ee22 /crates/typst-library/src/routines.rs
parent0a3c6939dd274f40672484695d909c2cc0d0d755 (diff)
Target-specific native show rules (#6569)
Diffstat (limited to 'crates/typst-library/src/routines.rs')
-rw-r--r--crates/typst-library/src/routines.rs237
1 files changed, 6 insertions, 231 deletions
diff --git a/crates/typst-library/src/routines.rs b/crates/typst-library/src/routines.rs
index 59ce8328..4bf8d60c 100644
--- a/crates/typst-library/src/routines.rs
+++ b/crates/typst-library/src/routines.rs
@@ -1,7 +1,4 @@
-#![allow(unused)]
-
use std::hash::{Hash, Hasher};
-use std::num::NonZeroUsize;
use comemo::{Tracked, TrackedMut};
use typst_syntax::{Span, SyntaxMode};
@@ -10,20 +7,12 @@ use typst_utils::LazyHash;
use crate::diag::SourceResult;
use crate::engine::{Engine, Route, Sink, Traced};
use crate::foundations::{
- Args, Cast, Closure, Content, Context, Func, Packed, Scope, StyleChain, Styles, Value,
+ Args, Closure, Content, Context, Func, NativeRuleMap, Scope, StyleChain, Styles,
+ Value,
};
use crate::introspection::{Introspector, Locator, SplitLocator};
-use crate::layout::{
- Abs, BoxElem, ColumnsElem, Fragment, Frame, GridElem, InlineItem, MoveElem, PadElem,
- PagedDocument, Region, Regions, Rel, RepeatElem, RotateElem, ScaleElem, Size,
- SkewElem, StackElem,
-};
-use crate::math::EquationElem;
-use crate::model::{DocumentInfo, EnumElem, ListElem, TableElem};
-use crate::visualize::{
- CircleElem, CurveElem, EllipseElem, ImageElem, LineElem, PathElem, PolygonElem,
- RectElem, SquareElem,
-};
+use crate::layout::{Frame, Region};
+use crate::model::DocumentInfo;
use crate::World;
/// Defines the `Routines` struct.
@@ -38,6 +27,8 @@ macro_rules! routines {
/// This is essentially dynamic linking and done to allow for crate
/// splitting.
pub struct Routines {
+ /// Native show rules.
+ pub rules: NativeRuleMap,
$(
$(#[$attr])*
pub $name: $(for<$($time),*>)? fn ($($args)*) -> $ret
@@ -86,15 +77,6 @@ routines! {
styles: StyleChain<'a>,
) -> SourceResult<Vec<Pair<'a>>>
- /// Lays out content into multiple regions.
- fn layout_fragment(
- engine: &mut Engine,
- content: &Content,
- locator: Locator,
- styles: StyleChain,
- regions: Regions,
- ) -> SourceResult<Fragment>
-
/// Lays out content into a single region, producing a single frame.
fn layout_frame(
engine: &mut Engine,
@@ -103,213 +85,6 @@ routines! {
styles: StyleChain,
region: Region,
) -> SourceResult<Frame>
-
- /// Lays out a [`ListElem`].
- fn layout_list(
- elem: &Packed<ListElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- regions: Regions,
- ) -> SourceResult<Fragment>
-
- /// Lays out an [`EnumElem`].
- fn layout_enum(
- elem: &Packed<EnumElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- regions: Regions,
- ) -> SourceResult<Fragment>
-
- /// Lays out a [`GridElem`].
- fn layout_grid(
- elem: &Packed<GridElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- regions: Regions,
- ) -> SourceResult<Fragment>
-
- /// Lays out a [`TableElem`].
- fn layout_table(
- elem: &Packed<TableElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- regions: Regions,
- ) -> SourceResult<Fragment>
-
- /// Lays out a [`StackElem`].
- fn layout_stack(
- elem: &Packed<StackElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- regions: Regions,
- ) -> SourceResult<Fragment>
-
- /// Lays out a [`ColumnsElem`].
- fn layout_columns(
- elem: &Packed<ColumnsElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- regions: Regions,
- ) -> SourceResult<Fragment>
-
- /// Lays out a [`MoveElem`].
- fn layout_move(
- elem: &Packed<MoveElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`RotateElem`].
- fn layout_rotate(
- elem: &Packed<RotateElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`ScaleElem`].
- fn layout_scale(
- elem: &Packed<ScaleElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`SkewElem`].
- fn layout_skew(
- elem: &Packed<SkewElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`RepeatElem`].
- fn layout_repeat(
- elem: &Packed<RepeatElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`PadElem`].
- fn layout_pad(
- elem: &Packed<PadElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- regions: Regions,
- ) -> SourceResult<Fragment>
-
- /// Lays out a [`LineElem`].
- fn layout_line(
- elem: &Packed<LineElem>,
- _: &mut Engine,
- _: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`CurveElem`].
- fn layout_curve(
- elem: &Packed<CurveElem>,
- _: &mut Engine,
- _: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`PathElem`].
- fn layout_path(
- elem: &Packed<PathElem>,
- _: &mut Engine,
- _: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`PolygonElem`].
- fn layout_polygon(
- elem: &Packed<PolygonElem>,
- _: &mut Engine,
- _: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`RectElem`].
- fn layout_rect(
- elem: &Packed<RectElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`SquareElem`].
- fn layout_square(
- elem: &Packed<SquareElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`EllipseElem`].
- fn layout_ellipse(
- elem: &Packed<EllipseElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out a [`CircleElem`].
- fn layout_circle(
- elem: &Packed<CircleElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out an [`ImageElem`].
- fn layout_image(
- elem: &Packed<ImageElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Region,
- ) -> SourceResult<Frame>
-
- /// Lays out an [`EquationElem`] in a paragraph.
- fn layout_equation_inline(
- elem: &Packed<EquationElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- region: Size,
- ) -> SourceResult<Vec<InlineItem>>
-
- /// Lays out an [`EquationElem`] in a flow.
- fn layout_equation_block(
- elem: &Packed<EquationElem>,
- engine: &mut Engine,
- locator: Locator,
- styles: StyleChain,
- regions: Regions,
- ) -> SourceResult<Fragment>
}
/// Defines what kind of realization we are performing.