From b2093f1ee328d676410753b7c4892345958c5514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Fri, 22 Mar 2024 20:49:47 +0100 Subject: [PATCH] Fix multiple `Text` events inside code block on Windows --- book/src/guide.md | 4 ++-- src/lib.rs | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/book/src/guide.md b/book/src/guide.md index 45b0a63..23b56de 100644 --- a/book/src/guide.md +++ b/book/src/guide.md @@ -132,13 +132,13 @@ pub fn main() -> iced::Result { # Decrement, # } # -# fn update(value: &mut u64, message: Message) { +# fn update(value: &mut i64, message: Message) { # match message { # Message::Decrement => *value -= 1, # } # } # -# fn view(value: &u64) -> Column { +# fn view(value: &i64) -> Column { # column![ # text(value), # button("-").on_press(Message::Decrement), diff --git a/src/lib.rs b/src/lib.rs index ee60678..2b3127a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -94,6 +94,7 @@ fn process_chapter( let output = groups.into_iter().flat_map(|(is_iced_code, group)| { if is_iced_code { let mut events = Vec::new(); + let mut code = String::new(); for event in group { if let Event::Start(Tag::CodeBlock(CodeBlockKind::Fenced(label))) = &event { @@ -111,20 +112,26 @@ fn process_chapter( ) }); + code.clear(); icebergs.push(None); heights.push(height); events.push(event); - } else if let Event::Text(code) = &event { - if let Ok(iceberg) = compiler.compile(code) { - if let Some(last_iceberg) = icebergs.last_mut() { - *last_iceberg = Some(iceberg); - } + } else if let Event::Text(text) = &event { + if !code.ends_with('\n') { + code.push('\n'); } + code.push_str(text); events.push(event); } else if let Event::End(TagEnd::CodeBlock) = &event { events.push(event); + if let Ok(iceberg) = compiler.compile(&code) { + if let Some(last_iceberg) = icebergs.last_mut() { + *last_iceberg = Some(iceberg); + } + } + if is_first { is_first = false;