From ecf9fd643d914d652a3b1b11cd490d143b1e63b1 Mon Sep 17 00:00:00 2001 From: Martin Nowak Date: Wed, 9 Aug 2017 17:53:55 +0200 Subject: [PATCH 1/2] simplify & dedup default values for argument parsing --- source/ddox/main.d | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/source/ddox/main.d b/source/ddox/main.d index 4a29dd42..f422d5fb 100644 --- a/source/ddox/main.d +++ b/source/ddox/main.d @@ -111,33 +111,31 @@ 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, ); + 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 +147,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; } From b55d372163cda1e62532f47f3505281ab4f494e4 Mon Sep 17 00:00:00 2001 From: Martin Nowak Date: Wed, 9 Aug 2017 18:53:38 +0200 Subject: [PATCH 2/2] add --html-style option - allow to pretty-print HTML output (useful for tests and development) - quite suboptimal due to https://github.com/rejectedsoftware/diet-ng/issues/33 --- source/ddox/htmlgenerator.d | 40 +++++++++++++++++++++++++++++++++---- source/ddox/main.d | 3 +++ source/ddox/settings.d | 3 +++ 3 files changed, 42 insertions(+), 4 deletions(-) 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 f422d5fb..f146acf1 100644 --- a/source/ddox/main.d +++ b/source/ddox/main.d @@ -132,6 +132,7 @@ int setupGeneratorInput(ref string[] args, out GeneratorSettings gensettings, ou "sitemap-url", &sitemapurl, "std-macros", ¯ofiles, "enum-member-pages", &gensettings.enumMemberPages, + "html-style", &gensettings.htmlOutputStyle, ); gensettings.siteUrl = URL(sitemapurl); @@ -345,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 @@ -374,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;