@@ -8,11 +8,12 @@ import 'package:dartdoc/src/generator/generator_frontend.dart';
88import 'package:dartdoc/src/generator/generator_utils.dart' as generator_util;
99import 'package:dartdoc/src/generator/template_data.dart' ;
1010import 'package:dartdoc/src/generator/templates.dart' ;
11+ import 'package:dartdoc/src/generator/templates.renderers.dart' ;
1112import 'package:dartdoc/src/model/model.dart' ;
1213import 'package:dartdoc/src/model/package.dart' ;
1314import 'package:dartdoc/src/model/package_graph.dart' ;
15+ import 'package:dartdoc/src/mustachio/renderer_base.dart' ;
1416import 'package:dartdoc/src/warnings.dart' ;
15- import 'package:mustache/mustache.dart' ;
1617import 'package:path/path.dart' as path show Context;
1718
1819/// Configuration options for the Dartdoc's default backend.
@@ -61,38 +62,41 @@ class DartdocGeneratorBackendOptions implements TemplateOptions {
6162 customInnerFooterText = '' ;
6263}
6364
64- class SidebarGenerator <T extends Documentable > {
65+ class SidebarGenerator <T extends TemplateData > {
6566 final Template template;
66- final Map <T , String > _renderCache = {};
67+ final RenderFunction <T > renderFunction;
68+ final Map <Documentable , String > _renderCache = {};
6769
68- SidebarGenerator (this .template);
70+ SidebarGenerator (this .template, this .renderFunction );
6971
7072 // Retrieve the render for a specific key, or generate it using the given
7173 // template data if you need.
72- String getRenderFor (T key, TemplateData templateData) {
73- return _renderCache[key] ?? = template. renderString (templateData);
74+ String getRenderFor (Documentable key, T templateData) {
75+ return _renderCache[key] ?? = renderFunction (templateData, template );
7476 }
7577}
7678
7779/// Base GeneratorBackend for Dartdoc's supported formats.
7880abstract class DartdocGeneratorBackend implements GeneratorBackend {
7981 final DartdocGeneratorBackendOptions options;
8082 final Templates templates;
81- final SidebarGenerator <Library > sidebarForLibrary;
82- final SidebarGenerator <Container > sidebarForContainer;
83+ final SidebarGenerator <TemplateDataWithLibrary <Documentable >>
84+ sidebarForLibrary;
85+ final SidebarGenerator <TemplateDataWithContainer <Documentable >>
86+ sidebarForContainer;
8387 final path.Context _pathContext;
8488
8589 DartdocGeneratorBackend (
8690 DartdocGeneratorBackendOptions options, this .templates, this ._pathContext)
8791 : options = options ?? DartdocGeneratorBackendOptions ._defaults (),
88- sidebarForContainer =
89- SidebarGenerator (templates.sidebarContainerTemplate),
90- sidebarForLibrary = SidebarGenerator (templates.sidebarLibraryTemplate);
92+ sidebarForLibrary = SidebarGenerator (
93+ templates.sidebarLibraryTemplate, renderSidebarForLibrary),
94+ sidebarForContainer = SidebarGenerator (
95+ templates.sidebarContainerTemplate, renderSidebarForContainer);
9196
9297 /// Helper method to bind template data and emit the content to the writer.
93- void render (FileWriter writer, String filename, Template template,
94- TemplateData data) {
95- var content = template.renderString (data);
98+ void write (
99+ FileWriter writer, String filename, TemplateData data, String content) {
96100 if (! options.useBaseHref) {
97101 content = content.replaceAll (htmlBasePlaceholder, data.htmlBase);
98102 }
@@ -128,30 +132,34 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
128132 @override
129133 void generatePackage (FileWriter writer, PackageGraph graph, Package package) {
130134 TemplateData data = PackageTemplateData (options, graph, package);
131- render (writer, package.filePath, templates.indexTemplate, data);
135+ var content = renderIndex (data, templates.indexTemplate);
136+ write (writer, package.filePath, data, content);
132137 }
133138
134139 @override
135140 void generateCategory (
136141 FileWriter writer, PackageGraph packageGraph, Category category) {
137142 TemplateData data = CategoryTemplateData (options, packageGraph, category);
138- render (writer, category.filePath, templates.categoryTemplate, data);
143+ var content = renderCategory (data, templates.categoryTemplate);
144+ write (writer, category.filePath, data, content);
139145 }
140146
141147 @override
142148 void generateLibrary (
143149 FileWriter writer, PackageGraph packageGraph, Library lib) {
144150 TemplateData data = LibraryTemplateData (
145151 options, packageGraph, lib, sidebarForLibrary.getRenderFor);
146- render (writer, lib.filePath, templates.libraryTemplate, data);
152+ var content = renderLibrary (data, templates.libraryTemplate);
153+ write (writer, lib.filePath, data, content);
147154 }
148155
149156 @override
150157 void generateClass (
151158 FileWriter writer, PackageGraph packageGraph, Library lib, Class clazz) {
152159 TemplateData data = ClassTemplateData (options, packageGraph, lib, clazz,
153160 sidebarForLibrary.getRenderFor, sidebarForContainer.getRenderFor);
154- render (writer, clazz.filePath, templates.classTemplate, data);
161+ var content = renderClass (data, templates.classTemplate);
162+ write (writer, clazz.filePath, data, content);
155163 }
156164
157165 @override
@@ -164,51 +172,53 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
164172 extension ,
165173 sidebarForLibrary.getRenderFor,
166174 sidebarForContainer.getRenderFor);
167- render (writer, extension .filePath, templates.extensionTemplate, data);
175+ var content = renderExtension (data, templates.extensionTemplate);
176+ write (writer, extension .filePath, data, content);
168177 }
169178
170179 @override
171180 void generateMixin (
172181 FileWriter writer, PackageGraph packageGraph, Library lib, Mixin mixin ) {
173182 TemplateData data = MixinTemplateData (options, packageGraph, lib, mixin ,
174183 sidebarForLibrary.getRenderFor, sidebarForContainer.getRenderFor);
175- render (writer, mixin .filePath, templates.mixinTemplate, data);
184+ var content = renderMixin (data, templates.mixinTemplate);
185+ write (writer, mixin .filePath, data, content);
176186 }
177187
178188 @override
179189 void generateConstructor (FileWriter writer, PackageGraph packageGraph,
180190 Library lib, Class clazz, Constructor constructor) {
181191 TemplateData data = ConstructorTemplateData (options, packageGraph, lib,
182192 clazz, constructor, sidebarForContainer.getRenderFor);
183-
184- render (writer, constructor.filePath, templates.constructorTemplate, data );
193+ var content = renderConstructor (data, templates.constructorTemplate);
194+ write (writer, constructor.filePath, data, content );
185195 }
186196
187197 @override
188198 void generateEnum (
189199 FileWriter writer, PackageGraph packageGraph, Library lib, Enum eNum) {
190200 TemplateData data = EnumTemplateData (options, packageGraph, lib, eNum,
191201 sidebarForLibrary.getRenderFor, sidebarForContainer.getRenderFor);
192-
193- render (writer, eNum.filePath, templates.enumTemplate, data );
202+ var content = renderEnum (data, templates.enumTemplate);
203+ write (writer, eNum.filePath, data, content );
194204 }
195205
196206 @override
197207 void generateFunction (FileWriter writer, PackageGraph packageGraph,
198208 Library lib, ModelFunction function) {
199209 TemplateData data = FunctionTemplateData (
200210 options, packageGraph, lib, function, sidebarForLibrary.getRenderFor);
201-
202- render (writer, function.filePath, templates.functionTemplate, data );
211+ var content = renderFunction (data, templates.functionTemplate);
212+ write (writer, function.filePath, data, content );
203213 }
204214
205215 @override
206216 void generateMethod (FileWriter writer, PackageGraph packageGraph, Library lib,
207217 Container clazz, Method method) {
208218 TemplateData data = MethodTemplateData (options, packageGraph, lib, clazz,
209219 method, sidebarForContainer.getRenderFor);
210-
211- render (writer, method.filePath, templates.methodTemplate, data );
220+ var content = renderMethod (data, templates.methodTemplate);
221+ write (writer, method.filePath, data, content );
212222 }
213223
214224 @override
@@ -221,17 +231,18 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
221231 Library lib, Container clazz, Field property) {
222232 TemplateData data = PropertyTemplateData (options, packageGraph, lib, clazz,
223233 property, sidebarForContainer.getRenderFor);
224-
225- render (writer, property.filePath, templates.propertyTemplate, data );
234+ var content = renderProperty (data, templates.propertyTemplate);
235+ write (writer, property.filePath, data, content );
226236 }
227237
228238 @override
229239 void generateTopLevelProperty (FileWriter writer, PackageGraph packageGraph,
230240 Library lib, TopLevelVariable property) {
231241 TemplateData data = TopLevelPropertyTemplateData (
232242 options, packageGraph, lib, property, sidebarForLibrary.getRenderFor);
233-
234- render (writer, property.filePath, templates.topLevelPropertyTemplate, data);
243+ var content =
244+ renderTopLevelProperty (data, templates.topLevelPropertyTemplate);
245+ write (writer, property.filePath, data, content);
235246 }
236247
237248 @override
@@ -244,8 +255,8 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
244255 Library lib, Typedef typeDef) {
245256 TemplateData data = TypedefTemplateData (
246257 options, packageGraph, lib, typeDef, sidebarForLibrary.getRenderFor);
247-
248- render (writer, typeDef.filePath, templates.typeDefTemplate, data );
258+ var content = renderTypedef (data, templates.typeDefTemplate);
259+ write (writer, typeDef.filePath, data, content );
249260 }
250261
251262 @override
0 commit comments