chiark / gitweb /
otterlib: wip preview, reorg a bit nfc
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 12 Jan 2021 00:56:27 +0000 (00:56 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 12 Jan 2021 00:56:27 +0000 (00:56 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/bin/otterlib.rs

index 193fdd7783e055643ccaa9870445589e82b05f8f..6016fc4db98d0c20744f5583adeb5f41230ba09f 100644 (file)
@@ -38,7 +38,9 @@ fn preview(items: Vec<ItemForOutput>) {
   struct Prep {
     spec: ItemSpec,
     pc: Box<dyn Piece>,
-    uos: Vec<String>
+    uos: Vec<String>,
+    bbox: Vec<Vec<f64>>,
+    size: Vec<f64>,
   };
 
   let pieces : Vec<Prep> = items.into_iter().map(|it| {
@@ -50,7 +52,19 @@ fn preview(items: Vec<ItemForOutput>) {
       let uos = uos.into_iter().map(|uo| uo.opname).collect::<Vec<_>>();
       let spec = spec.clone();
 
-      Ok::<_,AE>(Prep { spec, pc, uos })
+      let bbox = pc
+        .bbox_approx();
+      let mut bbox = bbox
+        .iter()
+        .map(|PosC(xy)| xy.iter().map(|&p| p as f64).collect::<Vec<_>>())
+        .collect::<Vec<_>>();
+      for xy in &mut bbox[0] { *xy -= BORDER }
+      for xy in &mut bbox[1] { *xy += BORDER }
+      let size = izip!(&bbox[0], &bbox[1])
+        .map(|(min,max)| max-min)
+        .collect::<Vec<_>>();
+
+      Ok::<_,AE>(Prep { spec, pc, uos, bbox, size })
     })().with_context(|| format!("{:?}", &spec))
   }).collect::<Result<Vec<_>,_>>()?;
 
@@ -58,7 +72,7 @@ fn preview(items: Vec<ItemForOutput>) {
   let max_uos = pieces.iter().map(|s| s.uos.len()).max().unwrap_or(0);
 
   println!(r#"<table rules="all">"#);
-  for Prep { spec, pc, uos } in &pieces {
+  for Prep { spec, pc, uos, bbox, size } in &pieces {
     println!(r#"<tr>"#);
     println!(r#"<th align="left"><kbd>{}</kbd><th>"#, &spec.lib);
     println!(r#"<th align="left"><kbd>{}</kbd><th>"#, &spec.item);
@@ -70,18 +84,6 @@ fn preview(items: Vec<ItemForOutput>) {
       face
     };
 
-    let bbox = pc
-      .bbox_approx();
-    let mut bbox = bbox
-      .iter()
-      .map(|PosC(xy)| xy.iter().map(|&p| p as f64).collect::<Vec<_>>())
-      .collect::<Vec<_>>();
-    for xy in &mut bbox[0] { *xy -= BORDER }
-        for xy in &mut bbox[1] { *xy += BORDER }
-    let size = izip!(&bbox[0], &bbox[1])
-      .map(|(min,max)| max-min)
-      .collect::<Vec<_>>();
-
     for face in 0..(if only1 { 1 } else { max_faces }) {
       print!(r#"<td align="center""#);
       if only1 { print!(r#" colspan="{}""#, max_faces); }