summaryrefslogtreecommitdiff
path: root/src/library/text.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-12-05 12:54:03 +0100
committerLaurenz <laurmaedje@gmail.com>2021-12-05 12:54:03 +0100
commit26bdc1f0f6fe8113d7fcfb4d5aca46aa5238ccd8 (patch)
tree4c12a187032501735d858648a64fe66603f106a6 /src/library/text.rs
parent738ff7e1f573bef678932b313be9969a17af8d22 (diff)
Set Rules Episode I: The Phantom Style
Diffstat (limited to 'src/library/text.rs')
-rw-r--r--src/library/text.rs70
1 files changed, 31 insertions, 39 deletions
diff --git a/src/library/text.rs b/src/library/text.rs
index 0790196d..d96f7666 100644
--- a/src/library/text.rs
+++ b/src/library/text.rs
@@ -12,8 +12,8 @@ use crate::font::{
};
use crate::geom::{Dir, Em, Length, Point, Size};
use crate::style::{
- FontFamily, FontFeatures, NumberPosition, NumberType, NumberWidth, Style,
- StylisticSet, TextStyle,
+ FontFamily, FontFeatures, NumberPosition, NumberType, NumberWidth, StylisticSet,
+ TextStyle,
};
use crate::util::{EcoString, SliceExt};
@@ -179,7 +179,6 @@ pub fn font(ctx: &mut EvalContext, args: &mut Args) -> TypResult<Value> {
let slashed_zero = args.named("slashed-zero")?;
let fractions = args.named("fractions")?;
let features = args.named("features")?;
- let body = args.find::<Template>();
macro_rules! set {
($target:expr => $source:expr) => {
@@ -189,42 +188,35 @@ pub fn font(ctx: &mut EvalContext, args: &mut Args) -> TypResult<Value> {
};
}
- let f = move |style_: &mut Style| {
- let text = style_.text_mut();
- set!(text.families_mut().list => list.clone());
- set!(text.families_mut().serif => serif.clone());
- set!(text.families_mut().sans_serif => sans_serif.clone());
- set!(text.families_mut().monospace => monospace.clone());
- set!(text.fallback => fallback);
- set!(text.variant.style => style);
- set!(text.variant.weight => weight);
- set!(text.variant.stretch => stretch);
- set!(text.size => size.map(|v| v.resolve(text.size)));
- set!(text.tracking => tracking);
- set!(text.top_edge => top_edge);
- set!(text.bottom_edge => bottom_edge);
- set!(text.fill => fill);
- set!(text.features_mut().kerning => kerning);
- set!(text.features_mut().smallcaps => smallcaps);
- set!(text.features_mut().alternates => alternates);
- set!(text.features_mut().stylistic_set => stylistic_set);
- set!(text.features_mut().ligatures.standard => ligatures);
- set!(text.features_mut().ligatures.discretionary => discretionary_ligatures);
- set!(text.features_mut().ligatures.historical => historical_ligatures);
- set!(text.features_mut().numbers.type_ => number_type);
- set!(text.features_mut().numbers.width => number_width);
- set!(text.features_mut().numbers.position => number_position);
- set!(text.features_mut().numbers.slashed_zero => slashed_zero);
- set!(text.features_mut().numbers.fractions => fractions);
- set!(text.features_mut().raw => features.clone());
- };
-
- Ok(if let Some(body) = body {
- Value::Template(body.modified(f))
- } else {
- ctx.template.modify(f);
- Value::None
- })
+ let text = ctx.style.text_mut();
+ set!(text.families_mut().list => list.clone());
+ set!(text.families_mut().serif => serif.clone());
+ set!(text.families_mut().sans_serif => sans_serif.clone());
+ set!(text.families_mut().monospace => monospace.clone());
+ set!(text.fallback => fallback);
+ set!(text.variant.style => style);
+ set!(text.variant.weight => weight);
+ set!(text.variant.stretch => stretch);
+ set!(text.size => size.map(|v| v.resolve(text.size)));
+ set!(text.tracking => tracking);
+ set!(text.top_edge => top_edge);
+ set!(text.bottom_edge => bottom_edge);
+ set!(text.fill => fill);
+ set!(text.features_mut().kerning => kerning);
+ set!(text.features_mut().smallcaps => smallcaps);
+ set!(text.features_mut().alternates => alternates);
+ set!(text.features_mut().stylistic_set => stylistic_set);
+ set!(text.features_mut().ligatures.standard => ligatures);
+ set!(text.features_mut().ligatures.discretionary => discretionary_ligatures);
+ set!(text.features_mut().ligatures.historical => historical_ligatures);
+ set!(text.features_mut().numbers.type_ => number_type);
+ set!(text.features_mut().numbers.width => number_width);
+ set!(text.features_mut().numbers.position => number_position);
+ set!(text.features_mut().numbers.slashed_zero => slashed_zero);
+ set!(text.features_mut().numbers.fractions => fractions);
+ set!(text.features_mut().raw => features.clone());
+
+ Ok(Value::None)
}
/// Shape text into [`ShapedText`].