From b243ba3e00bf6cd5e9298903bc69d8efc7a03414 Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Thu, 1 Mar 2018 12:51:58 -0500
Subject: conf, make, meta, init and tidy substitution

---
 src/sdp/meta/conf_make_meta_json.d    |   6 +-
 src/sdp/meta/conf_make_meta_structs.d | 275 +++++++++++++++-------------------
 src/sdp/meta/metadoc_from_src.d       |  63 ++++----
 3 files changed, 155 insertions(+), 189 deletions(-)

(limited to 'src')

diff --git a/src/sdp/meta/conf_make_meta_json.d b/src/sdp/meta/conf_make_meta_json.d
index 916dd33..abb9b46 100644
--- a/src/sdp/meta/conf_make_meta_json.d
+++ b/src/sdp/meta/conf_make_meta_json.d
@@ -137,16 +137,16 @@ static template contentJSONtoSiSUstruct() {
       ) {
         _struct_composite.make_str.texpdf_font  = _json.object["make"]["texpdf_font"].str;
       }
-      _struct_composite.make.bold_rgxmatch                  = _mk.bold_rgxmatch(_struct_composite.make_str.bold);
+      _struct_composite.make.bold                           = _mk.bold(_struct_composite.make_str.bold);
       _struct_composite.make.breaks                         = _mk.breaks(_struct_composite.make_str.breaks);
       _struct_composite.make.cover_image                    = _mk.cover_image(_struct_composite.make_str.cover_image);
       _struct_composite.make.css                            = _mk.css(_struct_composite.make_str.css);
-      _struct_composite.make.emphasis_rgxmatch              = _mk.emphasis_rgxmatch(_struct_composite.make_str.emphasis);
+      _struct_composite.make.emphasis                       = _mk.emphasis(_struct_composite.make_str.emphasis);
       _struct_composite.make.footer                         = _mk.footer(_struct_composite.make_str.footer);
       _struct_composite.make.headings                       = _mk.headings(_struct_composite.make_str.headings);
       _struct_composite.make.home_button_image              = _mk.home_button_image(_struct_composite.make_str.home_button_image);
       _struct_composite.make.home_button_text               = _mk.home_button_text(_struct_composite.make_str.home_button_text);
-      _struct_composite.make.italics_rgxmatch               = _mk.italics_rgxmatch(_struct_composite.make_str.italics);
+      _struct_composite.make.italics                        = _mk.italics(_struct_composite.make_str.italics);
       _struct_composite.make.num_top                        = _mk.num_top(_struct_composite.make_str.num_top);
       _struct_composite.make.num_depth                      = _mk.num_depth(_struct_composite.make_str.num_depth);
       _struct_composite.make.substitute                     = _mk.substitute(_struct_composite.make_str.substitute);
