Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(469)

Unified Diff: tests/compiler/dart2js/sourcemaps/html_parts.dart

Issue 1678043003: Add Dart code to diff_view (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Update status. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/compiler/dart2js/sourcemaps/diff_view.dart ('k') | tests/compiler/dart2js/sourcemaps/js_tracer.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/compiler/dart2js/sourcemaps/html_parts.dart
diff --git a/tests/compiler/dart2js/sourcemaps/html_parts.dart b/tests/compiler/dart2js/sourcemaps/html_parts.dart
new file mode 100644
index 0000000000000000000000000000000000000000..6ddf95e6bcb7e4649aeb61baff1aebd5006502ce
--- /dev/null
+++ b/tests/compiler/dart2js/sourcemaps/html_parts.dart
@@ -0,0 +1,243 @@
+// Copyright (c) 2016, 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 sourcemap.html_parts;
+
+import 'sourcemap_html_helper.dart';
+
+class HtmlPrintContext {
+ final int lineNoWidth;
+ final bool usePre;
+
+ HtmlPrintContext({
+ this.lineNoWidth,
+ this.usePre: true});
+}
+
+enum HtmlPartKind {
+ CODE,
+ LINE,
+ CONST,
+ NEWLINE,
+ TEXT,
+ ANCHOR,
+}
+
+abstract class HtmlPart {
+ void printHtmlOn(StringBuffer buffer, HtmlPrintContext context) {}
+
+ toJson();
+
+ static HtmlPart fromJson(json) {
+ if (json is String) {
+ return new ConstHtmlPart(json);
+ } else {
+ switch (HtmlPartKind.values[json['kind']]) {
+ case HtmlPartKind.LINE:
+ return HtmlLine.fromJson(json);
+ case HtmlPartKind.CODE:
+ return CodeLine.fromJson(json);
+ case HtmlPartKind.CONST:
+ return ConstHtmlPart.fromJson(json);
+ case HtmlPartKind.NEWLINE:
+ return const NewLine();
+ case HtmlPartKind.TEXT:
+ return HtmlText.fromJson(json);
+ case HtmlPartKind.ANCHOR:
+ return AnchorHtmlPart.fromJson(json);
+ }
+ }
+ }
+}
+
+class ConstHtmlPart implements HtmlPart {
+ final String html;
+
+ const ConstHtmlPart(this.html);
+
+ @override
+ void printHtmlOn(StringBuffer buffer, HtmlPrintContext context) {
+ buffer.write(html);
+ }
+
+ toJson() {
+ return {'kind': HtmlPartKind.CONST.index, 'html': html};
+ }
+
+ static ConstHtmlPart fromJson(Map json) {
+ return new ConstHtmlPart(json['html']);
+ }
+}
+
+class NewLine implements HtmlPart {
+ const NewLine();
+
+ void printHtmlOn(StringBuffer buffer, HtmlPrintContext context) {
+ if (context.usePre) {
+ buffer.write('\n');
+ } else {
+ buffer.write('<br/>');
+ }
+ }
+
+ toJson() {
+ return {'kind': HtmlPartKind.NEWLINE.index};
+ }
+}
+
+class HtmlText implements HtmlPart {
+ final String text;
+
+ const HtmlText(this.text);
+
+ void printHtmlOn(StringBuffer buffer, HtmlPrintContext context) {
+ String escaped = escape(text);
+ buffer.write(escaped);
+ }
+
+ toJson() {
+ return {'kind': HtmlPartKind.TEXT.index, 'text': text};
+ }
+
+ static HtmlText fromJson(Map json) {
+ return new HtmlText(json['text']);
+ }
+}
+
+class AnchorHtmlPart implements HtmlPart {
+ final String color;
+ final String name;
+ final String href;
+ final String title;
+ final String onclick;
+ final String onmouseover;
+ final String onmouseout;
+
+ AnchorHtmlPart({
+ this.color,
+ this.name,
+ this.href,
+ this.title,
+ this.onclick,
+ this.onmouseover,
+ this.onmouseout});
+
+ @override
+ void printHtmlOn(StringBuffer buffer, HtmlPrintContext context) {
+ buffer.write('<a');
+ if (href != null) {
+ buffer.write(' href="${href}"');
+ }
+ if (name != null) {
+ buffer.write(' name="${name}"');
+ }
+ if (title != null) {
+ buffer.write(' title="${escape(title)}"');
+ }
+ buffer.write(' style="${color}"');
+ if (onclick != null) {
+ buffer.write(' onclick="${onclick}"');
+ }
+ if (onmouseover != null) {
+ buffer.write(' onmouseover="${onmouseover}"');
+ }
+ if (onmouseout != null) {
+ buffer.write(' onmouseout="${onmouseout}"');
+ }
+ buffer.write('>');
+ }
+
+ toJson() {
+ return {
+ 'kind': HtmlPartKind.ANCHOR.index,
+ 'color': color,
+ 'name': name,
+ 'href': href,
+ 'title': title,
+ 'onclick': onclick,
+ 'onmouseover': onmouseover,
+ 'onmouseout': onmouseout};
+ }
+
+ static AnchorHtmlPart fromJson(Map json) {
+ return new AnchorHtmlPart(
+ color: json['color'],
+ name: json['name'],
+ href: json['href'],
+ title: json['title'],
+ onclick: json['onclick'],
+ onmouseover: json['onmouseover'],
+ onmouseout: json['onmouseout']);
+ }
+}
+
+class HtmlLine implements HtmlPart {
+ final List<HtmlPart> htmlParts = <HtmlPart>[];
+
+ @override
+ void printHtmlOn(StringBuffer htmlBuffer, HtmlPrintContext context) {
+ for (HtmlPart part in htmlParts) {
+ part.printHtmlOn(htmlBuffer, context);
+ }
+ }
+
+ Map toJson() {
+ return {
+ 'kind': HtmlPartKind.LINE.index,
+ 'html': htmlParts.map((p) => p.toJson()).toList(),
+ };
+ }
+
+ static CodeLine fromJson(Map json) {
+ HtmlLine line = new HtmlLine();
+ json['html'].forEach((part) => line.htmlParts.add(HtmlPart.fromJson(part)));
+ return line;
+ }
+}
+
+class CodeLine extends HtmlLine {
+ final int lineNo;
+ final int offset;
+ final StringBuffer codeBuffer = new StringBuffer();
+ final List<HtmlPart> htmlParts = <HtmlPart>[];
+ // TODO(johnniwinther): Make annotations serializable.
+ final List<Annotation> annotations = <Annotation>[];
+ String _code;
+
+ CodeLine(this.lineNo, this.offset);
+
+ String get code {
+ if (_code == null) {
+ _code = codeBuffer.toString();
+ }
+ return _code;
+ }
+
+ @override
+ void printHtmlOn(StringBuffer htmlBuffer, HtmlPrintContext context) {
+ htmlBuffer.write(lineNumber(
+ lineNo, width: context.lineNoWidth, useNbsp: !context.usePre));
+ for (HtmlPart part in htmlParts) {
+ part.printHtmlOn(htmlBuffer, context);
+ }
+ }
+
+ Map toJson() {
+ return {
+ 'kind': HtmlPartKind.CODE.index,
+ 'lineNo': lineNo,
+ 'offset': offset,
+ 'code': code,
+ 'html': htmlParts.map((p) => p.toJson()).toList(),
+ };
+ }
+
+ static CodeLine fromJson(Map json) {
+ CodeLine line = new CodeLine(json['lineNo'], json['offset']);
+ line.codeBuffer.write(json['code']);
+ json['html'].forEach((part) => line.htmlParts.add(HtmlPart.fromJson(part)));
+ return line;
+ }
+}
+
« no previous file with comments | « tests/compiler/dart2js/sourcemaps/diff_view.dart ('k') | tests/compiler/dart2js/sourcemaps/js_tracer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698