Index: tests/compiler/dart2js/sourcemaps/sourcemap_html_helper.dart |
diff --git a/tests/compiler/dart2js/sourcemaps/sourcemap_html_helper.dart b/tests/compiler/dart2js/sourcemaps/sourcemap_html_helper.dart |
index 3ca926b280cd317b5547f8392387d927c64f0257..a3b10a82df1cf0742e24152583067bc4394b0678 100644 |
--- a/tests/compiler/dart2js/sourcemaps/sourcemap_html_helper.dart |
+++ b/tests/compiler/dart2js/sourcemaps/sourcemap_html_helper.dart |
@@ -27,10 +27,11 @@ String truncate(String input, int length) { |
return input; |
} |
+const int HUE_COUNT = 24; |
+ |
/// Returns the [index]th color for visualization. |
HSV toColor(int index) { |
- int hueCount = 24; |
- double h = 360.0 * (index % hueCount) / hueCount; |
+ double h = 360.0 * (index % HUE_COUNT) / HUE_COUNT; |
double v = 1.0; |
double s = 0.5; |
return new HSV(h, s, v); |
@@ -52,13 +53,19 @@ String toPattern(int index) { |
/// Return the html for the [index] line number. If [width] is provided, shorter |
/// line numbers will be prefixed with spaces to match the width. |
-String lineNumber(int index, {int width, bool useNbsp: false}) { |
+String lineNumber(int index, |
+ {int width, |
+ bool useNbsp: false, |
+ String className}) { |
+ if (className == null) { |
+ className = 'lineNumber'; |
+ } |
String text = '${index + 1}'; |
String padding = useNbsp ? ' ' : ' '; |
if (width != null && text.length < width) { |
text = (padding * (width - text.length)) + text; |
} |
- return '<span class="lineNumber">$text$padding</span>'; |
+ return '<span class="$className">$text$padding</span>'; |
} |
/// Return the html escaped [text]. |
@@ -221,14 +228,6 @@ class CodeProcessor { |
} |
} |
-class Annotation { |
- final id; |
- final int codeOffset; |
- final String title; |
- |
- Annotation(this.id, this.codeOffset, this.title); |
-} |
- |
class ElementScheme { |
const ElementScheme(); |
@@ -280,14 +279,16 @@ String convertAnnotatedCodeToHtml( |
StringBuffer htmlBuffer = new StringBuffer(); |
List<CodeLine> lines = convertAnnotatedCodeToCodeLines( |
code, annotations, |
- colorScheme: colorScheme, |
- elementScheme: elementScheme, |
windowSize: windowSize); |
int lineNoWidth; |
if (lines.isNotEmpty) { |
lineNoWidth = '${lines.last.lineNo + 1}'.length; |
} |
- HtmlPrintContext context = new HtmlPrintContext(lineNoWidth: lineNoWidth); |
+ HtmlPrintContext context = new HtmlPrintContext( |
+ lineNoWidth: lineNoWidth, |
+ getAnnotationData: createAnnotationDataFunction( |
+ colorScheme: colorScheme, |
+ elementScheme: elementScheme)); |
for (CodeLine line in lines) { |
line.printHtmlOn(htmlBuffer, context); |
} |
@@ -297,34 +298,42 @@ String convertAnnotatedCodeToHtml( |
List<CodeLine> convertAnnotatedCodeToCodeLines( |
String code, |
Iterable<Annotation> annotations, |
- {CssColorScheme colorScheme: const SingleColorScheme(), |
- ElementScheme elementScheme: const ElementScheme(), |
- int windowSize}) { |
+ {int startLine, |
+ int endLine, |
+ int windowSize, |
+ Uri uri}) { |
List<CodeLine> lines = <CodeLine>[]; |
CodeLine currentLine; |
+ final List<Annotation> currentAnnotations = <Annotation>[]; |
int offset = 0; |
int lineIndex = 0; |
int firstLine; |
int lastLine; |
- bool pendingSourceLocationsEnd = false; |
- void write(String code, HtmlPart html) { |
+ void addCode(String code) { |
if (currentLine != null) { |
currentLine.codeBuffer.write(code); |
- currentLine.htmlParts.add(html); |
+ currentLine.codeParts.add( |
+ new CodePart(currentAnnotations.toList(), code)); |
+ currentAnnotations.clear(); |
} |
} |
- void startLine(int currentOffset) { |
- lines.add(currentLine = new CodeLine(lines.length, currentOffset)); |
+ void addAnnotations(List<Annotation> annotations) { |
+ currentAnnotations.addAll(annotations); |
+ currentLine.annotations.addAll(annotations); |
+ } |
+ |
+ void beginLine(int currentOffset) { |
+ lines.add(currentLine = |
+ new CodeLine(lines.length, currentOffset, uri: uri)); |
} |
void endCurrentLocation() { |
- if (pendingSourceLocationsEnd) { |
- write('', const ConstHtmlPart('</a>')); |
+ if (currentAnnotations.isNotEmpty) { |
+ addCode(''); |
} |
- pendingSourceLocationsEnd = false; |
} |
void addSubstring(int until, {bool isFirst: false, bool isLast: false}) { |
@@ -339,26 +348,15 @@ List<CodeLine> convertAnnotatedCodeToCodeLines( |
} |
int localOffset = 0; |
if (isFirst) { |
- startLine(offset + localOffset); |
+ beginLine(offset + localOffset); |
} |
for (String line in substring.split('\n')) { |
if (!first) { |
endCurrentLocation(); |
- write('', const NewLine()); |
lineIndex++; |
- startLine(offset + localOffset); |
- } |
- if (pendingSourceLocationsEnd && !colorScheme.showLocationAsSpan) { |
- if (line.isNotEmpty) { |
- String before = line.substring(0, 1); |
- write(before, new HtmlText(before)); |
- endCurrentLocation(); |
- String after = line.substring(1); |
- write(after, new HtmlText(after)); |
- } |
- } else { |
- write(line, new HtmlText(line)); |
+ beginLine(offset + localOffset); |
} |
+ addCode(line); |
first = false; |
localOffset += line.length + 1; |
} |
@@ -370,44 +368,7 @@ List<CodeLine> convertAnnotatedCodeToCodeLines( |
void insertAnnotations(List<Annotation> annotations) { |
endCurrentLocation(); |
- |
- String color; |
- var id; |
- String title; |
- if (annotations.length == 1) { |
- Annotation annotation = annotations.single; |
- if (annotation != null) { |
- id = annotation.id; |
- color = colorScheme.singleLocationToCssColor(id); |
- title = annotation.title; |
- } |
- } else { |
- id = annotations.first.id; |
- List ids = []; |
- for (Annotation annotation in annotations) { |
- ids.add(annotation.id); |
- } |
- color = colorScheme.multiLocationToCssColor(ids); |
- title = annotations.map((l) => l.title).join(','); |
- } |
- if (id != null) { |
- Set ids = annotations.map((l) => l.id).toSet(); |
- String name = elementScheme.getName(id, ids); |
- String href = elementScheme.getHref(id, ids); |
- String onclick = elementScheme.onClick(id, ids); |
- String onmouseover = elementScheme.onMouseOver(id, ids); |
- String onmouseout = elementScheme.onMouseOut(id, ids); |
- write('', new AnchorHtmlPart( |
- color: color, |
- name: name, |
- href: href, |
- title: title, |
- onclick: onclick, |
- onmouseover: onmouseover, |
- onmouseout: onmouseout)); |
- pendingSourceLocationsEnd = true; |
- } |
- currentLine.annotations.addAll(annotations); |
+ addAnnotations(annotations); |
if (annotations.last == null) { |
endCurrentLocation(); |
} |
@@ -430,8 +391,8 @@ List<CodeLine> convertAnnotatedCodeToCodeLines( |
addSubstring(code.length, isFirst: first, isLast: true); |
endCurrentLocation(); |
- int start = 0; |
- int end = lines.length - 1; |
+ int start = startLine ?? 0; |
+ int end = endLine ?? lines.length - 1; |
if (windowSize != null) { |
start = Math.max(firstLine - windowSize, start); |
end = Math.min(lastLine + windowSize, end); |