Read character typography through shared IDML model

This commit is contained in:
Dylan M. Taylor committed 2026-11-13 09:05:20 -05:00
1 parent 87a876e98f
commit 5a4df158db
2 files changed
+54 -6

No files matched your search

+6 -6
View File
@@ -26,12 +26,12 @@ pub use effects::{DirectionalFeatherValues, DropShadowValues, FeatherValues, Gra
pub use geometry::{MAX_PATH_POINTS, PathGeometry, PathGeometryError, PathPoint, SubPath};
pub use preferences::TextFramePreferences;
pub use resources::{
CjkCharacterValues, ColorDefinition, ColorGroup, ColorGroupDefinition, ColorGroupMember, ColorSpace, CompositeFontDefinition,
CompositeFontEntryDefinition, EpubExportTagMap, FontDefinition, FontFamilyDefinition, FontsPart, GradientDefinition, GradientStop,
GradientStopDefinition, GradientStopValue, GraphicPart, GrepStyleValue, Ink, InkDefinition, MojikumiRow, NestedLineStyleValue, NestedStyleValue,
NestedStyleValues, OpenTypeFeatureValues, ParagraphAlignmentValues, ParagraphBoxValues, ParagraphFlowValues, ParagraphListValues,
StrokeDefinition, StrokeStyle, StrokeStyleKind, Style, StyleGroup, StyleGroupWriter, StyleKind, StyleNode, Swatch, SwatchKind, TabStopValues,
TintDefinition, color_groups, inks, named, preference, stroke_styles, style_groups, swatches,
CharacterTypographyValues, CjkCharacterValues, ColorDefinition, ColorGroup, ColorGroupDefinition, ColorGroupMember, ColorSpace,
CompositeFontDefinition, CompositeFontEntryDefinition, EpubExportTagMap, FontDefinition, FontFamilyDefinition, FontsPart, GradientDefinition,
GradientStop, GradientStopDefinition, GradientStopValue, GraphicPart, GrepStyleValue, Ink, InkDefinition, MojikumiRow, NestedLineStyleValue,
NestedStyleValue, NestedStyleValues, OpenTypeFeatureValues, ParagraphAlignmentValues, ParagraphBoxValues, ParagraphFlowValues,
ParagraphListValues, StrokeDefinition, StrokeStyle, StrokeStyleKind, Style, StyleGroup, StyleGroupWriter, StyleKind, StyleNode, Swatch,
SwatchKind, TabStopValues, TintDefinition, color_groups, inks, named, preference, stroke_styles, style_groups, swatches,
};
pub use spread::{
ClippingPathValues, Graphic, GraphicChild, GraphicKind, GraphicLayerOptions, Guide, ItemChild, ItemKind, Link, MarginPreference, Page, PageChild,
+48
View File
@@ -118,6 +118,54 @@ pub struct ParagraphFlowValues {
pub start_paragraph: Option<String>,
}
/// Raw IDML character typography values before the caller resolves fonts and semantic enums.
#[derive(Clone, Debug, Default, PartialEq)]
pub struct CharacterTypographyValues {
pub applied_font: Option<String>,
pub font_style: Option<String>,
pub point_size: Option<f64>,
pub leading: Option<String>,
pub kerning_method: Option<String>,
pub kerning_value: Option<f64>,
pub tracking: Option<f64>,
pub leading_aki: Option<f64>,
pub trailing_aki: Option<f64>,
pub tsume: Option<f64>,
pub jidori: Option<f64>,
pub leading_model: Option<String>,
pub character_alignment: Option<String>,
pub horizontal_scale: Option<f64>,
pub vertical_scale: Option<f64>,
pub baseline_shift: Option<f64>,
pub skew: Option<f64>,
}
impl CharacterTypographyValues {
/// Reads the common typography attributes and properties from an IDML character range/style.
pub fn from_el(el: &El) -> Self {
let values = Values::of(el);
Self {
applied_font: values.prop("AppliedFont"),
font_style: values.prop("FontStyle"),
point_size: values.num("PointSize"),
leading: values.prop("Leading"),
kerning_method: values.prop("KerningMethod"),
kerning_value: values.num("KerningValue"),
tracking: values.num("Tracking"),
leading_aki: values.num("LeadingAki"),
trailing_aki: values.num("TrailingAki"),
tsume: values.num("Tsume"),
jidori: values.num("Jidori"),
leading_model: values.prop("LeadingModel"),
character_alignment: values.prop("CharacterAlignment"),
horizontal_scale: values.num("HorizontalScale"),
vertical_scale: values.num("VerticalScale"),
baseline_shift: values.num("BaselineShift"),
skew: values.num("Skew"),
}
}
}
impl ParagraphFlowValues {
/// Writes IDML attributes for paragraph hyphenation and flow.
pub fn to_attrs(&self) -> Vec<(String, String)> {