@@ -8,11 +8,12 @@ import 'package:dartdoc/src/generator/generator_frontend.dart';
8
8
import 'package:dartdoc/src/generator/generator_utils.dart' as generator_util;
9
9
import 'package:dartdoc/src/generator/template_data.dart' ;
10
10
import 'package:dartdoc/src/generator/templates.dart' ;
11
+ import 'package:dartdoc/src/generator/templates.renderers.dart' ;
11
12
import 'package:dartdoc/src/model/model.dart' ;
12
13
import 'package:dartdoc/src/model/package.dart' ;
13
14
import 'package:dartdoc/src/model/package_graph.dart' ;
15
+ import 'package:dartdoc/src/mustachio/renderer_base.dart' ;
14
16
import 'package:dartdoc/src/warnings.dart' ;
15
- import 'package:mustache/mustache.dart' ;
16
17
import 'package:path/path.dart' as path show Context;
17
18
18
19
/// Configuration options for the Dartdoc's default backend.
@@ -61,38 +62,41 @@ class DartdocGeneratorBackendOptions implements TemplateOptions {
61
62
customInnerFooterText = '' ;
62
63
}
63
64
64
- class SidebarGenerator <T extends Documentable > {
65
+ class SidebarGenerator <T extends TemplateData > {
65
66
final Template template;
66
- final Map <T , String > _renderCache = {};
67
+ final RenderFunction <T > renderFunction;
68
+ final Map <Documentable , String > _renderCache = {};
67
69
68
- SidebarGenerator (this .template);
70
+ SidebarGenerator (this .template, this .renderFunction );
69
71
70
72
// Retrieve the render for a specific key, or generate it using the given
71
73
// 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 );
74
76
}
75
77
}
76
78
77
79
/// Base GeneratorBackend for Dartdoc's supported formats.
78
80
abstract class DartdocGeneratorBackend implements GeneratorBackend {
79
81
final DartdocGeneratorBackendOptions options;
80
82
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;
83
87
final path.Context _pathContext;
84
88
85
89
DartdocGeneratorBackend (
86
90
DartdocGeneratorBackendOptions options, this .templates, this ._pathContext)
87
91
: 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);
91
96
92
97
/// 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) {
96
100
if (! options.useBaseHref) {
97
101
content = content.replaceAll (htmlBasePlaceholder, data.htmlBase);
98
102
}
@@ -128,30 +132,34 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
128
132
@override
129
133
void generatePackage (FileWriter writer, PackageGraph graph, Package package) {
130
134
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);
132
137
}
133
138
134
139
@override
135
140
void generateCategory (
136
141
FileWriter writer, PackageGraph packageGraph, Category category) {
137
142
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);
139
145
}
140
146
141
147
@override
142
148
void generateLibrary (
143
149
FileWriter writer, PackageGraph packageGraph, Library lib) {
144
150
TemplateData data = LibraryTemplateData (
145
151
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);
147
154
}
148
155
149
156
@override
150
157
void generateClass (
151
158
FileWriter writer, PackageGraph packageGraph, Library lib, Class clazz) {
152
159
TemplateData data = ClassTemplateData (options, packageGraph, lib, clazz,
153
160
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);
155
163
}
156
164
157
165
@override
@@ -164,51 +172,53 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
164
172
extension ,
165
173
sidebarForLibrary.getRenderFor,
166
174
sidebarForContainer.getRenderFor);
167
- render (writer, extension .filePath, templates.extensionTemplate, data);
175
+ var content = renderExtension (data, templates.extensionTemplate);
176
+ write (writer, extension .filePath, data, content);
168
177
}
169
178
170
179
@override
171
180
void generateMixin (
172
181
FileWriter writer, PackageGraph packageGraph, Library lib, Mixin mixin ) {
173
182
TemplateData data = MixinTemplateData (options, packageGraph, lib, mixin ,
174
183
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);
176
186
}
177
187
178
188
@override
179
189
void generateConstructor (FileWriter writer, PackageGraph packageGraph,
180
190
Library lib, Class clazz, Constructor constructor) {
181
191
TemplateData data = ConstructorTemplateData (options, packageGraph, lib,
182
192
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 );
185
195
}
186
196
187
197
@override
188
198
void generateEnum (
189
199
FileWriter writer, PackageGraph packageGraph, Library lib, Enum eNum) {
190
200
TemplateData data = EnumTemplateData (options, packageGraph, lib, eNum,
191
201
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 );
194
204
}
195
205
196
206
@override
197
207
void generateFunction (FileWriter writer, PackageGraph packageGraph,
198
208
Library lib, ModelFunction function) {
199
209
TemplateData data = FunctionTemplateData (
200
210
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 );
203
213
}
204
214
205
215
@override
206
216
void generateMethod (FileWriter writer, PackageGraph packageGraph, Library lib,
207
217
Container clazz, Method method) {
208
218
TemplateData data = MethodTemplateData (options, packageGraph, lib, clazz,
209
219
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 );
212
222
}
213
223
214
224
@override
@@ -221,17 +231,18 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
221
231
Library lib, Container clazz, Field property) {
222
232
TemplateData data = PropertyTemplateData (options, packageGraph, lib, clazz,
223
233
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 );
226
236
}
227
237
228
238
@override
229
239
void generateTopLevelProperty (FileWriter writer, PackageGraph packageGraph,
230
240
Library lib, TopLevelVariable property) {
231
241
TemplateData data = TopLevelPropertyTemplateData (
232
242
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);
235
246
}
236
247
237
248
@override
@@ -244,8 +255,8 @@ abstract class DartdocGeneratorBackend implements GeneratorBackend {
244
255
Library lib, Typedef typeDef) {
245
256
TemplateData data = TypedefTemplateData (
246
257
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 );
249
260
}
250
261
251
262
@override
0 commit comments