diff options
| author | Ralph Amissah <ralph@amissah.com> | 2016-11-09 17:52:33 -0500 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2019-04-10 15:14:13 -0400 | 
| commit | 2301a8251d111ca2e020f524ce036c11e4306a14 (patch) | |
| tree | aed462b441e64efe989dca5c5d5eee306d9d53be /src/sdp/ao_abstract_doc_source.d | |
| parent | a bit of naming and tidying (diff) | |
0.9.0 document sections
Diffstat (limited to 'src/sdp/ao_abstract_doc_source.d')
| -rw-r--r-- | src/sdp/ao_abstract_doc_source.d | 323 | 
1 files changed, 265 insertions, 58 deletions
diff --git a/src/sdp/ao_abstract_doc_source.d b/src/sdp/ao_abstract_doc_source.d index 8d2ff70..421c094 100644 --- a/src/sdp/ao_abstract_doc_source.d +++ b/src/sdp/ao_abstract_doc_source.d @@ -18,8 +18,9 @@ template SiSUdocAbstraction() {      /+ initialize +/      auto rgx = Rgx();      ObjComposite[][string] the_table_of_contents_section; -    ObjComposite[] the_document_head_section, the_document_body_section, the_bibliography_section; +    ObjComposite[] the_document_head_section, the_document_body_section, the_bibliography_section, the_glossary_section, the_blurb_section;      string[string] an_object, processing; +    string an_object_key;      string[] anchor_tags;      string segment_object_belongs_to;      auto set_abstract_object = ObjectAbstractSet(); @@ -93,8 +94,10 @@ template SiSUdocAbstraction() {          destroy(biblio_arr_json);        }        line_occur = [ -        "heading" : 0, -        "para"    : 0, +        "heading"  : 0, +        "para"     : 0, +        "glossary" : 0, +        "blurb"    : 0,        ];        auto type = flags_type_init;        void tell_lo(int obj_cite_number, in char[] line) { @@ -150,6 +153,22 @@ template SiSUdocAbstraction() {          "h_3": regex(r"^(none)"),          "h_4": regex(r"^(none)")        ]; +      an_object["glossary_nugget"] = ""; +      an_object["blurb_nugget"] = ""; +      auto toc_head = +        set_abstract_object.contents_heading( +          "Table of Contents", // nugget/object +          "",                  // attrib +          0,                   // obj_cite_number +          ["toc"],             // anchor tag +          "1",                 // lev +          4,                   // lev_markup_number +          2,                   // lev_collapsed_number +        ); +      the_table_of_contents_section = [ +        "seg": [toc_head], +        "scroll": [toc_head], +      ];        /+ abstraction init ↑ +/        /+ ↓ loop markup document/text line by line +/        srcDocLoop: @@ -196,11 +215,140 @@ template SiSUdocAbstraction() {            && (!matchFirst(line, rgx.comment))) {              /+ within section (block object): biblio +/              _biblio_block_(line, type, bib_entry, biblio_entry_str_json, biblio_arr_json); +            type["glossary_section"] = State.off; +            type["biblio_section"] = State.on; +            type["blurb_section"] = State.off;              debug(bibliobuild) {                writeln("-  ", biblio_entry_str_json);                writeln("-> ", biblio_arr_json.length);              }              continue; +          } else if ((matchFirst(line, rgx.heading_glossary) +          || (type["glossary_section"] == State.on)) +          && (!matchFirst(line, rgx.heading)) +          && (!matchFirst(line, rgx.comment))) { +            /+ within section (block object): glossary +/ +            debug(glossary) { +              writeln(__LINE__); +              writeln(line); +            } +            // _glossary_block_(line, type); +            type["glossary_section"] = State.on; +            type["biblio_section"] = State.off; +            type["blurb_section"] = State.off; +            indent=[ +              "hang_position" : "0", +              "base_position" : "0", +            ]; +            bullet = false; +            type["para"] = State.on; +            line_occur["para"] = State.off; +            an_object_key="glossary_nugget"; // +            if (matchFirst(line, rgx.heading_glossary)) { +              the_glossary_section ~= +                set_abstract_object.contents_heading( +                  "Glossary",       // nugget/object +                  "",               // attrib +                  0,                // obj_cite_number +                  [""],             // anchor tag +                  "B",              // lev +                  1,                // lev_markup_number +                  1,                // lev_collapsed_number +                ); +              the_glossary_section ~= +                set_abstract_object.contents_heading( +                  "Glossary",       // nugget/object +                  "",               // attrib +                  0,                // obj_cite_number +                  ["glossary"],     // anchor tag +                  "1",              // lev +                  4,                // lev_markup_number +                  2,                // lev_collapsed_number +                ); +            // } else if (matchFirst(line, rgx.heading)) { +            //   _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? +            } else { +              _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); +              the_glossary_section ~= +                set_abstract_object.contents_para( +                  "para",                    // an_object["is"], +                  to!string(line),           // an_object["substantive"], +                  "",                        // attrib +                  0,                         // obj_cite_number, +                  indent, +                  bullet +                ); +            } +            type["obj_cite_number_status"] = TriState.off; +            continue; +          } else if ((matchFirst(line, rgx.heading_blurb) +          || (type["blurb_section"] == State.on)) +          && (!matchFirst(line, rgx.heading)) +          && (!matchFirst(line, rgx.comment))) { +            /+ within section (block object): blurb +/ +            debug(blurb) { +              writeln(__LINE__); +              writeln(line); +            } +            // _blurb_block_(line, type); +            type["glossary_section"] = State.off; +            type["biblio_section"] = State.off; +            type["blurb_section"] = State.on; +            indent=[ +              "hang_position" : "0", +              "base_position" : "0", +            ]; +            bullet = false; +            type["para"] = State.on; +            line_occur["para"] = State.off; +            an_object_key="blurb_nugget"; +            if (matchFirst(line, rgx.heading_blurb)) { +              the_blurb_section ~= +                set_abstract_object.contents_heading( +                  "Blurb",          // nugget/object +                  "",               // attrib +                  0,                // obj_cite_number +                  [""],             // anchor tag +                  "B",              // lev +                  1,                // lev_markup_number +                  1,                // lev_collapsed_number +                ); +              the_blurb_section ~= +                set_abstract_object.contents_heading( +                  "Blurb",          // nugget/object +                  "",               // attrib +                  0,                // obj_cite_number +                  ["blurb"],        // anchor tag +                  "1",              // lev +                  4,                // lev_markup_number +                  2,                // lev_collapsed_number +                ); +            } else if (matchFirst(line, rgx.heading)) { +              _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); +              the_blurb_section ~= +                set_abstract_object.contents_heading( +                  to!string(line),           //  an_object["substantive"], +                  "",                        // attrib +                  0,                         // obj_cite_number +                  [""],                      // anchor tag +                  to!string(an_object["lev"]), +                  to!int(an_object["lev_markup_number"]), +                  to!int(an_object["lev_collapsed_number"]), +                ); +            } else { +              _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); +              the_blurb_section ~= +                set_abstract_object.contents_para( +                  "para",                    // an_object["is"], +                  to!string(line),           //  an_object["substantive"], +                  "",                        // attrib +                  obj_cite_number, +                  indent, +                  bullet +                ); +            } +            type["obj_cite_number_status"] = TriState.off; +            continue;            } else if (type["poem"] == TriState.on) {              /+ within block object: poem +/              _poem_block_(line, an_object, type, counter, obj_cite_number_poem, dochead_make_aa); @@ -270,14 +418,15 @@ template SiSUdocAbstraction() {                  _book_index_(line, book_idx_tmp, an_object, type);                } else {                  /+ not book_index +/ +                an_object_key="body_nugget";                  if (auto m = matchFirst(line, rgx.comment)) {                    /+ matched comment +/                    debug(comment) {                      writeln(line);                    } -                  an_object["body_nugget"] ~= line ~= "\n"; +                  an_object[an_object_key] ~= line ~= "\n";                    the_document_body_section ~= -                    set_abstract_object.contents_comment(strip(an_object["body_nugget"])); +                    set_abstract_object.contents_comment(strip(an_object[an_object_key]));                    _common_reset_(line_occur, an_object, type);                    processing.remove("verse");                    ++counter; @@ -308,24 +457,25 @@ template SiSUdocAbstraction() {                    +/                    if (matchFirst(line, rgx.heading)) {                      /+ heading match +/ -                    _heading_matched_(line, line_occur, an_object, lv, collapsed_lev, type, dochead_meta_aa); +                    _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa);                    } else if (line_occur["para"] == State.off) {                      /+ para match +/ -                    _para_match_(line, an_object, indent, bullet, type, line_occur); +                    an_object_key="body_nugget"; +                    _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur);                    }                  } else if (line_occur["heading"] > State.off) {                    /+ heading +/                    debug(heading) {                         // heading                      writeln(line);                    } -                  an_object["body_nugget"] ~= line ~= "\n"; +                  an_object[an_object_key] ~= line ~= "\n";                    ++line_occur["heading"];                  } else if (line_occur["para"] > State.off) {                    /+ paragraph +/                    debug(para) {                      writeln(line);                    } -                  an_object["body_nugget"] ~= line; +                  an_object[an_object_key] ~= line;                    ++line_occur["para"];                  }                } @@ -363,8 +513,9 @@ template SiSUdocAbstraction() {                  bookindex_unordered_hashes =                    bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);                  an_object["is"] = "heading"; +                an_object_key="body_nugget";                  auto substantive_object_and_anchor_tags_tuple = -                  obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); // tuple this with anchor tags? +                  obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa); // tuple this with anchor tags?                  an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];                  anchor_tags = substantive_object_and_anchor_tags_tuple[1];                  if (to!int(an_object["lev_markup_number"]) == 4) { @@ -390,7 +541,7 @@ template SiSUdocAbstraction() {                      an_object["is"]                    ); // heading                  an_object["attrib"] = -                  obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +                  obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);                  ++heading_pointer;                  debug(segments) {                    writeln(an_object["lev_markup_number"]); @@ -433,11 +584,11 @@ template SiSUdocAbstraction() {                      an_object["is"]                    );                  auto substantive_object_and_anchor_tags_tuple = -                  obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); +                  obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa); // ...                  an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];                  anchor_tags = substantive_object_and_anchor_tags_tuple[1];                  an_object["attrib"] = -                  obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +                  obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);                  the_document_body_section ~=                    set_abstract_object.contents_para(                      an_object["is"], @@ -470,6 +621,12 @@ template SiSUdocAbstraction() {            if (((the_document_body_section[$-1].is_a == "para")            || (the_document_body_section[$-1].is_a == "heading"))            && (counter-1 > previous_count)) { +            if ((the_document_body_section[$-1].is_a == "heading") +            && (the_document_body_section[$-1].heading_attrib.lev_markup_number < 5)) { +              type["biblio_section"] = State.off; +              type["glossary_section"] = State.off; +              type["blurb_section"] = State.off; +            }              if (match(the_document_body_section[$-1].object,              rgx.inline_notes_delimiter_al_regular_number_note)) {                previous_count=the_document_body_section.length -1; @@ -494,7 +651,7 @@ template SiSUdocAbstraction() {          * book index        +/        // TODO FIGURE OUT, you need this possibility -      // obj_im.obj_inline_markup_and_anchor_tags("doc_end_reset", "", dochead_make_aa); +      // obj_im.obj_inline_markup_and_anchor_tags("doc_end_reset", an_object_key, "", dochead_make_aa);        debug(toc) {          writefln(            "%s %s", @@ -520,6 +677,46 @@ template SiSUdocAbstraction() {            writeln(o);          }        } +      if (an_object["glossary_nugget"].length == 0) { +        writeln("no gloss"); +        the_glossary_section ~= +          set_abstract_object.contents_heading( +            "(skip) there is no Glossary section",   // nugget/object +            "",               // attrib +            0,                // obj_cite_number +            [""],             // anchor tag +            "B",              // lev +            1,                // lev_markup_number +            1,                // lev_collapsed_number +          ); +      } else { +        writeln("gloss"); +      } +      debug(glossary) { +        foreach (gloss; the_glossary_section) { +          writeln(gloss.object); +        } +      } +      if (an_object["blurb_nugget"].length == 0) { +        writeln("no blurb"); +        the_blurb_section ~= +          set_abstract_object.contents_heading( +            "(skip) there is no Blurb section",   // nugget/object +            "",               // attrib +            0,                // obj_cite_number +            [""],             // anchor tag +            "B",              // lev +            1,                // lev_markup_number +            1,                // lev_collapsed_number +          ); +      } else { +        writeln("blurb"); +      } +      debug(blurb) { +        foreach (blurb; the_blurb_section) { +          writeln(blurb.object); +        } +      }        auto biblio_unsorted_incomplete = biblio_arr_json.dup;        // destroy(biblio_arr_json);        auto biblio = Bibliography(); @@ -613,10 +810,11 @@ template SiSUdocAbstraction() {          "body":             the_document_body_section,          "endnotes_seg":     the_endnotes_section["seg"],          "endnotes_scroll":  the_endnotes_section["scroll"], -        // "glossary":         the_glossary_section, // TODO +        "glossary":         the_glossary_section,          "bibliography":     the_bibliography_section,          "bookindex_scroll": the_bookindex_section["scroll"],          "bookindex_seg":    the_bookindex_section["seg"], +        "blurb":            the_blurb_section,        ];        auto t = tuple(          document_the, @@ -850,7 +1048,7 @@ template SiSUdocAbstraction() {            debug(code) {                              // code (curly) line              writeln(line);            } -          an_object["body_nugget"] ~= line ~= "\n";       // code (curly) line +          an_object[an_object_key] ~= line ~= "\n";          // code (curly) line          }        } else if (type["tic_code"] == TriState.on) {          if (matchFirst(line, rgx.block_tic_close)) { @@ -864,7 +1062,7 @@ template SiSUdocAbstraction() {            debug(code) {                              // code (tic) line              writeln(line);            } -          an_object["body_nugget"] ~= line ~= "\n";       // code (tic) line +          an_object[an_object_key] ~= line ~= "\n";          // code (tic) line          }        }      } @@ -896,6 +1094,8 @@ template SiSUdocAbstraction() {      ) {        if (matchFirst(line, rgx.heading_biblio)) {          type["biblio_section"] = TriState.on; +        type["blurb_section"] = State.off; +        type["glossary_section"] = State.off;        }        if (line.empty) {          debug { @@ -1014,7 +1214,7 @@ template SiSUdocAbstraction() {      ) {        if (type["curly_poem"] == TriState.on) {          if (matchFirst(line, rgx.block_curly_poem_close)) { -          an_object["body_nugget"]="verse"; // check that this is as you please +          an_object[an_object_key]="verse"; // check that this is as you please            debug(poem) {                            // poem (curly) close              writefln(                "* [poem curly] %s", @@ -1022,7 +1222,7 @@ template SiSUdocAbstraction() {              );            }            if (processing.length > 0) { -            an_object["body_nugget"] = processing["verse"]; +            an_object[an_object_key] = processing["verse"];            }            debug(poem) {                            // poem (curly) close              writeln(__LINE__); @@ -1036,16 +1236,16 @@ template SiSUdocAbstraction() {              debug(poem) {                            // poem (curly) close                writeln(                  obj_cite_number, -                an_object["body_nugget"] +                an_object[an_object_key]                );              }              an_object["is"] = "verse";              auto substantive_object_and_anchor_tags_tuple = -              obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); +              obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);              an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];              anchor_tags = substantive_object_and_anchor_tags_tuple[1];              an_object["attrib"] = -              obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);              the_document_body_section ~=                set_abstract_object.contents_block(                  an_object["is"], @@ -1074,12 +1274,12 @@ template SiSUdocAbstraction() {            }            if (type["verse_new"] == State.on) {              verse_line=1; -            an_object["body_nugget"] = processing["verse"]; +            an_object[an_object_key] = processing["verse"];              debug(poem) {                          // poem verse                writefln(                  "* %s curly\n%s",                  obj_cite_number, -                an_object["body_nugget"] +                an_object[an_object_key]                );              }              processing.remove("verse"); @@ -1093,11 +1293,11 @@ template SiSUdocAbstraction() {                an_object["is"]              );              auto substantive_object_and_anchor_tags_tuple = -              obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); +              obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);              an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];              anchor_tags = substantive_object_and_anchor_tags_tuple[1];              an_object["attrib"] = -              obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);              the_document_body_section ~=                set_abstract_object.contents_block(                  an_object["is"], @@ -1112,7 +1312,7 @@ template SiSUdocAbstraction() {          }        } else if (type["tic_poem"] == TriState.on) {          if (auto m = matchFirst(line, rgx.block_tic_close)) { // tic_poem_close -          an_object["body_nugget"]="verse"; // check that this is as you please +          an_object[an_object_key]="verse"; // check that this is as you please            debug(poem) {                            // poem (curly) close              writefln(                "* [poem tic] %s", @@ -1120,7 +1320,7 @@ template SiSUdocAbstraction() {              );            }            if (processing.length > 0) {       // needs looking at -            an_object["body_nugget"] = processing["verse"]; +            an_object[an_object_key] = processing["verse"];            }            if (an_object.length > 0) {              debug(poem) {                            // poem (tic) close @@ -1130,11 +1330,11 @@ template SiSUdocAbstraction() {              processing.remove("verse");              an_object["is"] = "verse";              auto substantive_object_and_anchor_tags_tuple = -              obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); +              obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);              an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];              anchor_tags = substantive_object_and_anchor_tags_tuple[1];              an_object["attrib"] = -              obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);              the_document_body_section ~=                set_abstract_object.contents_block(                  an_object["is"], @@ -1162,12 +1362,12 @@ template SiSUdocAbstraction() {            }            if (type["verse_new"] == State.on) {              verse_line=1; -            an_object["body_nugget"] = processing["verse"]; +            an_object[an_object_key] = processing["verse"];              debug(poem) {                            // poem (tic) close                writefln(                  "* %s tic\n%s",                  obj_cite_number, -                an_object["body_nugget"] +                an_object[an_object_key]                );              }              processing.remove("verse"); @@ -1182,11 +1382,11 @@ template SiSUdocAbstraction() {                  an_object["is"]                );              auto substantive_object_and_anchor_tags_tuple = -              obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); +              obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);              an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];              anchor_tags = substantive_object_and_anchor_tags_tuple[1];              an_object["attrib"] = -              obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);              the_document_body_section ~=                set_abstract_object.contents_block(                  an_object["is"], @@ -1218,7 +1418,7 @@ template SiSUdocAbstraction() {            debug(group) {                           // group              writeln(line);            } -          an_object["body_nugget"] ~= line ~= "\n";     // build group array (or string) +          an_object[an_object_key] ~= line ~= "\n";           // build group array (or string)          }        } else if (type["tic_group"] == TriState.on) {          if (matchFirst(line, rgx.block_tic_close)) { @@ -1232,7 +1432,7 @@ template SiSUdocAbstraction() {            debug(group) {                           // group              writeln(line);            } -          an_object["body_nugget"] ~= line ~= "\n";     // build group array (or string) +          an_object[an_object_key] ~= line ~= "\n";           // build group array (or string)          }        }      } @@ -1253,7 +1453,7 @@ template SiSUdocAbstraction() {            debug(block) {                           // block              writeln(line);            } -          an_object["body_nugget"] ~= line ~= "\n";     // build block array (or string) +          an_object[an_object_key] ~= line ~= "\n";           // build block array (or string)          }        } else if (type["tic_block"] == TriState.on) {          if (matchFirst(line, rgx.block_tic_close)) { @@ -1267,7 +1467,7 @@ template SiSUdocAbstraction() {            debug(block) {                           // block              writeln(line);            } -          an_object["body_nugget"] ~= line ~= "\n";     // build block array (or string) +          an_object[an_object_key] ~= line ~= "\n";           // build block array (or string)          }        }      } @@ -1288,7 +1488,7 @@ template SiSUdocAbstraction() {            debug(quote) {                           // quote              writeln(line);            } -          an_object["body_nugget"] ~= line ~= "\n";     // build quote array (or string) +          an_object[an_object_key] ~= line ~= "\n";           // build quote array (or string)          }        } else if (type["tic_quote"] == TriState.on) {          if (matchFirst(line, rgx.block_tic_close)) { @@ -1302,7 +1502,7 @@ template SiSUdocAbstraction() {            debug(quote) {                           // quote              writeln(line);            } -          an_object["body_nugget"] ~= line ~= "\n";     // build quote array (or string) +          an_object[an_object_key] ~= line ~= "\n";           // build quote array (or string)          }        }      } @@ -1323,7 +1523,7 @@ template SiSUdocAbstraction() {            debug(table) {                           // table              writeln(line);            } -          an_object["body_nugget"] ~= line ~= "\n";     // build table array (or string) +          an_object[an_object_key] ~= line ~= "\n";           // build table array (or string)          }        } else if (type["tic_table"] == TriState.on) {          if (matchFirst(line, rgx.block_tic_close)) { @@ -1337,7 +1537,7 @@ template SiSUdocAbstraction() {            debug(table) {                           // table              writeln(line);            } -          an_object["body_nugget"] ~= line ~= "\n";     // build table array (or string) +          an_object[an_object_key] ~= line ~= "\n";           // build table array (or string)          }        }      } @@ -1381,11 +1581,11 @@ template SiSUdocAbstraction() {              an_object["is"]            );          auto substantive_object_and_anchor_tags_tuple = -          obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); +          obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);          the_document_body_section ~=            set_abstract_object.contents_block_code(              an_object["is"], @@ -1442,11 +1642,11 @@ template SiSUdocAbstraction() {              an_object["is"]            );          auto substantive_object_and_anchor_tags_tuple = -          obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); +          obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -1477,11 +1677,11 @@ template SiSUdocAbstraction() {              an_object["is"]            );          auto substantive_object_and_anchor_tags_tuple = -          obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); +          obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -1511,11 +1711,11 @@ template SiSUdocAbstraction() {              an_object["is"]             );          auto substantive_object_and_anchor_tags_tuple = -          obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); +          obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -1546,11 +1746,11 @@ template SiSUdocAbstraction() {              an_object["is"]            );          auto substantive_object_and_anchor_tags_tuple = -          obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); +          obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -1751,6 +1951,7 @@ template SiSUdocAbstraction() {        char[] line,        ref int[string] line_occur,        ref string[string] an_object, +      ref string an_object_key,        ref int[string] lv,        ref int[string] collapsed_lev,        ref int[string] type, @@ -1759,17 +1960,21 @@ template SiSUdocAbstraction() {        if (auto m = match(line, rgx.heading)) {          /+ heading match +/          type["heading"] = State.on; -        type["biblio_section"] = State.off; +        if (match(line, rgx.heading_seg_and_above)) { +          type["biblio_section"] = State.off; +          type["glossary_section"] = State.off; +          type["blurb_section"] = State.off; +        }          type["para"] = State.off;          ++line_occur["heading"]; -        an_object["body_nugget"] ~= line ~= "\n"; +        an_object[an_object_key] ~= line ~= "\n";          an_object["lev"] ~= m.captures[1];          assertions_doc_structure(an_object, lv); // includes most of the logic for collapsed levels          switch (an_object["lev"]) {          case "A": -          an_object["body_nugget"]=replaceFirst(an_object["body_nugget"], +          an_object[an_object_key]=replaceFirst(an_object[an_object_key],              rgx.variable_doc_title, (dochead_meta_aa["title"]["full"] ~ ",")); -          an_object["body_nugget"]=replaceFirst(an_object["body_nugget"], +          an_object[an_object_key]=replaceFirst(an_object[an_object_key],              rgx.variable_doc_author, dochead_meta_aa["creator"]["author"]);            collapsed_lev["h0"] = 1;            an_object["lev_collapsed_number"] = @@ -1888,6 +2093,7 @@ template SiSUdocAbstraction() {      auto _para_match_(        char[] line,        ref string[string] an_object, +      ref string an_object_key,        ref string[string] indent,        ref bool bullet,        ref int[string] type, @@ -1896,7 +2102,7 @@ template SiSUdocAbstraction() {        if (line_occur["para"] == State.off) {          /+ para matches +/          type["para"] = State.on; -        an_object["body_nugget"] ~= line; +        an_object[an_object_key] ~= line; // body_nugget          indent=[            "hang_position" : "0",            "base_position" : "0", @@ -2120,11 +2326,12 @@ template SiSUdocAbstraction() {        string[string] obj_txt;        auto obj_inline_markup_and_anchor_tags(          string[string] obj_, +        string obj_key_,          string[string][string] dochead_make_aa        )        in { }        body { -        obj_txt["munge"]=obj_["body_nugget"].dup; +        obj_txt["munge"]=obj_[obj_key_].dup;          obj_txt["munge"]=(match(obj_["is"], ctRegex!(`verse|code`)))          ? obj_txt["munge"]          : strip(obj_txt["munge"]);  | 
