@@ -187,6 +187,27 @@ impl char {
187
187
}
188
188
}
189
189
190
+ /// An extended version of `escape_debug` that optionally permits escaping
191
+ /// Extended Grapheme codepoints. This allows us to format characters like
192
+ /// nonspacing marks better when they're at the start of a string.
193
+ #[ doc( hidden) ]
194
+ #[ unstable( feature = "str_internals" , issue = "0" ) ]
195
+ #[ inline]
196
+ pub fn escape_debug_ext ( self , escape_grapheme_extended : bool ) -> EscapeDebug {
197
+ let init_state = match self {
198
+ '\t' => EscapeDefaultState :: Backslash ( 't' ) ,
199
+ '\r' => EscapeDefaultState :: Backslash ( 'r' ) ,
200
+ '\n' => EscapeDefaultState :: Backslash ( 'n' ) ,
201
+ '\\' | '\'' | '"' => EscapeDefaultState :: Backslash ( self ) ,
202
+ _ if escape_grapheme_extended && self . is_grapheme_extended ( ) => {
203
+ EscapeDefaultState :: Unicode ( self . escape_unicode ( ) )
204
+ }
205
+ _ if is_printable ( self ) => EscapeDefaultState :: Char ( self ) ,
206
+ _ => EscapeDefaultState :: Unicode ( self . escape_unicode ( ) ) ,
207
+ } ;
208
+ EscapeDebug ( EscapeDefault { state : init_state } )
209
+ }
210
+
190
211
/// Returns an iterator that yields the literal escape code of a character
191
212
/// as `char`s.
192
213
///
@@ -224,18 +245,7 @@ impl char {
224
245
#[ stable( feature = "char_escape_debug" , since = "1.20.0" ) ]
225
246
#[ inline]
226
247
pub fn escape_debug ( self ) -> EscapeDebug {
227
- let init_state = match self {
228
- '\t' => EscapeDefaultState :: Backslash ( 't' ) ,
229
- '\r' => EscapeDefaultState :: Backslash ( 'r' ) ,
230
- '\n' => EscapeDefaultState :: Backslash ( 'n' ) ,
231
- '\\' | '\'' | '"' => EscapeDefaultState :: Backslash ( self ) ,
232
- _ if self . is_grapheme_extended ( ) => {
233
- EscapeDefaultState :: Unicode ( self . escape_unicode ( ) )
234
- }
235
- _ if is_printable ( self ) => EscapeDefaultState :: Char ( self ) ,
236
- _ => EscapeDefaultState :: Unicode ( self . escape_unicode ( ) ) ,
237
- } ;
238
- EscapeDebug ( EscapeDefault { state : init_state } )
248
+ self . escape_debug_ext ( true )
239
249
}
240
250
241
251
/// Returns an iterator that yields the literal escape code of a character
0 commit comments