| 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;
|
| + }
|
| +}
|
| +
|
|
|