| Index: sdk/lib/convert/encoding.dart
|
| diff --git a/sdk/lib/convert/encoding.dart b/sdk/lib/convert/encoding.dart
|
| index 0f6126c25130921fea8c5d9e1a63eccf1b9023dc..cc67f6f176c54eaa237cb733b37e105b99ba6ca1 100644
|
| --- a/sdk/lib/convert/encoding.dart
|
| +++ b/sdk/lib/convert/encoding.dart
|
| @@ -7,13 +7,70 @@ part of dart.convert;
|
| /**
|
| * Open-ended Encoding enum.
|
| */
|
| -// TODO(floitsch): dart:io already has an Encoding class. If we can't
|
| -// consolitate them, we need to remove `Encoding` here.
|
| -abstract class _Encoding extends Codec<String, List<int>> {
|
| - const _Encoding();
|
| +abstract class Encoding extends Codec<String, List<int>> {
|
| + const Encoding();
|
|
|
| - // TODO(floitsch): should we introduce a StringToByteEncoder and
|
| - // a ByteToStringDecoder so that we have better typing?
|
| -}
|
| + Future<String> decodeStream(Stream<List<int>> byteStream) {
|
| + return byteStream
|
| + .transform(decoder)
|
| + .fold(new StringBuffer(), (buffer, string) => buffer..write(string))
|
| + .then((buffer) => buffer.toString());
|
| + }
|
| +
|
| + /**
|
| + * Name of the encoding.
|
| + *
|
| + * If the encoding is standardized, this is the lower-case version of one of
|
| + * the IANA official names for the character set (see
|
| + * http://www.iana.org/assignments/character-sets/character-sets.xml)
|
| + */
|
| + String get name;
|
| +
|
| + // All aliases (in lowercase) of supported encoding from
|
| + // http://www.iana.org/assignments/character-sets/character-sets.xml.
|
| + static Map<String, Encoding> _nameToEncoding = <String, Encoding> {
|
| + // ISO_8859-1:1987.
|
| + "iso_8859-1:1987": LATIN1,
|
| + "iso-ir-100": LATIN1,
|
| + "iso_8859-1": LATIN1,
|
| + "iso-8859-1": LATIN1,
|
| + "latin1": LATIN1,
|
| + "l1": LATIN1,
|
| + "ibm819": LATIN1,
|
| + "cp819": LATIN1,
|
| + "csisolatin1": LATIN1,
|
|
|
| -// TODO(floitsch): add other encodings, like ASCII and ISO_8859_1.
|
| + // US-ASCII.
|
| + "iso-ir-6": ASCII,
|
| + "ansi_x3.4-1968": ASCII,
|
| + "ansi_x3.4-1986": ASCII,
|
| + "iso_646.irv:1991": ASCII,
|
| + "iso646-us": ASCII,
|
| + "us-ascii": ASCII,
|
| + "us": ASCII,
|
| + "ibm367": ASCII,
|
| + "cp367": ASCII,
|
| + "csascii": ASCII,
|
| + "ascii": ASCII, // This is not in the IANA official names.
|
| +
|
| + // UTF-8.
|
| + "csutf8": UTF8,
|
| + "utf-8": UTF8
|
| + };
|
| +
|
| + /**
|
| + * Gets an [Encoding] object from the name of the character set
|
| + * name. The names used are the IANA official names for the
|
| + * character set (see
|
| + * http://www.iana.org/assignments/character-sets/character-sets.xml).
|
| + *
|
| + * The [name] passed is case insensitive.
|
| + *
|
| + * If character set is not supported [:null:] is returned.
|
| + */
|
| + static Encoding getByName(String name) {
|
| + if (name == null) return null;
|
| + name = name.toLowerCase();
|
| + return _nameToEncoding[name];
|
| + }
|
| +}
|
|
|