Improved rendering time (#190)

* Improved rendering time

* Fix useless codes
This commit is contained in:
yossyJ 2019-01-06 22:28:22 +09:00 committed by Dirkjan Ochtman
parent bef88f1696
commit ed47f17f3c

View File

@ -1,4 +1,5 @@
use std::fmt::{self, Display, Formatter};
use std::io::{self, prelude::*};
use std::str;
#[derive(Debug, PartialEq)]
@ -37,12 +38,33 @@ where
{
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match *self {
MarkupDisplay::Unsafe(ref t) => escape(&t.to_string()).fmt(f),
MarkupDisplay::Unsafe(ref t) => {
let mut w = EscapeWriter { fmt: f };
write!(w, "{}", t).map_err(|_e| fmt::Error)
}
MarkupDisplay::Safe(ref t) => t.fmt(f),
}
}
}
pub struct EscapeWriter<'a, 'b: 'a> {
fmt: &'a mut fmt::Formatter<'b>,
}
impl io::Write for EscapeWriter<'_, '_> {
fn write(&mut self, bytes: &[u8]) -> io::Result<usize> {
let escaped = Escaped { bytes };
escaped
.fmt(self.fmt)
.map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?;
Ok(bytes.len())
}
fn flush(&mut self) -> std::io::Result<()> {
Ok(())
}
}
pub fn escape(s: &str) -> Escaped<'_> {
Escaped {
bytes: s.as_bytes(),