Skip to content

Commit 50e609a

Browse files
authored
Merge pull request #166 from MartinNowak/pretty_html
Add --html-style option
2 parents 9af7754 + b55d372 commit 50e609a

File tree

3 files changed

+53
-26
lines changed

3 files changed

+53
-26
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: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -111,33 +111,32 @@ int cmdServeTest(string[] args)
111111

112112
int setupGeneratorInput(ref string[] args, out GeneratorSettings gensettings, out Package pack)
113113
{
114+
gensettings = new GeneratorSettings;
115+
auto docsettings = new DdoxSettings;
116+
114117
string[] macrofiles;
115118
string[] overridemacrofiles;
116-
NavigationType navtype = NavigationType.ModuleTree;
117-
string[] pack_order;
118119
string sitemapurl = "http://127.0.0.1/";
119-
MethodStyle file_name_style = MethodStyle.unaltered;
120-
SortMode modsort = SortMode.protectionName;
121-
SortMode declsort = SortMode.protectionInheritanceName;
122120
bool lowercasenames;
123121
bool hyphenate;
124-
bool singlepageenum;
125122
getopt(args,
126123
//config.passThrough,
127-
"decl-sort", &declsort,
128-
"file-name-style", &file_name_style,
124+
"decl-sort", &docsettings.declSort,
125+
"file-name-style", &gensettings.fileNameStyle,
129126
"hyphenate", &hyphenate,
130127
"lowercase-names", &lowercasenames,
131-
"module-sort", &modsort,
132-
"navigation-type", &navtype,
128+
"module-sort", &docsettings.moduleSort,
129+
"navigation-type", &gensettings.navigationType,
133130
"override-macros", &overridemacrofiles,
134-
"package-order", &pack_order,
131+
"package-order", &docsettings.packageOrder,
135132
"sitemap-url", &sitemapurl,
136133
"std-macros", &macrofiles,
137-
"enum-member-pages", &singlepageenum,
134+
"enum-member-pages", &gensettings.enumMemberPages,
135+
"html-style", &gensettings.htmlOutputStyle,
138136
);
137+
gensettings.siteUrl = URL(sitemapurl);
139138

140-
if (lowercasenames) file_name_style = MethodStyle.lowerCase;
139+
if (lowercasenames) gensettings.fileNameStyle = MethodStyle.lowerCase;
141140

142141
if( args.length < 3 ){
143142
showUsage(args);
@@ -149,17 +148,8 @@ int setupGeneratorInput(ref string[] args, out GeneratorSettings gensettings, ou
149148
if (hyphenate) enableHyphenation();
150149

151150
// parse the json output file
152-
auto docsettings = new DdoxSettings;
153-
docsettings.packageOrder = pack_order;
154-
docsettings.moduleSort = modsort;
155-
docsettings.declSort = declsort;
156151
pack = parseDocFile(args[2], docsettings);
157152

158-
gensettings = new GeneratorSettings;
159-
gensettings.siteUrl = URL(sitemapurl);
160-
gensettings.navigationType = navtype;
161-
gensettings.fileNameStyle = file_name_style;
162-
gensettings.enumMemberPages = singlepageenum;
163153
return 0;
164154
}
165155

@@ -356,6 +346,7 @@ Use <COMMAND> -h|--help to get detailed usage information for a command.
356346
--decl-sort=MODE The sort order used for declaration lists
357347
--web-file-dir=DIR Make files from dir available on the served site
358348
--enum-member-pages Generate a single page per enum member
349+
--html-style=STYLE Sets the HTML output style, either compact (default) or pretty.
359350
--hyphenate hyphenate text
360351
-h --help Show this help
361352
@@ -385,6 +376,7 @@ protectionInheritanceName
385376
This option is useful on case insensitive file
386377
systems.
387378
--enum-member-pages Generate a single page per enum member
379+
--html-style=STYLE Sets the HTML output style, either compact (default) or pretty.
388380
--hyphenate hyphenate text
389381
-h --help Show this help
390382

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)