equal
deleted
inserted
replaced
19 val charset: Charset = Charset.forName(charset_name) |
19 val charset: Charset = Charset.forName(charset_name) |
20 def codec(): Codec = Codec(charset) |
20 def codec(): Codec = Codec(charset) |
21 |
21 |
22 def bytes(s: String): Array[Byte] = s.getBytes(charset) |
22 def bytes(s: String): Array[Byte] = s.getBytes(charset) |
23 |
23 |
24 def bytes_length(s: String): Int = |
24 object Length extends Codepoint.Length |
25 (0 /: Codepoint.iterator(s)) { |
25 { |
26 case (n, i) => |
26 override def codepoint_length(c: Int): Int = |
27 if (i < 0x80) n + 1 |
27 if (c < 0x80) 1 |
28 else if (i < 0x800) n + 2 |
28 else if (c < 0x800) 2 |
29 else if (i < 0x10000) n + 3 |
29 else if (c < 0x10000) 3 |
30 else n + 4 |
30 else 4 |
31 } |
31 } |
32 |
|
33 object Length extends Line.Length { def apply(s: String): Int = bytes_length(s) } |
|
34 |
32 |
35 |
33 |
36 /* permissive UTF-8 decoding */ |
34 /* permissive UTF-8 decoding */ |
37 |
35 |
38 // see also http://en.wikipedia.org/wiki/UTF-8#Description |
36 // see also http://en.wikipedia.org/wiki/UTF-8#Description |
97 { |
95 { |
98 require(0 <= start && start <= end && end <= buffer.length) |
96 require(0 <= start && start <= end && end <= buffer.length) |
99 new Decode_Chars(decode, buffer, start, end) |
97 new Decode_Chars(decode, buffer, start, end) |
100 } |
98 } |
101 } |
99 } |
102 |
|