@@ -43,36 +43,15 @@ fn preprocess(input: &str) -> String {
43
43
let bytes = input. as_bytes ( ) ;
44
44
let mut result: Vec < u8 > = Vec :: with_capacity ( bytes. len ( ) ) ;
45
45
let mut last: u8 = 0 ;
46
- let mut offset: uint = 0 ;
47
- while offset < bytes. len ( ) {
48
- let byte = bytes[ offset] ;
49
- match byte {
50
- b'\n' if last == b'\r' => ( ) ,
51
- b'\r' | b'\n' | b'\x0C' => result. push ( b'\n' ) ,
52
- b'\0' => result. push_all ( "\u{FFFD} " . as_bytes ( ) ) ,
53
- _ if byte < 128 => result. push ( byte) ,
54
- _ => {
55
- // Multi-byte character
56
- result. push ( byte) ;
57
- let remaining = bytes. len ( ) - offset;
58
- if remaining >= 3 && byte >= 0xF0 {
59
- result. push ( bytes[ offset + 1 ] ) ;
60
- result. push ( bytes[ offset + 2 ] ) ;
61
- result. push ( bytes[ offset + 3 ] ) ;
62
- offset += 3 ;
63
- } else if remaining >= 2 && byte >= 0xE0 {
64
- result. push ( bytes[ offset + 1 ] ) ;
65
- result. push ( bytes[ offset + 2 ] ) ;
66
- offset += 2 ;
67
- } else if remaining >= 1 && byte >= 0xC0 {
68
- result. push ( bytes[ offset + 1 ] ) ;
69
- offset += 1 ;
70
- }
71
- }
46
+ for byte in bytes. iter ( ) {
47
+ match * byte {
48
+ b'\n' if last == b'\r' => ( ) ,
49
+ b'\r' | b'\x0C' => result. push ( b'\n' ) ,
50
+ b'\0' => result. push_all ( "\u{FFFD} " . as_bytes ( ) ) ,
51
+ _ => result. push ( * byte) ,
72
52
}
73
53
74
- last = byte;
75
- offset += 1 ;
54
+ last = * byte;
76
55
}
77
56
78
57
unsafe { String :: from_utf8_unchecked ( result) }
0 commit comments