return masque-style (dx, dy) vectors for AREF
This commit is contained in:
parent
1b3a6a45ce
commit
9c98ee2b97
@ -374,32 +374,40 @@ pub fn read_ref<'a>(input: &'a [u8], cell_builder: &mut StructBuilder, tag: u16,
|
||||
|
||||
|
||||
let (input, mut xy_iter) = XY::read_data(input, header.data_size)?;
|
||||
let x = xy_iter.next().unwrap();
|
||||
let y = xy_iter.next().unwrap();
|
||||
let x_builder = ref_builder.field_builder::<Int32Builder>(4).unwrap();
|
||||
x_builder.append_value(xy_iter.next().unwrap());
|
||||
x_builder.append_value(x);
|
||||
let y_builder = ref_builder.field_builder::<Int32Builder>(5).unwrap();
|
||||
y_builder.append_value(xy_iter.next().unwrap());
|
||||
y_builder.append_value(y);
|
||||
|
||||
let rep_builder = ref_builder.field_builder::<StructBuilder>(6).unwrap();
|
||||
println!("ref, {is_aref:?}");
|
||||
if is_aref {
|
||||
let x0_builder = rep_builder.field_builder::<Int32Builder>(0).unwrap();
|
||||
x0_builder.append_value(xy_iter.next().unwrap());
|
||||
let y0_builder = rep_builder.field_builder::<Int32Builder>(1).unwrap();
|
||||
y0_builder.append_value(xy_iter.next().unwrap());
|
||||
let x1_builder = rep_builder.field_builder::<Int32Builder>(2).unwrap();
|
||||
x1_builder.append_value(xy_iter.next().unwrap());
|
||||
let y1_builder = rep_builder.field_builder::<Int32Builder>(3).unwrap();
|
||||
y1_builder.append_value(xy_iter.next().unwrap());
|
||||
|
||||
match colrow {
|
||||
None => return fail(input, "AREF without COLROW before XY".to_string()),
|
||||
Some((count0, count1)) => {
|
||||
let count0_builder = rep_builder.field_builder::<Int16Builder>(4).unwrap();
|
||||
count0_builder.append_value(count0);
|
||||
let count1_builder = rep_builder.field_builder::<Int16Builder>(5).unwrap();
|
||||
count1_builder.append_value(count1);
|
||||
},
|
||||
if colrow.is_none() {
|
||||
return fail(input, "AREF without COLROW before XY".to_string())
|
||||
}
|
||||
let (count0, count1) = colrow.unwrap();
|
||||
|
||||
let x0a = (xy_iter.next().unwrap() - x) / (count0 as i32);
|
||||
let y0a = (xy_iter.next().unwrap() - y) / (count0 as i32);
|
||||
let x1a = (xy_iter.next().unwrap() - x) / (count1 as i32);
|
||||
let y1a = (xy_iter.next().unwrap() - y) / (count1 as i32);
|
||||
|
||||
let x0_builder = rep_builder.field_builder::<Int32Builder>(0).unwrap();
|
||||
x0_builder.append_value(x0a);
|
||||
let y0_builder = rep_builder.field_builder::<Int32Builder>(1).unwrap();
|
||||
y0_builder.append_value(y0a);
|
||||
let x1_builder = rep_builder.field_builder::<Int32Builder>(2).unwrap();
|
||||
x1_builder.append_value(x1a);
|
||||
let y1_builder = rep_builder.field_builder::<Int32Builder>(3).unwrap();
|
||||
y1_builder.append_value(y1a);
|
||||
|
||||
let count0_builder = rep_builder.field_builder::<Int16Builder>(4).unwrap();
|
||||
count0_builder.append_value(count0);
|
||||
let count1_builder = rep_builder.field_builder::<Int16Builder>(5).unwrap();
|
||||
count1_builder.append_value(count1);
|
||||
|
||||
} else {
|
||||
let x0_builder = rep_builder.field_builder::<Int32Builder>(0).unwrap();
|
||||
x0_builder.append_null();
|
||||
|
Loading…
x
Reference in New Issue
Block a user