Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 36 additions & 4 deletions source/ddox/htmlgenerator.d
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -25,6 +26,7 @@ import vibe.inet.path;
import vibe.http.server;
import vibe.stream.wrapper : StreamOutputRange;
import diet.html;
import diet.traits : dietTraits;


/*
Expand Down Expand Up @@ -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("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
dst.write("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n");

void writeEntry(string[] parts...){
dst.write("<url><loc>");
foreach( p; parts )
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down
36 changes: 14 additions & 22 deletions source/ddox/main.d
Original file line number Diff line number Diff line change
Expand Up @@ -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", &macrofiles,
"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);
Expand All @@ -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;
}

Expand Down Expand Up @@ -356,6 +346,7 @@ Use <COMMAND> -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

Expand Down Expand Up @@ -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

Expand Down
3 changes: 3 additions & 0 deletions source/ddox/settings.d
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
module ddox.settings;

import vibe.inet.url;
import diet.html : HTMLOutputStyle;
public import vibe.web.common : MethodStyle;

enum SortMode {
Expand Down Expand Up @@ -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;
Expand Down