diff --git a/source/ddox/htmlgenerator.d b/source/ddox/htmlgenerator.d
index b1a5d53e..002857b7 100644
--- a/source/ddox/htmlgenerator.d
+++ b/source/ddox/htmlgenerator.d
@@ -16,6 +16,7 @@ import std.array;
import std.digest.md;
import std.format : formattedWrite;
import std.string : startsWith, toLower;
+import std.traits : EnumMembers;
import std.variant;
import vibe.core.log;
import vibe.core.file;
@@ -25,6 +26,7 @@ import vibe.inet.path;
import vibe.http.server;
import vibe.stream.wrapper : StreamOutputRange;
import diet.html;
+import diet.traits : dietTraits;
/*
@@ -232,11 +234,17 @@ class DocPageInfo {
}
}
+@dietTraits
+struct DdoxDietTraits(HTMLOutputStyle htmlStyle) {
+ // fields and functions must be static atm., see https://github.com/rejectedsoftware/diet-ng/issues/33
+ enum HTMLOutputStyle htmlOutputStyle = htmlStyle;
+}
+
void generateSitemap(OutputStream dst, Package root_package, GeneratorSettings settings, string delegate(in Entity) link_to, HTTPServerRequest req = null)
{
dst.write("\n");
dst.write("\n");
-
+
void writeEntry(string[] parts...){
dst.write("");
foreach( p; parts )
@@ -305,7 +313,15 @@ void generateApiIndex(OutputStream dst, Package root_package, GeneratorSettings
info.node = root_package;
auto rng = StreamOutputRange(dst);
- rng.compileHTMLDietFile!("ddox.overview.dt", req, info);
+ final switch (settings.htmlOutputStyle)
+ {
+ foreach (htmlOutputStyle; EnumMembers!HTMLOutputStyle)
+ case htmlOutputStyle:
+ {
+ rng.compileHTMLDietFile!("ddox.overview.dt", req, info, DdoxDietTraits!(htmlOutputStyle));
+ return;
+ }
+ }
}
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
info.docGroups = null;
auto rng = StreamOutputRange(dst);
- rng.compileHTMLDietFile!("ddox.module.dt", req, info);
+ final switch (settings.htmlOutputStyle)
+ {
+ foreach (htmlOutputStyle; EnumMembers!HTMLOutputStyle)
+ case htmlOutputStyle:
+ {
+ rng.compileHTMLDietFile!("ddox.module.dt", req, info, DdoxDietTraits!(htmlOutputStyle));
+ return;
+ }
+ }
}
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
info.nestedName = nested_name;
auto rng = StreamOutputRange(dst);
- rng.compileHTMLDietFile!("ddox.docpage.dt", req, info);
+ final switch (settings.htmlOutputStyle)
+ {
+ foreach (htmlOutputStyle; EnumMembers!HTMLOutputStyle)
+ case htmlOutputStyle:
+ {
+ rng.compileHTMLDietFile!("ddox.docpage.dt", req, info, DdoxDietTraits!(htmlOutputStyle));
+ return;
+ }
+ }
}
private bool cmpKind(in Entity a, in Entity b)
diff --git a/source/ddox/main.d b/source/ddox/main.d
index 4a29dd42..f146acf1 100644
--- a/source/ddox/main.d
+++ b/source/ddox/main.d
@@ -111,33 +111,32 @@ int cmdServeTest(string[] args)
int setupGeneratorInput(ref string[] args, out GeneratorSettings gensettings, out Package pack)
{
+ gensettings = new GeneratorSettings;
+ auto docsettings = new DdoxSettings;
+
string[] macrofiles;
string[] overridemacrofiles;
- NavigationType navtype = NavigationType.ModuleTree;
- string[] pack_order;
string sitemapurl = "http://127.0.0.1/";
- MethodStyle file_name_style = MethodStyle.unaltered;
- SortMode modsort = SortMode.protectionName;
- SortMode declsort = SortMode.protectionInheritanceName;
bool lowercasenames;
bool hyphenate;
- bool singlepageenum;
getopt(args,
//config.passThrough,
- "decl-sort", &declsort,
- "file-name-style", &file_name_style,
+ "decl-sort", &docsettings.declSort,
+ "file-name-style", &gensettings.fileNameStyle,
"hyphenate", &hyphenate,
"lowercase-names", &lowercasenames,
- "module-sort", &modsort,
- "navigation-type", &navtype,
+ "module-sort", &docsettings.moduleSort,
+ "navigation-type", &gensettings.navigationType,
"override-macros", &overridemacrofiles,
- "package-order", &pack_order,
+ "package-order", &docsettings.packageOrder,
"sitemap-url", &sitemapurl,
"std-macros", ¯ofiles,
- "enum-member-pages", &singlepageenum,
+ "enum-member-pages", &gensettings.enumMemberPages,
+ "html-style", &gensettings.htmlOutputStyle,
);
+ gensettings.siteUrl = URL(sitemapurl);
- if (lowercasenames) file_name_style = MethodStyle.lowerCase;
+ if (lowercasenames) gensettings.fileNameStyle = MethodStyle.lowerCase;
if( args.length < 3 ){
showUsage(args);
@@ -149,17 +148,8 @@ int setupGeneratorInput(ref string[] args, out GeneratorSettings gensettings, ou
if (hyphenate) enableHyphenation();
// parse the json output file
- auto docsettings = new DdoxSettings;
- docsettings.packageOrder = pack_order;
- docsettings.moduleSort = modsort;
- docsettings.declSort = declsort;
pack = parseDocFile(args[2], docsettings);
- gensettings = new GeneratorSettings;
- gensettings.siteUrl = URL(sitemapurl);
- gensettings.navigationType = navtype;
- gensettings.fileNameStyle = file_name_style;
- gensettings.enumMemberPages = singlepageenum;
return 0;
}
@@ -356,6 +346,7 @@ Use -h|--help to get detailed usage information for a command.
--decl-sort=MODE The sort order used for declaration lists
--web-file-dir=DIR Make files from dir available on the served site
--enum-member-pages Generate a single page per enum member
+ --html-style=STYLE Sets the HTML output style, either compact (default) or pretty.
--hyphenate hyphenate text
-h --help Show this help
@@ -385,6 +376,7 @@ protectionInheritanceName
This option is useful on case insensitive file
systems.
--enum-member-pages Generate a single page per enum member
+ --html-style=STYLE Sets the HTML output style, either compact (default) or pretty.
--hyphenate hyphenate text
-h --help Show this help
diff --git a/source/ddox/settings.d b/source/ddox/settings.d
index 33ef02d1..32d029eb 100644
--- a/source/ddox/settings.d
+++ b/source/ddox/settings.d
@@ -8,6 +8,7 @@
module ddox.settings;
import vibe.inet.url;
+import diet.html : HTMLOutputStyle;
public import vibe.web.common : MethodStyle;
enum SortMode {
@@ -50,6 +51,8 @@ class GeneratorSettings {
MethodStyle fileNameStyle = MethodStyle.unaltered;
/// Enables syntax highlighting for inline code
bool highlightInlineCode = true;
+ /// Select HTML style (e.g. compact, pretty)
+ HTMLOutputStyle htmlOutputStyle = HTMLOutputStyle.compact;
/// Creates a page per enum member instead of putting everything into a single table.
bool enumMemberPages;