@@ -397,9 +397,15 @@ impl<'a, 'o> CommonMarkFormatter<'a, 'o> {
397397 let new_len = self . prefix . len ( ) - 4 ;
398398 self . prefix . truncate ( new_len) ;
399399 } else {
400- let numticks = max ( 3 , longest_backtick_sequence ( & ncb. literal ) + 1 ) ;
400+ let fence_char =
401+ if ncb. info . contains ( & b'`' ) {
402+ b'~'
403+ } else {
404+ b'`'
405+ } ;
406+ let numticks = max ( 3 , longest_char_sequence ( & ncb. literal , fence_char) + 1 ) ;
401407 for _ in 0 ..numticks {
402- write ! ( self , "`" ) . unwrap ( ) ;
408+ write ! ( self , "{}" , fence_char as char ) . unwrap ( ) ;
403409 }
404410 if !ncb. info . is_empty ( ) {
405411 write ! ( self , " " ) . unwrap ( ) ;
@@ -409,7 +415,7 @@ impl<'a, 'o> CommonMarkFormatter<'a, 'o> {
409415 self . write_all ( & ncb. literal ) . unwrap ( ) ;
410416 self . cr ( ) ;
411417 for _ in 0 ..numticks {
412- write ! ( self , "`" ) . unwrap ( ) ;
418+ write ! ( self , "{}" , fence_char as char ) . unwrap ( ) ;
413419 }
414420 }
415421 self . blankline ( ) ;
@@ -598,11 +604,11 @@ impl<'a, 'o> CommonMarkFormatter<'a, 'o> {
598604 }
599605}
600606
601- fn longest_backtick_sequence ( literal : & [ u8 ] ) -> usize {
607+ fn longest_char_sequence ( literal : & [ u8 ] , ch : u8 ) -> usize {
602608 let mut longest = 0 ;
603609 let mut current = 0 ;
604610 for c in literal {
605- if * c == b'`' {
611+ if * c == ch {
606612 current += 1 ;
607613 } else {
608614 if current > longest {
0 commit comments