diff options
author | Dirkjan Ochtman <dirkjan@ochtman.nl> | 2019-01-10 17:19:28 +0100 |
---|---|---|
committer | Juan Aguilar <mhpoin@gmail.com> | 2019-01-12 09:16:20 +0100 |
commit | 467f4ade19fa34983de7e6f6d81c6b4d5ff140fe (patch) | |
tree | 3fdbb337ca41d5c6cb2448af15792857d1ed7c2b /askama_derive/src/generator.rs | |
parent | a2bdf3b138c22e057a75bfe3b0a96f946327adc8 (diff) | |
download | askama-467f4ade19fa34983de7e6f6d81c6b4d5ff140fe.tar.gz askama-467f4ade19fa34983de7e6f6d81c6b4d5ff140fe.tar.bz2 askama-467f4ade19fa34983de7e6f6d81c6b4d5ff140fe.zip |
Specify a trait that handles the output format's escaping
Diffstat (limited to 'askama_derive/src/generator.rs')
-rw-r--r-- | askama_derive/src/generator.rs | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/askama_derive/src/generator.rs b/askama_derive/src/generator.rs index 16a08bb..f6c83ec 100644 --- a/askama_derive/src/generator.rs +++ b/askama_derive/src/generator.rs @@ -732,14 +732,14 @@ impl<'a> Generator<'a> { } Writable::Expr(s) => { use self::DisplayWrap::*; - use super::input::EscapeMode::*; let mut expr_buf = Buffer::new(0); let wrapped = self.visit_expr(&mut expr_buf, s); - let expression = match (wrapped, &self.input.escaping) { - (Wrapped, &Html) | (Wrapped, &None) | (Unwrapped, &None) => expr_buf.buf, - (Unwrapped, &Html) => { - format!("::askama::MarkupDisplay::from(&{})", expr_buf.buf) - } + let expression = match wrapped { + Wrapped => expr_buf.buf, + Unwrapped => format!( + "::askama::MarkupDisplay::new_unsafe(&{}, {})", + expr_buf.buf, self.input.escaping + ), }; let id = expr_cache.entry(expression.clone()).or_insert_with(|| { @@ -876,7 +876,12 @@ impl<'a> Generator<'a> { return DisplayWrap::Unwrapped; } - if filters::BUILT_IN_FILTERS.contains(&name) { + if name == "escape" || name == "safe" || name == "e" || name == "json" { + buf.write(&format!( + "::askama::filters::{}({}, &", + name, self.input.escaping + )); + } else if filters::BUILT_IN_FILTERS.contains(&name) { buf.write(&format!("::askama::filters::{}(&", name)); } else { buf.write(&format!("filters::{}(&", name)); |