equal
deleted
inserted
replaced
75 else if ((c & 0xF0) == 0xE0) init(c & 0x0F, 2) |
75 else if ((c & 0xF0) == 0xE0) init(c & 0x0F, 2) |
76 else if ((c & 0xF8) == 0xF0) init(c & 0x07, 3) |
76 else if ((c & 0xF8) == 0xF0) init(c & 0x07, 3) |
77 } |
77 } |
78 flush() |
78 flush() |
79 buf.toString |
79 buf.toString |
|
80 } |
|
81 |
|
82 private class Decode_Chars(decode: String => String, |
|
83 buffer: Array[Byte], start: Int, end: Int) extends CharSequence |
|
84 { |
|
85 def length: Int = end - start |
|
86 def charAt(i: Int): Char = (buffer(start + i).asInstanceOf[Int] & 0xFF).asInstanceOf[Char] |
|
87 def subSequence(i: Int, j: Int): CharSequence = |
|
88 new Decode_Chars(decode, buffer, start + i, start + j) |
|
89 |
|
90 // toString with adhoc decoding: abuse of CharSequence interface |
|
91 override def toString: String = decode(decode_permissive_utf8(this)) |
|
92 } |
|
93 |
|
94 def decode_chars(decode: String => String, |
|
95 buffer: Array[Byte], start: Int, end: Int): CharSequence = |
|
96 { |
|
97 require(0 <= start && start <= end && end <= buffer.length) |
|
98 new Decode_Chars(decode, buffer, start, end) |
80 } |
99 } |
81 |
100 |
82 |
101 |
83 /* basic file operations */ |
102 /* basic file operations */ |
84 |
103 |