feat(pdf): searchable text layer with per-style subset font embedding

Real BT/Tj text objects ride alongside the vector outlines (Tr 3,
zero visual change): runs preserved at layout time, TTF styles embedded
as allsorts subsets with ToUnicode, width-matched Tm, clip-culled.
WireModel literals moved to ..Default::default() tails.
This commit is contained in:
Karim Jerbi committed 2026-10-01 23:30:35 +01:00
1 parent 443b935a3f
commit 02c470aac7
44 files changed
+1534 -127

No files matched your search

+6 -2
View File
@@ -366,7 +366,9 @@ impl CadCommand for AlignedDimensionCommand {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
})
..Default::default()
})
}
fn dyn_spec(&self) -> Option<crate::command::DynSpec> {
@@ -482,7 +484,9 @@ fn preview_aligned(p1: DVec3, p2: DVec3, dim_pt: DVec3) -> WireModel {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
+3 -1
View File
@@ -1275,7 +1275,9 @@ fn preview_wire(points: Vec<DVec3>) -> WireModel {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
inventory::submit!(crate::command::CommandRegistration { names: &["DIMANGULAR"] });
+3 -1
View File
@@ -134,7 +134,9 @@ impl DataLinkPlaceCommand {
plinegen: true,
fill_tris: Vec::new(),
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
}
+3 -1
View File
@@ -364,7 +364,9 @@ fn preview_line(far_chord: Vec3, chord: Vec3, text: Vec3) -> WireModel {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
inventory::submit!(crate::command::CommandRegistration { names: &["DIMDIAMETER"] });
+3 -1
View File
@@ -755,7 +755,9 @@ fn preview_for_dimension(dimension: &Dimension) -> WireModel {
plinegen: true,
fill_tris: Vec::new(),
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
fn linear_preview(
+3 -1
View File
@@ -506,7 +506,9 @@ fn preview_wire(points: Vec<Vec3>) -> WireModel {
plinegen: true,
fill_tris: Vec::new(),
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
inventory::submit!(crate::command::CommandRegistration {
+3 -1
View File
@@ -470,7 +470,9 @@ fn preview_wire(pts: &[Vec3], arrow_size: f32) -> WireModel {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
pub fn arrowhead_wings(tip: Vec3, next: Vec3, size: f32) -> [Vec3; 2] {
+3 -1
View File
@@ -590,7 +590,9 @@ fn preview_wire(points: Vec<DVec3>) -> WireModel {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
/// Project the two extension origins onto the dimension line, which passes
+3 -1
View File
@@ -799,7 +799,9 @@ fn preview_wire(pts: &[Vec3], arrow_size: f32) -> WireModel {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
fn arrowhead_wings(tip: Vec3, next: Vec3, size: f32) -> [Vec3; 2] {
+3 -1
View File
@@ -523,7 +523,9 @@ fn preview_wire(pts: &[Vec3]) -> WireModel {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
fn point_segment_distance_xy(point: Vector3, start: Vector3, end: Vector3) -> f64 {
+3 -1
View File
@@ -315,7 +315,9 @@ fn preview_wire(points: Vec<Vec3>) -> WireModel {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
+3 -1
View File
@@ -376,7 +376,9 @@ fn preview_wire(points: Vec<Vec3>) -> WireModel {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
inventory::submit!(crate::command::CommandRegistration { names: &["DIMRADIUS"] });
+3 -1
View File
@@ -341,7 +341,9 @@ impl TableCommand {
plinegen: true,
fill_tris: Vec::new(),
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
}
+3 -1
View File
@@ -114,7 +114,9 @@ impl CadCommand for ToleranceCommand {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
})
..Default::default()
})
}
}
+3 -1
View File
@@ -235,7 +235,9 @@ impl CadCommand for AttdefCommand {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
})
..Default::default()
})
}
}
+3 -1
View File
@@ -213,7 +213,9 @@ impl MlineCommand {
plinegen: true,
fill_tris,
fill_tris_low,
})
..Default::default()
})
}
}
+3 -1
View File
@@ -202,7 +202,9 @@ impl CadCommand for ImageCommand {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
})
..Default::default()
})
}
}
+6 -2
View File
@@ -119,7 +119,9 @@ impl CadCommand for RayCommand {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
})
..Default::default()
})
}
}
@@ -408,7 +410,9 @@ impl CadCommand for XLineCommand {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
})
..Default::default()
})
}
}
+3 -1
View File
@@ -401,7 +401,9 @@ impl CadCommand for AreaCommand {
plinegen: true,
fill_tris: Vec::new(),
fill_tris_low: Vec::new(),
})
..Default::default()
})
}
fn area_preview_regions(&self) -> Option<Vec<AreaPreviewRegion>> {
+3 -1
View File
@@ -124,7 +124,9 @@ impl CadCommand for DistCommand {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
})
..Default::default()
})
}
}
+3 -1
View File
@@ -103,7 +103,9 @@ impl MeasureGeomCommand {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
/// Extract (radius) from a Circle or Arc; `None` for anything else.
+3 -1
View File
@@ -4870,7 +4870,9 @@ fn preview_wire(points: Vec<[f32; 3]>, color: [f32; 4], name: &str) -> WireModel
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
/// Insert the exact boundary crossings between consecutive samples so a
+3 -1
View File
@@ -3710,5 +3710,7 @@ fn wire(name: &str, points: Vec<[f32; 3]>) -> WireModel {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
}
..Default::default()
}
}
+3 -1
View File
@@ -96,7 +96,9 @@ impl CadCommand for PlotWindowCommand {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
})
..Default::default()
})
}
}
+3 -1
View File
@@ -175,6 +175,8 @@ impl CadCommand for ZoomWindowCommand {
plinegen: true,
fill_tris: vec![],
fill_tris_low: Vec::new(),
})
..Default::default()
})
}
}