From 0cdf764398b74a47744763e345b6a5a31e7bee69 Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Sat, 5 Aug 2017 04:13:53 -0400
Subject: m_a, composite object, attributes, rename part & an addition

- of_part renamed from use (frontmatter, body, backmatter)
- of_section added (toc, body, glossary, bibliography, bookindex, blurb)
---
 src/sdp/meta/doc_debugs.d       |   6 +--
 src/sdp/meta/metadoc_from_src.d | 117 ++++++++++++++++++++++++++--------------
 src/sdp/meta/metadoc_summary.d  |   2 +-
 src/sdp/meta/object_setter.d    |   3 +-
 src/sdp/output/epub3.d          |   4 +-
 src/sdp/output/html.d           |   8 +--
 6 files changed, 90 insertions(+), 50 deletions(-)

(limited to 'src')

diff --git a/src/sdp/meta/doc_debugs.d b/src/sdp/meta/doc_debugs.d
index 19cd4b1..ae9d94d 100644
--- a/src/sdp/meta/doc_debugs.d
+++ b/src/sdp/meta/doc_debugs.d
@@ -39,7 +39,7 @@ template SiSUdebugs() {
       );
       foreach (key; doc_matters.keys_seq.seg) {
         foreach (obj; contents[key]) {
-          if (obj.use != "empty") {
+          if (obj.of_part != "empty") {
             if (obj.is_a == "heading") {
               writefln(
                 "%s node: %s heading: %s %s",
@@ -61,7 +61,7 @@ template SiSUdebugs() {
         __LINE__,
       );
       foreach (obj; contents[key]) {
-        if (obj.use != "empty") {
+        if (obj.of_part != "empty") {
           writefln(
             "[%s][%s]\n%s",
             obj.obj_cite_number,
@@ -236,7 +236,7 @@ template SiSUdebugs() {
         __LINE__,
       );
       foreach (obj; contents[key]) {
-        if (obj.use != "empty") {
+        if (obj.of_part != "empty") {
           writefln(
             "* [%s][%s] %s",
             obj.obj_cite_number,
diff --git a/src/sdp/meta/metadoc_from_src.d b/src/sdp/meta/metadoc_from_src.d
index cc6311e..d5ff450 100644
--- a/src/sdp/meta/metadoc_from_src.d
+++ b/src/sdp/meta/metadoc_from_src.d
@@ -319,7 +319,8 @@ template SiSUdocAbstraction() {
     an_object["glossary_nugget"] = "";
     an_object["blurb_nugget"] = "";
     comp_obj_heading_                       = comp_obj_heading_.init;
-    comp_obj_heading_.use                   = "frontmatter";
+    comp_obj_heading_.of_part               = "frontmatter";
+    comp_obj_heading_.of_section            = "toc";
     comp_obj_heading_.is_of                 = "para";
     comp_obj_heading_.is_a                  = "heading";
     comp_obj_heading_.text                  = "Table of Contents";
@@ -431,7 +432,8 @@ template SiSUdocAbstraction() {
             an_object_key="glossary_nugget"; //
             if (line.matchFirst(rgx.heading_glossary)) {
               comp_obj_heading_                       = comp_obj_heading_.init;
-              comp_obj_heading_.use                   = "backmatter";
+              comp_obj_heading_.of_part               = "backmatter";
+              comp_obj_heading_.of_section            = "glossary";
               comp_obj_heading_.is_of                 = "para";
               comp_obj_heading_.is_a                  = "heading";
               comp_obj_heading_.text                  = "Glossary";
@@ -447,7 +449,8 @@ template SiSUdocAbstraction() {
               comp_obj_heading_.dom_collapsed         = [ 1, 1, 0, 0, 0, 0, 0, 0];
               the_glossary_section                    ~= comp_obj_heading_;
               comp_obj_heading_                       = comp_obj_heading_.init;
-              comp_obj_heading_.use                   = "backmatter";
+              comp_obj_heading_.of_part               = "backmatter";
+              comp_obj_heading_.of_section            = "glossary";
               comp_obj_heading_.is_of                 = "para";
               comp_obj_heading_.is_a                  = "heading";
               comp_obj_heading_.text                  = "Glossary";
@@ -466,7 +469,8 @@ template SiSUdocAbstraction() {
             } else {
               _para_match_(line, an_object, an_object_key, indent, bullet, obj_type_status, line_occur);
               comp_obj_para                       = comp_obj_para.init;
-              comp_obj_para.use                   = "backmatter";
+              comp_obj_para.of_part               = "backmatter";
+              comp_obj_para.of_section            = "glossary";
               comp_obj_para.is_of                 = "para";
               comp_obj_para.is_a                  = "glossary";
               comp_obj_para.text                  = line.to!string.strip;
@@ -504,7 +508,8 @@ template SiSUdocAbstraction() {
             an_object_key="blurb_nugget";
             if (line.matchFirst(rgx.heading_blurb)) {
               comp_obj_heading_                       = comp_obj_heading_.init;
-              comp_obj_heading_.use                   = "backmatter";
+              comp_obj_heading_.of_part               = "backmatter";
+              comp_obj_heading_.of_section            = "blurb";
               comp_obj_heading_.is_of                 = "para";
               comp_obj_heading_.is_a                  = "heading";
               comp_obj_heading_.text                  = "Blurb";
@@ -520,7 +525,8 @@ template SiSUdocAbstraction() {
               comp_obj_heading_.dom_collapsed         = [ 1, 1, 0, 0, 0, 0, 0, 0];
               the_blurb_section                       ~= comp_obj_heading_;
               comp_obj_heading_                       = comp_obj_heading_.init;
-              comp_obj_heading_.use                   = "backmatter";
+              comp_obj_heading_.of_part               = "backmatter";
+              comp_obj_heading_.of_section            = "blurb";
               comp_obj_heading_.is_of                 = "para";
               comp_obj_heading_.is_a                  = "heading";
               comp_obj_heading_.text                  = "Blurb";
@@ -539,7 +545,8 @@ template SiSUdocAbstraction() {
             } else if (line.matchFirst(rgx.heading)
             && (opt_action["backmatter"] && opt_action["section_blurb"])) {
               comp_obj_heading_                       = comp_obj_heading_.init;
-              comp_obj_heading_.use                   = "backmatter";
+              comp_obj_heading_.of_part               = "backmatter";
+              comp_obj_heading_.of_section            = "blurb";
               comp_obj_heading_.is_of                 = "para";
               comp_obj_heading_.is_a                  = "heading";
               comp_obj_heading_.text                  = line.to!string;
@@ -555,7 +562,8 @@ template SiSUdocAbstraction() {
             } else {
               _para_match_(line, an_object, an_object_key, indent, bullet, obj_type_status, line_occur);
               comp_obj_para                       = comp_obj_para.init;
-              comp_obj_para.use                   = "backmatter";
+              comp_obj_para.of_part               = "backmatter";
+              comp_obj_para.of_section            = "blurb";
               comp_obj_para.is_of                 = "para";
               comp_obj_para.is_a                  = "blurb";
               comp_obj_para.text                  = line.to!string.strip;
@@ -657,7 +665,8 @@ template SiSUdocAbstraction() {
                 }
                 an_object[an_object_key] ~= line ~= "\n";
                 comp_obj_comment                   = comp_obj_comment.init;
-                comp_obj_comment.use               = "comment";
+                comp_obj_comment.of_part           = "comment"; // breaks flow
+                comp_obj_comment.of_section        = "comment"; // breaks flow
                 comp_obj_comment.is_of             = "comment";
                 comp_obj_comment.is_a              = "comment";
                 comp_obj_comment.text              = an_object[an_object_key].strip;
@@ -855,7 +864,8 @@ template SiSUdocAbstraction() {
               an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];
               anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];
               comp_obj_para                       = comp_obj_para.init;
-              comp_obj_para.use                   = "body";
+              comp_obj_para.of_part               = "body";
+              comp_obj_para.of_section            = "body";
               comp_obj_para.is_of                 = "para";
               comp_obj_para.is_a                  = "para";
               comp_obj_para.text                  = an_object["substantive"].to!string.strip;
@@ -952,7 +962,8 @@ template SiSUdocAbstraction() {
     }
     if (an_object["glossary_nugget"].length == 0) {
       comp_obj_heading_                       = comp_obj_heading_.init;
-      comp_obj_heading_.use                   = "empty";
+      comp_obj_heading_.of_part               = "empty";
+      comp_obj_heading_.of_section            = "empty";
       comp_obj_heading_.is_of                 = "para";
       comp_obj_heading_.is_a                  = "heading";
       comp_obj_heading_.text                  = "(skip) there is no Glossary section";
@@ -978,7 +989,8 @@ template SiSUdocAbstraction() {
       biblio._bibliography_(biblio_unsorted_incomplete, bib_arr_json);
     if (biblio_ordered.length > 0) {
       comp_obj_heading_                       = comp_obj_heading_.init;
-      comp_obj_heading_.use                   = "backmatter";
+      comp_obj_heading_.of_part               = "backmatter";
+      comp_obj_heading_.of_section            = "bibliography";
       comp_obj_heading_.is_of                 = "para";
       comp_obj_heading_.is_a                  = "heading";
       comp_obj_heading_.text                  = "Bibliography";
@@ -992,7 +1004,8 @@ template SiSUdocAbstraction() {
       comp_obj_heading_.parent_lev_markup     = 0;
       the_bibliography_section                ~= comp_obj_heading_;
       comp_obj_heading_                       = comp_obj_heading_.init;
-      comp_obj_heading_.use                   = "backmatter";
+      comp_obj_heading_.of_part               = "backmatter";
+      comp_obj_heading_.of_section            = "bibliography";
       comp_obj_heading_.is_of                 = "para";
       comp_obj_heading_.is_a                  = "heading";
       comp_obj_heading_.text                  = "Bibliography";
@@ -1008,7 +1021,8 @@ template SiSUdocAbstraction() {
       the_bibliography_section                ~= comp_obj_heading_;
     } else {
       comp_obj_heading_                       = comp_obj_heading_.init;
-      comp_obj_heading_.use                   = "empty";
+      comp_obj_heading_.of_part               = "empty";
+      comp_obj_heading_.of_section            = "empty";
       comp_obj_heading_.is_of                 = "para";
       comp_obj_heading_.is_a                  = "heading";
       comp_obj_heading_.text                  = "(skip) there is no Bibliography";
@@ -1038,7 +1052,8 @@ template SiSUdocAbstraction() {
         ((entry["url"].str.empty) ? "" : ", [" ~ entry["url"].str ~ "]"),
       );
       comp_obj_para                       = comp_obj_para.init;
-      comp_obj_para.use                   = "backmatter";
+      comp_obj_para.of_part               = "backmatter";
+      comp_obj_para.of_section            = "bibliography";
       comp_obj_para.is_of                 = "para";
       comp_obj_para.is_a                  = "bibliography";
       comp_obj_para.text                  = out_.to!string.strip;
@@ -1073,7 +1088,8 @@ template SiSUdocAbstraction() {
     }
     if (an_object["blurb_nugget"].length == 0) {
       comp_obj_heading_                       = comp_obj_heading_.init;
-      comp_obj_heading_.use                   = "empty";
+      comp_obj_heading_.of_part               = "empty";
+      comp_obj_heading_.of_section            = "empty";
       comp_obj_heading_.is_of                 = "para";
       comp_obj_heading_.is_a                  = "heading";
       comp_obj_heading_.text                  = "(skip) there is no Blurb section";
@@ -1097,7 +1113,8 @@ template SiSUdocAbstraction() {
       "base_position" : 1,
     ];
     comp_obj_toc                       = comp_obj_toc.init;
-    comp_obj_toc.use                   = "frontmatter";
+    comp_obj_toc.of_part               = "frontmatter";
+    comp_obj_toc.of_section            = "toc";
     comp_obj_toc.is_of                 = "para";
     comp_obj_toc.is_a                  = "toc";
     comp_obj_toc.ocn                   = 0;
@@ -1608,7 +1625,8 @@ template SiSUdocAbstraction() {
           - obj.dom_collapsed = dom_collapsed;
       +/
     comp_obj_heading_                       = comp_obj_heading_.init;
-    comp_obj_heading_.use                   = "empty";
+    comp_obj_heading_.of_part               = "empty";
+    comp_obj_heading_.of_section            = "empty";
     comp_obj_heading_.is_of                 = "para";
     comp_obj_heading_.is_a                  = "heading";
     comp_obj_heading_.ocn                   = 0;
@@ -2137,7 +2155,8 @@ template SiSUdocAbstraction() {
             an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];
             anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];
             comp_obj_block                            = comp_obj_block.init;
-            comp_obj_block.use                        = "body";
+            comp_obj_block.of_part                    = "body";
+            comp_obj_block.of_section                 = "body";
             comp_obj_block.is_of                      = "block";
             comp_obj_block.is_a                       = "verse";
             comp_obj_block.ocn                        = obj_cite_number;
@@ -2193,7 +2212,8 @@ template SiSUdocAbstraction() {
           an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];
           anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];
           comp_obj_block                            = comp_obj_block.init;
-          comp_obj_block.use                        = "body";
+          comp_obj_block.of_part                    = "body";
+          comp_obj_block.of_section                 = "body";
           comp_obj_block.is_of                      = "block";
           comp_obj_block.is_a                       = "verse";
           comp_obj_block.ocn                        = obj_cite_number;
@@ -2232,7 +2252,8 @@ template SiSUdocAbstraction() {
           an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];
           anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];
           comp_obj_block                            = comp_obj_block.init;
-          comp_obj_block.use                        = "body";
+          comp_obj_block.of_part                    = "body";
+          comp_obj_block.of_section                 = "body";
           comp_obj_block.is_of                      = "block";
           comp_obj_block.is_a                       = "verse";
           comp_obj_block.ocn                        = obj_cite_number;
@@ -2287,7 +2308,8 @@ template SiSUdocAbstraction() {
           an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];
           anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];
           comp_obj_block                            = comp_obj_block.init;
-          comp_obj_block.use                        = "body";
+          comp_obj_block.of_part                    = "body";
+          comp_obj_block.of_section                 = "body";
           comp_obj_block.is_of                      = "block";
           comp_obj_block.is_a                       = "verse";
           comp_obj_block.ocn                        = obj_cite_number;
@@ -2642,7 +2664,8 @@ template SiSUdocAbstraction() {
       an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];
       anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];
       comp_obj_block                            = comp_obj_block.init;
-      comp_obj_block.use                        = "body";
+      comp_obj_block.of_part                    = "body";
+      comp_obj_block.of_section                 = "body";
       comp_obj_block.is_of                      = "block";
       comp_obj_block.is_a                       = "quote";
       comp_obj_block.ocn                        = obj_cite_number;
@@ -2683,7 +2706,8 @@ template SiSUdocAbstraction() {
       an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];
       anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];
       comp_obj_block                            = comp_obj_block.init;
-      comp_obj_block.use                        = "body";
+      comp_obj_block.of_part                    = "body";
+      comp_obj_block.of_section                 = "body";
       comp_obj_block.is_of                      = "block";
       comp_obj_block.is_a                       = "group";
       comp_obj_block.ocn                        = obj_cite_number;
@@ -2722,7 +2746,8 @@ template SiSUdocAbstraction() {
         obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, dochead_make_aa);
       an_object["substantive"]                  = substantive_obj_misc_tuple[sObj.content];
       comp_obj_block                            = comp_obj_block.init;
-      comp_obj_block.use                        = "body";
+      comp_obj_block.of_part                    = "body";
+      comp_obj_block.of_section                 = "body";
       comp_obj_block.is_of                      = "block";
       comp_obj_block.is_a                       = "block";
       comp_obj_block.ocn                        = obj_cite_number;
@@ -2757,7 +2782,8 @@ template SiSUdocAbstraction() {
           an_object["is"]
         );
       comp_obj_poem_ocn                         = comp_obj_poem_ocn.init;
-      comp_obj_poem_ocn.use                     = "body";
+      comp_obj_poem_ocn.of_part                 = "body";
+      comp_obj_poem_ocn.of_section              = "body";
       comp_obj_poem_ocn.is_of                   = "block";
       comp_obj_poem_ocn.is_a                    = "poem";
       comp_obj_poem_ocn.ocn                     = obj_cite_number;
@@ -2794,7 +2820,8 @@ template SiSUdocAbstraction() {
       an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];
       anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];
       comp_obj_code                             = comp_obj_code.init;
-      comp_obj_code.use                         = "body";
+      comp_obj_code.of_part                     = "body";
+      comp_obj_code.of_section                  = "body";
       comp_obj_code.is_of                       = "block";
       comp_obj_code.is_a                        = "code";
       comp_obj_code.ocn                         = obj_cite_number;
@@ -3294,7 +3321,8 @@ template SiSUdocAbstraction() {
     return ref H  table_head,
   ) {
     static auto rgx = Rgx();
-    table_object.use               = "body";
+    table_object.of_part           = "body";
+    table_object.of_section        = "body";
     table_object.is_of             = "block";
     table_object.is_a              = "table";
     table_object.inline_notes_reg  = false;
@@ -3953,7 +3981,8 @@ template SiSUdocAbstraction() {
         );
         toc_txt_= munge.url_links(toc_txt_);
         comp_obj_toc                       = comp_obj_toc.init;
-        comp_obj_toc.use                   = "frontmatter";
+        comp_obj_toc.of_part               = "frontmatter";
+        comp_obj_toc.of_section            = "toc";
         comp_obj_toc.is_of                 = "para";
         comp_obj_toc.is_a                  = "toc";
         comp_obj_toc.ocn                   = 0;
@@ -3970,7 +3999,8 @@ template SiSUdocAbstraction() {
           "base_position" : 0,
         ];
         comp_obj_toc                       = comp_obj_toc.init;
-        comp_obj_toc.use                   = "frontmatter";
+        comp_obj_toc.of_part               = "frontmatter";
+        comp_obj_toc.of_section            = "toc";
         comp_obj_toc.is_of                 = "para";
         comp_obj_toc.is_a                  = "toc";
         comp_obj_toc.ocn                   = 0;
@@ -3983,7 +4013,8 @@ template SiSUdocAbstraction() {
         the_table_of_contents_section["scroll"] ~= comp_obj_toc;
       }
       comp_obj_toc                       = comp_obj_toc.init;
-      comp_obj_toc.use                   = "frontmatter";
+      comp_obj_toc.of_part               = "frontmatter";
+      comp_obj_toc.of_section            = "toc";
       comp_obj_toc.is_of                 = "para";
       comp_obj_toc.is_a                  = "toc";
       comp_obj_toc.ocn                   = 0;
@@ -4715,7 +4746,8 @@ template SiSUdocAbstraction() {
         string bi_tmp_seg, bi_tmp_scroll;
         string[] bi_tmp_tags;
         comp_obj_heading_                       = comp_obj_heading_.init;
-        comp_obj_heading_.use                   = "backmatter";
+        comp_obj_heading_.of_part               = "backmatter";
+        comp_obj_heading_.of_section            = "bookindex";
         comp_obj_heading_.is_of                 = "para";
         comp_obj_heading_.is_a                  = "heading";
         comp_obj_heading_.text                  = "Book Index";
@@ -4733,7 +4765,8 @@ template SiSUdocAbstraction() {
         ++obj_cite_number;
         ++mkn;
         comp_obj_heading_                       = comp_obj_heading_.init;
-        comp_obj_heading_.use                   = "backmatter";
+        comp_obj_heading_.of_part               = "backmatter";
+        comp_obj_heading_.of_section            = "bookindex";
         comp_obj_heading_.is_of                 = "para";
         comp_obj_heading_.is_a                  = "heading";
         comp_obj_heading_.text                  = "Index";
@@ -4809,7 +4842,8 @@ template SiSUdocAbstraction() {
           bi_tmp_scroll                       = (bi_tmp_scroll).replaceFirst(rgx.trailing_linebreak, "");
           bi_tmp_seg                          = (bi_tmp_seg).replaceFirst(rgx.trailing_linebreak, "");
           comp_obj_para                       = comp_obj_para.init;
-          comp_obj_para.use                   = "backmatter";
+          comp_obj_para.of_part               = "backmatter";
+          comp_obj_para.of_section            = "bookindex";
           comp_obj_para.is_of                 = "para";
           comp_obj_para.is_a                  = "bookindex";
           comp_obj_para.text                  = bi_tmp_scroll.to!string.strip;
@@ -4937,7 +4971,8 @@ template SiSUdocAbstraction() {
       if ((endnotes_["notes"].length > 0)
       && (opt_action["backmatter"] && opt_action["section_endnotes"])) {
         comp_obj_heading_                       = comp_obj_heading_.init;
-        comp_obj_heading_.use                   = "backmatter";
+        comp_obj_heading_.of_part               = "backmatter";
+        comp_obj_heading_.of_section            = "endnotes";
         comp_obj_heading_.is_of                 = "para";
         comp_obj_heading_.is_a                  = "heading";
         comp_obj_heading_.text                  = "Endnotes";
@@ -4953,7 +4988,8 @@ template SiSUdocAbstraction() {
         ++obj_cite_number;
         ++mkn;
         comp_obj_heading_                       = comp_obj_heading_.init;
-        comp_obj_heading_.use                   = "backmatter";
+        comp_obj_heading_.of_part               = "backmatter";
+        comp_obj_heading_.of_section            = "endnotes";
         comp_obj_heading_.is_of                 = "para";
         comp_obj_heading_.is_a                  = "heading";
         comp_obj_heading_.text                  = "Endnotes";
@@ -4971,7 +5007,8 @@ template SiSUdocAbstraction() {
         ++mkn;
       } else {
         comp_obj_heading_                       = comp_obj_heading_.init;
-        comp_obj_heading_.use                   = "empty";
+        comp_obj_heading_.of_part               = "empty";
+        comp_obj_heading_.of_section            = "empty";
         comp_obj_heading_.is_of                 = "para";
         comp_obj_heading_.is_a                  = "heading";
         comp_obj_heading_.text                  = "(skip) there are no Endnotes";
@@ -4987,7 +5024,8 @@ template SiSUdocAbstraction() {
       if (opt_action["backmatter"] && opt_action["section_endnotes"]) {
         ObjGenericComposite comp_obj_endnote_;
         comp_obj_endnote_                       = comp_obj_endnote_.init;
-        comp_obj_endnote_.use                   = "backmatter";
+        comp_obj_endnote_.of_part               = "backmatter";
+        comp_obj_endnote_.of_section            = "endnote";
         comp_obj_endnote_.is_of                 = "para";
         comp_obj_endnote_.is_a                  = "endnote";
         comp_obj_endnote_.ocn                   = 0;
@@ -5299,7 +5337,8 @@ template SiSUdocAbstraction() {
       }
       ObjGenericComposite _comp_obj_heading_;
       _comp_obj_heading_                           = _comp_obj_heading_.init;
-      _comp_obj_heading_.use                       = "body";
+      _comp_obj_heading_.of_part                   = "body";
+      _comp_obj_heading_.of_section                = "body";
       _comp_obj_heading_.is_of                     = "para";
       _comp_obj_heading_.is_a                      = "heading";
       _comp_obj_heading_.text                      = _text.to!string.strip;
diff --git a/src/sdp/meta/metadoc_summary.d b/src/sdp/meta/metadoc_summary.d
index e217726..591844f 100644
--- a/src/sdp/meta/metadoc_summary.d
+++ b/src/sdp/meta/metadoc_summary.d
@@ -28,7 +28,7 @@ template SiSUabstractionSummary() {
       ];
       foreach (k; doc_matters.keys_seq.seg) {
         foreach (obj; doc_abstraction[k]) {
-          if (obj.use != "empty") {
+          if (obj.of_part != "empty") {
             if (!empty(obj.obj_cite_number)) {
               if (k == "body") {
                 check["last_obj_cite_number_body"] = obj.obj_cite_number;
diff --git a/src/sdp/meta/object_setter.d b/src/sdp/meta/object_setter.d
index 385c3d2..48bef54 100644
--- a/src/sdp/meta/object_setter.d
+++ b/src/sdp/meta/object_setter.d
@@ -17,7 +17,8 @@ template ObjectSetter() {
   }
   struct ObjGenericComposite {
     // size_t id;
-    string                 use                          = "";
+    string                 of_part                      = "";
+    string                 of_section                   = "";
     string                 is_of                        = "";
     string                 is_a                         = "";
     string                 text                         = "";
diff --git a/src/sdp/output/epub3.d b/src/sdp/output/epub3.d
index 25f25d5..abe8503 100644
--- a/src/sdp/output/epub3.d
+++ b/src/sdp/output/epub3.d
@@ -369,7 +369,7 @@ template outputEPub3() {
           }
         } else {
           assert(part == "head" || "toc_seg" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail");
-          switch (obj.use) {
+          switch (obj.of_part) {
           case "frontmatter":             assert(part == "head" || "toc_seg");
             switch (obj.is_of) {
             case "para":
@@ -502,7 +502,7 @@ template outputEPub3() {
             break;
           default:
             if ((doc_matters.opt_action["debug"])) {
-              writeln(__FILE__, ":", __LINE__, ": ", obj.use);
+              writeln(__FILE__, ":", __LINE__, ": ", obj.of_part);
             }
             break;
           }
diff --git a/src/sdp/output/html.d b/src/sdp/output/html.d
index 8903e51..b961d4c 100644
--- a/src/sdp/output/html.d
+++ b/src/sdp/output/html.d
@@ -25,7 +25,7 @@ template outputHTML() {
     foreach (part; doc_matters.keys_seq.scroll) {
       foreach (obj; doc_abstraction[part]) {
         string _txt = xhtml_format.special_characters(obj, obj.text);
-        switch (obj.use) {
+        switch (obj.of_part) {
         case "frontmatter":              assert(part == "head" || "toc_scroll");
           switch (obj.is_of) {
           case "para":
@@ -144,7 +144,7 @@ template outputHTML() {
           break;
         default:
           if ((doc_matters.opt_action["debug"])) {
-            writeln(__FILE__, ":", __LINE__, ": ", obj.use);
+            writeln(__FILE__, ":", __LINE__, ": ", obj.of_part);
             writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
             writeln(__FILE__, ":", __LINE__, ": ", obj.text);
           }
@@ -264,7 +264,7 @@ template outputHTML() {
           }
         } else {
           assert(part == "head" || "toc_seg" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail");
-          switch (obj.use) {
+          switch (obj.of_part) {
           case "frontmatter":             assert(part == "head" || "toc_seg");
             switch (obj.is_of) {
             case "para":
@@ -395,7 +395,7 @@ template outputHTML() {
             break;
           default:
             if ((doc_matters.opt_action["debug"])) {
-              writeln(__FILE__, ":", __LINE__, ": ", obj.use);
+              writeln(__FILE__, ":", __LINE__, ": ", obj.of_part);
             }
             break;
           }
-- 
cgit v1.2.3