&& let Some(axis) = axes.get(&(base_level + variables.len()))
&& let Some(label) = &axis.label
{
- dbg!(label);
let mut dimension_style = AreaStyle::default_for_area(Area::Labels(a));
let style = label.style.get(&styles);
let fg = style;
.footnotes()
.and_then(|footnotes| series.get(footnotes.variable.as_str()));
let mut data = HashMap::new();
- for (i, cell) in cell.values.iter().enumerate() {
+ 'outer: for (i, cell) in cell.values.iter().enumerate() {
coords.clear();
for dim in &dims {
- // XXX indexing of values, and unwrap
- let coordinate = dim.coordinate.values[i].category().unwrap();
+ // XXX indexing of values
+ let Some(coordinate) = dim.coordinate.values[i].category() else {
+ // XXX issue warning?
+ continue 'outer;
+ };
let Some(index) = dim
.coordinate
.coordinate_to_index
};
let mut value = cell.as_pivot_value(format);
- if let Some(cell_footnotes) = &cell_footnotes {
- // XXX indexing
- let dv = &cell_footnotes.values[i];
+ if let Some(cell_footnotes) = &cell_footnotes
+ && let Some(dv) = cell_footnotes.values.get(i)
+ {
if let Some(s) = dv.value.as_string() {
for part in s.split(',') {
if let Ok(index) = part.parse::<usize>()
impl<'a> Target<'a> {
fn decode(
&self,
- scp: &SetCellProperties,
intersect: &Intersect,
look: &mut Look,
series: &BTreeMap<&str, Series>,
}
}
- dbg!(&scp.id, self, intersect);
match self {
Self {
format: Some((_, Some(TargetType::MajorTicks))),
..
} if !wheres.is_empty() => {
// Formatting for individual row or column labels.
- dbg!();
for w in &wheres {
let Some(s) = series.get(w.variable.as_str()) else {
continue;
} => {
// Formatting for individual cells or groups of them
// with some dimensions in common.
- dbg!(&scp.id);
let mut include = vec![HashSet::new(); dims.len()];
for w in &wheres {
let Some(s) = series.get(w.variable.as_str()) else {
);
}
}
- dbg!();
}
_ => (),
}
for intersect in &union_.intersects {
for target in &targets {
target.decode(
- scp,
intersect,
&mut look,
&series,
None
};
- let Some(data) = data
- .get(&self.source)
- .and_then(|source| source.get(&self.source_name))
- else {
- todo!()
+ let data = if let Some(source) = data.get(&self.source)
+ && let Some(values) = source.get(&self.source_name)
+ {
+ values.as_slice()
+ } else {
+ /*
+ XXX warn
+ */
+ &[]
};
let mut map = Map::new();
let (format, affixes) = map.remap_formats(&self.format, &self.string_format);
- let mut data = data.clone();
+ let mut data = Vec::from(data);
if !map.0.is_empty() {
map.apply(&mut data);
} else if let Some(label_series) = label_series {
) {
if let Some(sf) = sf {
if let Some(child) = &sf.child
- && let Some(format) = dbg!(child.decode_format())
+ && let Some(format) = child.decode_format()
&& let Some(datum_value) = value.inner.as_datum_value_mut()
{
- dbg!(&datum_value);
match &datum_value.datum {
Datum::Number(_) => {
datum_value.format = format;
impl Footnotes {
fn decode(&self, dst: &mut BTreeMap<usize, Footnote>) {
for f in &self.mappings {
- dst.entry(f.defines_reference.get() - 1)
- .or_default()
- .content = f.to.clone();
+ let index = f.defines_reference.unwrap_or(f.from).get() - 1;
+ dst.entry(index).or_default().content = f.to.clone();
}
}
}
#[serde(rename_all = "camelCase")]
struct FootnoteMapping {
#[serde(rename = "@definesReference")]
- defines_reference: NonZeroUsize,
+ defines_reference: Option<NonZeroUsize>,
#[serde(rename = "@from")]
- from: i64,
+ from: NonZeroUsize,
#[serde(rename = "@to")]
to: String,
#[serde(rename = "@style")]
style: Ref<Style>,
- #[serde(rename = "@tickFrameStyle")]
- tick_frame_style: Ref<Style>,
-
#[serde(rename = "@labelFrequency")]
label_frequency: Option<i64>,
#[serde(rename = "@stagger")]
stagger: Option<bool>,
-
- gridline: Option<Gridline>,
-}
-
-#[derive(Deserialize, Debug)]
-#[serde(rename_all = "camelCase")]
-struct Gridline {
- #[serde(rename = "@style")]
- style: Ref<Style>,
-
- #[serde(rename = "@zOrder")]
- z_order: i64,
}
#[derive(Deserialize, Debug)]