Skip to content

Commit b55d372

Browse files
committed
add --html-style option
- allow to pretty-print HTML output (useful for tests and development) - quite suboptimal due to rejectedsoftware/diet-ng#33
1 parent ecf9fd6 commit b55d372

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

source/ddox/htmlgenerator.d

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import std.array;
1616
import std.digest.md;
1717
import std.format : formattedWrite;
1818
import std.string : startsWith, toLower;
19+
import std.traits : EnumMembers;
1920
import std.variant;
2021
import vibe.core.log;
2122
import vibe.core.file;
@@ -25,6 +26,7 @@ import vibe.inet.path;
2526
import vibe.http.server;
2627
import vibe.stream.wrapper : StreamOutputRange;
2728
import diet.html;
29+
import diet.traits : dietTraits;
2830

2931

3032
/*
@@ -232,11 +234,17 @@ class DocPageInfo {
232234
}
233235
}
234236

237+
@dietTraits
238+
struct DdoxDietTraits(HTMLOutputStyle htmlStyle) {
239+
// fields and functions must be static atm., see https://github.com/rejectedsoftware/diet-ng/issues/33
240+
enum HTMLOutputStyle htmlOutputStyle = htmlStyle;
241+
}
242+
235243
void generateSitemap(OutputStream dst, Package root_package, GeneratorSettings settings, string delegate(in Entity) link_to, HTTPServerRequest req = null)
236244
{
237245
dst.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
238246
dst.write("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n");
239-
247+
240248
void writeEntry(string[] parts...){
241249
dst.write("<url><loc>");
242250
foreach( p; parts )
@@ -305,7 +313,15 @@ void generateApiIndex(OutputStream dst, Package root_package, GeneratorSettings
305313
info.node = root_package;
306314

307315
auto rng = StreamOutputRange(dst);
308-
rng.compileHTMLDietFile!("ddox.overview.dt", req, info);
316+
final switch (settings.htmlOutputStyle)
317+
{
318+
foreach (htmlOutputStyle; EnumMembers!HTMLOutputStyle)
319+
case htmlOutputStyle:
320+
{
321+
rng.compileHTMLDietFile!("ddox.overview.dt", req, info, DdoxDietTraits!(htmlOutputStyle));
322+
return;
323+
}
324+
}
309325
}
310326

311327
void generateModulePage(OutputStream dst, Package root_package, Module mod, GeneratorSettings settings, string delegate(in Entity) link_to, HTTPServerRequest req = null)
@@ -319,7 +335,15 @@ void generateModulePage(OutputStream dst, Package root_package, Module mod, Gene
319335
info.docGroups = null;
320336

321337
auto rng = StreamOutputRange(dst);
322-
rng.compileHTMLDietFile!("ddox.module.dt", req, info);
338+
final switch (settings.htmlOutputStyle)
339+
{
340+
foreach (htmlOutputStyle; EnumMembers!HTMLOutputStyle)
341+
case htmlOutputStyle:
342+
{
343+
rng.compileHTMLDietFile!("ddox.module.dt", req, info, DdoxDietTraits!(htmlOutputStyle));
344+
return;
345+
}
346+
}
323347
}
324348

325349
void generateDeclPage(OutputStream dst, Package root_package, Module mod, string nested_name, DocGroup[] docgroups, GeneratorSettings settings, string delegate(in Entity) link_to, HTTPServerRequest req = null)
@@ -337,7 +361,15 @@ void generateDeclPage(OutputStream dst, Package root_package, Module mod, string
337361
info.nestedName = nested_name;
338362

339363
auto rng = StreamOutputRange(dst);
340-
rng.compileHTMLDietFile!("ddox.docpage.dt", req, info);
364+
final switch (settings.htmlOutputStyle)
365+
{
366+
foreach (htmlOutputStyle; EnumMembers!HTMLOutputStyle)
367+
case htmlOutputStyle:
368+
{
369+
rng.compileHTMLDietFile!("ddox.docpage.dt", req, info, DdoxDietTraits!(htmlOutputStyle));
370+
return;
371+
}
372+
}
341373
}
342374

343375
private bool cmpKind(in Entity a, in Entity b)

source/ddox/main.d

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ int setupGeneratorInput(ref string[] args, out GeneratorSettings gensettings, ou
132132
"sitemap-url", &sitemapurl,
133133
"std-macros", &macrofiles,
134134
"enum-member-pages", &gensettings.enumMemberPages,
135+
"html-style", &gensettings.htmlOutputStyle,
135136
);
136137
gensettings.siteUrl = URL(sitemapurl);
137138

@@ -345,6 +346,7 @@ Use <COMMAND> -h|--help to get detailed usage information for a command.
345346
--decl-sort=MODE The sort order used for declaration lists
346347
--web-file-dir=DIR Make files from dir available on the served site
347348
--enum-member-pages Generate a single page per enum member
349+
--html-style=STYLE Sets the HTML output style, either compact (default) or pretty.
348350
--hyphenate hyphenate text
349351
-h --help Show this help
350352
@@ -374,6 +376,7 @@ protectionInheritanceName
374376
This option is useful on case insensitive file
375377
systems.
376378
--enum-member-pages Generate a single page per enum member
379+
--html-style=STYLE Sets the HTML output style, either compact (default) or pretty.
377380
--hyphenate hyphenate text
378381
-h --help Show this help
379382

source/ddox/settings.d

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
module ddox.settings;
99

1010
import vibe.inet.url;
11+
import diet.html : HTMLOutputStyle;
1112
public import vibe.web.common : MethodStyle;
1213

1314
enum SortMode {
@@ -50,6 +51,8 @@ class GeneratorSettings {
5051
MethodStyle fileNameStyle = MethodStyle.unaltered;
5152
/// Enables syntax highlighting for inline code
5253
bool highlightInlineCode = true;
54+
/// Select HTML style (e.g. compact, pretty)
55+
HTMLOutputStyle htmlOutputStyle = HTMLOutputStyle.compact;
5356

5457
/// Creates a page per enum member instead of putting everything into a single table.
5558
bool enumMemberPages;

0 commit comments

Comments
 (0)