summaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/model')
-rw-r--r--src/model/mod.rs2
-rw-r--r--src/model/typeset.rs17
2 files changed, 19 insertions, 0 deletions
diff --git a/src/model/mod.rs b/src/model/mod.rs
index 93e33d5c..f5c1e6dd 100644
--- a/src/model/mod.rs
+++ b/src/model/mod.rs
@@ -21,6 +21,7 @@ mod func;
mod methods;
mod ops;
mod scope;
+mod typeset;
mod vm;
#[doc(hidden)]
@@ -38,5 +39,6 @@ pub use self::library::*;
pub use self::scope::*;
pub use self::str::*;
pub use self::styles::*;
+pub use self::typeset::*;
pub use self::value::*;
pub use self::vm::*;
diff --git a/src/model/typeset.rs b/src/model/typeset.rs
new file mode 100644
index 00000000..2026bf99
--- /dev/null
+++ b/src/model/typeset.rs
@@ -0,0 +1,17 @@
+use comemo::Tracked;
+
+use super::{Content, StyleChain};
+use crate::diag::SourceResult;
+use crate::frame::Frame;
+use crate::World;
+
+/// Typeset content into a collection of layouted frames.
+///
+/// Returns either a vector of frames representing individual pages or
+/// diagnostics in the form of a vector of error message with file and span
+/// information.
+pub fn typeset(world: Tracked<dyn World>, content: &Content) -> SourceResult<Vec<Frame>> {
+ let library = world.library();
+ let styles = StyleChain::with_root(&library.styles);
+ (library.items.layout)(content, world, styles)
+}