summaryrefslogtreecommitdiff
path: root/crates/typst-library/src/foundations/styles.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/typst-library/src/foundations/styles.rs')
-rw-r--r--crates/typst-library/src/foundations/styles.rs101
1 files changed, 0 insertions, 101 deletions
diff --git a/crates/typst-library/src/foundations/styles.rs b/crates/typst-library/src/foundations/styles.rs
index 37094dcd..98380330 100644
--- a/crates/typst-library/src/foundations/styles.rs
+++ b/crates/typst-library/src/foundations/styles.rs
@@ -776,107 +776,6 @@ impl<'a> Iterator for Links<'a> {
}
}
-/// A sequence of elements with associated styles.
-#[derive(Clone, PartialEq, Hash)]
-pub struct StyleVec {
- /// The elements themselves.
- elements: EcoVec<Content>,
- /// A run-length encoded list of style lists.
- ///
- /// Each element is a (styles, count) pair. Any elements whose
- /// style falls after the end of this list is considered to
- /// have an empty style list.
- styles: EcoVec<(Styles, usize)>,
-}
-
-impl StyleVec {
- /// Create a style vector from an unstyled vector content.
- pub fn wrap(elements: EcoVec<Content>) -> Self {
- Self { elements, styles: EcoVec::new() }
- }
-
- /// Create a `StyleVec` from a list of content with style chains.
- pub fn create<'a>(buf: &[(&'a Content, StyleChain<'a>)]) -> (Self, StyleChain<'a>) {
- let trunk = StyleChain::trunk(buf.iter().map(|&(_, s)| s)).unwrap_or_default();
- let depth = trunk.links().count();
-
- let mut elements = EcoVec::with_capacity(buf.len());
- let mut styles = EcoVec::<(Styles, usize)>::new();
- let mut last: Option<(StyleChain<'a>, usize)> = None;
-
- for &(element, chain) in buf {
- elements.push(element.clone());
-
- if let Some((prev, run)) = &mut last {
- if chain == *prev {
- *run += 1;
- } else {
- styles.push((prev.suffix(depth), *run));
- last = Some((chain, 1));
- }
- } else {
- last = Some((chain, 1));
- }
- }
-
- if let Some((last, run)) = last {
- let skippable = styles.is_empty() && last == trunk;
- if !skippable {
- styles.push((last.suffix(depth), run));
- }
- }
-
- (StyleVec { elements, styles }, trunk)
- }
-
- /// Whether there are no elements.
- pub fn is_empty(&self) -> bool {
- self.elements.is_empty()
- }
-
- /// The number of elements.
- pub fn len(&self) -> usize {
- self.elements.len()
- }
-
- /// Iterate over the contained content and style chains.
- pub fn iter<'a>(
- &'a self,
- outer: &'a StyleChain<'_>,
- ) -> impl Iterator<Item = (&'a Content, StyleChain<'a>)> {
- static EMPTY: Styles = Styles::new();
- self.elements
- .iter()
- .zip(
- self.styles
- .iter()
- .flat_map(|(local, count)| std::iter::repeat(local).take(*count))
- .chain(std::iter::repeat(&EMPTY)),
- )
- .map(|(element, local)| (element, outer.chain(local)))
- }
-
- /// Get a style property, but only if it is the same for all children of the
- /// style vector.
- pub fn shared_get<T: PartialEq>(
- &self,
- styles: StyleChain<'_>,
- getter: fn(StyleChain) -> T,
- ) -> Option<T> {
- let value = getter(styles);
- self.styles
- .iter()
- .all(|(local, _)| getter(styles.chain(local)) == value)
- .then_some(value)
- }
-}
-
-impl Debug for StyleVec {
- fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
- f.debug_list().entries(&self.elements).finish()
- }
-}
-
/// A property that is resolved with other properties from the style chain.
pub trait Resolve {
/// The type of the resolved output.