diff --git a/build.yaml b/build.yaml index 3b7fabccb7..16a38bf7cf 100644 --- a/build.yaml +++ b/build.yaml @@ -2,7 +2,7 @@ builders: resource_builder: import: "tool/builder.dart" builder_factories: ["resourceBuilder"] - build_extensions: {'$lib$': ['src/html/resources.g.dart']} + build_extensions: {'$lib$': ['src/generator/html_resources.g.dart']} build_to: "source" auto_apply: none diff --git a/lib/dartdoc.dart b/lib/dartdoc.dart index 91ec031fde..0e76ae5508 100644 --- a/lib/dartdoc.dart +++ b/lib/dartdoc.dart @@ -13,9 +13,9 @@ import 'dart:convert'; import 'dart:io'; import 'package:dartdoc/src/dartdoc_options.dart'; -import 'package:dartdoc/src/empty_generator.dart'; -import 'package:dartdoc/src/generator.dart'; -import 'package:dartdoc/src/html/html_generator.dart'; +import 'package:dartdoc/src/generator/empty_generator.dart'; +import 'package:dartdoc/src/generator/generator.dart'; +import 'package:dartdoc/src/generator/html_generator.dart'; import 'package:dartdoc/src/logging.dart'; import 'package:dartdoc/src/model/model.dart'; import 'package:dartdoc/src/package_meta.dart'; @@ -29,7 +29,7 @@ import 'package:path/path.dart' as path; export 'package:dartdoc/src/dartdoc_options.dart'; export 'package:dartdoc/src/element_type.dart'; -export 'package:dartdoc/src/generator.dart'; +export 'package:dartdoc/src/generator/generator.dart'; export 'package:dartdoc/src/model/model.dart'; export 'package:dartdoc/src/package_meta.dart'; diff --git a/lib/src/generator/dartdoc_generator_backend.dart b/lib/src/generator/dartdoc_generator_backend.dart new file mode 100644 index 0000000000..cfd9b69a78 --- /dev/null +++ b/lib/src/generator/dartdoc_generator_backend.dart @@ -0,0 +1,204 @@ +// Copyright (c) 2019, 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. + +import 'package:dartdoc/dartdoc.dart'; +import 'package:dartdoc/src/generator/generator_frontend.dart'; +import 'package:dartdoc/src/generator/generator_utils.dart' as generator_util; +import 'package:dartdoc/src/generator/template_data.dart'; +import 'package:dartdoc/src/generator/templates.dart'; +import 'package:dartdoc/src/model/model.dart'; +import 'package:dartdoc/src/model/package.dart'; +import 'package:dartdoc/src/model/package_graph.dart'; +import 'package:dartdoc/src/warnings.dart'; +import 'package:mustache/mustache.dart'; +import 'package:path/path.dart' as path; + +/// Configuration options for the Dartdoc's default backend. +class DartdocGeneratorBackendOptions implements TemplateOptions { + @override + final String relCanonicalPrefix; + @override + final String toolVersion; + + final String favicon; + + final bool prettyIndexJson; + + @override + final bool useBaseHref; + + DartdocGeneratorBackendOptions.fromContext( + DartdocGeneratorOptionContext context) + : relCanonicalPrefix = context.relCanonicalPrefix, + toolVersion = dartdocVersion, + favicon = context.favicon, + prettyIndexJson = context.prettyIndexJson, + useBaseHref = context.useBaseHref; + + DartdocGeneratorBackendOptions( + {this.relCanonicalPrefix, + this.toolVersion, + this.favicon, + this.prettyIndexJson = false, + this.useBaseHref = false}); +} + +/// Base GeneratorBackend for Dartdoc's supported formats. +abstract class DartdocGeneratorBackend implements GeneratorBackend { + final DartdocGeneratorBackendOptions options; + final Templates templates; + + DartdocGeneratorBackend( + DartdocGeneratorBackendOptions options, this.templates) + : this.options = (options ?? DartdocGeneratorBackendOptions()); + + /// Helper method to bind template data and emit the content to the writer. + void render(FileWriter writer, String filename, Template template, + TemplateData data) { + String content = template.renderString(data); + if (!options.useBaseHref) { + content = content.replaceAll(HTMLBASE_PLACEHOLDER, data.htmlBase); + } + writer.write(filename, content, + element: data.self is Warnable ? data.self : null); + } + + @override + void generateCategoryJson( + FileWriter writer, List categories) { + String json = generator_util.generateCategoryJson( + categories, options.prettyIndexJson); + if (!options.useBaseHref) { + json = json.replaceAll(HTMLBASE_PLACEHOLDER, ''); + } + writer.write(path.join('categories.json'), '${json}\n'); + } + + @override + void generateSearchIndex(FileWriter writer, List indexedElements) { + String json = generator_util.generateSearchIndexJson( + indexedElements, options.prettyIndexJson); + if (!options.useBaseHref) { + json = json.replaceAll(HTMLBASE_PLACEHOLDER, ''); + } + writer.write(path.join('index.json'), '${json}\n'); + } + + @override + void generatePackage(FileWriter writer, PackageGraph graph, Package package) { + TemplateData data = PackageTemplateData(options, graph, package); + render(writer, package.filePath, templates.indexTemplate, data); + } + + @override + void generateCategory( + FileWriter writer, PackageGraph packageGraph, Category category) { + TemplateData data = CategoryTemplateData(options, packageGraph, category); + render(writer, category.filePath, templates.categoryTemplate, data); + } + + @override + void generateLibrary( + FileWriter writer, PackageGraph packageGraph, Library lib) { + TemplateData data = LibraryTemplateData(options, packageGraph, lib); + render(writer, lib.filePath, templates.libraryTemplate, data); + } + + @override + void generateClass( + FileWriter writer, PackageGraph packageGraph, Library lib, Class clazz) { + TemplateData data = ClassTemplateData(options, packageGraph, lib, clazz); + render(writer, clazz.filePath, templates.classTemplate, data); + } + + @override + void generateExtension(FileWriter writer, PackageGraph packageGraph, + Library lib, Extension extension) { + TemplateData data = + ExtensionTemplateData(options, packageGraph, lib, extension); + render(writer, extension.filePath, templates.extensionTemplate, data); + } + + @override + void generateMixin( + FileWriter writer, PackageGraph packageGraph, Library lib, Mixin mixin) { + TemplateData data = MixinTemplateData(options, packageGraph, lib, mixin); + render(writer, mixin.filePath, templates.mixinTemplate, data); + } + + @override + void generateConstructor(FileWriter writer, PackageGraph packageGraph, + Library lib, Class clazz, Constructor constructor) { + TemplateData data = + ConstructorTemplateData(options, packageGraph, lib, clazz, constructor); + + render(writer, constructor.filePath, templates.constructorTemplate, data); + } + + @override + void generateEnum( + FileWriter writer, PackageGraph packageGraph, Library lib, Enum eNum) { + TemplateData data = EnumTemplateData(options, packageGraph, lib, eNum); + + render(writer, eNum.filePath, templates.enumTemplate, data); + } + + @override + void generateFunction(FileWriter writer, PackageGraph packageGraph, + Library lib, ModelFunction function) { + TemplateData data = + FunctionTemplateData(options, packageGraph, lib, function); + + render(writer, function.filePath, templates.functionTemplate, data); + } + + @override + void generateMethod(FileWriter writer, PackageGraph packageGraph, Library lib, + Container clazz, Method method) { + TemplateData data = + MethodTemplateData(options, packageGraph, lib, clazz, method); + + render(writer, method.filePath, templates.methodTemplate, data); + } + + @override + void generateConstant(FileWriter writer, PackageGraph packageGraph, + Library lib, Container clazz, Field property) => + generateProperty(writer, packageGraph, lib, clazz, property); + + @override + void generateProperty(FileWriter writer, PackageGraph packageGraph, + Library lib, Container clazz, Field property) { + TemplateData data = + PropertyTemplateData(options, packageGraph, lib, clazz, property); + + render(writer, property.filePath, templates.propertyTemplate, data); + } + + @override + void generateTopLevelProperty(FileWriter writer, PackageGraph packageGraph, + Library lib, TopLevelVariable property) { + TemplateData data = + TopLevelPropertyTemplateData(options, packageGraph, lib, property); + + render(writer, property.filePath, templates.topLevelPropertyTemplate, data); + } + + @override + void generateTopLevelConstant(FileWriter writer, PackageGraph packageGraph, + Library lib, TopLevelVariable property) => + generateTopLevelProperty(writer, packageGraph, lib, property); + + @override + void generateTypeDef(FileWriter writer, PackageGraph packageGraph, + Library lib, Typedef typeDef) { + TemplateData data = + TypedefTemplateData(options, packageGraph, lib, typeDef); + + render(writer, typeDef.filePath, templates.typeDefTemplate, data); + } + + @override + void generateAdditionalFiles(FileWriter writer, PackageGraph graph) {} +} diff --git a/lib/src/empty_generator.dart b/lib/src/generator/empty_generator.dart similarity index 95% rename from lib/src/empty_generator.dart rename to lib/src/generator/empty_generator.dart index 4e4ad8e524..3d069dfdf8 100644 --- a/lib/src/empty_generator.dart +++ b/lib/src/generator/empty_generator.dart @@ -3,7 +3,7 @@ library dartdoc.empty_generator; import 'dart:async'; import 'package:dartdoc/src/dartdoc_options.dart'; -import 'package:dartdoc/src/generator.dart'; +import 'package:dartdoc/src/generator/generator.dart'; import 'package:dartdoc/src/logging.dart'; import 'package:dartdoc/src/model/model.dart'; import 'package:dartdoc/src/model_utils.dart'; diff --git a/lib/src/generator.dart b/lib/src/generator/generator.dart similarity index 100% rename from lib/src/generator.dart rename to lib/src/generator/generator.dart diff --git a/lib/src/generator_frontend.dart b/lib/src/generator/generator_frontend.dart similarity index 99% rename from lib/src/generator_frontend.dart rename to lib/src/generator/generator_frontend.dart index 5b62800322..1f6225685a 100644 --- a/lib/src/generator_frontend.dart +++ b/lib/src/generator/generator_frontend.dart @@ -4,7 +4,7 @@ import 'dart:async'; -import 'package:dartdoc/src/generator.dart'; +import 'package:dartdoc/src/generator/generator.dart'; import 'package:dartdoc/src/logging.dart'; import 'package:dartdoc/src/model/model.dart'; import 'package:dartdoc/src/model_utils.dart'; diff --git a/lib/src/generator_utils.dart b/lib/src/generator/generator_utils.dart similarity index 100% rename from lib/src/generator_utils.dart rename to lib/src/generator/generator_utils.dart diff --git a/lib/src/generator/html_generator.dart b/lib/src/generator/html_generator.dart new file mode 100644 index 0000000000..04e34f27f5 --- /dev/null +++ b/lib/src/generator/html_generator.dart @@ -0,0 +1,65 @@ +// Copyright (c) 2014, 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 dartdoc.html_generator; + +import 'dart:async' show Future; +import 'dart:io' show File; + +import 'package:dartdoc/dartdoc.dart'; +import 'package:dartdoc/src/generator/dartdoc_generator_backend.dart'; +import 'package:dartdoc/src/generator/generator.dart'; +import 'package:dartdoc/src/generator/generator_frontend.dart'; +import 'package:dartdoc/src/generator/html_resources.g.dart' as resources; +import 'package:dartdoc/src/generator/resource_loader.dart' as resource_loader; +import 'package:dartdoc/src/generator/template_data.dart'; +import 'package:dartdoc/src/generator/templates.dart'; +import 'package:path/path.dart' as path; + +Future initHtmlGenerator( + DartdocGeneratorOptionContext context) async { + var templates = await Templates.fromContext(context); + var options = DartdocGeneratorBackendOptions.fromContext(context); + var backend = HtmlGeneratorBackend(options, templates); + return GeneratorFrontEnd(backend); +} + +/// Generator backend for html output. +class HtmlGeneratorBackend extends DartdocGeneratorBackend { + HtmlGeneratorBackend( + DartdocGeneratorBackendOptions options, Templates templates) + : super(options, templates); + + @override + void generatePackage(FileWriter writer, PackageGraph graph, Package package) { + super.generatePackage(writer, graph, package); + // We have to construct the data again. This only happens once per package. + TemplateData data = PackageTemplateData(options, graph, package); + render(writer, '__404error.html', templates.errorTemplate, data); + } + + @override + void generateAdditionalFiles(FileWriter writer, PackageGraph graph) async { + await _copyResources(writer); + if (options.favicon != null) { + // Allow overwrite of favicon. + var bytes = File(options.favicon).readAsBytesSync(); + writer.write(path.join('static-assets', 'favicon.png'), bytes, + allowOverwrite: true); + } + } + + Future _copyResources(FileWriter writer) async { + final prefix = 'package:dartdoc/resources/'; + for (String resourcePath in resources.resource_names) { + if (!resourcePath.startsWith(prefix)) { + throw StateError('Resource paths must start with $prefix, ' + 'encountered $resourcePath'); + } + String destFileName = resourcePath.substring(prefix.length); + writer.write(path.join('static-assets', destFileName), + await resource_loader.loadAsBytes(resourcePath)); + } + } +} diff --git a/lib/src/html/resources.g.dart b/lib/src/generator/html_resources.g.dart similarity index 100% rename from lib/src/html/resources.g.dart rename to lib/src/generator/html_resources.g.dart diff --git a/lib/src/html/resource_loader.dart b/lib/src/generator/resource_loader.dart similarity index 100% rename from lib/src/html/resource_loader.dart rename to lib/src/generator/resource_loader.dart diff --git a/lib/src/html/template_data.dart b/lib/src/generator/template_data.dart similarity index 91% rename from lib/src/html/template_data.dart rename to lib/src/generator/template_data.dart index 4ba09304b7..852bdd1d58 100644 --- a/lib/src/html/template_data.dart +++ b/lib/src/generator/template_data.dart @@ -4,7 +4,7 @@ import 'package:dartdoc/src/model/model.dart'; -abstract class HtmlOptions { +abstract class TemplateOptions { String get relCanonicalPrefix; String get toolVersion; bool get useBaseHref; @@ -12,7 +12,7 @@ abstract class HtmlOptions { abstract class TemplateData { final PackageGraph packageGraph; - final HtmlOptions htmlOptions; + final TemplateOptions htmlOptions; TemplateData(this.htmlOptions, this.packageGraph); @@ -54,7 +54,7 @@ abstract class TemplateData { class PackageTemplateData extends TemplateData { final Package package; PackageTemplateData( - HtmlOptions htmlOptions, PackageGraph packageGraph, this.package) + TemplateOptions htmlOptions, PackageGraph packageGraph, this.package) : super(htmlOptions, packageGraph); @override @@ -84,7 +84,7 @@ class CategoryTemplateData extends TemplateData { final Category category; CategoryTemplateData( - HtmlOptions htmlOptions, PackageGraph packageGraph, this.category) + TemplateOptions htmlOptions, PackageGraph packageGraph, this.category) : super(htmlOptions, packageGraph); @override @@ -111,7 +111,7 @@ class LibraryTemplateData extends TemplateData { final Library library; LibraryTemplateData( - HtmlOptions htmlOptions, PackageGraph packageGraph, this.library) + TemplateOptions htmlOptions, PackageGraph packageGraph, this.library) : super(htmlOptions, packageGraph); @override @@ -136,7 +136,7 @@ class LibraryTemplateData extends TemplateData { class MixinTemplateData extends ClassTemplateData { final Mixin mixin; - MixinTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph, + MixinTemplateData(TemplateOptions htmlOptions, PackageGraph packageGraph, Library library, this.mixin) : super(htmlOptions, packageGraph, library, mixin); @@ -150,7 +150,7 @@ class ClassTemplateData extends TemplateData { final Library library; Class _objectType; - ClassTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph, + ClassTemplateData(TemplateOptions htmlOptions, PackageGraph packageGraph, this.library, this.clazz) : super(htmlOptions, packageGraph); @@ -195,7 +195,7 @@ class ExtensionTemplateData extends TemplateData { final T extension; final Library library; - ExtensionTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph, + ExtensionTemplateData(TemplateOptions htmlOptions, PackageGraph packageGraph, this.library, this.extension) : super(htmlOptions, packageGraph); @@ -223,8 +223,8 @@ class ConstructorTemplateData extends TemplateData { final Class clazz; final Constructor constructor; - ConstructorTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph, - this.library, this.clazz, this.constructor) + ConstructorTemplateData(TemplateOptions htmlOptions, + PackageGraph packageGraph, this.library, this.clazz, this.constructor) : super(htmlOptions, packageGraph); @override @@ -250,7 +250,7 @@ class ConstructorTemplateData extends TemplateData { } class EnumTemplateData extends ClassTemplateData { - EnumTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph, + EnumTemplateData(TemplateOptions htmlOptions, PackageGraph packageGraph, Library library, Enum eNum) : super(htmlOptions, packageGraph, library, eNum); @@ -263,7 +263,7 @@ class FunctionTemplateData extends TemplateData { final ModelFunction function; final Library library; - FunctionTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph, + FunctionTemplateData(TemplateOptions htmlOptions, PackageGraph packageGraph, this.library, this.function) : super(htmlOptions, packageGraph); @@ -291,7 +291,7 @@ class MethodTemplateData extends TemplateData { final Container container; String containerDesc; - MethodTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph, + MethodTemplateData(TemplateOptions htmlOptions, PackageGraph packageGraph, this.library, this.container, this.method) : super(htmlOptions, packageGraph) { containerDesc = container.isClass ? 'class' : 'extension'; @@ -324,7 +324,7 @@ class PropertyTemplateData extends TemplateData { final Field property; String containerDesc; - PropertyTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph, + PropertyTemplateData(TemplateOptions htmlOptions, PackageGraph packageGraph, this.library, this.container, this.property) : super(htmlOptions, packageGraph) { containerDesc = container.isClass ? 'class' : 'extension'; @@ -358,7 +358,7 @@ class TypedefTemplateData extends TemplateData { final Library library; final Typedef typeDef; - TypedefTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph, + TypedefTemplateData(TemplateOptions htmlOptions, PackageGraph packageGraph, this.library, this.typeDef) : super(htmlOptions, packageGraph); @@ -385,7 +385,7 @@ class TopLevelPropertyTemplateData extends TemplateData { final Library library; final TopLevelVariable property; - TopLevelPropertyTemplateData(HtmlOptions htmlOptions, + TopLevelPropertyTemplateData(TemplateOptions htmlOptions, PackageGraph packageGraph, this.library, this.property) : super(htmlOptions, packageGraph); diff --git a/lib/src/html/templates.dart b/lib/src/generator/templates.dart similarity index 99% rename from lib/src/html/templates.dart rename to lib/src/generator/templates.dart index 5b96a30670..875328d99a 100644 --- a/lib/src/html/templates.dart +++ b/lib/src/generator/templates.dart @@ -9,7 +9,7 @@ import 'dart:io' show File, Directory; import 'dart:isolate'; import 'package:dartdoc/dartdoc.dart'; -import 'package:dartdoc/src/html/resource_loader.dart' as loader; +import 'package:dartdoc/src/generator/resource_loader.dart' as loader; import 'package:mustache/mustache.dart'; import 'package:path/path.dart' as path; diff --git a/lib/src/html/html_generator.dart b/lib/src/html/html_generator.dart deleted file mode 100644 index 9178840092..0000000000 --- a/lib/src/html/html_generator.dart +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 2014, 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 dartdoc.html_generator; - -import 'dart:async' show Future; - -import 'package:dartdoc/dartdoc.dart'; -import 'package:dartdoc/src/generator.dart'; -import 'package:dartdoc/src/generator_frontend.dart'; -import 'package:dartdoc/src/html/html_generator_backend.dart'; - -Future initHtmlGenerator( - DartdocGeneratorOptionContext context) async { - var backend = await HtmlGeneratorBackend.fromContext(context); - return GeneratorFrontEnd(backend); -} diff --git a/lib/src/html/html_generator_backend.dart b/lib/src/html/html_generator_backend.dart deleted file mode 100644 index b92e39e373..0000000000 --- a/lib/src/html/html_generator_backend.dart +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright (c) 2019, 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. - -import 'dart:io'; - -import 'package:dartdoc/dartdoc.dart'; -import 'package:dartdoc/src/generator_frontend.dart'; -import 'package:dartdoc/src/generator_utils.dart' as generator_util; -import 'package:dartdoc/src/html/resource_loader.dart' as loader; -import 'package:dartdoc/src/html/resources.g.dart' as resources; -import 'package:dartdoc/src/html/template_data.dart'; -import 'package:dartdoc/src/html/templates.dart'; -import 'package:dartdoc/src/model/model.dart'; -import 'package:dartdoc/src/model/package.dart'; -import 'package:dartdoc/src/model/package_graph.dart'; -import 'package:dartdoc/src/warnings.dart'; -import 'package:mustache/mustache.dart'; -import 'package:path/path.dart' as path; - -/// Configuration options for the html backend. -class HtmlBackendOptions implements HtmlOptions { - @override - final String relCanonicalPrefix; - @override - final String toolVersion; - - final String favicon; - - final bool prettyIndexJson; - - @override - final bool useBaseHref; - - HtmlBackendOptions( - {this.relCanonicalPrefix, - this.toolVersion, - this.favicon, - this.prettyIndexJson = false, - this.useBaseHref = false}); -} - -/// GeneratorBackend for html output. -class HtmlGeneratorBackend implements GeneratorBackend { - final HtmlBackendOptions _options; - final Templates _templates; - - static Future fromContext( - DartdocGeneratorOptionContext context) async { - Templates templates = await Templates.fromContext(context); - // TODO(jcollins-g): Rationalize based on GeneratorContext all the way down - // through the generators. - HtmlOptions options = HtmlBackendOptions( - relCanonicalPrefix: context.relCanonicalPrefix, - toolVersion: dartdocVersion, - favicon: context.favicon, - prettyIndexJson: context.prettyIndexJson, - useBaseHref: context.useBaseHref, - ); - return HtmlGeneratorBackend(options, templates); - } - - HtmlGeneratorBackend(HtmlBackendOptions options, this._templates) - : this._options = (options ?? HtmlBackendOptions()); - - /// Helper method to bind template data and emit the content to the writer. - void _render(FileWriter writer, String filename, Template template, - TemplateData data) { - String content = template.renderString(data); - if (!_options.useBaseHref) { - content = content.replaceAll(HTMLBASE_PLACEHOLDER, data.htmlBase); - } - writer.write(filename, content, - element: data.self is Warnable ? data.self : null); - } - - @override - void generateCategoryJson( - FileWriter writer, List categories) { - String json = generator_util.generateCategoryJson( - categories, _options.prettyIndexJson); - if (!_options.useBaseHref) { - json = json.replaceAll(HTMLBASE_PLACEHOLDER, ''); - } - writer.write(path.join('categories.json'), '${json}\n'); - } - - @override - void generateSearchIndex(FileWriter writer, List indexedElements) { - String json = generator_util.generateSearchIndexJson( - indexedElements, _options.prettyIndexJson); - if (!_options.useBaseHref) { - json = json.replaceAll(HTMLBASE_PLACEHOLDER, ''); - } - writer.write(path.join('index.json'), '${json}\n'); - } - - @override - void generatePackage(FileWriter writer, PackageGraph graph, Package package) { - TemplateData data = PackageTemplateData(_options, graph, package); - _render(writer, package.filePath, _templates.indexTemplate, data); - _render(writer, '__404error.html', _templates.errorTemplate, data); - } - - @override - void generateCategory( - FileWriter writer, PackageGraph packageGraph, Category category) { - TemplateData data = CategoryTemplateData(_options, packageGraph, category); - _render(writer, category.filePath, _templates.categoryTemplate, data); - } - - @override - void generateLibrary( - FileWriter writer, PackageGraph packageGraph, Library lib) { - TemplateData data = LibraryTemplateData(_options, packageGraph, lib); - _render(writer, lib.filePath, _templates.libraryTemplate, data); - } - - @override - void generateClass( - FileWriter writer, PackageGraph packageGraph, Library lib, Class clazz) { - TemplateData data = ClassTemplateData(_options, packageGraph, lib, clazz); - _render(writer, clazz.filePath, _templates.classTemplate, data); - } - - @override - void generateExtension(FileWriter writer, PackageGraph packageGraph, - Library lib, Extension extension) { - TemplateData data = - ExtensionTemplateData(_options, packageGraph, lib, extension); - _render(writer, extension.filePath, _templates.extensionTemplate, data); - } - - @override - void generateMixin( - FileWriter writer, PackageGraph packageGraph, Library lib, Mixin mixin) { - TemplateData data = MixinTemplateData(_options, packageGraph, lib, mixin); - _render(writer, mixin.filePath, _templates.mixinTemplate, data); - } - - @override - void generateConstructor(FileWriter writer, PackageGraph packageGraph, - Library lib, Class clazz, Constructor constructor) { - TemplateData data = ConstructorTemplateData( - _options, packageGraph, lib, clazz, constructor); - - _render(writer, constructor.filePath, _templates.constructorTemplate, data); - } - - @override - void generateEnum( - FileWriter writer, PackageGraph packageGraph, Library lib, Enum eNum) { - TemplateData data = EnumTemplateData(_options, packageGraph, lib, eNum); - - _render(writer, eNum.filePath, _templates.enumTemplate, data); - } - - @override - void generateFunction(FileWriter writer, PackageGraph packageGraph, - Library lib, ModelFunction function) { - TemplateData data = - FunctionTemplateData(_options, packageGraph, lib, function); - - _render(writer, function.filePath, _templates.functionTemplate, data); - } - - @override - void generateMethod(FileWriter writer, PackageGraph packageGraph, Library lib, - Container clazz, Method method) { - TemplateData data = - MethodTemplateData(_options, packageGraph, lib, clazz, method); - - _render(writer, method.filePath, _templates.methodTemplate, data); - } - - @override - void generateConstant(FileWriter writer, PackageGraph packageGraph, - Library lib, Container clazz, Field property) => - generateProperty(writer, packageGraph, lib, clazz, property); - - @override - void generateProperty(FileWriter writer, PackageGraph packageGraph, - Library lib, Container clazz, Field property) { - TemplateData data = - PropertyTemplateData(_options, packageGraph, lib, clazz, property); - - _render(writer, property.filePath, _templates.propertyTemplate, data); - } - - @override - void generateTopLevelProperty(FileWriter writer, PackageGraph packageGraph, - Library lib, TopLevelVariable property) { - TemplateData data = - TopLevelPropertyTemplateData(_options, packageGraph, lib, property); - - _render( - writer, property.filePath, _templates.topLevelPropertyTemplate, data); - } - - @override - void generateTopLevelConstant(FileWriter writer, PackageGraph packageGraph, - Library lib, TopLevelVariable property) => - generateTopLevelProperty(writer, packageGraph, lib, property); - - @override - void generateTypeDef(FileWriter writer, PackageGraph packageGraph, - Library lib, Typedef typeDef) { - TemplateData data = - TypedefTemplateData(_options, packageGraph, lib, typeDef); - - _render(writer, typeDef.filePath, _templates.typeDefTemplate, data); - } - - @override - void generateAdditionalFiles(FileWriter writer, PackageGraph graph) async { - await _copyResources(writer); - if (_options.favicon != null) { - // Allow overwrite of favicon. - var bytes = File(_options.favicon).readAsBytesSync(); - writer.write(path.join('static-assets', 'favicon.png'), bytes, - allowOverwrite: true); - } - } - - Future _copyResources(FileWriter writer) async { - final prefix = 'package:dartdoc/resources/'; - for (String resourcePath in resources.resource_names) { - if (!resourcePath.startsWith(prefix)) { - throw StateError('Resource paths must start with $prefix, ' - 'encountered $resourcePath'); - } - String destFileName = resourcePath.substring(prefix.length); - writer.write(path.join('static-assets', destFileName), - await loader.loadAsBytes(resourcePath)); - } - } -} diff --git a/test/html_generator_test.dart b/test/html_generator_test.dart index a9b87d4483..5a37e2337a 100644 --- a/test/html_generator_test.dart +++ b/test/html_generator_test.dart @@ -7,10 +7,10 @@ library dartdoc.html_generator_test; import 'dart:io' show File, Directory; import 'package:dartdoc/dartdoc.dart'; -import 'package:dartdoc/src/generator_frontend.dart'; -import 'package:dartdoc/src/html/html_generator_backend.dart'; -import 'package:dartdoc/src/html/templates.dart'; -import 'package:dartdoc/src/html/resources.g.dart'; +import 'package:dartdoc/src/generator/generator_frontend.dart'; +import 'package:dartdoc/src/generator/html_generator.dart'; +import 'package:dartdoc/src/generator/html_resources.g.dart'; +import 'package:dartdoc/src/generator/templates.dart'; import 'package:dartdoc/src/model/package_graph.dart'; import 'package:dartdoc/src/warnings.dart'; import 'package:path/path.dart' as path; diff --git a/test/resource_loader_test.dart b/test/resource_loader_test.dart index 2e188d1feb..1670aab665 100644 --- a/test/resource_loader_test.dart +++ b/test/resource_loader_test.dart @@ -4,7 +4,7 @@ library dartdoc.resource_loader_test; -import 'package:dartdoc/src/html/resource_loader.dart' as loader; +import 'package:dartdoc/src/generator/resource_loader.dart' as loader; import 'package:test/test.dart'; void main() { diff --git a/tool/builder.dart b/tool/builder.dart index fa92cefa31..af5e1de4cb 100644 --- a/tool/builder.dart +++ b/tool/builder.dart @@ -30,13 +30,13 @@ class ResourceBuilder implements Builder { packagePaths.sort(); await buildStep.writeAsString( AssetId(buildStep.inputId.package, - path.url.join('lib', 'src', 'html', 'resources.g.dart')), + path.url.join('lib', 'src', 'generator', 'html_resources.g.dart')), _resourcesFile(packagePaths)); } @override final Map> buildExtensions = const { - r'$lib$': ['src/html/resources.g.dart'] + r'$lib$': ['src/generator/html_resources.g.dart'] }; } diff --git a/tool/grind.dart b/tool/grind.dart index 2e435059fd..1585a88985 100644 --- a/tool/grind.dart +++ b/tool/grind.dart @@ -851,7 +851,7 @@ Future build() async { /// Paths in this list are relative to lib/. final _generated_files_list = [ '../dartdoc_options.yaml', - 'src/html/resources.g.dart', + 'src/generator/html_resources.g.dart', 'src/version.dart', ].map((s) => path.joinAll(path.posix.split(s)));