Skip to content

Commit c3c6707

Browse files
committed
treat newline as space at start and end of inline code
1 parent e224b15 commit c3c6707

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

src/cm.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -548,11 +548,14 @@ impl<'a, 'o> CommonMarkFormatter<'a, 'o> {
548548
for _ in 0..numticks {
549549
write!(self, "`").unwrap();
550550
}
551+
552+
let all_space = literal.iter().all(|&c| c==b' ' || c==b'\r' || c==b'\n');
553+
let has_edge_space = literal[0] == b' ' || literal[literal.len() - 1] == b' ';
554+
let has_edge_backtick = literal[0] == b'`' || literal[literal.len() - 1] == b'`';
555+
551556
let pad = literal.is_empty()
552-
|| literal[0] == b'`'
553-
|| literal[literal.len() - 1] == b'`'
554-
|| literal[0] == b' '
555-
|| literal[literal.len() - 1] == b' ';
557+
|| has_edge_backtick
558+
|| (!all_space && has_edge_space);
556559
if pad {
557560
write!(self, " ").unwrap();
558561
}

src/strings.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ pub fn normalize_code(v: &[u8]) -> Vec<u8> {
6565
}
6666
c => r.push(c),
6767
}
68-
if v[i] != b' ' {
68+
if v[i] != b' ' && v[i] != b'\r' && v[i] != b'\n' {
6969
contains_nonspace = true;
7070
}
7171

@@ -274,3 +274,18 @@ pub fn extract_attributes_from_tag(html_tag: &str) -> HashMap<String, String> {
274274

275275
attributes
276276
}
277+
278+
#[cfg(test)]
279+
pub mod tests {
280+
use super::normalize_code;
281+
282+
#[test]
283+
pub fn normalize_code_handles_lone_newline() {
284+
assert_eq!(normalize_code(&[b'\n']), vec![b' ']);
285+
}
286+
287+
#[test]
288+
pub fn normalize_code_handles_lone_space() {
289+
assert_eq!(normalize_code(&[b' ']), vec![b' ']);
290+
}
291+
}

src/tests.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,11 @@ fn backticks() {
403403
);
404404
}
405405

406+
#[test]
407+
fn backticks_empty_with_newline_should_be_space() {
408+
html("`\n`", "<p><code> </code></p>\n");
409+
}
410+
406411
#[test]
407412
fn backticks_num() {
408413
let input = "Some `code1`. More ``` code2 ```.\n";

0 commit comments

Comments
 (0)