diff --git a/core/src/html/text_format.rs b/core/src/html/text_format.rs index 62180367b..c3777438e 100644 --- a/core/src/html/text_format.rs +++ b/core/src/html/text_format.rs @@ -13,7 +13,7 @@ use std::fmt::Write; use std::sync::Arc; const ANY_NEWLINE: &[u8] = &[b'\n', b'\r']; -const HTML_NEWLINE: u8 = b'\n'; +const HTML_NEWLINE: u16 = b'\r' as u16; /// Replace HTML entities with their equivalent characters. /// @@ -701,7 +701,7 @@ impl FormatSpans { match tag_name { b"br" => { if is_multiline { - text.push_byte(HTML_NEWLINE); + text.push(HTML_NEWLINE); spans.push(TextSpan::with_length_and_format(1, &format)); } @@ -711,7 +711,7 @@ impl FormatSpans { b"sbr" => { // TODO: tags do not add a newline, but rather only break // the format span. - text.push_byte(HTML_NEWLINE); + text.push(HTML_NEWLINE); spans.push(TextSpan::with_length_and_format(1, &format)); // Skip push to `format_stack`. @@ -822,12 +822,12 @@ impl FormatSpans { format.underline = Some(true); } b"li" => { - let is_last_nl = text.chars().last() == Some(Ok(HTML_NEWLINE as char)); + let is_last_nl = text.iter().last() == Some(HTML_NEWLINE); if is_multiline && !is_last_nl && text.len() > 0 { // If the last paragraph was not closed and // there was some text since then, // we need to close it here. - text.push_byte(HTML_NEWLINE); + text.push(HTML_NEWLINE); spans.push(TextSpan::with_length_and_format( 1, format_stack.last().unwrap(), @@ -883,6 +883,7 @@ impl FormatSpans { // is any non-whitespace character. break 'text; } + let e = e.replace(ANY_NEWLINE, WStr::from_units(&[HTML_NEWLINE])); text.push_str(&e); spans.push(TextSpan::with_length_and_format(e.len(), &format)); } @@ -907,7 +908,7 @@ impl FormatSpans { continue; } b"li" if is_multiline => { - text.push_byte(HTML_NEWLINE); + text.push(HTML_NEWLINE); spans.push(TextSpan::with_length_and_format( 1, format_stack.last().unwrap(), @@ -920,7 +921,7 @@ impl FormatSpans { } p_open = false; - text.push_byte(HTML_NEWLINE); + text.push(HTML_NEWLINE); let mut span = TextSpan::with_length_and_format(1, format_stack.last().unwrap()); //

has some weird behaviors related to the format of its children (b,i,u,a),