diff --git a/src/sdp/meta/conf_make_meta_structs.d b/src/sdp/meta/conf_make_meta_structs.d
index d46b462..add72d6 100644
--- a/src/sdp/meta/conf_make_meta_structs.d
+++ b/src/sdp/meta/conf_make_meta_structs.d
@@ -10,36 +10,28 @@ import
   std.utf,
   std.conv : to;
 struct ConfCompositeMakeStr {
-  string bold                           = "";
-  string breaks                         = "";
-  string cover_image                    = "";
-  string css                            = "";
-  string emphasis                       = "";
-  string footer                         = "";
+  string bold;
+  string breaks;
+  string cover_image;
+  string css;
+  string emphasis;
+  string footer;
   string[] headings;
-  string home_button_image              = "";
-  string home_button_text               = "";
-  string italics                        = "";
-  string num_top                        = "";
-  string num_depth                      = "";
+  string home_button_image;
+  string home_button_text;
+  string italics;
+  string num_top;
+  string num_depth;
   string[][] substitute;
-  string texpdf_font                    = "";
+  string texpdf_font;
 }
 struct confCompositeMakeBuild {
-  auto bold_rgxmatch(string _mk) {
-    auto _rgxtxt = (_mk.empty)
-    ? `=NULL`
-    : `(` ~ _mk.dup ~ `)`;
-    return (cast(char[]) (_rgxtxt));
-  }
-  auto bold_substitute_abstract() {
-    return "*{$1}*";
-  }
-  auto bold_substitute_sisu_markup() {
-    return "*{$1}*";
-  }
-  auto bold_substitute_html() {
-    return "<b>$1</b>";
+  auto bold(string _mk) {
+    string[] _out;
+    if (_mk) {
+      _out = [ (cast(string) (`(` ~ _mk.dup ~ `)`)), "*{$1}*", "<b>$1</b>"];
+    }
+    return _out;
   }
   auto breaks(string _mk) {
     return _mk;
@@ -50,20 +42,12 @@ struct confCompositeMakeBuild {
   auto css(string _mk) {
     return _mk;
   }
-  auto emphasis_rgxmatch(string _mk) {
-    auto _rgxtxt = (_mk.empty)
-    ? `=NULL`
-    : `(` ~ _mk.dup ~ `)`;
-    return (cast(char[]) (_rgxtxt));
-  }
-  auto emphasis_substitute_abstract() {
-    return "!{$1}!";
-  }
-  auto emphasis_substitute_sisu_markup() {
-    return "!{$1}!";
-  }
-  auto emphasis_substitute_html() {
-    return "<em>$1</em>";
+  auto emphasis(string _mk) {
+    string[] _out;
+    if (_mk) {
+      _out = [ (cast(string) (`(` ~ _mk.dup ~ `)`)), "!{$1}!", "<em>$1</em>" ];
+    }
+    return _out;
   }
   auto footer(string _mk) {
     return _mk;
@@ -77,20 +61,12 @@ struct confCompositeMakeBuild {
   auto home_button_text(string _mk) {
     return _mk;
   }
-  auto italics_rgxmatch(string _mk) {
-    auto _rgxtxt = (_mk.empty)
-    ? `=NULL`
-    : `(` ~ _mk.dup ~ `)`;
-    return (cast(char[]) (_rgxtxt));
-  }
-  auto italics_substitute_abstract() {
-    return "/{$1}/";
-  }
-  auto italics_substitute_sisu_markup() {
-    return "/{$1}/";
-  }
-  auto italics_substitute_html() {
-    return "<i>$1</i>";
+  auto italics(string _mk) {
+    string[] _out;
+    if (_mk) {
+      _out = [ (cast(string) (`(` ~ _mk.dup ~ `)`)), "/{$1}/", "<i>$1</i>" ];
+    }
+    return _out;
   }
   auto num_top(string _mk) {
     return _mk;
@@ -106,112 +82,103 @@ struct confCompositeMakeBuild {
   }
 }
 struct ConfCompositeMakeInit {
-  char[] bold_rgxmatch                  = `=NULL`.dup;
-  auto bold_substitute_abstract         = "*{$1}*";
-  auto bold_substitute_sisu_markup      = "*{$1}*";
-  auto bold_substitute_html             = "<b>$1</b>";
-  string breaks                         = "";
-  string cover_image                    = "";
-  string css                            = "";
-  char[] emphasis_rgxmatch              = `=NULL`.dup;
-  auto emphasis_substitute_abstract     = "!{$1}!";
-  auto emphasis_substitute_sisu_markup  = "!{$1}!";
-  auto emphasis_substitute_html         = "<em>$1</em>";
-  string footer                         = "";
+  string[] bold;
+  string breaks;
+  string cover_image;
+  string css;
+  string[] emphasis;
+  string footer;
   string[] headings;
-  string home_button_image              = "";
-  string home_button_text               = "";
-  char[] italics_rgxmatch               = `=NULL`.dup;
-  auto italics_substitute_abstract      = "/{$1}/";
-  auto italics_substitute_sisu_markup   = "/{$1}/";
-  auto italics_substitute_html          = "<i>$1</i>";
-  string num_top                        = "";
-  string num_depth                      = "";
+  string home_button_image;
+  string home_button_text;
+  string[] italics;
+  string num_top;
+  string num_depth;
   string[][] substitute;
-  string texpdf_font                    = "";
+  string texpdf_font;
 }
 struct ConfCompositeSiteLocal {
-  string webserv_url_root               = "";
-  string webserv_path                   = "";
-  string webserv_images                 = "";
-  string webserv_cgi                    = "";
-  string webserv_cgi_host               = "";
-  string webserv_cgi_host_path          = "";
-  string webserv_cgi_port               = "";
-  string webserv_cgi_user               = "";
-  string webserv_cgi_file_links         = "";
-  string processing_path                = "";
-  string processing_dir                 = "";
-  string processing_concord_max         = "";
-  string flag_act0                      = "";
-  string flag_act1                      = "";
-  string flag_act2                      = "";
-  string flag_act3                      = "";
-  string flag_act4                      = "";
-  string flag_act5                      = "";
-  string flag_act6                      = "";
-  string flag_act7                      = "";
-  string flag_act8                      = "";
-  string flag_act9                      = "";
-  string default_papersize              = "";
-  string default_text_wrap              = "";
-  string default_emphasis               = "";
-  string default_language               = "";
-  string default_digest                 = "";
-  string permission_share_source        = "";
-  string search_flag                    = "";
-  string search_action                  = "";
-  string search_db                      = "";
-  string search_title                   = "";
+  string webserv_url_root;
+  string webserv_path;
+  string webserv_images;
+  string webserv_cgi;
+  string webserv_cgi_host;
+  string webserv_cgi_host_path;
+  string webserv_cgi_port;
+  string webserv_cgi_user;
+  string webserv_cgi_file_links;
+  string processing_path;
+  string processing_dir;
+  string processing_concord_max;
+  string flag_act0;
+  string flag_act1;
+  string flag_act2;
+  string flag_act3;
+  string flag_act4;
+  string flag_act5;
+  string flag_act6;
+  string flag_act7;
+  string flag_act8;
+  string flag_act9;
+  string default_papersize;
+  string default_text_wrap;
+  string default_emphasis;
+  string default_language;
+  string default_digest;
+  string permission_share_source;
+  string search_flag;
+  string search_action;
+  string search_db;
+  string search_title;
 }
 struct MetaComposite {
-  string classify_dewey                 = "";
-  string classify_keywords              = "";
-  string classify_loc                   = "";
-  string classify_subject               = "";
-  string classify_topic_register        = "";
-  string creator_author                 = "";
-  string creator_author_email           = "";
-  string creator_illustrator            = "";
-  string creator_translator             = "";
-  string date_added_to_site             = "";
-  string date_available                 = "";
-  string date_created                   = "";
-  string date_issued                    = "";
-  string date_modified                  = "";
-  string date_published                 = "";
-  string date_valid                     = "";
-  string identifier_isbn                = "";
-  string identifier_oclc                = "";
-  string identifier_pg                  = "";
-  string language_document              = "";
-  string language_document_char         = "";
-  string links                          = "";
-  string notes_abstract                 = "";
-  string notes_description              = "";
-  string original_language              = "";
-  string original_language_char         = "";
-  string original_publisher             = "";
-  string original_source                = "";
-  string original_title                 = "";
-  string publisher                      = "";
-  string rights_copyright               = "";
-  string rights_copyright_audio         = "";
-  string rights_copyright_cover         = "";
-  string rights_copyright_illustrations = "";
-  string rights_copyright_photographs   = "";
-  string rights_copyright_text          = "";
-  string rights_copyright_translation   = "";
-  string rights_copyright_video         = "";
-  string rights_license                 = "";
-  string title_edition                  = "";
-  string title_full                     = "";
-  string title_language                 = "";
-  string title_main                     = "";
-  string title_note                     = "";
-  string title_short                    = "";
-  string title_sub                      = "";
-  string title_subtitle                 = "";
+  string classify_dewey;
+  string classify_keywords;
+  string classify_loc;
+  string classify_subject;
+  string classify_topic_register;
+  string creator_author;
+  string creator_author_email;
+  string creator_illustrator;
+  string creator_translator;
+  string date_added_to_site;
+  string date_available;
+  string date_created;
+  string date_issued;
+  string date_modified;
+  string date_published;
+  string date_valid;
+  string identifier_isbn;
+  string identifier_oclc;
+  string identifier_pg;
+  string language_document;
+  string language_document_char;
+  string links;
+  string notes_abstract;
+  string notes_description;
+  string original_language;
+  string original_language_char;
+  string original_publisher;
+  string original_source;
+  string original_title;
+  string publisher;
+  string rights_copyright;
+  string rights_copyright_audio;
+  string rights_copyright_cover;
+  string rights_copyright_illustrations;
+  string rights_copyright_photographs;
+  string rights_copyright_text;
+  string rights_copyright_translation;
+  string rights_copyright_video;
+  string rights_license;
+  string title_edition;
+  string title_full;
+  string title_language;
+  string title_main;
+  string title_note;
+  string title_short;
+  string title_sub;
+  string title_subtitle;
 }
 struct ConfComposite {
   MetaComposite               meta;
diff --git a/src/sdp/meta/metadoc_from_src.d b/src/sdp/meta/metadoc_from_src.d
index 54bedfe..627b37a 100644
--- a/src/sdp/meta/metadoc_from_src.d
+++ b/src/sdp/meta/metadoc_from_src.d
@@ -358,6 +358,7 @@ template SiSUdocAbstraction() {
     string[] html_segnames=["toc"];
     int cnt1 = 1; int cnt2 = 1; int cnt3 = 1;
     /+ abstraction init ↑ +/
+    enum Substitute { match, markup, }
     debug (substitutions) {
       writeln(__LINE__, ":", __FILE__, ": DEBUG substitutions:");
       if (!(conf_make_meta.make.headings.empty)) {
@@ -365,21 +366,21 @@ template SiSUdocAbstraction() {
       }
       if (conf_make_meta.make.substitute) {
         foreach(substitution_pair; conf_make_meta.make.substitute) {
-           writeln("regex to match:       ", substitution_pair[0]);
-           writeln("substitution to make: ", substitution_pair[1]);
+           writeln("regex to match:       ", substitution_pair[Substitute.match]);
+           writeln("substitution to make: ", substitution_pair[Substitute.markup]);
         }
       }
-      if (!(conf_make_meta.make.bold_rgxmatch == "=NULL" || conf_make_meta.make.bold_rgxmatch.empty)) {
-        writeln("regex to match:       ", conf_make_meta.make.bold_rgxmatch);
-        writeln("substitution to make: ", conf_make_meta.make.bold_substitute_html);
+      if (conf_make_meta.make.bold) {
+        writeln("regex to match:       ", conf_make_meta.make.bold[Substitute.match]);
+        writeln("substitution to make: ", conf_make_meta.make.bold[Substitute.markup]);
       }
-      if (!(conf_make_meta.make.emphasis_rgxmatch == "=NULL" || conf_make_meta.make.emphasis_rgxmatch.empty)) {
-        writeln("regex to match:       ", conf_make_meta.make.emphasis_rgxmatch);
-        writeln("substitution to make: ", conf_make_meta.make.emphasis_substitute_html);
+      if (conf_make_meta.make.emphasis) {
+        writeln("regex to match:       ", conf_make_meta.make.emphasis[Substitute.match]);
+        writeln("substitution to make: ", conf_make_meta.make.emphasis[Substitute.markup]);
       }
-      if (!(conf_make_meta.make.italics_rgxmatch == "=NULL" || conf_make_meta.make.italics_rgxmatch.empty)) {
-        writeln("regex to match:       ", conf_make_meta.make.italics_rgxmatch);
-        writeln("substitution to make: ", conf_make_meta.make.italics_substitute_html);
+      if (conf_make_meta.make.italics) {
+        writeln("regex to match:       ", conf_make_meta.make.italics[Substitute.match]);
+        writeln("substitution to make: ", conf_make_meta.make.italics[Substitute.markup]);
       }
     }
     /+ ↓ loop markup document/text line by line +/
@@ -626,12 +627,14 @@ template SiSUdocAbstraction() {
           continue;
         } else if (obj_type_status["quote"] == TriState.on) {
           /+ within block object: quote +/
+          line = _doc_header_and_make_substitutions_(line, conf_make_meta);
           line = _doc_header_and_make_substitutions_fontface_(line, conf_make_meta);
           _quote_block_(line, an_object, obj_type_status);
           continue;
         /+ within block object: group +/
         } else if (obj_type_status["group"] == TriState.on) {
           /+ within block object: group +/
+          line = _doc_header_and_make_substitutions_(line, conf_make_meta);
           line = _doc_header_and_make_substitutions_fontface_(line, conf_make_meta);
           line = (line)
             .replaceAll(rgx.para_delimiter, mkup.br_paragraph ~ "$1");
@@ -639,6 +642,7 @@ template SiSUdocAbstraction() {
           continue;
         } else if (obj_type_status["block"] == TriState.on) {
           /+ within block object: block +/
+          line = _doc_header_and_make_substitutions_(line, conf_make_meta);
           line = _doc_header_and_make_substitutions_fontface_(line, conf_make_meta);
           if (auto m = line.match(rgx.spaces_line_start)) {
             line = (line)
@@ -673,7 +677,6 @@ template SiSUdocAbstraction() {
               processing.remove("verse");
               obj_cite_number_poem["start"] = obj_cite_digits.on.to!string;
             }
-            line = _doc_header_and_make_substitutions_fontface_(line, conf_make_meta);
             _start_block_(line, obj_type_status, obj_cite_number_poem);
             continue;
           } else if (!line.empty) {
@@ -751,10 +754,12 @@ template SiSUdocAbstraction() {
                 +/
                 if (line.matchFirst(rgx.heading)) {
                   /+ heading match +/
+                  line = _doc_header_and_make_substitutions_(line, conf_make_meta);
                   _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, obj_type_status, conf_make_meta);
                 } else if (line_occur["para"] == State.off) {
                   /+ para match +/
                   an_object_key="body_nugget";
+                  line = _doc_header_and_make_substitutions_(line, conf_make_meta);
                   line = _doc_header_and_make_substitutions_fontface_(line, conf_make_meta);
                   _para_match_(line, an_object, an_object_key, indent, bullet, obj_type_status, line_occur);
                 }
@@ -770,6 +775,7 @@ template SiSUdocAbstraction() {
                 debug(para) {
                   writeln(an_object_key, "-> ", line);
                 }
+                line = _doc_header_and_make_substitutions_(line, conf_make_meta);
                 line = _doc_header_and_make_substitutions_fontface_(line, conf_make_meta);
                 an_object[an_object_key] ~= " " ~ line;
                 ++line_occur["para"];
@@ -1955,11 +1961,12 @@ template SiSUdocAbstraction() {
     debug(asserts) {
       static assert(is(typeof(line)            == char[]));
     }
+    enum Substitute { match, markup, }
     if (conf_make_meta.make.substitute) {
       foreach(substitution_pair; conf_make_meta.make.substitute) {
         line = line.replaceAll(
-          regex(substitution_pair[0]),
-          substitution_pair[1]
+          regex(substitution_pair[Substitute.match]),
+          substitution_pair[Substitute.markup]
         );
       }
     }
@@ -1972,31 +1979,23 @@ template SiSUdocAbstraction() {
     debug(asserts) {
       static assert(is(typeof(line)            == char[]));
     }
-    if (!(
-      conf_make_meta.make.bold_rgxmatch == "=NULL"
-      || conf_make_meta.make.bold_rgxmatch.empty
-    )) {
+    enum Substitute { match, markup, }
+    if ( conf_make_meta.make.bold) {
       line = line.replaceAll(
-        regex(conf_make_meta.make.bold_rgxmatch),
-        conf_make_meta.make.bold_substitute_sisu_markup
+        regex(conf_make_meta.make.bold[Substitute.match]),
+        conf_make_meta.make.bold[Substitute.markup]
       );
     }
-    if (!(
-      conf_make_meta.make.emphasis_rgxmatch == "=NULL"
-      || conf_make_meta.make.emphasis_rgxmatch.empty
-    )) {
+    if (conf_make_meta.make.emphasis) {
       line = line.replaceAll(
-        regex(conf_make_meta.make.emphasis_rgxmatch),
-        conf_make_meta.make.emphasis_substitute_sisu_markup
+        regex(conf_make_meta.make.emphasis[Substitute.match]),
+        conf_make_meta.make.emphasis[Substitute.markup]
       );
     }
-    if (!(
-      conf_make_meta.make.italics_rgxmatch == "=NULL"
-      || conf_make_meta.make.italics_rgxmatch.empty
-    )) {
+    if (conf_make_meta.make.italics) {
       line = line.replaceAll(
-        regex(conf_make_meta.make.italics_rgxmatch),
-        conf_make_meta.make.italics_substitute_sisu_markup
+        regex(conf_make_meta.make.italics[Substitute.match]),
+        conf_make_meta.make.italics[Substitute.markup]
       );
     }
     return line;
-- 
cgit v1.2.3