summaryrefslogtreecommitdiff
path: root/library/src
diff options
context:
space:
mode:
Diffstat (limited to 'library/src')
-rw-r--r--library/src/compute/mod.rs28
-rw-r--r--library/src/layout/list.rs4
-rw-r--r--library/src/layout/mod.rs35
-rw-r--r--library/src/layout/terms.rs4
-rw-r--r--library/src/lib.rs115
-rw-r--r--library/src/meta/mod.rs23
-rw-r--r--library/src/prelude.rs2
-rw-r--r--library/src/symbols/mod.rs8
-rw-r--r--library/src/text/mod.rs19
-rw-r--r--library/src/visualize/mod.rs14
10 files changed, 140 insertions, 112 deletions
diff --git a/library/src/compute/mod.rs b/library/src/compute/mod.rs
index 3f6a79fc..8ebae48e 100644
--- a/library/src/compute/mod.rs
+++ b/library/src/compute/mod.rs
@@ -8,3 +8,31 @@ mod foundations;
pub use self::construct::*;
pub use self::data::*;
pub use self::foundations::*;
+
+use crate::prelude::*;
+
+/// Hook up all compute definitions.
+pub(super) fn define(global: &mut Scope) {
+ global.define("type", type_);
+ global.define("repr", repr);
+ global.define("panic", panic);
+ global.define("assert", assert);
+ global.define("eval", eval);
+ global.define("int", int);
+ global.define("float", float);
+ global.define("luma", luma);
+ global.define("rgb", rgb);
+ global.define("cmyk", cmyk);
+ global.define("symbol", symbol);
+ global.define("str", str);
+ global.define("label", label);
+ global.define("regex", regex);
+ global.define("range", range);
+ global.define("read", read);
+ global.define("csv", csv);
+ global.define("json", json);
+ global.define("toml", toml);
+ global.define("yaml", yaml);
+ global.define("xml", xml);
+ global.define("calc", calc::module());
+}
diff --git a/library/src/layout/list.rs b/library/src/layout/list.rs
index 75228d95..25783d84 100644
--- a/library/src/layout/list.rs
+++ b/library/src/layout/list.rs
@@ -37,6 +37,10 @@ use super::GridLayouter;
/// Display: Bullet List
/// Category: layout
#[element(Layout)]
+#[scope(
+ scope.define("item", ListItem::func());
+ scope
+)]
pub struct ListElem {
/// If this is `{false}`, the items are spaced apart with [list
/// spacing]($func/list.spacing). If it is `{true}`, they use normal
diff --git a/library/src/layout/mod.rs b/library/src/layout/mod.rs
index 92e36b58..2d5b18c8 100644
--- a/library/src/layout/mod.rs
+++ b/library/src/layout/mod.rs
@@ -57,9 +57,38 @@ use crate::meta::DocumentElem;
use crate::prelude::*;
use crate::shared::BehavedBuilder;
use crate::text::{LinebreakElem, SmartQuoteElem, SpaceElem, TextElem};
-use crate::visualize::PathElem;
-use crate::visualize::PolygonElem;
-use crate::visualize::{CircleElem, EllipseElem, ImageElem, RectElem, SquareElem};
+use crate::visualize::{
+ CircleElem, EllipseElem, ImageElem, PathElem, PolygonElem, RectElem, SquareElem,
+};
+
+/// Hook up all layout definitions.
+pub(super) fn define(global: &mut Scope) {
+ global.define("page", PageElem::func());
+ global.define("pagebreak", PagebreakElem::func());
+ global.define("v", VElem::func());
+ global.define("par", ParElem::func());
+ global.define("parbreak", ParbreakElem::func());
+ global.define("h", HElem::func());
+ global.define("box", BoxElem::func());
+ global.define("block", BlockElem::func());
+ global.define("list", ListElem::func());
+ global.define("enum", EnumElem::func());
+ global.define("terms", TermsElem::func());
+ global.define("table", TableElem::func());
+ global.define("stack", StackElem::func());
+ global.define("grid", GridElem::func());
+ global.define("columns", ColumnsElem::func());
+ global.define("colbreak", ColbreakElem::func());
+ global.define("place", PlaceElem::func());
+ global.define("align", AlignElem::func());
+ global.define("pad", PadElem::func());
+ global.define("repeat", RepeatElem::func());
+ global.define("move", MoveElem::func());
+ global.define("scale", ScaleElem::func());
+ global.define("rotate", RotateElem::func());
+ global.define("hide", HideElem::func());
+ global.define("measure", measure);
+}
/// Root-level layout.
pub trait LayoutRoot {
diff --git a/library/src/layout/terms.rs b/library/src/layout/terms.rs
index b6919eec..073b6ee2 100644
--- a/library/src/layout/terms.rs
+++ b/library/src/layout/terms.rs
@@ -22,6 +22,10 @@ use crate::prelude::*;
/// Display: Term List
/// Category: layout
#[element(Layout)]
+#[scope(
+ scope.define("item", TermItem::func());
+ scope
+)]
pub struct TermsElem {
/// If this is `{false}`, the items are spaced apart with [term list
/// spacing]($func/terms.spacing). If it is `{true}`, they use normal
diff --git a/library/src/lib.rs b/library/src/lib.rs
index 785390f4..0f8346f0 100644
--- a/library/src/lib.rs
+++ b/library/src/lib.rs
@@ -23,121 +23,24 @@ use self::layout::LayoutRoot;
/// Construct the standard library.
pub fn build() -> Library {
let math = math::module();
- let calc = compute::calc::module();
- let global = global(math.clone(), calc);
+ let global = global(math.clone());
Library { global, math, styles: styles(), items: items() }
}
/// Construct the module with global definitions.
#[tracing::instrument(skip_all)]
-fn global(math: Module, calc: Module) -> Module {
+fn global(math: Module) -> Module {
let mut global = Scope::deduplicating();
- // Text.
- global.define("text", text::TextElem::func());
- global.define("linebreak", text::LinebreakElem::func());
- global.define("smartquote", text::SmartQuoteElem::func());
- global.define("strong", text::StrongElem::func());
- global.define("emph", text::EmphElem::func());
- global.define("lower", text::lower);
- global.define("upper", text::upper);
- global.define("smallcaps", text::smallcaps);
- global.define("sub", text::SubElem::func());
- global.define("super", text::SuperElem::func());
- global.define("underline", text::UnderlineElem::func());
- global.define("strike", text::StrikeElem::func());
- global.define("overline", text::OverlineElem::func());
- global.define("raw", text::RawElem::func());
- global.define("lorem", text::lorem);
-
- // Math.
+ // Categories.
+ text::define(&mut global);
+ layout::define(&mut global);
+ visualize::define(&mut global);
+ meta::define(&mut global);
+ compute::define(&mut global);
+ symbols::define(&mut global);
global.define("math", math);
- // Layout.
- global.define("page", layout::PageElem::func());
- global.define("pagebreak", layout::PagebreakElem::func());
- global.define("v", layout::VElem::func());
- global.define("par", layout::ParElem::func());
- global.define("parbreak", layout::ParbreakElem::func());
- global.define("h", layout::HElem::func());
- global.define("box", layout::BoxElem::func());
- global.define("block", layout::BlockElem::func());
- global.define("list", layout::ListElem::func());
- global.define("enum", layout::EnumElem::func());
- global.define("terms", layout::TermsElem::func());
- global.define("table", layout::TableElem::func());
- global.define("stack", layout::StackElem::func());
- global.define("grid", layout::GridElem::func());
- global.define("columns", layout::ColumnsElem::func());
- global.define("colbreak", layout::ColbreakElem::func());
- global.define("place", layout::PlaceElem::func());
- global.define("align", layout::AlignElem::func());
- global.define("pad", layout::PadElem::func());
- global.define("repeat", layout::RepeatElem::func());
- global.define("move", layout::MoveElem::func());
- global.define("scale", layout::ScaleElem::func());
- global.define("rotate", layout::RotateElem::func());
- global.define("hide", layout::HideElem::func());
- global.define("measure", layout::measure);
-
- // Visualize.
- global.define("image", visualize::ImageElem::func());
- global.define("line", visualize::LineElem::func());
- global.define("rect", visualize::RectElem::func());
- global.define("square", visualize::SquareElem::func());
- global.define("ellipse", visualize::EllipseElem::func());
- global.define("circle", visualize::CircleElem::func());
- global.define("polygon", visualize::PolygonElem::func());
- global.define("path", visualize::PathElem::func());
-
- // Meta.
- global.define("document", meta::DocumentElem::func());
- global.define("ref", meta::RefElem::func());
- global.define("link", meta::LinkElem::func());
- global.define("outline", meta::OutlineElem::func());
- global.define("heading", meta::HeadingElem::func());
- global.define("figure", meta::FigureElem::func());
- global.define("cite", meta::CiteElem::func());
- global.define("bibliography", meta::BibliographyElem::func());
- global.define("locate", meta::locate);
- global.define("style", meta::style);
- global.define("layout", meta::layout);
- global.define("counter", meta::counter);
- global.define("numbering", meta::numbering);
- global.define("state", meta::state);
- global.define("query", meta::query);
- global.define("selector", meta::selector);
-
- // Symbols.
- global.define("sym", symbols::sym());
- global.define("emoji", symbols::emoji());
-
- // Compute.
- global.define("type", compute::type_);
- global.define("repr", compute::repr);
- global.define("panic", compute::panic);
- global.define("assert", compute::assert);
- global.define("eval", compute::eval);
- global.define("int", compute::int);
- global.define("float", compute::float);
- global.define("luma", compute::luma);
- global.define("rgb", compute::rgb);
- global.define("cmyk", compute::cmyk);
- global.define("symbol", compute::symbol);
- global.define("str", compute::str);
- global.define("label", compute::label);
- global.define("regex", compute::regex);
- global.define("range", compute::range);
- global.define("read", compute::read);
- global.define("csv", compute::csv);
- global.define("json", compute::json);
- global.define("toml", compute::toml);
- global.define("yaml", compute::yaml);
- global.define("xml", compute::xml);
-
- // Calc.
- global.define("calc", calc);
-
// Colors.
global.define("black", Color::BLACK);
global.define("gray", Color::GRAY);
diff --git a/library/src/meta/mod.rs b/library/src/meta/mod.rs
index 279fe54a..61028bf5 100644
--- a/library/src/meta/mod.rs
+++ b/library/src/meta/mod.rs
@@ -26,8 +26,27 @@ pub use self::query::*;
pub use self::reference::*;
pub use self::state::*;
-use typst::doc::Lang;
-use typst::doc::Region;
+use crate::prelude::*;
+
+/// Hook up all meta definitions.
+pub(super) fn define(global: &mut Scope) {
+ global.define("document", DocumentElem::func());
+ global.define("ref", RefElem::func());
+ global.define("link", LinkElem::func());
+ global.define("outline", OutlineElem::func());
+ global.define("heading", HeadingElem::func());
+ global.define("figure", FigureElem::func());
+ global.define("cite", CiteElem::func());
+ global.define("bibliography", BibliographyElem::func());
+ global.define("locate", locate);
+ global.define("style", style);
+ global.define("layout", layout);
+ global.define("counter", counter);
+ global.define("numbering", numbering);
+ global.define("state", state);
+ global.define("query", query);
+ global.define("selector", selector);
+}
/// The named with which an element is referenced.
pub trait LocalName {
diff --git a/library/src/prelude.rs b/library/src/prelude.rs
index a0cef491..59b8a0a0 100644
--- a/library/src/prelude.rs
+++ b/library/src/prelude.rs
@@ -16,7 +16,7 @@ pub use typst::doc::*;
#[doc(no_inline)]
pub use typst::eval::{
array, cast_from_value, cast_to_value, dict, format_str, func, Args, Array, Cast,
- CastInfo, Dict, Func, Never, Str, Symbol, Value, Vm,
+ CastInfo, Dict, Func, Never, Scope, Str, Symbol, Value, Vm,
};
#[doc(no_inline)]
pub use typst::geom::*;
diff --git a/library/src/symbols/mod.rs b/library/src/symbols/mod.rs
index 8cd5f2f3..5036aa11 100644
--- a/library/src/symbols/mod.rs
+++ b/library/src/symbols/mod.rs
@@ -5,3 +5,11 @@ mod sym;
pub use emoji::*;
pub use sym::*;
+
+use crate::prelude::*;
+
+/// Hook up all symbol definitions.
+pub(super) fn define(global: &mut Scope) {
+ global.define("sym", sym());
+ global.define("emoji", emoji());
+}
diff --git a/library/src/text/mod.rs b/library/src/text/mod.rs
index 7ee0b62b..bd15cdd2 100644
--- a/library/src/text/mod.rs
+++ b/library/src/text/mod.rs
@@ -22,6 +22,25 @@ use typst::font::{FontMetrics, FontStretch, FontStyle, FontWeight, VerticalFontM
use crate::layout::ParElem;
use crate::prelude::*;
+/// Hook up all text definitions.
+pub(super) fn define(global: &mut Scope) {
+ global.define("text", TextElem::func());
+ global.define("linebreak", LinebreakElem::func());
+ global.define("smartquote", SmartQuoteElem::func());
+ global.define("strong", StrongElem::func());
+ global.define("emph", EmphElem::func());
+ global.define("lower", lower);
+ global.define("upper", upper);
+ global.define("smallcaps", smallcaps);
+ global.define("sub", SubElem::func());
+ global.define("super", SuperElem::func());
+ global.define("underline", UnderlineElem::func());
+ global.define("strike", StrikeElem::func());
+ global.define("overline", OverlineElem::func());
+ global.define("raw", RawElem::func());
+ global.define("lorem", lorem);
+}
+
/// Customize the look and layout of text in a variety of ways.
///
/// This function is used often, both with set rules and directly. While the set
diff --git a/library/src/visualize/mod.rs b/library/src/visualize/mod.rs
index 4cf5d04f..3adf4e77 100644
--- a/library/src/visualize/mod.rs
+++ b/library/src/visualize/mod.rs
@@ -11,3 +11,17 @@ pub use self::line::*;
pub use self::path::*;
pub use self::polygon::*;
pub use self::shape::*;
+
+use crate::prelude::*;
+
+/// Hook up all visualize definitions.
+pub(super) fn define(global: &mut Scope) {
+ global.define("image", ImageElem::func());
+ global.define("line", LineElem::func());
+ global.define("rect", RectElem::func());
+ global.define("square", SquareElem::func());
+ global.define("ellipse", EllipseElem::func());
+ global.define("circle", CircleElem::func());
+ global.define("polygon", PolygonElem::func());
+ global.define("path", PathElem::func());
+}