From d9e6f899d0d9d7979ad191954ee123f10c7bad5c Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Fri, 27 Jan 2017 11:54:29 -0500
Subject: debugs template

---
 org/ao_output_debugs.org   |   53 +-
 org/sdp.org                |    7 +-
 src/sdp.d                  |    7 +-
 src/sdp/ao_output_debugs.d | 1184 ++++++++++++++++++++++----------------------
 4 files changed, 644 insertions(+), 607 deletions(-)

diff --git a/org/ao_output_debugs.org b/org/ao_output_debugs.org
index 145a7a5..fe20f17 100644
--- a/org/ao_output_debugs.org
+++ b/org/ao_output_debugs.org
@@ -21,19 +21,18 @@
 /++
   output debugs
 +/
-template SiSUoutputDebugs() {
-  struct SDPoutputDebugs {
-    auto abstract_doc_source_debugs(S,T)(
-      auto ref const S         contents,
-      auto ref T               doc_matters,
-    ) {
-      mixin SiSUrgxInit;
-      mixin InternalMarkup;
-      <<initialize>>
-      <<book_index_sorted_report>>
-      <<ao_output_debugs>>
-        <<ao_output_debugs_summary>>
-      }
+template SiSUdebugs() {
+  <<debug_imports>>
+  auto SiSUdebugs(S,T)(
+    auto ref const S         contents,
+    auto ref T               doc_matters,
+  ) {
+    mixin SiSUrgxInit;
+    mixin InternalMarkup;
+    <<initialize>>
+    <<book_index_sorted_report>>
+    <<ao_output_debugs>>
+      <<ao_output_debugs_summary>>
     }
   }
 }
@@ -42,6 +41,34 @@ template SiSUoutputDebugs() {
 * 1. output debugs                                             :debug:output:
 [[./sdp.org][sdp]]  [[./][org/]]
 
+** imports
+
+#+name: debug_imports
+#+BEGIN_SRC d
+import
+  ao_defaults,
+  ao_rgx;
+private import
+  std.algorithm,
+  std.array,
+  std.container,
+  std.exception,
+  std.getopt,
+  std.json,
+  std.process,
+  std.stdio,
+  std.file,
+  std.path,
+  std.range,
+  std.regex,
+  std.string,
+  std.traits,
+  std.typecons,
+  std.uni,
+  std.utf,
+  std.conv : to;
+#+END_SRC
+
 ** initialize                                                        :report:
 
 #+name: initialize
diff --git a/org/sdp.org b/org/sdp.org
index 16a0ecc..facd2a3 100644
--- a/org/sdp.org
+++ b/org/sdp.org
@@ -193,7 +193,6 @@ mixin SiSUrgxInitFlags;
 mixin SiSUconfigSDLangHub;
 mixin SiSUmarkupRaw;
 mixin SiSUdocAbstraction;
-mixin SiSUoutputDebugs;
 mixin outputHub;
 #+END_SRC
 
@@ -204,7 +203,6 @@ mixin outputHub;
 auto raw = MarkupRaw();
 auto head = SiSUheaderExtractHub();
 auto abs = SiSUdocAbstraction();
-auto dbg = SDPoutputDebugs();
 /+
 struct DocumentParts {
   string[string][] contents;
@@ -477,10 +475,7 @@ auto doc_matters = DocumentMatters();
 #+BEGIN_SRC d
 /+ ↓ debugs +/
 debug(checkdoc) {
-  dbg.abstract_doc_source_debugs(
-    doc_abstraction,
-    doc_matters,
-  );
+  SiSUdebugs!()(doc_abstraction, doc_matters);
 }
 #+END_SRC
 
diff --git a/src/sdp.d b/src/sdp.d
index 723a17e..5dfc341 100755
--- a/src/sdp.d
+++ b/src/sdp.d
@@ -51,12 +51,10 @@ void main(string[] args) {
   mixin SiSUconfigSDLangHub;
   mixin SiSUmarkupRaw;
   mixin SiSUdocAbstraction;
-  mixin SiSUoutputDebugs;
   mixin outputHub;
   auto raw = MarkupRaw();
   auto head = SiSUheaderExtractHub();
   auto abs = SiSUdocAbstraction();
-  auto dbg = SDPoutputDebugs();
   /+
   struct DocumentParts {
     string[string][] contents;
@@ -264,10 +262,7 @@ void main(string[] args) {
       auto doc_matters = DocumentMatters();
       /+ ↓ debugs +/
       debug(checkdoc) {
-        dbg.abstract_doc_source_debugs(
-          doc_abstraction,
-          doc_matters,
-        );
+        SiSUdebugs!()(doc_abstraction, doc_matters);
       }
       /+ ↓ output hub +/
       if (!(_opt_action_bool["skip_output"])) {
diff --git a/src/sdp/ao_output_debugs.d b/src/sdp/ao_output_debugs.d
index 2872833..73cdfd7 100644
--- a/src/sdp/ao_output_debugs.d
+++ b/src/sdp/ao_output_debugs.d
@@ -1,433 +1,495 @@
 /++
   output debugs
 +/
-template SiSUoutputDebugs() {
-  struct SDPoutputDebugs {
-    auto abstract_doc_source_debugs(S,T)(
-      auto ref const S         contents,
-      auto ref T               doc_matters,
-    ) {
-      mixin SiSUrgxInit;
-      mixin InternalMarkup;
-      auto rgx = Rgx();
-      auto markup = InlineMarkup();
-      string key;
-      
-      debug(parent) {
-        writefln(
-          "%s:%s",
-          __FILE__,
-          __LINE__,
-        );
-        foreach (key; doc_matters.keys_seq_seg) {
-          foreach (obj; contents[key]) {
-            if (obj.use != "empty") {
-              if (obj.is_a == "heading") {
-                writefln(
-                  "%s node: %s heading: %s %s",
-                  obj.obj_cite_number,
-                  obj.node,
-                  obj.heading_lev_markup,
-                  obj.text,
-                );
-              }
-            }
-          }
-        }
-      }
-      debug(dumpdoc) {
-        writefln(
-          "%s\n%s:%s",
-          "-------------------------------",
-          __FILE__,
-          __LINE__,
-        );
-        foreach (obj; contents) {
+template SiSUdebugs() {
+  import
+    ao_defaults,
+    ao_rgx;
+  private import
+    std.algorithm,
+    std.array,
+    std.container,
+    std.exception,
+    std.getopt,
+    std.json,
+    std.process,
+    std.stdio,
+    std.file,
+    std.path,
+    std.range,
+    std.regex,
+    std.string,
+    std.traits,
+    std.typecons,
+    std.uni,
+    std.utf,
+    std.conv : to;
+  auto SiSUdebugs(S,T)(
+    auto ref const S         contents,
+    auto ref T               doc_matters,
+  ) {
+    mixin SiSUrgxInit;
+    mixin InternalMarkup;
+    auto rgx = Rgx();
+    auto markup = InlineMarkup();
+    string key;
+    
+    debug(parent) {
+      writefln(
+        "%s:%s",
+        __FILE__,
+        __LINE__,
+      );
+      foreach (key; doc_matters.keys_seq_seg) {
+        foreach (obj; contents[key]) {
           if (obj.use != "empty") {
-            writefln(
-              "[%s][%s]\n%s",
-              obj.obj_cite_number,
-              obj.is_a,
-              obj.text
-            );
-          }
-        }
-      }
-      void out_segnames(S,T)(
-        auto ref const S         contents,
-        auto ref T               doc_matters,
-      ) {
-        foreach (key; doc_matters.keys_seq_seg) {
-          if (contents[key].length > 1) {
-            foreach (obj; contents[key]) {
-              if (obj.heading_lev_markup == 4) {
-                writeln(obj.ptr_html_segnames, ". (", doc_matters.segnames[obj.ptr_html_segnames], ") -> ",  obj.text);
-              }
+            if (obj.is_a == "heading") {
+              writefln(
+                "%s node: %s heading: %s %s",
+                obj.obj_cite_number,
+                obj.node,
+                obj.heading_lev_markup,
+                obj.text,
+              );
             }
           }
         }
       }
-      void out_toc(S)(
-        auto ref const S         contents,
-        string                   key,
-      ) {
-        if (contents[key].length > 1) {
-          string indent_spaces;
-          foreach (obj; contents[key]) {
-            indent_spaces=markup.indent_by_spaces_provided(obj.indent_hang);
-            writefln(
-              "%s%s",
-              indent_spaces,
-              obj.text
-            );
-          }
+    }
+    debug(dumpdoc) {
+      writefln(
+        "%s\n%s:%s",
+        "-------------------------------",
+        __FILE__,
+        __LINE__,
+      );
+      foreach (obj; contents) {
+        if (obj.use != "empty") {
+          writefln(
+            "[%s][%s]\n%s",
+            obj.obj_cite_number,
+            obj.is_a,
+            obj.text
+          );
         }
       }
-      void out_endnotes(S)(
-        auto ref const S         contents,
-        string                   key,
-      ) {
+    }
+    void out_segnames(S,T)(
+      auto ref const S         contents,
+      auto ref T               doc_matters,
+    ) {
+      foreach (key; doc_matters.keys_seq_seg) {
         if (contents[key].length > 1) {
           foreach (obj; contents[key]) {
-            writefln(
-              "[%s]\n%s",
-              obj.is_a,
-              obj.text
-            );
+            if (obj.heading_lev_markup == 4) {
+              writeln(obj.ptr_html_segnames, ". (", doc_matters.segnames[obj.ptr_html_segnames], ") -> ",  obj.text);
+            }
           }
         }
       }
-      void out_bookindex(S)(
-        auto ref const S         contents,
-        string                   key,
-      ) {
-        if (contents[key].length > 1) {
-          foreach (obj; contents[key]) {
-            writefln(
-              "[%s][%s]\n%s",
-              obj.obj_cite_number,
-              obj.is_a,
-              obj.text
-            );
-          }
+    }
+    void out_toc(S)(
+      auto ref const S         contents,
+      string                   key,
+    ) {
+      if (contents[key].length > 1) {
+        string indent_spaces;
+        foreach (obj; contents[key]) {
+          indent_spaces=markup.indent_by_spaces_provided(obj.indent_hang);
+          writefln(
+            "%s%s",
+            indent_spaces,
+            obj.text
+          );
         }
       }
-      debug(section_head) {
-        key="head";
-        if (contents[key].length > 1) {
-          foreach (obj; contents[key]) {
-            writefln(
-              "[%s][%s]\n%s",
-              obj.obj_cite_number,
-              obj.is_a,
-              obj.text
-            );
-          }
+    }
+    void out_endnotes(S)(
+      auto ref const S         contents,
+      string                   key,
+    ) {
+      if (contents[key].length > 1) {
+        foreach (obj; contents[key]) {
+          writefln(
+            "[%s]\n%s",
+            obj.is_a,
+            obj.text
+          );
         }
       }
-      debug(section_toc) {
-        key="toc_seg";
-        out_toc(contents, key);
-      }
-      debug(section_toc_seg) {
-        key="toc_seg";
-        out_toc(contents, key);
-      }
-      debug(section_toc_scroll) {
-        key="toc_scroll";
-        out_toc(contents, key);
+    }
+    void out_bookindex(S)(
+      auto ref const S         contents,
+      string                   key,
+    ) {
+      if (contents[key].length > 1) {
+        foreach (obj; contents[key]) {
+          writefln(
+            "[%s][%s]\n%s",
+            obj.obj_cite_number,
+            obj.is_a,
+            obj.text
+          );
+        }
       }
-      debug(segnames) {
-        writeln(__LINE__);
-        out_segnames(contents, doc_matters);
+    }
+    debug(section_head) {
+      key="head";
+      if (contents[key].length > 1) {
+        foreach (obj; contents[key]) {
+          writefln(
+            "[%s][%s]\n%s",
+            obj.obj_cite_number,
+            obj.is_a,
+            obj.text
+          );
+        }
       }
-      debug(section_body) {
-        key="body";
-        if (contents[key].length > 1) {
-          foreach (obj; contents[key]) {
-            writefln(
-              "[%s][%s]\n%s",
-              obj.obj_cite_number,
-              obj.is_a,
-              obj.text
-            );
-          }
+    }
+    debug(section_toc) {
+      key="toc_seg";
+      out_toc(contents, key);
+    }
+    debug(section_toc_seg) {
+      key="toc_seg";
+      out_toc(contents, key);
+    }
+    debug(section_toc_scroll) {
+      key="toc_scroll";
+      out_toc(contents, key);
+    }
+    debug(segnames) {
+      writeln(__LINE__);
+      out_segnames(contents, doc_matters);
+    }
+    debug(section_body) {
+      key="body";
+      if (contents[key].length > 1) {
+        foreach (obj; contents[key]) {
+          writefln(
+            "[%s][%s]\n%s",
+            obj.obj_cite_number,
+            obj.is_a,
+            obj.text
+          );
         }
       }
-      debug(dom) {
-        enum DomTags { none, open, close, close_and_open, open_still, }
-        foreach (sect; doc_matters.keys_seq_seg) {
-          foreach (obj; contents[sect]) {
-            if (obj.is_a == "heading") {
-              foreach_reverse (k; 0 .. 7) {
-                switch (obj.dom_markedup[k]) {
-                case DomTags.close :
-                  writeln(markup.indent_by_spaces_provided(k), "</", k, ">");
-                  break;
-                case DomTags.close_and_open :
-                  writeln(markup.indent_by_spaces_provided(k), "</", k, ">");
-                  writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text);
-                  break;
-                case DomTags.open :
-                  writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text);
-                  break;
-                default :
-                  break;
-                }
+    }
+    debug(dom) {
+      enum DomTags { none, open, close, close_and_open, open_still, }
+      foreach (sect; doc_matters.keys_seq_seg) {
+        foreach (obj; contents[sect]) {
+          if (obj.is_a == "heading") {
+            foreach_reverse (k; 0 .. 7) {
+              switch (obj.dom_markedup[k]) {
+              case DomTags.close :
+                writeln(markup.indent_by_spaces_provided(k), "</", k, ">");
+                break;
+              case DomTags.close_and_open :
+                writeln(markup.indent_by_spaces_provided(k), "</", k, ">");
+                writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text);
+                break;
+              case DomTags.open :
+                writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text);
+                break;
+              default :
+                break;
               }
             }
           }
         }
-        writeln("--------------------");
-        foreach (sect; doc_matters.keys_seq_seg) {
-          foreach (obj; contents[sect]) {
-            if (obj.is_a == "heading") {
-              foreach_reverse (k; 0 .. 7) {
-                switch (obj.dom_collapsed[k]) {
-                case DomTags.close :
-                  writeln(markup.indent_by_spaces_provided(k), "</", k, ">");
-                  break;
-                case DomTags.close_and_open :
-                  writeln(markup.indent_by_spaces_provided(k), "</", k, ">");
-                  writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text);
-                  break;
-                case DomTags.open :
-                  writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text);
-                  break;
-                default :
-                  break;
-                }
+      }
+      writeln("--------------------");
+      foreach (sect; doc_matters.keys_seq_seg) {
+        foreach (obj; contents[sect]) {
+          if (obj.is_a == "heading") {
+            foreach_reverse (k; 0 .. 7) {
+              switch (obj.dom_collapsed[k]) {
+              case DomTags.close :
+                writeln(markup.indent_by_spaces_provided(k), "</", k, ">");
+                break;
+              case DomTags.close_and_open :
+                writeln(markup.indent_by_spaces_provided(k), "</", k, ">");
+                writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text);
+                break;
+              case DomTags.open :
+                writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text);
+                break;
+              default :
+                break;
               }
             }
           }
         }
       }
-      debug(section_endnotes) {
-        key="endnotes";
-        out_endnotes(contents, key);
-      }
-      debug(section_endnotes_seg) {
-        key="endnotes";
-        out_endnotes(contents, key);
-      }
-      debug(section_glossary) {
-        key="glossary";
-        if (contents[key].length > 1) {
-          foreach (obj; contents[key]) {
-            writefln(
-              "[%s][%s]\n%s",
-              obj.obj_cite_number,
-              obj.is_a,
-              obj.text
-            );
-          }
+    }
+    debug(section_endnotes) {
+      key="endnotes";
+      out_endnotes(contents, key);
+    }
+    debug(section_endnotes_seg) {
+      key="endnotes";
+      out_endnotes(contents, key);
+    }
+    debug(section_glossary) {
+      key="glossary";
+      if (contents[key].length > 1) {
+        foreach (obj; contents[key]) {
+          writefln(
+            "[%s][%s]\n%s",
+            obj.obj_cite_number,
+            obj.is_a,
+            obj.text
+          );
         }
       }
-      debug(section_bibliography) {
-        key="bibliography";
-        if (contents[key].length > 1) {
-          foreach (obj; contents[key]) {
-            writefln(
-              "[%s][%s]\n%s",
-              obj.obj_cite_number,
-              obj.is_a,
-              obj.text
-            );
-          }
+    }
+    debug(section_bibliography) {
+      key="bibliography";
+      if (contents[key].length > 1) {
+        foreach (obj; contents[key]) {
+          writefln(
+            "[%s][%s]\n%s",
+            obj.obj_cite_number,
+            obj.is_a,
+            obj.text
+          );
         }
       }
-      debug(section_bookindex) {
-        key="bookindex_seg";
-        out_bookindex(contents, key);
-      }
-      debug(section_bookindex_seg) {
-        key="bookindex_seg";
-        out_bookindex(contents, key);
-      }
-      debug(section_bookindex_scroll) {
-        key="bookindex_scroll";
-        out_bookindex(contents, key);
-      }
-      debug(blurb_section) {
-        key="blurb";
-        if (contents[key].length > 1) {
-          foreach (obj; contents[key]) {
-            writefln(
-              "[%s][%s]\n%s",
-              obj.obj_cite_number,
-              obj.is_a,
-              obj.text
-            );
-          }
+    }
+    debug(section_bookindex) {
+      key="bookindex_seg";
+      out_bookindex(contents, key);
+    }
+    debug(section_bookindex_seg) {
+      key="bookindex_seg";
+      out_bookindex(contents, key);
+    }
+    debug(section_bookindex_scroll) {
+      key="bookindex_scroll";
+      out_bookindex(contents, key);
+    }
+    debug(blurb_section) {
+      key="blurb";
+      if (contents[key].length > 1) {
+        foreach (obj; contents[key]) {
+          writefln(
+            "[%s][%s]\n%s",
+            obj.obj_cite_number,
+            obj.is_a,
+            obj.text
+          );
         }
       }
-      debug(objects) {
-        writefln(
-          "%s\n%s:%s",
-          "-------------------------------",
-          __FILE__,
-          __LINE__,
-        );
-        foreach (obj; contents) {
-          if (obj.use != "empty") {
-            writefln(
-              "* [%s][%s] %s",
-              obj.obj_cite_number,
-              obj.is_a,
-              obj.text
-            );
-          }
+    }
+    debug(objects) {
+      writefln(
+        "%s\n%s:%s",
+        "-------------------------------",
+        __FILE__,
+        __LINE__,
+      );
+      foreach (obj; contents) {
+        if (obj.use != "empty") {
+          writefln(
+            "* [%s][%s] %s",
+            obj.obj_cite_number,
+            obj.is_a,
+            obj.text
+          );
         }
       }
-      debug(headermakejson) {
-        writefln(
-          "%s\n%s\n%s",
-          "document header, metadata & make instructions:",
-          doc_matters.dochead_meta,
-          ptr_head_main,
-        );
-        foreach (main_header; ptr_head_main) {
-          switch (main_header) {
-          case "make":
-            foreach (sub_header; ptr_head_sub_make) {
-              if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
-                writefln(
-                  "%s:%s: %s",
-                  main_header,
-                  sub_header,
-                  doc_matters.dochead_meta[main_header][sub_header]
-                );
-              }
+    }
+    debug(headermakejson) {
+      writefln(
+        "%s\n%s\n%s",
+        "document header, metadata & make instructions:",
+        doc_matters.dochead_meta,
+        ptr_head_main,
+      );
+      foreach (main_header; ptr_head_main) {
+        switch (main_header) {
+        case "make":
+          foreach (sub_header; ptr_head_sub_make) {
+            if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
+              writefln(
+                "%s:%s: %s",
+                main_header,
+                sub_header,
+                doc_matters.dochead_meta[main_header][sub_header]
+              );
             }
-            break;
-          default:
-            break;
           }
+          break;
+        default:
+          break;
         }
       }
-      debug(headermetadatajson) {
-        writefln(
-          "%s\n%s\n%s",
-          "document header, metadata & make instructions:",
-          doc_matters.dochead_meta,
-          ptr_head_main,
-        );
-        foreach (main_header; ptr_head_main) {
-          switch (main_header) {
-          case "creator":
-            foreach (sub_header; ptr_head_sub_creator) {
-              if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
-                writefln(
-                  "%s:%s: %s",
-                  main_header,
-                  sub_header,
-                  doc_matters.dochead_meta[main_header][sub_header]
-                );
-              }
+    }
+    debug(headermetadatajson) {
+      writefln(
+        "%s\n%s\n%s",
+        "document header, metadata & make instructions:",
+        doc_matters.dochead_meta,
+        ptr_head_main,
+      );
+      foreach (main_header; ptr_head_main) {
+        switch (main_header) {
+        case "creator":
+          foreach (sub_header; ptr_head_sub_creator) {
+            if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
+              writefln(
+                "%s:%s: %s",
+                main_header,
+                sub_header,
+                doc_matters.dochead_meta[main_header][sub_header]
+              );
             }
-            break;
-          case "title":
-            foreach (sub_header; ptr_head_sub_title) {
-              if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
-                writefln(
-                  "%s:%s: %s",
-                  main_header,
-                  sub_header,
-                  doc_matters.dochead_meta[main_header][sub_header]
-                );
-              }
+          }
+          break;
+        case "title":
+          foreach (sub_header; ptr_head_sub_title) {
+            if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
+              writefln(
+                "%s:%s: %s",
+                main_header,
+                sub_header,
+                doc_matters.dochead_meta[main_header][sub_header]
+              );
             }
-            break;
-          case "rights":
-            foreach (sub_header; ptr_head_sub_rights) {
-              if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
-                writefln(
-                  "%s:%s: %s",
-                  main_header,
-                  sub_header,
-                  doc_matters.dochead_meta[main_header][sub_header]
-                );
-              }
+          }
+          break;
+        case "rights":
+          foreach (sub_header; ptr_head_sub_rights) {
+            if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
+              writefln(
+                "%s:%s: %s",
+                main_header,
+                sub_header,
+                doc_matters.dochead_meta[main_header][sub_header]
+              );
             }
-            break;
-          case "date":
-            foreach (sub_header; ptr_head_sub_date) {
-              if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
-                writefln(
-                  "%s:%s: %s",
-                  main_header,
-                  sub_header,
-                  doc_matters.dochead_meta[main_header][sub_header]
-                );
-              }
+          }
+          break;
+        case "date":
+          foreach (sub_header; ptr_head_sub_date) {
+            if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
+              writefln(
+                "%s:%s: %s",
+                main_header,
+                sub_header,
+                doc_matters.dochead_meta[main_header][sub_header]
+              );
             }
-            break;
-          case "original":
-            foreach (sub_header; ptr_head_sub_original) {
-              if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
-                writefln(
-                  "%s:%s: %s",
-                  main_header,
-                  sub_header,
-                  doc_matters.dochead_meta[main_header][sub_header]
-                );
-              }
+          }
+          break;
+        case "original":
+          foreach (sub_header; ptr_head_sub_original) {
+            if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
+              writefln(
+                "%s:%s: %s",
+                main_header,
+                sub_header,
+                doc_matters.dochead_meta[main_header][sub_header]
+              );
             }
-            break;
-          case "classify":
-            foreach (sub_header; ptr_head_sub_classify) {
-              if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
-                writefln(
-                  "%s:%s: %s",
-                  main_header,
-                  sub_header,
-                  doc_matters.dochead_meta[main_header][sub_header]
-                );
-              }
+          }
+          break;
+        case "classify":
+          foreach (sub_header; ptr_head_sub_classify) {
+            if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
+              writefln(
+                "%s:%s: %s",
+                main_header,
+                sub_header,
+                doc_matters.dochead_meta[main_header][sub_header]
+              );
             }
-            break;
-          case "identifier":
-            foreach (sub_header; ptr_head_sub_identifier) {
-              if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
-                writefln(
-                  "%s:%s: %s",
-                  main_header,
-                  sub_header,
-                  doc_matters.dochead_meta[main_header][sub_header]
-                );
-              }
+          }
+          break;
+        case "identifier":
+          foreach (sub_header; ptr_head_sub_identifier) {
+            if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
+              writefln(
+                "%s:%s: %s",
+                main_header,
+                sub_header,
+                doc_matters.dochead_meta[main_header][sub_header]
+              );
             }
-            break;
-          case "notes":
-            foreach (sub_header; ptr_head_sub_notes) {
-              if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
-                writefln(
-                  "%s:%s: %s",
-                  main_header,
-                  sub_header,
-                  doc_matters.dochead_meta[main_header][sub_header]
-                );
-              }
+          }
+          break;
+        case "notes":
+          foreach (sub_header; ptr_head_sub_notes) {
+            if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
+              writefln(
+                "%s:%s: %s",
+                main_header,
+                sub_header,
+                doc_matters.dochead_meta[main_header][sub_header]
+              );
             }
-            break;
-          case "publisher":
-            foreach (sub_header; ptr_head_sub_publisher) {
-              if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
-                writefln(
-                  "%s:%s: %s",
-                  main_header,
-                  sub_header,
-                  doc_matters.dochead_meta[main_header][sub_header]
-                );
-              }
+          }
+          break;
+        case "publisher":
+          foreach (sub_header; ptr_head_sub_publisher) {
+            if (to!string(doc_matters.dochead_meta[main_header][sub_header]).length > 2) {
+              writefln(
+                "%s:%s: %s",
+                main_header,
+                sub_header,
+                doc_matters.dochead_meta[main_header][sub_header]
+              );
             }
-            break;
-          default:
-            break;
+          }
+          break;
+        default:
+          break;
+        }
+      }
+    }
+    debug(anchor) {
+      writefln(
+        "%s\n%s:%s",
+        "-------------------------------",
+        __FILE__,
+        __LINE__,
+      );
+      foreach (k; doc_matters.keys_seq_seg) {
+        foreach (obj; contents[k]) {
+          if (obj.is_a == "heading") {
+            writefln(
+              "%s~ [%s] %s %s",
+              obj.marked_up_level,
+              obj.obj_cite_number,
+              obj.anchor_tags,
+              // "[", obj["is"], "] ",
+              obj.text
+            );
+          }
+        }
+      }
+    }
+    debug(heading) {                         // heading
+      foreach (k; doc_matters.keys_seq_seg) {
+        foreach (o; contents[k]) {
+          if (o.is_a == "heading") {
+            writefln(
+              "%s* %s\n                (markup level: %s; collapsed level: %s)",
+              replicate("  ", o.heading_lev_markup),
+              strip(o.text),
+              o.heading_lev_markup,
+              o.heading_lev_collapsed,
+            );
           }
         }
       }
-      debug(anchor) {
+    }
+    debug(summary) {
+      string[string] check = [
+        "last_obj_cite_number" : "NA [debug \"checkdoc\" not run]",
+      ];
+      debug(headings) {
         writefln(
           "%s\n%s:%s",
           "-------------------------------",
@@ -438,10 +500,9 @@ template SiSUoutputDebugs() {
           foreach (obj; contents[k]) {
             if (obj.is_a == "heading") {
               writefln(
-                "%s~ [%s] %s %s",
+                "%s~ [%s] %s",
                 obj.marked_up_level,
                 obj.obj_cite_number,
-                obj.anchor_tags,
                 // "[", obj["is"], "] ",
                 obj.text
               );
@@ -449,217 +510,176 @@ template SiSUoutputDebugs() {
           }
         }
       }
-      debug(heading) {                         // heading
+      debug(checkdoc) {
         foreach (k; doc_matters.keys_seq_seg) {
-          foreach (o; contents[k]) {
-            if (o.is_a == "heading") {
-              writefln(
-                "%s* %s\n                (markup level: %s; collapsed level: %s)",
-                replicate("  ", o.heading_lev_markup),
-                strip(o.text),
-                o.heading_lev_markup,
-                o.heading_lev_collapsed,
-              );
-            }
-          }
-        }
-      }
-      debug(summary) {
-        string[string] check = [
-          "last_obj_cite_number" : "NA [debug \"checkdoc\" not run]",
-        ];
-        debug(headings) {
-          writefln(
-            "%s\n%s:%s",
-            "-------------------------------",
-            __FILE__,
-            __LINE__,
-          );
-          foreach (k; doc_matters.keys_seq_seg) {
-            foreach (obj; contents[k]) {
-              if (obj.is_a == "heading") {
-                writefln(
-                  "%s~ [%s] %s",
-                  obj.marked_up_level,
-                  obj.obj_cite_number,
-                  // "[", obj["is"], "] ",
-                  obj.text
-                );
-              }
-            }
-          }
-        }
-        debug(checkdoc) {
-          foreach (k; doc_matters.keys_seq_seg) {
-            foreach (obj; contents[k]) {
-              if (obj.use != "empty") {
-                if (!empty(obj.obj_cite_number)) {
-                  check["last_obj_cite_number"] = obj.obj_cite_number;
-                }
+          foreach (obj; contents[k]) {
+            if (obj.use != "empty") {
+              if (!empty(obj.obj_cite_number)) {
+                check["last_obj_cite_number"] = obj.obj_cite_number;
               }
             }
           }
         }
-        writefln(
-          "%s\n\"%s\", %s\n%s\n%s\n%s%10d\n%s%10d\n%s%10d\n%s%10d\n%s%10d\n%s%10d\n%s%10d\n%s%10d\n(%s: %s)",
-          "---------------------------------",
-          doc_matters.dochead_meta["title"]["full"],
-          doc_matters.dochead_meta["creator"]["author"],
-          doc_matters.source_filename,
-          "---------------------------------",
-          "length toc array:      ",
-          to!int(contents["toc_seg"].length),
-          "length contents array: ",
-          to!int(contents["body"].length),
-          "last obj_cite_number:  ",
-          to!int(check["last_obj_cite_number"]),
-          "length endnotes:       ",
-          (contents["endnotes"].length > 1)
-          ? (to!int(contents["endnotes"].length))
-          : 0,
-          "length glossary:       ",
-          (contents["glossary"].length > 1)
-          ? (to!int(contents["glossary"].length))
-          : 0,
-          "length biblio:         ",
-          (contents["bibliography"].length > 1)
-          ? (to!int(contents["bibliography"].length))
-          : 0,
-          "length bookindex:      ",
-          (contents["bookindex_seg"].length > 1)
-          ? (to!int(contents["bookindex_seg"].length))
-          : 0,
-          "length blurb:          ",
-          (contents["blurb"].length > 1)
-          ? (to!int(contents["blurb"].length))
-          : 0,
-          __FILE__,
-          __LINE__,
-        );
-        debug(checkdoc) {
-          if (auto mfn=match(doc_matters.source_filename, rgx.src_fn)) {
-            if (doc_matters.opt_action_bool["assertions"]) {
-              switch (mfn.captures[2]) {
-              // live manual:
-              case "live-manual.ssm":
-                assert(check["last_obj_cite_number"] ==
-                  "1019","last obj_cite_number should be: 1019 (check test, document is frequently updated)"); // ok
-                break;
-              // sisu_markup:
-              case "sisu_markup.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "297","last obj_cite_number expected to be: 297 rather than " ~ check["last_obj_cite_number"]); // ok
-                // assert(check["last_obj_cite_number"] == "297","last obj_cite_number expected to be: 297 rather than " ~ check["last_obj_cite_number"]);
-                // notes for first divergance study sisu headings 247 250
-                // sisu has issue with code that contains heading 1~ which results in no obj_cite_number! ??
-                // sisu currently has incorrect last body obj_cite_number of 294!
-                // bug in sisu? attend
-                break;
-              // sisu-markup-samples:
-              case "accelerando.charles_stross.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "2861","last obj_cite_number expected to be: 2861 rather than " ~ check["last_obj_cite_number"]); // ok
-                break;
-              case "alices_adventures_in_wonderland.lewis_carroll.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "805","last obj_cite_number expected to be: 805 rather than " ~ check["last_obj_cite_number"]); // 808
-                break;
-              case "autonomy_markup0.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "77","last obj_cite_number expected to be: 77 rather than " ~ check["last_obj_cite_number"]); // ok endnotes
-                // assert(check["last_obj_cite_number"] == "78","last obj_cite_number expected to be: 78 rather than " ~ check["last_obj_cite_number"]);
-                break;
-              case "content.cory_doctorow.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "953","last obj_cite_number expected to be: 953 rather than " ~ check["last_obj_cite_number"]); // 1007 way off, check obj_cite_number off switches
-                // assert(check["last_obj_cite_number"] == "953","last obj_cite_number expected to be: 953 rather than " ~ check["last_obj_cite_number"]);
-                break;
-              case "democratizing_innovation.eric_von_hippel.sst":
-                // fixed ERROR! range violation, broken check! endnotes, bookindex, biblio
-                // error in bookindex ... (ch1; ch6; ch8 )
-                assert(check["last_obj_cite_number"] ==
-                  "905","last obj_cite_number expected to be: 905 rather than " ~ check["last_obj_cite_number"]); // 911
-                break;
-              case "down_and_out_in_the_magic_kingdom.cory_doctorow.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "1417","last obj_cite_number expected to be: 1417 rather than " ~ check["last_obj_cite_number"]); // 1455 check obj_cite_number off switches
-                break;
-              case "for_the_win.cory_doctorow.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "3510","last obj_cite_number expected to be: 3510 rather than " ~ check["last_obj_cite_number"]); // 3569 check obj_cite_number off switches
-                break;
-              case "free_as_in_freedom_2.richard_stallman_and_the_free_software_revolution.sam_williams.richard_stallman.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "1082","last obj_cite_number expected to be: 1082 rather than " ~ check["last_obj_cite_number"]); // check 1079 too few
-                break;
-              case "free_culture.lawrence_lessig.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "1330","last obj_cite_number expected to be: 1330 rather than " ~ check["last_obj_cite_number"]); // 1312
-                // fixed ERROR! range violation, broken check!
-                // error in bookindex ... sections piracy (ch1) & property (ch10 market concentration) fixed
-                break;
-              case "free_for_all.peter_wayner.sst": // endnotes, bookindex, biblio
-                assert(check["last_obj_cite_number"] ==
-                  "1559","last obj_cite_number expected to be: 1559 rather than " ~ check["last_obj_cite_number"]); // 1560, check obj_cite_number off switches, has endnotes so 2 too many
-                // assert(check["last_obj_cite_number"] == "1559","last obj_cite_number expected to be: 1559 rather than " ~ check["last_obj_cite_number"]);
-                break;
-              case "gpl2.fsf.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "65","last obj_cite_number expected to be: 65 rather than " ~ check["last_obj_cite_number"]); // ok endnotes? check
-                // assert(check["last_obj_cite_number"] == "66","last obj_cite_number expected to be: 66 rather than " ~ check["last_obj_cite_number"]);
-                break;
-              case "gpl3.fsf.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "123","last obj_cite_number expected to be: 123 rather than " ~ check["last_obj_cite_number"]); // ok
-                break;
-              case "gullivers_travels.jonathan_swift.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "668","last obj_cite_number expected to be: 668 rather than " ~ check["last_obj_cite_number"]); // 674
-                break;
-              case "little_brother.cory_doctorow.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "3130","last obj_cite_number expected to be: 3130 rather than " ~ check["last_obj_cite_number"]); // 3204, check obj_cite_number off switches
-                break;
-              case "the_cathedral_and_the_bazaar.eric_s_raymond.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "258","last obj_cite_number expected to be: 258 rather than " ~ check["last_obj_cite_number"]); // ok
-                break;
-              case "the_public_domain.james_boyle.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "970","last obj_cite_number expected to be: 970 rather than " ~ check["last_obj_cite_number"]); // 978
-                break;
-              case "the_wealth_of_networks.yochai_benkler.sst": // endnotes, bookindex
-                assert(check["last_obj_cite_number"] ==
-                  "829","last obj_cite_number expected to be: 829 rather than " ~ check["last_obj_cite_number"]); // ok
-                // assert(check["last_obj_cite_number"] == "832","last obj_cite_number expected to be: 832 rather than " ~ check["last_obj_cite_number"]);
-                // has endnotes and bookindex, issue with sisu.rb
-                break;
-              case "through_the_looking_glass.lewis_carroll.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "949","last obj_cite_number expected to be: 949 rather than " ~ check["last_obj_cite_number"]); // 955
-                break;
-              case "two_bits.christopher_kelty.sst": // endnotes, bookindex, biblio
-                assert(check["last_obj_cite_number"] ==
-                  "1190","last obj_cite_number expected to be: 1190 rather than " ~ check["last_obj_cite_number"]); // 1191
-                // assert(check["last_obj_cite_number"] == "1193","last obj_cite_number expected to be: 1193 rather than " ~ check["last_obj_cite_number"]); // 1191 ok?
-                // has endnotes and bookindex, issue with sisu.rb
-                break;
-                // fixed ERROR! range violation!
-                // error in bookindex ... (ch3 the movement)
-              case "un_contracts_international_sale_of_goods_convention_1980.sst":
-                assert(check["last_obj_cite_number"] ==
-                  "377","last obj_cite_number expected to be: 377 rather than " ~ check["last_obj_cite_number"]); // ok
-                break;
-              case "viral_spiral.david_bollier.sst": // endnotes, bookindex
-                assert(check["last_obj_cite_number"] ==
-                  "1078","last obj_cite_number expected to be: 1078 rather than " ~ check["last_obj_cite_number"]); // 1100
-                // fixed ERROR! range violation!
-                // error in bookindex ... (ch7 ... building the cc machine, an extra semi colon)
-                break;
-              default:
-                writeln(doc_matters.source_filename);
-                break;
-              }
+      }
+      writefln(
+        "%s\n\"%s\", %s\n%s\n%s\n%s%10d\n%s%10d\n%s%10d\n%s%10d\n%s%10d\n%s%10d\n%s%10d\n%s%10d\n(%s: %s)",
+        "---------------------------------",
+        doc_matters.dochead_meta["title"]["full"],
+        doc_matters.dochead_meta["creator"]["author"],
+        doc_matters.source_filename,
+        "---------------------------------",
+        "length toc array:      ",
+        to!int(contents["toc_seg"].length),
+        "length contents array: ",
+        to!int(contents["body"].length),
+        "last obj_cite_number:  ",
+        to!int(check["last_obj_cite_number"]),
+        "length endnotes:       ",
+        (contents["endnotes"].length > 1)
+        ? (to!int(contents["endnotes"].length))
+        : 0,
+        "length glossary:       ",
+        (contents["glossary"].length > 1)
+        ? (to!int(contents["glossary"].length))
+        : 0,
+        "length biblio:         ",
+        (contents["bibliography"].length > 1)
+        ? (to!int(contents["bibliography"].length))
+        : 0,
+        "length bookindex:      ",
+        (contents["bookindex_seg"].length > 1)
+        ? (to!int(contents["bookindex_seg"].length))
+        : 0,
+        "length blurb:          ",
+        (contents["blurb"].length > 1)
+        ? (to!int(contents["blurb"].length))
+        : 0,
+        __FILE__,
+        __LINE__,
+      );
+      debug(checkdoc) {
+        if (auto mfn=match(doc_matters.source_filename, rgx.src_fn)) {
+          if (doc_matters.opt_action_bool["assertions"]) {
+            switch (mfn.captures[2]) {
+            // live manual:
+            case "live-manual.ssm":
+              assert(check["last_obj_cite_number"] ==
+                "1019","last obj_cite_number should be: 1019 (check test, document is frequently updated)"); // ok
+              break;
+            // sisu_markup:
+            case "sisu_markup.sst":
+              assert(check["last_obj_cite_number"] ==
+                "297","last obj_cite_number expected to be: 297 rather than " ~ check["last_obj_cite_number"]); // ok
+              // assert(check["last_obj_cite_number"] == "297","last obj_cite_number expected to be: 297 rather than " ~ check["last_obj_cite_number"]);
+              // notes for first divergance study sisu headings 247 250
+              // sisu has issue with code that contains heading 1~ which results in no obj_cite_number! ??
+              // sisu currently has incorrect last body obj_cite_number of 294!
+              // bug in sisu? attend
+              break;
+            // sisu-markup-samples:
+            case "accelerando.charles_stross.sst":
+              assert(check["last_obj_cite_number"] ==
+                "2861","last obj_cite_number expected to be: 2861 rather than " ~ check["last_obj_cite_number"]); // ok
+              break;
+            case "alices_adventures_in_wonderland.lewis_carroll.sst":
+              assert(check["last_obj_cite_number"] ==
+                "805","last obj_cite_number expected to be: 805 rather than " ~ check["last_obj_cite_number"]); // 808
+              break;
+            case "autonomy_markup0.sst":
+              assert(check["last_obj_cite_number"] ==
+                "77","last obj_cite_number expected to be: 77 rather than " ~ check["last_obj_cite_number"]); // ok endnotes
+              // assert(check["last_obj_cite_number"] == "78","last obj_cite_number expected to be: 78 rather than " ~ check["last_obj_cite_number"]);
+              break;
+            case "content.cory_doctorow.sst":
+              assert(check["last_obj_cite_number"] ==
+                "953","last obj_cite_number expected to be: 953 rather than " ~ check["last_obj_cite_number"]); // 1007 way off, check obj_cite_number off switches
+              // assert(check["last_obj_cite_number"] == "953","last obj_cite_number expected to be: 953 rather than " ~ check["last_obj_cite_number"]);
+              break;
+            case "democratizing_innovation.eric_von_hippel.sst":
+              // fixed ERROR! range violation, broken check! endnotes, bookindex, biblio
+              // error in bookindex ... (ch1; ch6; ch8 )
+              assert(check["last_obj_cite_number"] ==
+                "905","last obj_cite_number expected to be: 905 rather than " ~ check["last_obj_cite_number"]); // 911
+              break;
+            case "down_and_out_in_the_magic_kingdom.cory_doctorow.sst":
+              assert(check["last_obj_cite_number"] ==
+                "1417","last obj_cite_number expected to be: 1417 rather than " ~ check["last_obj_cite_number"]); // 1455 check obj_cite_number off switches
+              break;
+            case "for_the_win.cory_doctorow.sst":
+              assert(check["last_obj_cite_number"] ==
+                "3510","last obj_cite_number expected to be: 3510 rather than " ~ check["last_obj_cite_number"]); // 3569 check obj_cite_number off switches
+              break;
+            case "free_as_in_freedom_2.richard_stallman_and_the_free_software_revolution.sam_williams.richard_stallman.sst":
+              assert(check["last_obj_cite_number"] ==
+                "1082","last obj_cite_number expected to be: 1082 rather than " ~ check["last_obj_cite_number"]); // check 1079 too few
+              break;
+            case "free_culture.lawrence_lessig.sst":
+              assert(check["last_obj_cite_number"] ==
+                "1330","last obj_cite_number expected to be: 1330 rather than " ~ check["last_obj_cite_number"]); // 1312
+              // fixed ERROR! range violation, broken check!
+              // error in bookindex ... sections piracy (ch1) & property (ch10 market concentration) fixed
+              break;
+            case "free_for_all.peter_wayner.sst": // endnotes, bookindex, biblio
+              assert(check["last_obj_cite_number"] ==
+                "1559","last obj_cite_number expected to be: 1559 rather than " ~ check["last_obj_cite_number"]); // 1560, check obj_cite_number off switches, has endnotes so 2 too many
+              // assert(check["last_obj_cite_number"] == "1559","last obj_cite_number expected to be: 1559 rather than " ~ check["last_obj_cite_number"]);
+              break;
+            case "gpl2.fsf.sst":
+              assert(check["last_obj_cite_number"] ==
+                "65","last obj_cite_number expected to be: 65 rather than " ~ check["last_obj_cite_number"]); // ok endnotes? check
+              // assert(check["last_obj_cite_number"] == "66","last obj_cite_number expected to be: 66 rather than " ~ check["last_obj_cite_number"]);
+              break;
+            case "gpl3.fsf.sst":
+              assert(check["last_obj_cite_number"] ==
+                "123","last obj_cite_number expected to be: 123 rather than " ~ check["last_obj_cite_number"]); // ok
+              break;
+            case "gullivers_travels.jonathan_swift.sst":
+              assert(check["last_obj_cite_number"] ==
+                "668","last obj_cite_number expected to be: 668 rather than " ~ check["last_obj_cite_number"]); // 674
+              break;
+            case "little_brother.cory_doctorow.sst":
+              assert(check["last_obj_cite_number"] ==
+                "3130","last obj_cite_number expected to be: 3130 rather than " ~ check["last_obj_cite_number"]); // 3204, check obj_cite_number off switches
+              break;
+            case "the_cathedral_and_the_bazaar.eric_s_raymond.sst":
+              assert(check["last_obj_cite_number"] ==
+                "258","last obj_cite_number expected to be: 258 rather than " ~ check["last_obj_cite_number"]); // ok
+              break;
+            case "the_public_domain.james_boyle.sst":
+              assert(check["last_obj_cite_number"] ==
+                "970","last obj_cite_number expected to be: 970 rather than " ~ check["last_obj_cite_number"]); // 978
+              break;
+            case "the_wealth_of_networks.yochai_benkler.sst": // endnotes, bookindex
+              assert(check["last_obj_cite_number"] ==
+                "829","last obj_cite_number expected to be: 829 rather than " ~ check["last_obj_cite_number"]); // ok
+              // assert(check["last_obj_cite_number"] == "832","last obj_cite_number expected to be: 832 rather than " ~ check["last_obj_cite_number"]);
+              // has endnotes and bookindex, issue with sisu.rb
+              break;
+            case "through_the_looking_glass.lewis_carroll.sst":
+              assert(check["last_obj_cite_number"] ==
+                "949","last obj_cite_number expected to be: 949 rather than " ~ check["last_obj_cite_number"]); // 955
+              break;
+            case "two_bits.christopher_kelty.sst": // endnotes, bookindex, biblio
+              assert(check["last_obj_cite_number"] ==
+                "1190","last obj_cite_number expected to be: 1190 rather than " ~ check["last_obj_cite_number"]); // 1191
+              // assert(check["last_obj_cite_number"] == "1193","last obj_cite_number expected to be: 1193 rather than " ~ check["last_obj_cite_number"]); // 1191 ok?
+              // has endnotes and bookindex, issue with sisu.rb
+              break;
+              // fixed ERROR! range violation!
+              // error in bookindex ... (ch3 the movement)
+            case "un_contracts_international_sale_of_goods_convention_1980.sst":
+              assert(check["last_obj_cite_number"] ==
+                "377","last obj_cite_number expected to be: 377 rather than " ~ check["last_obj_cite_number"]); // ok
+              break;
+            case "viral_spiral.david_bollier.sst": // endnotes, bookindex
+              assert(check["last_obj_cite_number"] ==
+                "1078","last obj_cite_number expected to be: 1078 rather than " ~ check["last_obj_cite_number"]); // 1100
+              // fixed ERROR! range violation!
+              // error in bookindex ... (ch7 ... building the cc machine, an extra semi colon)
+              break;
+            default:
+              writeln(doc_matters.source_filename);
+              break;
             }
           }
         }
-- 
cgit v1.2.3