diff options
Diffstat (limited to '')
| -rw-r--r-- | askama_shared/src/filters/mod.rs | 38 | 
1 files changed, 37 insertions, 1 deletions
| diff --git a/askama_shared/src/filters/mod.rs b/askama_shared/src/filters/mod.rs index 60d17f1..2b3758c 100644 --- a/askama_shared/src/filters/mod.rs +++ b/askama_shared/src/filters/mod.rs @@ -20,9 +20,10 @@ use escaping::{self, MarkupDisplay};  // Askama or should refer to a local `filters` module. It should contain all the  // filters shipped with Askama, even the optional ones (since optional inclusion  // in the const vector based on features seems impossible right now). -pub const BUILT_IN_FILTERS: [&str; 17] = [ +pub const BUILT_IN_FILTERS: [&str; 18] = [      "abs",      "capitalize", +    "center",      "e",      "escape",      "format", @@ -188,6 +189,33 @@ pub fn capitalize(s: &fmt::Display) -> Result<String> {      }  } +/// Centers the value in a field of a given width. +pub fn center(s: &fmt::Display, l: usize) -> Result<String> { +    let s = format!("{}", s); +    let len = s.len(); + +    if l <= len { +        Ok(s) +    } else { +        let p = l - len; +        let q = p / 2; +        let r = p % 2; +        let mut buf = String::with_capacity(l); + +        for _ in 0..q { +            buf.push(' '); +        } + +        buf.push_str(&s); + +        for _ in 0..q + r { +            buf.push(' '); +        } + +        Ok(buf) +    } +} +  /// Count the words in that string.  pub fn wordcount(s: &fmt::Display) -> Result<usize> {      let s = format!("{}", s); @@ -301,6 +329,14 @@ mod tests {      }      #[test] +    fn test_center() { +        assert_eq!(center(&"f", 3).unwrap(), " f ".to_string()); +        assert_eq!(center(&"f", 4).unwrap(), " f  ".to_string()); +        assert_eq!(center(&"foo", 1).unwrap(), "foo".to_string()); +        assert_eq!(center(&"foo bar", 8).unwrap(), "foo bar ".to_string()); +    } + +    #[test]      fn test_wordcount() {          assert_eq!(wordcount(&"").unwrap(), 0);          assert_eq!(wordcount(&" \n\t").unwrap(), 0); | 
