// 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 files;

import 'package:html5lib/dom.dart';

/** An input file to process by the template compiler. */
class SourceFile {
  static const int HTML = 1;
  static const int DART = 2;
  static const int STYLESHEET = 3;

  final String path;
  final int type;

  Document document;

  /** Dart code or contents of a linked style sheet. */
  String code;

  SourceFile(this.path, {this.type: HTML});

  bool get isDart => type == DART;
  bool get isHtml => type == HTML;
  bool get isStyleSheet => type == STYLESHEET;

  String toString() => "#<SourceFile $path>";
}

/** An output file to generated by the template compiler. */
class OutputFile {
  final String path;
  final String contents;

  /**
   * Path to the source file that was transformed into this OutputFile, `null`
   * for files that are generated and do not correspond to an input
   * [SourceFile].
   */
  final String source;

  OutputFile(this.path, this.contents, {this.source});

  String toString() => "#<OutputFile $path>";
}
