diff --git a/crates/idml/src/model/mod.rs b/crates/idml/src/model/mod.rs index 0572f75d1..9db37124e 100644 --- a/crates/idml/src/model/mod.rs +++ b/crates/idml/src/model/mod.rs @@ -26,10 +26,11 @@ pub use effects::{DirectionalFeatherValues, DropShadowValues, FeatherValues, Gra pub use geometry::{MAX_PATH_POINTS, PathGeometry, PathGeometryError, PathPoint, SubPath}; pub use preferences::TextFramePreferences; pub use resources::{ - ColorDefinition, ColorGroup, ColorGroupDefinition, ColorGroupMember, ColorSpace, CompositeFontDefinition, CompositeFontEntryDefinition, - EpubExportTagMap, FontDefinition, FontFamilyDefinition, FontsPart, GradientDefinition, GradientStop, GradientStopDefinition, GradientStopValue, - GraphicPart, Ink, InkDefinition, MojikumiRow, StrokeDefinition, StrokeStyle, StrokeStyleKind, Style, StyleGroup, StyleGroupWriter, StyleKind, - StyleNode, Swatch, SwatchKind, TabStopValues, TintDefinition, color_groups, inks, named, preference, stroke_styles, style_groups, swatches, + CjkCharacterValues, ColorDefinition, ColorGroup, ColorGroupDefinition, ColorGroupMember, ColorSpace, CompositeFontDefinition, + CompositeFontEntryDefinition, EpubExportTagMap, FontDefinition, FontFamilyDefinition, FontsPart, GradientDefinition, GradientStop, + GradientStopDefinition, GradientStopValue, GraphicPart, Ink, InkDefinition, MojikumiRow, 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::{ Graphic, GraphicChild, GraphicKind, Guide, ItemChild, ItemKind, Link, MarginPreference, Page, PageChild, PageItem, Spread, SpreadChild, TextPath, diff --git a/crates/idml/src/model/resources.rs b/crates/idml/src/model/resources.rs index d2e339c07..9c9843c34 100644 --- a/crates/idml/src/model/resources.rs +++ b/crates/idml/src/model/resources.rs @@ -11,6 +11,61 @@ fn others(el: &El) -> impl Iterator { el.elements().filter(|e| !e.is(Local("Properties"))) } +/// Raw character-level Japanese composition and emphasis properties from an IDML text range. +#[derive(Clone, Debug, Default, PartialEq)] +pub struct CjkCharacterValues { + pub kenten_kind: Option, + pub kenten_font: Option, + pub kenten_font_style: Option, + pub kenten_size: Option, + pub kenten_x_scale: Option, + pub kenten_y_scale: Option, + pub kenten_distance: Option, + pub kenten_position: Option, + pub kenten_alignment: Option, + pub kenten_character_set: Option, + pub kenten_fill_color: Option, + pub kenten_stroke_color: Option, + pub kenten_fill_tint: Option, + pub kenten_stroke_tint: Option, + pub kenten_stroke_weight: Option, + pub kenten_overprint_fill: Option, + pub kenten_overprint_stroke: Option, + pub shatai_magnification: Option, + pub shatai_angle: Option, + pub shatai_adjust_rotation: Option, + pub shatai_adjust_tsume: Option, +} + +impl CjkCharacterValues { + pub fn from_el(el: &El) -> Self { + let values = Values::of(el); + Self { + kenten_kind: values.get("KentenKind").map(str::to_owned), + kenten_font: values.prop("KentenFont"), + kenten_font_style: values.prop("KentenFontStyle"), + kenten_size: values.num("KentenFontSize"), + kenten_x_scale: values.num("KentenXScale"), + kenten_y_scale: values.num("KentenYScale"), + kenten_distance: values.num("KentenPlacement"), + kenten_position: values.prop("KentenPosition"), + kenten_alignment: values.prop("KentenAlignment"), + kenten_character_set: values.prop("KentenCharacterSet"), + kenten_fill_color: values.prop("KentenFillColor"), + kenten_stroke_color: values.prop("KentenStrokeColor"), + kenten_fill_tint: values.num("KentenTint"), + kenten_stroke_tint: values.num("KentenStrokeTint"), + kenten_stroke_weight: values.num("KentenWeight"), + kenten_overprint_fill: values.prop("KentenOverprintFill"), + kenten_overprint_stroke: values.prop("KentenOverprintStroke"), + shatai_magnification: values.num("ShataiMagnification"), + shatai_angle: values.num("ShataiDegreeAngle"), + shatai_adjust_rotation: values.boolean("ShataiAdjustRotation"), + shatai_adjust_tsume: values.boolean("ShataiAdjustTsume"), + } + } +} + /// Numeric and boolean values in an IDML `MojikumiTable` row. #[derive(Clone, Debug, PartialEq)] pub struct MojikumiRow {