diff options
Diffstat (limited to 'askama_shared/src')
-rw-r--r-- | askama_shared/src/filters/mod.rs | 17 | ||||
-rw-r--r-- | askama_shared/src/generator.rs | 15 |
2 files changed, 19 insertions, 13 deletions
diff --git a/askama_shared/src/filters/mod.rs b/askama_shared/src/filters/mod.rs index 75014fa..1f5fa42 100644 --- a/askama_shared/src/filters/mod.rs +++ b/askama_shared/src/filters/mod.rs @@ -16,6 +16,23 @@ use std::fmt; use super::Result; +// This is used by the code generator to decide whether a named filter is part of +// 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; 9] = [ + "e", + "escape", + "format", + "lower", + "lowercase", + "trim", + "upper", + "uppercase", + "json", // Optional feature; reserve the name anyway +]; + + fn escapable(b: &u8) -> bool { *b == b'<' || *b == b'>' || *b == b'&' } diff --git a/askama_shared/src/generator.rs b/askama_shared/src/generator.rs index 4d101a1..5c4b7f8 100644 --- a/askama_shared/src/generator.rs +++ b/askama_shared/src/generator.rs @@ -1,3 +1,4 @@ +use filters; use parser::{self, Cond, Expr, Node, Target, WS}; use path; @@ -262,7 +263,7 @@ impl<'a> Generator<'a> { return; } - if BUILT_IN_FILTERS.contains(&name) { + if filters::BUILT_IN_FILTERS.contains(&name) { self.write(&format!("::askama::filters::{}(&", name)); } else { self.write(&format!("filters::{}(&", name)); @@ -729,15 +730,3 @@ impl<'a, T: 'a> SetChain<'a, T> where T: cmp::Eq + hash::Hash { } type MacroMap<'a> = HashMap<&'a str, (WS, &'a str, Vec<&'a str>, Vec<Node<'a>>, WS)>; - -const BUILT_IN_FILTERS: [&str; 9] = [ - "e", - "escape", - "format", - "lower", - "lowercase", - "trim", - "upper", - "uppercase", - "json", // Optional feature; reserve the name anyway -]; |