self.raw_string_bytes().is_empty()
}
+ fn is_spaces(&self) -> bool {
+ self.without_trailing_spaces().is_empty()
+ }
+
fn len(&self) -> usize {
self.raw_string_bytes().len()
}
}
}
+ pub fn is_spaces(&self) -> bool {
+ self.is_string_and(|s| s.is_spaces())
+ }
+
pub fn as_raw(&self) -> Datum<&ByteStr> {
self.as_ref().map_string(|s| s.as_ref())
}
series: &mut BTreeMap<&'a str, Series>,
) -> bool {
let label_series = if let Some(label_variable) = &self.label_variable {
- let Some(label_series) = series.get(label_variable.references.as_str()) else {
+ if let Some(label_series) = series.get(label_variable.references.as_str()) {
+ Some(label_series)
+ } else {
return false;
- };
- Some(label_series)
+ }
} else {
None
};
- let data = if let Some(source) = data.get(&self.source)
+ let mut data = if let Some(source) = data.get(&self.source)
&& let Some(values) = source.get(&self.variable)
{
- values.as_slice()
+ values.clone()
} else {
- &[]
+ Vec::new()
};
let mut map = Map::new();
let format = map.remap_formats(&self.format, &self.string_format);
- let mut data = Vec::from(data);
if !map.0.is_empty() {
map.apply(&mut data);
+ map = Map::new();
} else if let Some(label_series) = label_series {
map.insert_labels(&data, label_series, format);
}
for end in 1..=cats.len() {
let dv1 = &variable.values[cats[start].index];
if end >= cats.len() || &variable.values[cats[end].index].value != &dv1.value {
- let name = variable.map.lookup(dv1);
- if name.is_number_or(|s| !s.is_empty()) {
+ if !variable.map.lookup(dv1).is_spaces() {
let name = variable.new_name(dv1, footnotes);
- let mut group = Group::new(name);
- for i in start..end {
- group.push(cats[i].category.clone());
- }
let next_cat = CatBuilder {
- category: Category::from(group),
+ category: Group::new(name)
+ .with_multiple(cats[start..end].iter().map(|c| c.category.clone()))
+ .into(),
index: cats[start].index,
leaves: cats[start].leaves.start..cats[end - 1].leaves.end,
location: cats[start].location.parent(),
.insert(dv1.category().unwrap() /*XXX?*/, next_cat.location);
next_cats.push(next_cat);
} else {
- // XXX coordinate_to_index?
for cat in &cats[start..end] {
next_cats.push(cat.clone());
}