@@ -41,25 +41,6 @@ const _partials = <String>[
4141 'accessor_setter' ,
4242];
4343
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-
6344const String _headerPlaceholder = '{{! header placeholder }}' ;
6445const String _footerPlaceholder = '{{! footer placeholder }}' ;
6546const String _footerTextPlaceholder = '{{! footer-text placeholder }}' ;
@@ -97,34 +78,41 @@ abstract class _TemplatesLoader {
9778 Future <String > loadTemplate (String name);
9879}
9980
81+ /// Loads default templates included in the Dartdoc program.
10082class _DefaultTemplatesLoader extends _TemplatesLoader {
83+ final String _format;
84+
85+ _DefaultTemplatesLoader (this ._format);
86+
10187 @override
10288 Future <Map <String , String >> loadPartials () async {
10389 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);
10793 }
10894 return partials;
10995 }
11096
11197 @override
11298 Future <String > loadTemplate (String name) =>
113- loader.loadAsString ('package:dartdoc/templates/$name ' );
99+ loader.loadAsString ('package:dartdoc/templates/$_format /$ name .$ _format ' );
114100}
115101
102+ /// Loads templates from a specified Directory.
116103class _DirectoryTemplatesLoader extends _TemplatesLoader {
117104 final Directory _directory;
105+ final String _format;
118106
119- _DirectoryTemplatesLoader (this ._directory);
107+ _DirectoryTemplatesLoader (this ._directory, this ._format );
120108
121109 @override
122110 Future <Map <String , String >> loadPartials () async {
123111 var partials = < String , String > {};
124112
125113 for (File file in _directory.listSync ().whereType <File >()) {
126114 var basename = path.basename (file.path);
127- if (basename.startsWith ('_' ) && basename.endsWith ('.html ' )) {
115+ if (basename.startsWith ('_' ) && basename.endsWith ('.$ _format ' )) {
128116 var content = file.readAsString ();
129117 var partialName = basename.substring (1 , basename.lastIndexOf ('.' ));
130118 partials[partialName] = await content;
@@ -135,7 +123,10 @@ class _DirectoryTemplatesLoader extends _TemplatesLoader {
135123
136124 @override
137125 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+ }
139130 return file.readAsString ();
140131 }
141132}
@@ -158,51 +149,41 @@ class Templates {
158149 final Template topLevelPropertyTemplate;
159150 final Template typeDefTemplate;
160151
161- static Future <Templates > fromContext (GeneratorContext context) {
152+ static Future <Templates > fromContext (DartdocGeneratorOptionContext context) {
162153 String templatesDir = context.templatesDir;
163154 if (templatesDir != null ) {
164- return fromDirectory (Directory (templatesDir),
155+ return fromDirectory (Directory (templatesDir), context.format,
165156 headerPaths: context.header,
166157 footerPaths: context.footer,
167158 footerTextPaths: context.footerTextPaths);
168159 } else {
169- return createDefault (
160+ return createDefault (context.format,
170161 headerPaths: context.header,
171162 footerPaths: context.footer,
172163 footerTextPaths: context.footerTextPaths);
173164 }
174165 }
175166
176- static Future <Templates > createDefault (
167+ static Future <Templates > createDefault (String format,
177168 {List <String > headerPaths,
178169 List <String > footerPaths,
179170 List <String > footerTextPaths}) async {
180- return _create (_DefaultTemplatesLoader (),
171+ return _create (_DefaultTemplatesLoader (format ),
181172 headerPaths: headerPaths,
182173 footerPaths: footerPaths,
183174 footerTextPaths: footerTextPaths);
184175 }
185176
186- static Future <Templates > fromDirectory (Directory dir,
177+ static Future <Templates > fromDirectory (Directory dir, String format,
187178 {List <String > headerPaths,
188179 List <String > footerPaths,
189180 List <String > footerTextPaths}) async {
190- await _checkRequiredTemplatesExist (dir);
191- return _create (_DirectoryTemplatesLoader (dir),
181+ return _create (_DirectoryTemplatesLoader (dir, format),
192182 headerPaths: headerPaths,
193183 footerPaths: footerPaths,
194184 footerTextPaths: footerTextPaths);
195185 }
196186
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-
206187 static Future <Templates > _create (_TemplatesLoader templatesLoader,
207188 {List <String > headerPaths,
208189 List <String > footerPaths,
@@ -224,24 +205,22 @@ class Templates {
224205 return Template (templateContents, partialResolver: _partial);
225206 }
226207
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' );
245224
246225 return Templates ._(
247226 indexTemplate,
0 commit comments