) -> Option<&'static str> {
}
}
-fn text_html(t: &str) -> String {
+fn text_html(t: &str, at_start: bool) -> String {
let mut o = String::new();
- let mut prev_space = false;
+ let mut prev_space = at_start;
for c in t.chars() {
match c {
'\n' => {
@@ -1547,8 +1547,9 @@ pub fn inlines_html(inlines: &[Inline]) -> String {
open.push_str(&format!("", css.join(";")));
close.push("");
}
+ let at_start = o.is_empty();
o.push_str(&open);
- o.push_str(&text_html(t));
+ o.push_str(&text_html(t, at_start));
for c in close.iter().rev() {
o.push_str(c);
}
@@ -2036,4 +2037,13 @@ mod tests {
};
assert_eq!(p.text(), "World");
}
+
+ #[test]
+ fn leading_space_survives_round_trip() {
+ let doc = Document::from_text(" lead");
+ let html = export(&doc);
+ assert!(!html.contains(" lead"), "{html}");
+ let back = import(&html);
+ assert_eq!(back.plain_text(Default::default()).replace('\u{a0}', " "), " lead");
+ }
}