| Index: pkg/utf/lib/src/utf/utf16.dart
|
| diff --git a/pkg/utf/lib/utf16.dart b/pkg/utf/lib/src/utf/utf16.dart
|
| similarity index 69%
|
| rename from pkg/utf/lib/utf16.dart
|
| rename to pkg/utf/lib/src/utf/utf16.dart
|
| index 438c6781a74fa78ba0944e683e5c7c3fd308c1f8..8ddd4ddc3e467e1442970e41bb649233b65d77be 100644
|
| --- a/pkg/utf/lib/utf16.dart
|
| +++ b/pkg/utf/lib/src/utf/utf16.dart
|
| @@ -11,7 +11,7 @@ part of utf;
|
| List<int> stringToCodepoints(String str) {
|
| // Note: str.codeUnits gives us 16-bit code units on all Dart implementations.
|
| // So we need to convert.
|
| - return _utf16CodeUnitsToCodepoints(str.codeUnits);
|
| + return utf16CodeUnitsToCodepoints(str.codeUnits);
|
| }
|
|
|
| /**
|
| @@ -19,152 +19,10 @@ List<int> stringToCodepoints(String str) {
|
| *
|
| * *Deprecated* Use [String.fromCharCodes] instead.
|
| */
|
| +@deprecated
|
| String codepointsToString(List<int> codepoints) {
|
| return new String.fromCharCodes(codepoints);
|
| }
|
| -
|
| -/**
|
| - * An Iterator<int> of codepoints built on an Iterator of UTF-16 code units.
|
| - * The parameters can override the default Unicode replacement character. Set
|
| - * the replacementCharacter to null to throw an ArgumentError
|
| - * rather than replace the bad value.
|
| - */
|
| -class Utf16CodeUnitDecoder implements Iterator<int> {
|
| - final _ListRangeIterator utf16CodeUnitIterator;
|
| - final int replacementCodepoint;
|
| - int _current = null;
|
| -
|
| - Utf16CodeUnitDecoder(List<int> utf16CodeUnits, [int offset = 0, int length,
|
| - int this.replacementCodepoint =
|
| - UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) :
|
| - utf16CodeUnitIterator =
|
| - (new _ListRange(utf16CodeUnits, offset, length)).iterator;
|
| -
|
| - Utf16CodeUnitDecoder.fromListRangeIterator(
|
| - _ListRangeIterator this.utf16CodeUnitIterator,
|
| - int this.replacementCodepoint);
|
| -
|
| - Iterator<int> get iterator => this;
|
| -
|
| - int get current => _current;
|
| -
|
| - bool moveNext() {
|
| - _current = null;
|
| - if (!utf16CodeUnitIterator.moveNext()) return false;
|
| -
|
| - int value = utf16CodeUnitIterator.current;
|
| - if (value < 0) {
|
| - if (replacementCodepoint != null) {
|
| - _current = replacementCodepoint;
|
| - } else {
|
| - throw new ArgumentError(
|
| - "Invalid UTF16 at ${utf16CodeUnitIterator.position}");
|
| - }
|
| - } else if (value < UNICODE_UTF16_RESERVED_LO ||
|
| - (value > UNICODE_UTF16_RESERVED_HI && value <= UNICODE_PLANE_ONE_MAX)) {
|
| - // transfer directly
|
| - _current = value;
|
| - } else if (value < UNICODE_UTF16_SURROGATE_UNIT_1_BASE &&
|
| - utf16CodeUnitIterator.moveNext()) {
|
| - // merge surrogate pair
|
| - int nextValue = utf16CodeUnitIterator.current;
|
| - if (nextValue >= UNICODE_UTF16_SURROGATE_UNIT_1_BASE &&
|
| - nextValue <= UNICODE_UTF16_RESERVED_HI) {
|
| - value = (value - UNICODE_UTF16_SURROGATE_UNIT_0_BASE) << 10;
|
| - value += UNICODE_UTF16_OFFSET +
|
| - (nextValue - UNICODE_UTF16_SURROGATE_UNIT_1_BASE);
|
| - _current = value;
|
| - } else {
|
| - if (nextValue >= UNICODE_UTF16_SURROGATE_UNIT_0_BASE &&
|
| - nextValue < UNICODE_UTF16_SURROGATE_UNIT_1_BASE) {
|
| - utf16CodeUnitIterator.backup();
|
| - }
|
| - if (replacementCodepoint != null) {
|
| - _current = replacementCodepoint;
|
| - } else {
|
| - throw new ArgumentError(
|
| - "Invalid UTF16 at ${utf16CodeUnitIterator.position}");
|
| - }
|
| - }
|
| - } else if (replacementCodepoint != null) {
|
| - _current = replacementCodepoint;
|
| - } else {
|
| - throw new ArgumentError(
|
| - "Invalid UTF16 at ${utf16CodeUnitIterator.position}");
|
| - }
|
| - return true;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Encode code points as UTF16 code units.
|
| - */
|
| -List<int> _codepointsToUtf16CodeUnits(
|
| - List<int> codepoints,
|
| - [int offset = 0,
|
| - int length,
|
| - int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
|
| -
|
| - _ListRange listRange = new _ListRange(codepoints, offset, length);
|
| - int encodedLength = 0;
|
| - for (int value in listRange) {
|
| - if ((value >= 0 && value < UNICODE_UTF16_RESERVED_LO) ||
|
| - (value > UNICODE_UTF16_RESERVED_HI && value <= UNICODE_PLANE_ONE_MAX)) {
|
| - encodedLength++;
|
| - } else if (value > UNICODE_PLANE_ONE_MAX &&
|
| - value <= UNICODE_VALID_RANGE_MAX) {
|
| - encodedLength += 2;
|
| - } else {
|
| - encodedLength++;
|
| - }
|
| - }
|
| -
|
| - List<int> codeUnitsBuffer = new List<int>(encodedLength);
|
| - int j = 0;
|
| - for (int value in listRange) {
|
| - if ((value >= 0 && value < UNICODE_UTF16_RESERVED_LO) ||
|
| - (value > UNICODE_UTF16_RESERVED_HI && value <= UNICODE_PLANE_ONE_MAX)) {
|
| - codeUnitsBuffer[j++] = value;
|
| - } else if (value > UNICODE_PLANE_ONE_MAX &&
|
| - value <= UNICODE_VALID_RANGE_MAX) {
|
| - int base = value - UNICODE_UTF16_OFFSET;
|
| - codeUnitsBuffer[j++] = UNICODE_UTF16_SURROGATE_UNIT_0_BASE +
|
| - ((base & UNICODE_UTF16_HI_MASK) >> 10);
|
| - codeUnitsBuffer[j++] = UNICODE_UTF16_SURROGATE_UNIT_1_BASE +
|
| - (base & UNICODE_UTF16_LO_MASK);
|
| - } else if (replacementCodepoint != null) {
|
| - codeUnitsBuffer[j++] = replacementCodepoint;
|
| - } else {
|
| - throw new ArgumentError("Invalid encoding");
|
| - }
|
| - }
|
| - return codeUnitsBuffer;
|
| -}
|
| -
|
| -/**
|
| - * Decodes the utf16 codeunits to codepoints.
|
| - */
|
| -List<int> _utf16CodeUnitsToCodepoints(
|
| - List<int> utf16CodeUnits, [int offset = 0, int length,
|
| - int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) {
|
| - _ListRangeIterator source =
|
| - (new _ListRange(utf16CodeUnits, offset, length)).iterator;
|
| - Utf16CodeUnitDecoder decoder = new Utf16CodeUnitDecoder
|
| - .fromListRangeIterator(source, replacementCodepoint);
|
| - List<int> codepoints = new List<int>(source.remaining);
|
| - int i = 0;
|
| - while (decoder.moveNext()) {
|
| - codepoints[i++] = decoder.current;
|
| - }
|
| - if (i == codepoints.length) {
|
| - return codepoints;
|
| - } else {
|
| - List<int> codepointTrunc = new List<int>(i);
|
| - codepointTrunc.setRange(0, i, codepoints);
|
| - return codepointTrunc;
|
| - }
|
| -}
|
| -
|
| /**
|
| * Decodes the UTF-16 bytes as an iterable. Thus, the consumer can only convert
|
| * as much of the input as needed. Determines the byte order from the BOM,
|
| @@ -225,7 +83,7 @@ String decodeUtf16(List<int> bytes, [int offset = 0, int length,
|
| offset, length, replacementCodepoint);
|
| List<int> codeunits = decoder.decodeRest();
|
| return new String.fromCharCodes(
|
| - _utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
|
| + utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
|
| }
|
|
|
| /**
|
| @@ -241,7 +99,7 @@ String decodeUtf16be(List<int> bytes, [int offset = 0, int length,
|
| List<int> codeunits = (new Utf16beBytesToCodeUnitsDecoder(bytes, offset,
|
| length, stripBom, replacementCodepoint)).decodeRest();
|
| return new String.fromCharCodes(
|
| - _utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
|
| + utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
|
| }
|
|
|
| /**
|
| @@ -257,7 +115,7 @@ String decodeUtf16le(List<int> bytes, [int offset = 0, int length,
|
| List<int> codeunits = (new Utf16leBytesToCodeUnitsDecoder(bytes, offset,
|
| length, stripBom, replacementCodepoint)).decodeRest();
|
| return new String.fromCharCodes(
|
| - _utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
|
| + utf16CodeUnitsToCodepoints(codeunits, 0, null, replacementCodepoint));
|
| }
|
|
|
| /**
|
| @@ -339,10 +197,10 @@ bool hasUtf16leBom(List<int> utf16EncodedBytes, [int offset = 0, int length]) {
|
| }
|
|
|
| List<int> _stringToUtf16CodeUnits(String str) {
|
| - return _codepointsToUtf16CodeUnits(str.codeUnits);
|
| + return codepointsToUtf16CodeUnits(str.codeUnits);
|
| }
|
|
|
| -typedef _ListRangeIterator _CodeUnitsProvider();
|
| +typedef ListRangeIterator _CodeUnitsProvider();
|
|
|
| /**
|
| * Return type of [decodeUtf16AsIterable] and variants. The Iterable type
|
| @@ -367,8 +225,9 @@ class IterableUtf16Decoder extends IterableBase<int> {
|
| * to produce the code unit (0-(2^16)-1). Relies on BOM to determine
|
| * endian-ness, and defaults to BE.
|
| */
|
| -abstract class Utf16BytesToCodeUnitsDecoder implements _ListRangeIterator {
|
| - final _ListRangeIterator utf16EncodedBytesIterator;
|
| +abstract class Utf16BytesToCodeUnitsDecoder implements ListRangeIterator {
|
| + // TODO(kevmoo): should this field be private?
|
| + final ListRangeIterator utf16EncodedBytesIterator;
|
| final int replacementCodepoint;
|
| int _current = null;
|
|
|
| @@ -460,7 +319,7 @@ class Utf16beBytesToCodeUnitsDecoder extends Utf16BytesToCodeUnitsDecoder {
|
| int offset = 0, int length, bool stripBom = true,
|
| int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) :
|
| super._fromListRangeIterator(
|
| - (new _ListRange(utf16EncodedBytes, offset, length)).iterator,
|
| + (new ListRange(utf16EncodedBytes, offset, length)).iterator,
|
| replacementCodepoint) {
|
| if (stripBom && hasUtf16beBom(utf16EncodedBytes, offset, length)) {
|
| skip();
|
| @@ -485,7 +344,7 @@ class Utf16leBytesToCodeUnitsDecoder extends Utf16BytesToCodeUnitsDecoder {
|
| int offset = 0, int length, bool stripBom = true,
|
| int replacementCodepoint = UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]) :
|
| super._fromListRangeIterator(
|
| - (new _ListRange(utf16EncodedBytes, offset, length)).iterator,
|
| + (new ListRange(utf16EncodedBytes, offset, length)).iterator,
|
| replacementCodepoint) {
|
| if (stripBom && hasUtf16leBom(utf16EncodedBytes, offset, length)) {
|
| skip();
|
|
|