summaryrefslogtreecommitdiff
path: root/src/library/mod.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-03-19 13:20:58 +0100
committerLaurenz <laurmaedje@gmail.com>2021-03-19 13:20:58 +0100
commit54a9ccb1a5e9f1f1e5d2538d2f4ce3d4f7afc4ae (patch)
tree3a0f45af5d1cd6d65420887f8412a5594b6300bd /src/library/mod.rs
parentbd12d135cab32d61b32945433e77579d04298d52 (diff)
Configurable font edges ⚙
Adds top-edge and bottom-edge parameters to the font function. These define how the box around a word is computed. The possible values are: - ascender - cap-height (default top edge) - x-height - baseline (default bottom edge) - descender The defaults are chosen so that it's easy to create good-looking designs with vertical alignment. Since they are much tighter than what most other software uses by default, the default leading had to be increased to 50% of the font size and paragraph spacing to 100% of the font size. The values cap-height and x-height fall back to ascender in case they are zero because this value may occur in fonts that don't have glyphs with cap- or x-height (like Twitter Color Emoji). Since cap-height is the default top edge, doing no fallback would break things badly. Removes softness in favor of a simple boolean for pages and a more finegread u8 for spacing. This is needed to make paragraph spacing consume line spacing created by hard line breaks.
Diffstat (limited to 'src/library/mod.rs')
-rw-r--r--src/library/mod.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/library/mod.rs b/src/library/mod.rs
index 09fda20f..453eab26 100644
--- a/src/library/mod.rs
+++ b/src/library/mod.rs
@@ -26,9 +26,9 @@ use std::fmt::{self, Display, Formatter};
use fontdock::{FontStyle, FontWeight};
use crate::eval::{Scope, ValueAny, ValueFunc};
-use crate::exec::Softness;
use crate::layout::*;
use crate::prelude::*;
+use crate::shaping::VerticalFontMetric;
/// Construct a scope containing all standard library definitions.
pub fn new() -> Scope {
@@ -81,6 +81,11 @@ pub fn new() -> Scope {
set!(any: "bold", FontWeight::BOLD);
set!(any: "extrabold", FontWeight::EXTRABOLD);
set!(any: "black", FontWeight::BLACK);
+ set!(any: "ascender", VerticalFontMetric::Ascender);
+ set!(any: "cap-height", VerticalFontMetric::CapHeight);
+ set!(any: "x-height", VerticalFontMetric::XHeight);
+ set!(any: "baseline", VerticalFontMetric::Baseline);
+ set!(any: "descender", VerticalFontMetric::Descender);
std
}