Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(467)

Side by Side Diff: sdk/lib/codec/encoding.dart

Issue 19187002: Replace old utf8 decoder with new one. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add comments. Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | sdk/lib/convert/utf.dart » ('j') | sdk/lib/convert/utf.dart » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.codec; 5 part of dart.codec;
6 6
7 /** 7 /**
8 * Open-ended Encoding enum. 8 * Open-ended Encoding enum.
9 */ 9 */
10 // TODO(floitsch): dart:io already has an Encoding class. If we can't 10 // TODO(floitsch): dart:io already has an Encoding class. If we can't
11 // consolitate them, we need to remove `Encoding` here. 11 // consolitate them, we need to remove `Encoding` here.
12 abstract class Encoding extends Codec<String, List<int>> { 12 abstract class Encoding extends Codec<String, List<int>> {
13 const Encoding(); 13 const Encoding();
14 } 14 }
15 15
16 // TODO(floitsch): add other encodings, like ASCII and ISO_8859_1. 16 // TODO(floitsch): add other encodings, like ASCII and ISO_8859_1.
17 const UTF8 = const Utf8Codec(); 17 const UTF8 = const Utf8Codec();
18 18
19 /** 19 /**
20 * A [Utf8Codec] encodes strings to utf-8 code units (bytes) and decodes 20 * A [Utf8Codec] encodes strings to utf-8 code units (bytes) and decodes
21 * UTF-8 code units to strings. 21 * UTF-8 code units to strings.
22 */ 22 */
23 // TODO(floitsch): Needs a way to specify if decoding should throw or use
24 // the replacement character.
25 class Utf8Codec extends Encoding { 23 class Utf8Codec extends Encoding {
26 const Utf8Codec(); 24 final bool _allowMalformed;
25
26 /**
27 * Instantiates a new [Utf8Codec].
28 *
29 * The optional [allowMalformed] argument defines how [decode] and [decoder]
30 * deal with invalid or unterminated character sequences.
31 *
32 * If it is `true` (and not overriden at the method invocation) [decode] and
33 * the [decoder] replace invalid (or unterminated) character
Lasse Reichstein Nielsen 2013/07/16 12:23:03 character sequences -> octet sequences Actually,
floitsch 2013/07/16 14:25:24 As discussed: the sentence before says that it onl
34 * sequences with the Unicode Replacement character `0xFFFD` (�). Otherwise
Lasse Reichstein Nielsen 2013/07/16 12:23:03 '0xFFFD' -> U+FFFD
floitsch 2013/07/16 14:25:24 Done.
35 * they throw a [FormatException].
36 */
37 const Utf8Codec({ bool allowMalformed: false })
38 : _allowMalformed = allowMalformed;
39
40 /**
41 * Decodes the UTF-8 [codeUnits] (a list of unsigned 8-bit integers) to the
42 * corresponding string.
43 *
44 * If [allowMalformed] is `true` replaces invalid (or unterminated) character
Lasse Reichstein Nielsen 2013/07/16 12:23:03 ... is `true`, the decoder replaces ...
floitsch 2013/07/16 14:25:24 Done.
45 * sequences with the Unicode Replacement character `0xFFFD` (�). Otherwise
Lasse Reichstein Nielsen 2013/07/16 12:23:03 U+FFFD
floitsch 2013/07/16 14:25:24 Done.
46 * throws a [FormatException].
Lasse Reichstein Nielsen 2013/07/16 12:23:03 Otherwise it throws ...
floitsch 2013/07/16 14:25:24 Done.
47 *
48 * If [allowMalformed] is not given, defaults to the `allowMalformed` that
Lasse Reichstein Nielsen 2013/07/16 12:23:03 'it' after comma.
floitsch 2013/07/16 14:25:24 Done.
49 * was used to instantiate `this`.
50 */
51 String decode(List<int> codeUnits, { bool allowMalformed }) {
52 if (allowMalformed == null) allowMalformed = _allowMalformed;
53 return new Utf8Decoder(allowMalformed: allowMalformed).convert(codeUnits);
54 }
27 55
28 Converter<String, List<int>> get encoder => new Utf8Encoder(); 56 Converter<String, List<int>> get encoder => new Utf8Encoder();
29 Converter<List<int>, String> get decoder => new Utf8Decoder(); 57 Converter<List<int>, String> get decoder {
58 return new Utf8Decoder(allowMalformed: _allowMalformed);
59 }
30 } 60 }
OLDNEW
« no previous file with comments | « no previous file | sdk/lib/convert/utf.dart » ('j') | sdk/lib/convert/utf.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698