59 lines
1.2 KiB
Dart
59 lines
1.2 KiB
Dart
import 'package:source_span/source_span.dart';
|
|
import 'ast_node.dart';
|
|
import 'element.dart';
|
|
import 'identifier.dart';
|
|
import 'string.dart';
|
|
import 'token.dart';
|
|
|
|
class Document extends AstNode {
|
|
final Doctype doctype;
|
|
final Element root;
|
|
|
|
Document(this.doctype, this.root);
|
|
|
|
@override
|
|
FileSpan get span {
|
|
if (doctype == null) return root.span;
|
|
return doctype.span.expand(root.span);
|
|
}
|
|
}
|
|
|
|
class HtmlComment extends ElementChild {
|
|
final Token htmlComment;
|
|
|
|
HtmlComment(this.htmlComment);
|
|
|
|
@override
|
|
FileSpan get span => htmlComment.span;
|
|
}
|
|
|
|
class Text extends ElementChild {
|
|
final Token text;
|
|
|
|
Text(this.text);
|
|
|
|
@override
|
|
FileSpan get span => text.span;
|
|
}
|
|
|
|
class Doctype extends AstNode {
|
|
final Token lt, doctype, gt;
|
|
final Identifier html, public;
|
|
final StringLiteral name, url;
|
|
|
|
Doctype(this.lt, this.doctype, this.html, this.public, this.name, this.url,
|
|
this.gt);
|
|
|
|
@override
|
|
FileSpan get span {
|
|
if (public == null)
|
|
return lt.span.expand(doctype.span).expand(html.span).expand(gt.span);
|
|
return lt.span
|
|
.expand(doctype.span)
|
|
.expand(html.span)
|
|
.expand(public.span)
|
|
.expand(name.span)
|
|
.expand(url.span)
|
|
.expand(gt.span);
|
|
}
|
|
}
|