use comemo::Tracked; use crate::diag::HintedStrResult; use crate::engine::Engine; use crate::foundations::{func, Array, Context, IntoValue, LocatableSelector, Selector}; /// Counts element in the document. /// /// The `count` function lets you count elements in your document of a /// particular type or with a particular label. It also allows to count them /// in a hierachical way. To use it, you first need to ensure that [context] /// is available. /// /// Always returns an array of integers, even if called with just a single /// target. /// # Counting elements - simple /// /// To just count elements of a single type/label up to the current location, /// pass the selector you want to count: /// ```example /// = Heading /// /// = Another Heading /// /// #context count(heading) /// /// = Third Heading /// ``` /// /// Note that it will not return an integer, but an array with a single integer /// entry. /// # Counting elements - hierarchical /// /// If you pass multiple targets, then it starts by counting the first target. /// Then the second target is counted _starting only from the last counted /// element of the first target_. /// /// ```example /// = Some Heading /// /// == Some Subheading /// /// = Another Heading /// /// == Some Subheading /// /// #context count(heading.where(level: 1), heading.where(level: 2)) /// /// == Another Subheading /// ``` #[func(contextual)] pub fn count( /// The engine. engine: &mut Engine, /// The callsite context. context: Tracked, /// Each target can be /// - an element function like a `heading` or `figure`, /// - a `{