From 8ba285cdef48b3e64ab2ce8f0b7601bf0d5d48b0 Mon Sep 17 00:00:00 2001 From: divyanshu2074 <43274510+divyanshu2074@users.noreply.github.com> Date: Thu, 15 Oct 2026 05:06:36 +0530 Subject: [PATCH] fix(engine): handle multi-byte UTF-8 characters before em-dash in dash_autoformat (#1570) --- crates/engine/src/cmd/text.rs | 2 +- crates/engine/src/tests_typing.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/engine/src/cmd/text.rs b/crates/engine/src/cmd/text.rs index e234faac8..02749ce1f 100644 --- a/crates/engine/src/cmd/text.rs +++ b/crates/engine/src/cmd/text.rs @@ -192,7 +192,7 @@ fn dash_autoformat(s: &mut Session) -> Result<(), CmdError> { } else if before.ends_with(' ') && let Some(i) = before.trim_end().rfind("--") && i > 0 - && before.trim_end().get(i - 1..i).is_some_and(|c| c != " ") + && before.trim_end()[..i].chars().next_back().is_some_and(|c| c != ' ') { let p = s.doc.para_mut(f.story, &f.path)?; let props = p.props_at(i).clone(); diff --git a/crates/engine/src/tests_typing.rs b/crates/engine/src/tests_typing.rs index e89b0a5b2..4788df900 100644 --- a/crates/engine/src/tests_typing.rs +++ b/crates/engine/src/tests_typing.rs @@ -357,8 +357,8 @@ fn web_addresses_become_links() { #[test] fn dashes() { - let s = typed("a -- b and c - d and e--f "); - assert_eq!(s.doc.plain_text(StoryRef::Body), "A – b and c – d and e—f "); + let s = typed("a -- b and c - d and e--f and café--g "); + assert_eq!(s.doc.plain_text(StoryRef::Body), "A – b and c – d and e—f and café—g "); } #[test]