@@ -41,25 +41,6 @@ const _partials = <String>[
41
41
'accessor_setter' ,
42
42
];
43
43
44
- const _requiredTemplates = < String > [
45
- '404error.html' ,
46
- 'category.html' ,
47
- 'class.html' ,
48
- 'constant.html' ,
49
- 'constructor.html' ,
50
- 'enum.html' ,
51
- 'extension.html' ,
52
- 'function.html' ,
53
- 'index.html' ,
54
- 'library.html' ,
55
- 'method.html' ,
56
- 'mixin.html' ,
57
- 'property.html' ,
58
- 'top_level_constant.html' ,
59
- 'top_level_property.html' ,
60
- 'typedef.html' ,
61
- ];
62
-
63
44
const String _headerPlaceholder = '{{! header placeholder }}' ;
64
45
const String _footerPlaceholder = '{{! footer placeholder }}' ;
65
46
const String _footerTextPlaceholder = '{{! footer-text placeholder }}' ;
@@ -97,34 +78,41 @@ abstract class _TemplatesLoader {
97
78
Future <String > loadTemplate (String name);
98
79
}
99
80
81
+ /// Loads default templates included in the Dartdoc program.
100
82
class _DefaultTemplatesLoader extends _TemplatesLoader {
83
+ final String _format;
84
+
85
+ _DefaultTemplatesLoader (this ._format);
86
+
101
87
@override
102
88
Future <Map <String , String >> loadPartials () async {
103
89
var partials = < String , String > {};
104
- for (String partial in _partials) {
105
- var uri = 'package:dartdoc/templates/_$ partial .html ' ;
106
- partials[partial ] = await loader.loadAsString (uri);
90
+ for (String name in _partials) {
91
+ var uri = 'package:dartdoc/templates/$ _format /_$ name .$ _format ' ;
92
+ partials[name ] = await loader.loadAsString (uri);
107
93
}
108
94
return partials;
109
95
}
110
96
111
97
@override
112
98
Future <String > loadTemplate (String name) =>
113
- loader.loadAsString ('package:dartdoc/templates/$name ' );
99
+ loader.loadAsString ('package:dartdoc/templates/$_format /$ name .$ _format ' );
114
100
}
115
101
102
+ /// Loads templates from a specified Directory.
116
103
class _DirectoryTemplatesLoader extends _TemplatesLoader {
117
104
final Directory _directory;
105
+ final String _format;
118
106
119
- _DirectoryTemplatesLoader (this ._directory);
107
+ _DirectoryTemplatesLoader (this ._directory, this ._format );
120
108
121
109
@override
122
110
Future <Map <String , String >> loadPartials () async {
123
111
var partials = < String , String > {};
124
112
125
113
for (File file in _directory.listSync ().whereType <File >()) {
126
114
var basename = path.basename (file.path);
127
- if (basename.startsWith ('_' ) && basename.endsWith ('.html ' )) {
115
+ if (basename.startsWith ('_' ) && basename.endsWith ('.$ _format ' )) {
128
116
var content = file.readAsString ();
129
117
var partialName = basename.substring (1 , basename.lastIndexOf ('.' ));
130
118
partials[partialName] = await content;
@@ -135,7 +123,10 @@ class _DirectoryTemplatesLoader extends _TemplatesLoader {
135
123
136
124
@override
137
125
Future <String > loadTemplate (String name) {
138
- var file = File (path.join (_directory.path, name));
126
+ var file = File (path.join (_directory.path, '$name .$_format ' ));
127
+ if (! file.existsSync ()) {
128
+ throw DartdocFailure ('Missing required template file: $name .$_format ' );
129
+ }
139
130
return file.readAsString ();
140
131
}
141
132
}
@@ -158,51 +149,41 @@ class Templates {
158
149
final Template topLevelPropertyTemplate;
159
150
final Template typeDefTemplate;
160
151
161
- static Future <Templates > fromContext (GeneratorContext context) {
152
+ static Future <Templates > fromContext (DartdocGeneratorOptionContext context) {
162
153
String templatesDir = context.templatesDir;
163
154
if (templatesDir != null ) {
164
- return fromDirectory (Directory (templatesDir),
155
+ return fromDirectory (Directory (templatesDir), context.format,
165
156
headerPaths: context.header,
166
157
footerPaths: context.footer,
167
158
footerTextPaths: context.footerTextPaths);
168
159
} else {
169
- return createDefault (
160
+ return createDefault (context.format,
170
161
headerPaths: context.header,
171
162
footerPaths: context.footer,
172
163
footerTextPaths: context.footerTextPaths);
173
164
}
174
165
}
175
166
176
- static Future <Templates > createDefault (
167
+ static Future <Templates > createDefault (String format,
177
168
{List <String > headerPaths,
178
169
List <String > footerPaths,
179
170
List <String > footerTextPaths}) async {
180
- return _create (_DefaultTemplatesLoader (),
171
+ return _create (_DefaultTemplatesLoader (format ),
181
172
headerPaths: headerPaths,
182
173
footerPaths: footerPaths,
183
174
footerTextPaths: footerTextPaths);
184
175
}
185
176
186
- static Future <Templates > fromDirectory (Directory dir,
177
+ static Future <Templates > fromDirectory (Directory dir, String format,
187
178
{List <String > headerPaths,
188
179
List <String > footerPaths,
189
180
List <String > footerTextPaths}) async {
190
- await _checkRequiredTemplatesExist (dir);
191
- return _create (_DirectoryTemplatesLoader (dir),
181
+ return _create (_DirectoryTemplatesLoader (dir, format),
192
182
headerPaths: headerPaths,
193
183
footerPaths: footerPaths,
194
184
footerTextPaths: footerTextPaths);
195
185
}
196
186
197
- static void _checkRequiredTemplatesExist (Directory dir) {
198
- for (var name in _requiredTemplates) {
199
- var file = File (path.join (dir.path, name));
200
- if (! file.existsSync ()) {
201
- throw DartdocFailure ('Missing required template file: "$name "' );
202
- }
203
- }
204
- }
205
-
206
187
static Future <Templates > _create (_TemplatesLoader templatesLoader,
207
188
{List <String > headerPaths,
208
189
List <String > footerPaths,
@@ -224,24 +205,22 @@ class Templates {
224
205
return Template (templateContents, partialResolver: _partial);
225
206
}
226
207
227
- var indexTemplate = await _loadTemplate ('index.html' );
228
- var libraryTemplate = await _loadTemplate ('library.html' );
229
- var categoryTemplate = await _loadTemplate ('category.html' );
230
- var classTemplate = await _loadTemplate ('class.html' );
231
- var extensionTemplate = await _loadTemplate ('extension.html' );
232
- var enumTemplate = await _loadTemplate ('enum.html' );
233
- var functionTemplate = await _loadTemplate ('function.html' );
234
- var methodTemplate = await _loadTemplate ('method.html' );
235
- var constructorTemplate = await _loadTemplate ('constructor.html' );
236
- var errorTemplate = await _loadTemplate ('404error.html' );
237
- var propertyTemplate = await _loadTemplate ('property.html' );
238
- var constantTemplate = await _loadTemplate ('constant.html' );
239
- var topLevelConstantTemplate =
240
- await _loadTemplate ('top_level_constant.html' );
241
- var topLevelPropertyTemplate =
242
- await _loadTemplate ('top_level_property.html' );
243
- var typeDefTemplate = await _loadTemplate ('typedef.html' );
244
- var mixinTemplate = await _loadTemplate ('mixin.html' );
208
+ var indexTemplate = await _loadTemplate ('index' );
209
+ var libraryTemplate = await _loadTemplate ('library' );
210
+ var categoryTemplate = await _loadTemplate ('category' );
211
+ var classTemplate = await _loadTemplate ('class' );
212
+ var extensionTemplate = await _loadTemplate ('extension' );
213
+ var enumTemplate = await _loadTemplate ('enum' );
214
+ var functionTemplate = await _loadTemplate ('function' );
215
+ var methodTemplate = await _loadTemplate ('method' );
216
+ var constructorTemplate = await _loadTemplate ('constructor' );
217
+ var errorTemplate = await _loadTemplate ('404error' );
218
+ var propertyTemplate = await _loadTemplate ('property' );
219
+ var constantTemplate = await _loadTemplate ('constant' );
220
+ var topLevelConstantTemplate = await _loadTemplate ('top_level_constant' );
221
+ var topLevelPropertyTemplate = await _loadTemplate ('top_level_property' );
222
+ var typeDefTemplate = await _loadTemplate ('typedef' );
223
+ var mixinTemplate = await _loadTemplate ('mixin' );
245
224
246
225
return Templates ._(
247
226
indexTemplate,
0 commit comments