From 0f4f3fc2d1a178c435961cf847dc8cb174ffc5ba Mon Sep 17 00:00:00 2001 From: CirnoV Date: Mon, 16 Jun 2025 20:01:41 +0900 Subject: [PATCH 1/2] fix: correct character indexing for non-ASCII strings in markdown escaping --- mdast_util_to_markdown/src/state.rs | 2 +- mdast_util_to_markdown/tests/paragraph.rs | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/mdast_util_to_markdown/src/state.rs b/mdast_util_to_markdown/src/state.rs index 56648ac7..91dc4ed9 100644 --- a/mdast_util_to_markdown/src/state.rs +++ b/mdast_util_to_markdown/src/state.rs @@ -510,7 +510,7 @@ impl<'a> State<'a> { } start = *position; - let char_at_pos = value.chars().nth(*position); + let char_at_pos = value[*position..].chars().next(); match char_at_pos { Some('!'..='/') | Some(':'..='@') | Some('['..='`') | Some('{'..='~') => { if let Some(encode) = &config.encode { diff --git a/mdast_util_to_markdown/tests/paragraph.rs b/mdast_util_to_markdown/tests/paragraph.rs index b8801037..f168570d 100644 --- a/mdast_util_to_markdown/tests/paragraph.rs +++ b/mdast_util_to_markdown/tests/paragraph.rs @@ -114,7 +114,20 @@ fn paragraph() { position: None })) .unwrap(), - "яяя\n", + "я\\_я\n", "should support escaping around non-ascii" ); + + assert_eq!( + to(&Node::Paragraph(Paragraph { + children: vec![Node::Text(Text { + value: String::from("안녕[안녕]"), + position: None + })], + position: None + })) + .unwrap(), + "안녕\\[안녕]\n", + "should support escaping of a shortcut reference in non-ascii text" + ); } From db3af3ee0bb907e8329ba535b29121c0827b2289 Mon Sep 17 00:00:00 2001 From: CirnoV Date: Mon, 16 Jun 2025 20:10:33 +0900 Subject: [PATCH 2/2] Update test case --- mdast_util_to_markdown/tests/paragraph.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mdast_util_to_markdown/tests/paragraph.rs b/mdast_util_to_markdown/tests/paragraph.rs index f168570d..7c235b87 100644 --- a/mdast_util_to_markdown/tests/paragraph.rs +++ b/mdast_util_to_markdown/tests/paragraph.rs @@ -121,13 +121,13 @@ fn paragraph() { assert_eq!( to(&Node::Paragraph(Paragraph { children: vec![Node::Text(Text { - value: String::from("안녕[안녕]"), + value: String::from("테스트 [테스트] → [테스트]"), position: None })], position: None })) .unwrap(), - "안녕\\[안녕]\n", + "테스트 \\[테스트] → \\[테스트]\n", "should support escaping of a shortcut reference in non-ascii text" ); }