| Index: sdk/lib/_internal/compiler/js_lib/string_helper.dart
|
| diff --git a/sdk/lib/_internal/compiler/js_lib/string_helper.dart b/sdk/lib/_internal/compiler/js_lib/string_helper.dart
|
| deleted file mode 100644
|
| index 51b696bc708c5b5fb401cf72de21a19fb9a55553..0000000000000000000000000000000000000000
|
| --- a/sdk/lib/_internal/compiler/js_lib/string_helper.dart
|
| +++ /dev/null
|
| @@ -1,252 +0,0 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -part of _js_helper;
|
| -
|
| -stringIndexOfStringUnchecked(receiver, other, startIndex) {
|
| - return JS('int', '#.indexOf(#, #)', receiver, other, startIndex);
|
| -}
|
| -
|
| -substring1Unchecked(receiver, startIndex) {
|
| - return JS('String', '#.substring(#)', receiver, startIndex);
|
| -}
|
| -
|
| -substring2Unchecked(receiver, startIndex, endIndex) {
|
| - return JS('String', '#.substring(#, #)', receiver, startIndex, endIndex);
|
| -}
|
| -
|
| -stringContainsStringUnchecked(receiver, other, startIndex) {
|
| - return stringIndexOfStringUnchecked(receiver, other, startIndex) >= 0;
|
| -}
|
| -
|
| -class StringMatch implements Match {
|
| - const StringMatch(int this.start,
|
| - String this.input,
|
| - String this.pattern);
|
| -
|
| - int get end => start + pattern.length;
|
| - String operator[](int g) => group(g);
|
| - int get groupCount => 0;
|
| -
|
| - String group(int group_) {
|
| - if (group_ != 0) {
|
| - throw new RangeError.value(group_);
|
| - }
|
| - return pattern;
|
| - }
|
| -
|
| - List<String> groups(List<int> groups_) {
|
| - List<String> result = new List<String>();
|
| - for (int g in groups_) {
|
| - result.add(group(g));
|
| - }
|
| - return result;
|
| - }
|
| -
|
| - final int start;
|
| - final String input;
|
| - final String pattern;
|
| -}
|
| -
|
| -List<Match> allMatchesInStringUnchecked(String pattern, String string,
|
| - int startIndex) {
|
| - // Copied from StringBase.allMatches in
|
| - // /runtime/lib/string_base.dart
|
| - List<Match> result = new List<Match>();
|
| - int length = string.length;
|
| - int patternLength = pattern.length;
|
| - while (true) {
|
| - int position = stringIndexOfStringUnchecked(string, pattern, startIndex);
|
| - if (position == -1) {
|
| - break;
|
| - }
|
| - result.add(new StringMatch(position, string, pattern));
|
| - int endIndex = position + patternLength;
|
| - if (endIndex == length) {
|
| - break;
|
| - } else if (position == endIndex) {
|
| - ++startIndex; // empty match, advance and restart
|
| - } else {
|
| - startIndex = endIndex;
|
| - }
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -stringContainsUnchecked(receiver, other, startIndex) {
|
| - if (other is String) {
|
| - return stringContainsStringUnchecked(receiver, other, startIndex);
|
| - } else if (other is JSSyntaxRegExp) {
|
| - return other.hasMatch(receiver.substring(startIndex));
|
| - } else {
|
| - var substr = receiver.substring(startIndex);
|
| - return other.allMatches(substr).isNotEmpty;
|
| - }
|
| -}
|
| -
|
| -stringReplaceJS(receiver, replacer, replacement) {
|
| - // The JavaScript String.replace method recognizes replacement
|
| - // patterns in the replacement string. Dart does not have that
|
| - // behavior.
|
| - replacement = JS('String', r'#.replace(/\$/g, "$$$$")', replacement);
|
| - return JS('String', r'#.replace(#, #)', receiver, replacer, replacement);
|
| -}
|
| -
|
| -stringReplaceFirstRE(receiver, regexp, replacement, startIndex) {
|
| - var match = regexp._execGlobal(receiver, startIndex);
|
| - if (match == null) return receiver;
|
| - var start = match.start;
|
| - var end = match.end;
|
| - return stringReplaceRangeUnchecked(receiver, start, end, replacement);
|
| -}
|
| -
|
| -const String ESCAPE_REGEXP = r'[[\]{}()*+?.\\^$|]';
|
| -
|
| -stringReplaceAllUnchecked(receiver, pattern, replacement) {
|
| - checkString(replacement);
|
| - if (pattern is String) {
|
| - if (pattern == "") {
|
| - if (receiver == "") {
|
| - return replacement;
|
| - } else {
|
| - StringBuffer result = new StringBuffer();
|
| - int length = receiver.length;
|
| - result.write(replacement);
|
| - for (int i = 0; i < length; i++) {
|
| - result.write(receiver[i]);
|
| - result.write(replacement);
|
| - }
|
| - return result.toString();
|
| - }
|
| - } else {
|
| - var quoter = JS('', "new RegExp(#, 'g')", ESCAPE_REGEXP);
|
| - var quoted = JS('String', r'#.replace(#, "\\$&")', pattern, quoter);
|
| - var replacer = JS('', "new RegExp(#, 'g')", quoted);
|
| - return stringReplaceJS(receiver, replacer, replacement);
|
| - }
|
| - } else if (pattern is JSSyntaxRegExp) {
|
| - var re = regExpGetGlobalNative(pattern);
|
| - return stringReplaceJS(receiver, re, replacement);
|
| - } else {
|
| - checkNull(pattern);
|
| - // TODO(floitsch): implement generic String.replace (with patterns).
|
| - throw "String.replaceAll(Pattern) UNIMPLEMENTED";
|
| - }
|
| -}
|
| -
|
| -String _matchString(Match match) => match[0];
|
| -String _stringIdentity(String string) => string;
|
| -
|
| -stringReplaceAllFuncUnchecked(receiver, pattern, onMatch, onNonMatch) {
|
| - if (onMatch == null) onMatch = _matchString;
|
| - if (onNonMatch == null) onNonMatch = _stringIdentity;
|
| - if (pattern is String) {
|
| - return stringReplaceAllStringFuncUnchecked(receiver, pattern,
|
| - onMatch, onNonMatch);
|
| - }
|
| - // Placing the Pattern test here is indistingishable from placing it at the
|
| - // top of the method but it saves an extra check on the `pattern is String`
|
| - // path.
|
| - if (pattern is! Pattern) {
|
| - throw new ArgumentError.value(pattern, 'pattern', 'is not a Pattern');
|
| - }
|
| - StringBuffer buffer = new StringBuffer();
|
| - int startIndex = 0;
|
| - for (Match match in pattern.allMatches(receiver)) {
|
| - buffer.write(onNonMatch(receiver.substring(startIndex, match.start)));
|
| - buffer.write(onMatch(match));
|
| - startIndex = match.end;
|
| - }
|
| - buffer.write(onNonMatch(receiver.substring(startIndex)));
|
| - return buffer.toString();
|
| -}
|
| -
|
| -stringReplaceAllEmptyFuncUnchecked(receiver, onMatch, onNonMatch) {
|
| - // Pattern is the empty string.
|
| - StringBuffer buffer = new StringBuffer();
|
| - int length = receiver.length;
|
| - int i = 0;
|
| - buffer.write(onNonMatch(""));
|
| - while (i < length) {
|
| - buffer.write(onMatch(new StringMatch(i, receiver, "")));
|
| - // Special case to avoid splitting a surrogate pair.
|
| - int code = receiver.codeUnitAt(i);
|
| - if ((code & ~0x3FF) == 0xD800 && length > i + 1) {
|
| - // Leading surrogate;
|
| - code = receiver.codeUnitAt(i + 1);
|
| - if ((code & ~0x3FF) == 0xDC00) {
|
| - // Matching trailing surrogate.
|
| - buffer.write(onNonMatch(receiver.substring(i, i + 2)));
|
| - i += 2;
|
| - continue;
|
| - }
|
| - }
|
| - buffer.write(onNonMatch(receiver[i]));
|
| - i++;
|
| - }
|
| - buffer.write(onMatch(new StringMatch(i, receiver, "")));
|
| - buffer.write(onNonMatch(""));
|
| - return buffer.toString();
|
| -}
|
| -
|
| -stringReplaceAllStringFuncUnchecked(receiver, pattern, onMatch, onNonMatch) {
|
| - int patternLength = pattern.length;
|
| - if (patternLength == 0) {
|
| - return stringReplaceAllEmptyFuncUnchecked(receiver, onMatch, onNonMatch);
|
| - }
|
| - int length = receiver.length;
|
| - StringBuffer buffer = new StringBuffer();
|
| - int startIndex = 0;
|
| - while (startIndex < length) {
|
| - int position = stringIndexOfStringUnchecked(receiver, pattern, startIndex);
|
| - if (position == -1) {
|
| - break;
|
| - }
|
| - buffer.write(onNonMatch(receiver.substring(startIndex, position)));
|
| - buffer.write(onMatch(new StringMatch(position, receiver, pattern)));
|
| - startIndex = position + patternLength;
|
| - }
|
| - buffer.write(onNonMatch(receiver.substring(startIndex)));
|
| - return buffer.toString();
|
| -}
|
| -
|
| -
|
| -stringReplaceFirstUnchecked(receiver, pattern, replacement, int startIndex) {
|
| - if (pattern is String) {
|
| - int index = stringIndexOfStringUnchecked(receiver, pattern, startIndex);
|
| - if (index < 0) return receiver;
|
| - int end = index + pattern.length;
|
| - return stringReplaceRangeUnchecked(receiver, index, end, replacement);
|
| - }
|
| - if (pattern is JSSyntaxRegExp) {
|
| - return startIndex == 0
|
| - ? stringReplaceJS(receiver, regExpGetNative(pattern), replacement)
|
| - : stringReplaceFirstRE(receiver, pattern, replacement, startIndex);
|
| - }
|
| - checkNull(pattern);
|
| - Iterator<Match> matches = pattern.allMatches(receiver, startIndex).iterator;
|
| - if (!matches.moveNext()) return receiver;
|
| - Match match = matches.current;
|
| - return receiver.replaceRange(match.start, match.end, replacement);
|
| -}
|
| -
|
| -stringReplaceFirstMappedUnchecked(receiver, pattern, replace,
|
| - int startIndex) {
|
| - Iterator<Match> matches = pattern.allMatches(receiver, startIndex).iterator;
|
| - if (!matches.moveNext()) return receiver;
|
| - Match match = matches.current;
|
| - String replacement = "${replace(match)}";
|
| - return receiver.replaceRange(match.start, match.end, replacement);
|
| -}
|
| -
|
| -stringJoinUnchecked(array, separator) {
|
| - return JS('String', r'#.join(#)', array, separator);
|
| -}
|
| -
|
| -String stringReplaceRangeUnchecked(String receiver,
|
| - int start, int end, String replacement) {
|
| - var prefix = JS('String', '#.substring(0, #)', receiver, start);
|
| - var suffix = JS('String', '#.substring(#)', receiver, end);
|
| - return "$prefix$replacement$suffix";
|
| -}
|
|
|