| Index: frog/leg/source_file.dart
|
| ===================================================================
|
| --- frog/leg/source_file.dart (revision 5925)
|
| +++ frog/leg/source_file.dart (working copy)
|
| @@ -1,98 +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.
|
| -
|
| -#library('source_file');
|
| -
|
| -#import('colors.dart');
|
| -
|
| -/**
|
| - * Represents a file of source code.
|
| - */
|
| -class SourceFile {
|
| -
|
| - /** The name of the file. */
|
| - final String filename;
|
| -
|
| - /** The text content of the file. */
|
| - final String text;
|
| -
|
| - List<int> _lineStarts;
|
| -
|
| - SourceFile(this.filename, this.text);
|
| -
|
| - List<int> get lineStarts() {
|
| - if (_lineStarts == null) {
|
| - var starts = [0];
|
| - var index = 0;
|
| - while (index < text.length) {
|
| - index = text.indexOf('\n', index) + 1;
|
| - if (index <= 0) break;
|
| - starts.add(index);
|
| - }
|
| - starts.add(text.length + 1);
|
| - _lineStarts = starts;
|
| - }
|
| - return _lineStarts;
|
| - }
|
| -
|
| - int getLine(int position) {
|
| - // TODO(jimhug): Implement as binary search.
|
| - var starts = lineStarts;
|
| - for (int i=0; i < starts.length; i++) {
|
| - if (starts[i] > position) return i-1;
|
| - }
|
| - throw 'bad position';
|
| - }
|
| -
|
| - int getColumn(int line, int position) {
|
| - return position - lineStarts[line];
|
| - }
|
| -
|
| - /**
|
| - * Create a pretty string representation from a character position
|
| - * in the file.
|
| - */
|
| - String getLocationMessage(String message, int start,
|
| - [int end, bool includeText=false, bool useColors = true]) {
|
| - var line = getLine(start);
|
| - var column = getColumn(line, start);
|
| -
|
| - var buf = new StringBuffer(
|
| - '${filename}:${line + 1}:${column + 1}: $message');
|
| - if (includeText) {
|
| - buf.add('\n');
|
| - var textLine;
|
| - // +1 for 0-indexing, +1 again to avoid the last line of the file
|
| - if ((line + 2) < _lineStarts.length) {
|
| - textLine = text.substring(_lineStarts[line], _lineStarts[line+1]);
|
| - } else {
|
| - textLine = text.substring(_lineStarts[line]) + '\n';
|
| - }
|
| -
|
| - int toColumn = Math.min(column + (end-start), textLine.length);
|
| - if (useColors) {
|
| - buf.add(textLine.substring(0, column));
|
| - buf.add(RED_COLOR);
|
| - buf.add(textLine.substring(column, toColumn));
|
| - buf.add(NO_COLOR);
|
| - buf.add(textLine.substring(toColumn));
|
| - } else {
|
| - buf.add(textLine);
|
| - }
|
| -
|
| - int i = 0;
|
| - for (; i < column; i++) {
|
| - buf.add(' ');
|
| - }
|
| -
|
| - if (useColors) buf.add(RED_COLOR);
|
| - for (; i < toColumn; i++) {
|
| - buf.add('^');
|
| - }
|
| - if (useColors) buf.add(NO_COLOR);
|
| - }
|
| -
|
| - return buf.toString();
|
| - }
|
| -}
|
|
|