@@ -244,6 +244,53 @@ pub fn len_utf8_bytes(c: char) -> uint {
244244 else { fail ! ( "invalid character!" ) }
245245}
246246
247+ pub trait Char {
248+ fn is_alphabetic ( & self ) -> bool ;
249+ fn is_XID_start ( & self ) -> bool ;
250+ fn is_XID_continue ( & self ) -> bool ;
251+ fn is_lowercase ( & self ) -> bool ;
252+ fn is_uppercase ( & self ) -> bool ;
253+ fn is_whitespace ( & self ) -> bool ;
254+ fn is_alphanumeric ( & self ) -> bool ;
255+ fn is_digit ( & self ) -> bool ;
256+ fn is_digit_radix ( & self , radix : uint ) -> bool ;
257+ fn to_digit ( & self , radix : uint ) -> Option < uint > ;
258+ fn from_digit ( num : uint , radix : uint ) -> Option < char > ;
259+ fn escape_unicode ( & self ) -> ~str ;
260+ fn escape_default ( & self ) -> ~str ;
261+ fn len_utf8_bytes ( & self ) -> uint ;
262+ }
263+
264+ impl Char for char {
265+ fn is_alphabetic ( & self ) -> bool { is_alphabetic ( * self ) }
266+
267+ fn is_XID_start ( & self ) -> bool { is_XID_start ( * self ) }
268+
269+ fn is_XID_continue ( & self ) -> bool { is_XID_continue ( * self ) }
270+
271+ fn is_lowercase ( & self ) -> bool { is_lowercase ( * self ) }
272+
273+ fn is_uppercase ( & self ) -> bool { is_uppercase ( * self ) }
274+
275+ fn is_whitespace ( & self ) -> bool { is_whitespace ( * self ) }
276+
277+ fn is_alphanumeric ( & self ) -> bool { is_alphanumeric ( * self ) }
278+
279+ fn is_digit ( & self ) -> bool { is_digit ( * self ) }
280+
281+ fn is_digit_radix ( & self , radix : uint ) -> bool { is_digit_radix ( * self , radix) }
282+
283+ fn to_digit ( & self , radix : uint ) -> Option < uint > { to_digit ( * self , radix) }
284+
285+ fn from_digit ( num : uint , radix : uint ) -> Option < char > { from_digit ( num, radix) }
286+
287+ fn escape_unicode ( & self ) -> ~str { escape_unicode ( * self ) }
288+
289+ fn escape_default ( & self ) -> ~str { escape_default ( * self ) }
290+
291+ fn len_utf8_bytes ( & self ) -> uint { len_utf8_bytes ( * self ) }
292+ }
293+
247294#[ cfg( not( test) ) ]
248295impl Eq for char {
249296 #[ inline( always) ]
@@ -266,84 +313,82 @@ impl Ord for char {
266313
267314#[ test]
268315fn test_is_lowercase ( ) {
269- assert ! ( is_lowercase ( 'a' ) ) ;
270- assert ! ( is_lowercase ( 'ö' ) ) ;
271- assert ! ( is_lowercase ( 'ß' ) ) ;
272- assert ! ( !is_lowercase ( 'Ü' ) ) ;
273- assert ! ( !is_lowercase ( 'P' ) ) ;
316+ assert ! ( 'a' . is_lowercase ( ) ) ;
317+ assert ! ( 'ö' . is_lowercase ( ) ) ;
318+ assert ! ( 'ß' . is_lowercase ( ) ) ;
319+ assert ! ( !'Ü' . is_lowercase ( ) ) ;
320+ assert ! ( !'P' . is_lowercase ( ) ) ;
274321}
275322
276323#[ test]
277324fn test_is_uppercase ( ) {
278- assert ! ( !is_uppercase ( 'h' ) ) ;
279- assert ! ( !is_uppercase ( 'ä' ) ) ;
280- assert ! ( !is_uppercase ( 'ß' ) ) ;
281- assert ! ( is_uppercase ( 'Ö' ) ) ;
282- assert ! ( is_uppercase ( 'T' ) ) ;
325+ assert ! ( !'h' . is_uppercase ( ) ) ;
326+ assert ! ( !'ä' . is_uppercase ( ) ) ;
327+ assert ! ( !'ß' . is_uppercase ( ) ) ;
328+ assert ! ( 'Ö' . is_uppercase ( ) ) ;
329+ assert ! ( 'T' . is_uppercase ( ) ) ;
283330}
284331
285332#[ test]
286333fn test_is_whitespace ( ) {
287- assert ! ( is_whitespace( ' ' ) ) ;
288- assert ! ( is_whitespace( '\u2007' ) ) ;
289- assert ! ( is_whitespace( '\t' ) ) ;
290- assert ! ( is_whitespace( '\n' ) ) ;
291-
292- assert ! ( !is_whitespace( 'a' ) ) ;
293- assert ! ( !is_whitespace( '_' ) ) ;
294- assert ! ( !is_whitespace( '\u0000' ) ) ;
334+ assert ! ( ' ' . is_whitespace( ) ) ;
335+ assert ! ( '\u2007' . is_whitespace( ) ) ;
336+ assert ! ( '\t' . is_whitespace( ) ) ;
337+ assert ! ( '\n' . is_whitespace( ) ) ;
338+ assert ! ( !'a' . is_whitespace( ) ) ;
339+ assert ! ( !'_' . is_whitespace( ) ) ;
340+ assert ! ( !'\u0000' . is_whitespace( ) ) ;
295341}
296342
297343#[ test]
298344fn test_to_digit ( ) {
299- assert_eq ! ( to_digit( '0' , 10 u) , Some ( 0 u) ) ;
300- assert_eq ! ( to_digit( '1' , 2 u) , Some ( 1 u) ) ;
301- assert_eq ! ( to_digit( '2' , 3 u) , Some ( 2 u) ) ;
302- assert_eq ! ( to_digit( '9' , 10 u) , Some ( 9 u) ) ;
303- assert_eq ! ( to_digit( 'a' , 16 u) , Some ( 10 u) ) ;
304- assert_eq ! ( to_digit( 'A' , 16 u) , Some ( 10 u) ) ;
305- assert_eq ! ( to_digit( 'b' , 16 u) , Some ( 11 u) ) ;
306- assert_eq ! ( to_digit( 'B' , 16 u) , Some ( 11 u) ) ;
307- assert_eq ! ( to_digit( 'z' , 36 u) , Some ( 35 u) ) ;
308- assert_eq ! ( to_digit( 'Z' , 36 u) , Some ( 35 u) ) ;
309-
310- assert ! ( to_digit( ' ' , 10 u) . is_none( ) ) ;
311- assert ! ( to_digit( '$' , 36 u) . is_none( ) ) ;
345+ assert_eq ! ( '0' . to_digit( 10 u) , Some ( 0 u) ) ;
346+ assert_eq ! ( '1' . to_digit( 2 u) , Some ( 1 u) ) ;
347+ assert_eq ! ( '2' . to_digit( 3 u) , Some ( 2 u) ) ;
348+ assert_eq ! ( '9' . to_digit( 10 u) , Some ( 9 u) ) ;
349+ assert_eq ! ( 'a' . to_digit( 16 u) , Some ( 10 u) ) ;
350+ assert_eq ! ( 'A' . to_digit( 16 u) , Some ( 10 u) ) ;
351+ assert_eq ! ( 'b' . to_digit( 16 u) , Some ( 11 u) ) ;
352+ assert_eq ! ( 'B' . to_digit( 16 u) , Some ( 11 u) ) ;
353+ assert_eq ! ( 'z' . to_digit( 36 u) , Some ( 35 u) ) ;
354+ assert_eq ! ( 'Z' . to_digit( 36 u) , Some ( 35 u) ) ;
355+ assert_eq ! ( ' ' . to_digit( 10 u) , None ) ;
356+ assert_eq ! ( '$' . to_digit( 36 u) , None ) ;
312357}
313358
314359#[ test]
315360fn test_is_digit ( ) {
316- assert ! ( is_digit ( '2' ) ) ;
317- assert ! ( is_digit ( '7' ) ) ;
318- assert ! ( ! is_digit ( 'c' ) ) ;
319- assert ! ( ! is_digit ( 'i' ) ) ;
320- assert ! ( ! is_digit ( 'z' ) ) ;
321- assert ! ( ! is_digit ( 'Q' ) ) ;
361+ assert ! ( '2' . is_digit ( ) ) ;
362+ assert ! ( '7' . is_digit ( ) ) ;
363+ assert ! ( !'c' . is_digit ( ) ) ;
364+ assert ! ( !'i' . is_digit ( ) ) ;
365+ assert ! ( !'z' . is_digit ( ) ) ;
366+ assert ! ( !'Q' . is_digit ( ) ) ;
322367}
323368
324369#[ test]
325370fn test_escape_default ( ) {
326- assert_eq ! ( escape_default ( '\n' ) , ~"\\ n");
327- assert_eq!(escape_default( '\r '), ~" \\ r");
328- assert_eq!(escape_default( '\''), ~" \\ ' ");
329- assert_eq!(escape_default( '" ' ) , ~"\\ \" ") ;
330- assert_eq ! ( escape_default ( ' ' ) , ~" ");
331- assert_eq!(escape_default( 'a'), ~" a");
332- assert_eq!(escape_default( '~'), ~" ~") ;
333- assert_eq ! ( escape_default ( '\x00' ) , ~"\\ x00");
334- assert_eq!(escape_default( '\x1f '), ~" \\ x1f");
335- assert_eq!(escape_default( '\x7f '), ~" \\ x7f");
336- assert_eq!(escape_default( '\xff '), ~" \\ xff");
337- assert_eq!(escape_default( '\u011b '), ~" \\ u011b");
338- assert_eq!(escape_default( '\U 0001d4b6'), ~" \\ U0001d4b6 ");
371+ assert_eq ! ( '\n' . escape_default ( ) , ~"\\ n");
372+ assert_eq!('\r '.escape_default( ), ~" \\ r");
373+ assert_eq!('\''.escape_default( ), ~" \\ ' ");
374+ assert_eq!('" ' . escape_default ( ) , ~"\\ \" ") ;
375+ assert_eq ! ( ' ' . escape_default ( ) , ~" ");
376+ assert_eq!('a'.escape_default( ), ~" a");
377+ assert_eq!('~'.escape_default( ), ~" ~") ;
378+ assert_eq ! ( '\x00' . escape_default ( ) , ~"\\ x00");
379+ assert_eq!('\x1f '.escape_default( ), ~" \\ x1f");
380+ assert_eq!('\x7f '.escape_default( ), ~" \\ x7f");
381+ assert_eq!('\xff '.escape_default( ), ~" \\ xff");
382+ assert_eq!('\u011b '.escape_default( ), ~" \\ u011b");
383+ assert_eq!('\U 0001d4b6'.escape_default( ), ~" \\ U0001d4b6 ");
339384}
340385
341386#[test]
342387fn test_escape_unicode() {
343- assert_eq!(escape_unicode( '\x00 '), ~" \\ x00");
344- assert_eq!(escape_unicode( '\n '), ~" \\ x0a");
345- assert_eq!(escape_unicode( ' '), ~" \\ x20");
346- assert_eq!(escape_unicode( 'a'), ~" \\ x61");
347- assert_eq!(escape_unicode( '\u011b '), ~" \\ u011b");
348- assert_eq!(escape_unicode( '\U 0001d4b6'), ~"\\ U0001d4b6" ) ;
388+ assert_eq!('\x00 '.escape_unicode( ), ~" \\ x00");
389+ assert_eq!('\n '.escape_unicode( ), ~" \\ x0a");
390+ assert_eq!(' '.escape_unicode( ), ~" \\ x20");
391+ assert_eq!('a'.escape_unicode( ), ~" \\ x61");
392+ assert_eq!('\u011b '.escape_unicode( ), ~" \\ u011b");
393+ assert_eq!('\U 0001d4b6'.escape_unicode( ), ~"\\ U0001d4b6" ) ;
349394}
0 commit comments