OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 /** | 5 /** |
6 * Decodes the UTF-32 bytes as an iterable. Thus, the consumer can only convert | 6 * Decodes the UTF-32 bytes as an iterable. Thus, the consumer can only convert |
7 * as much of the input as needed. Determines the byte order from the BOM, | 7 * as much of the input as needed. Determines the byte order from the BOM, |
8 * or uses big-endian as a default. This method always strips a leading BOM. | 8 * or uses big-endian as a default. This method always strips a leading BOM. |
9 * Set the replacementCharacter to null to throw an ArgumentError | 9 * Set the replacementCharacter to null to throw an ArgumentError |
10 * rather than replace the bad value. | 10 * rather than replace the bad value. |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 * bytes with a big-endian byte-order-marker. | 89 * bytes with a big-endian byte-order-marker. |
90 */ | 90 */ |
91 List<int> encodeUtf32(String str) => | 91 List<int> encodeUtf32(String str) => |
92 encodeUtf32be(str, true); | 92 encodeUtf32be(str, true); |
93 | 93 |
94 /** | 94 /** |
95 * Produce a list of UTF-32BE encoded bytes. By default, this method produces | 95 * Produce a list of UTF-32BE encoded bytes. By default, this method produces |
96 * UTF-32BE bytes with no BOM. | 96 * UTF-32BE bytes with no BOM. |
97 */ | 97 */ |
98 List<int> encodeUtf32be(String str, [bool writeBOM = false]) { | 98 List<int> encodeUtf32be(String str, [bool writeBOM = false]) { |
99 List<int> utf32CodeUnits = str.charCodes(); | 99 List<int> utf32CodeUnits = stringToCodepoints(str); |
100 List<int> encoding = new List<int>(4 * utf32CodeUnits.length + | 100 List<int> encoding = new List<int>(4 * utf32CodeUnits.length + |
101 (writeBOM ? 4 : 0)); | 101 (writeBOM ? 4 : 0)); |
102 int i = 0; | 102 int i = 0; |
103 if (writeBOM) { | 103 if (writeBOM) { |
104 encoding[i++] = 0; | 104 encoding[i++] = 0; |
105 encoding[i++] = 0; | 105 encoding[i++] = 0; |
106 encoding[i++] = UNICODE_UTF_BOM_HI; | 106 encoding[i++] = UNICODE_UTF_BOM_HI; |
107 encoding[i++] = UNICODE_UTF_BOM_LO; | 107 encoding[i++] = UNICODE_UTF_BOM_LO; |
108 } | 108 } |
109 for (int unit in utf32CodeUnits) { | 109 for (int unit in utf32CodeUnits) { |
110 encoding[i++] = (unit >> 24) & UNICODE_BYTE_ZERO_MASK; | 110 encoding[i++] = (unit >> 24) & UNICODE_BYTE_ZERO_MASK; |
111 encoding[i++] = (unit >> 16) & UNICODE_BYTE_ZERO_MASK; | 111 encoding[i++] = (unit >> 16) & UNICODE_BYTE_ZERO_MASK; |
112 encoding[i++] = (unit >> 8) & UNICODE_BYTE_ZERO_MASK; | 112 encoding[i++] = (unit >> 8) & UNICODE_BYTE_ZERO_MASK; |
113 encoding[i++] = unit & UNICODE_BYTE_ZERO_MASK; | 113 encoding[i++] = unit & UNICODE_BYTE_ZERO_MASK; |
114 } | 114 } |
115 return encoding; | 115 return encoding; |
116 } | 116 } |
117 | 117 |
118 /** | 118 /** |
119 * Produce a list of UTF-32LE encoded bytes. By default, this method produces | 119 * Produce a list of UTF-32LE encoded bytes. By default, this method produces |
120 * UTF-32BE bytes with no BOM. | 120 * UTF-32BE bytes with no BOM. |
121 */ | 121 */ |
122 List<int> encodeUtf32le(String str, [bool writeBOM = false]) { | 122 List<int> encodeUtf32le(String str, [bool writeBOM = false]) { |
123 List<int> utf32CodeUnits = str.charCodes(); | 123 List<int> utf32CodeUnits = stringToCodepoints(str); |
124 List<int> encoding = new List<int>(4 * utf32CodeUnits.length + | 124 List<int> encoding = new List<int>(4 * utf32CodeUnits.length + |
125 (writeBOM ? 4 : 0)); | 125 (writeBOM ? 4 : 0)); |
126 int i = 0; | 126 int i = 0; |
127 if (writeBOM) { | 127 if (writeBOM) { |
128 encoding[i++] = UNICODE_UTF_BOM_LO; | 128 encoding[i++] = UNICODE_UTF_BOM_LO; |
129 encoding[i++] = UNICODE_UTF_BOM_HI; | 129 encoding[i++] = UNICODE_UTF_BOM_HI; |
130 encoding[i++] = 0; | 130 encoding[i++] = 0; |
131 encoding[i++] = 0; | 131 encoding[i++] = 0; |
132 } | 132 } |
133 for (int unit in utf32CodeUnits) { | 133 for (int unit in utf32CodeUnits) { |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 value += (utf32EncodedBytesIterator.next() << 24); | 310 value += (utf32EncodedBytesIterator.next() << 24); |
311 return value; | 311 return value; |
312 } | 312 } |
313 } | 313 } |
314 | 314 |
315 bool _validCodepoint(int codepoint) { | 315 bool _validCodepoint(int codepoint) { |
316 return (codepoint >= 0 && codepoint < UNICODE_UTF16_RESERVED_LO) || | 316 return (codepoint >= 0 && codepoint < UNICODE_UTF16_RESERVED_LO) || |
317 (codepoint > UNICODE_UTF16_RESERVED_HI && | 317 (codepoint > UNICODE_UTF16_RESERVED_HI && |
318 codepoint < UNICODE_VALID_RANGE_MAX); | 318 codepoint < UNICODE_VALID_RANGE_MAX); |
319 } | 319 } |
OLD | NEW |