diff options
| author | Ralph Amissah <ralph@amissah.com> | 2016-11-28 20:54:26 -0500 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2019-04-10 15:14:13 -0400 | 
| commit | af1765cd7b2f3b1309eea5bcdb91780176518c88 (patch) | |
| tree | 7529b40e4ecdaabc10c6737486a9ce1795dfea33 /org | |
| parent | discrete objects marks, output html work in progress (diff) | |
0.9.2 backmatter: control processing, possible to omit sections
Diffstat (limited to 'org')
| -rw-r--r-- | org/ao_abstract_doc_source.org | 316 | ||||
| -rw-r--r-- | org/ao_defaults.org | 3 | ||||
| -rw-r--r-- | org/sdp.org | 106 | 
3 files changed, 236 insertions, 189 deletions
diff --git a/org/ao_abstract_doc_source.org b/org/ao_abstract_doc_source.org index 690c029..c5535fd 100644 --- a/org/ao_abstract_doc_source.org +++ b/org/ao_abstract_doc_source.org @@ -266,17 +266,20 @@ continue;  #+name: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d  if ((matchFirst(line, rgx.heading_biblio) -|| (type["biblio_section"] == State.on)) +|| (type["biblio_section"] == State.on +&& (!matchFirst(line, rgx.heading_blurb_glossary))))  && (!matchFirst(line, rgx.heading))  && (!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); +  if (opt_action_bool["backmatter"] && opt_action_bool["section_biblio"]) { +    _biblio_block_(line, type, bib_entry, biblio_entry_str_json, biblio_arr_json); // +    debug(bibliobuild) { +      writeln("-  ", biblio_entry_str_json); +      writeln("-> ", biblio_arr_json.length); +    }    }    continue;  #+END_SRC @@ -293,7 +296,8 @@ if there is a glossary section you need to:  #+name: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d  } else if ((matchFirst(line, rgx.heading_glossary) -|| (type["glossary_section"] == State.on)) +|| (type["glossary_section"] == State.on +&& (!matchFirst(line, rgx.heading_biblio_blurb))))  && (!matchFirst(line, rgx.heading))  && (!matchFirst(line, rgx.comment))) {    /+ within section (block object): glossary +/ @@ -305,50 +309,52 @@ if there is a glossary section you need to:    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 -      ); +  if (opt_action_bool["backmatter"] && opt_action_bool["section_glossary"]) { +    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;    } -  type["obj_cite_number_status"] = TriState.off;    continue;  #+END_SRC @@ -364,7 +370,8 @@ if there is a blurb section you need to:  #+name: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d  } else if ((matchFirst(line, rgx.heading_blurb) -|| (type["blurb_section"] == State.on)) +|| (type["blurb_section"] == State.on +&& (!matchFirst(line, rgx.heading_biblio_glossary))))  && (!matchFirst(line, rgx.heading))  && (!matchFirst(line, rgx.comment))) {    /+ within section (block object): blurb +/ @@ -376,60 +383,63 @@ if there is a blurb section you need to:    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 -      ); +  if (opt_action_bool["backmatter"] && opt_action_bool["section_blurb"]) { +    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)) +      && (opt_action_bool["backmatter"] && opt_action_bool["section_blurb"])) { +      _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? +      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;    } -  type["obj_cite_number_status"] = TriState.off;    continue;  #+END_SRC @@ -549,7 +559,7 @@ if ((matchFirst(line, rgx.book_index))  || (matchFirst(line, rgx.book_index_open))  || (type["book_index"] == State.on ))  {    /+ book_index +/ -  _book_index_(line, book_idx_tmp, an_object, type); +  _book_index_(line, book_idx_tmp, an_object, type, opt_action_bool);  #+END_SRC  ******* not book index [+1] @@ -846,10 +856,11 @@ debug(objectrelated2) { // check  }  /+    Backmatter: -  * endnotes -  * glossary -  * references / bibliography -  * book index +  - endnotes +  - glossary +  - bibliography / references +  - book index +  - blurb  +/  // TODO FIGURE OUT, you need this possibility  // obj_im.obj_inline_markup_and_anchor_tags("doc_end_reset", an_object_key, "", dochead_make_aa); @@ -861,7 +872,7 @@ debug(objectrelated2) { // check  #+name: abs_post  #+BEGIN_SRC d  auto en_tuple = -  note_section.endnote_objects(obj_cite_number); +  note_section.endnote_objects(obj_cite_number, opt_action_bool);  static assert(!isTypeTuple!(en_tuple));  auto the_endnotes_section = en_tuple[0];  obj_cite_number = en_tuple[1]; @@ -1033,7 +1044,8 @@ auto bi_tuple =    bi.bookindex_build_section(      bookindex_unordered_hashes,      obj_cite_number, -    segment_object_belongs_to +    segment_object_belongs_to, +    opt_action_bool,    );  static assert(!isTypeTuple!(bi_tuple));  auto the_bookindex_section = bi_tuple[0]; @@ -2407,10 +2419,11 @@ void _block_flag_line_empty_(  #+name: abs_functions_book_index  #+BEGIN_SRC d  auto _book_index_( -  char[] line, -  ref string book_idx_tmp, +  char[]             line, +  ref string         book_idx_tmp,    ref string[string] an_object, -  ref int[string] type +  ref int[string]    type, +  bool[string]       opt_action_bool,  ) {    if (auto m = match(line, rgx.book_index)) {      /+ match book_index +/ @@ -2424,27 +2437,33 @@ auto _book_index_(    } else if (auto m = match(line, rgx.book_index_open))  {      /+ match open book_index +/      type["book_index"] = State.on; -    book_idx_tmp = to!string(m.captures[1]); -    debug(bookindexmatch) {                       // book index -      writefln( -        "* [bookindex] %s\n", -        book_idx_tmp, -      ); +    if (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"]) { +      book_idx_tmp = to!string(m.captures[1]); +      debug(bookindexmatch) {                       // book index +        writefln( +          "* [bookindex] %s\n", +          book_idx_tmp, +        ); +      }      }    } else if (type["book_index"] == State.on )  {      /+ book_index flag set +/      if (auto m = match(line, rgx.book_index_close))  {        type["book_index"] = State.off; -      an_object["bookindex_nugget"] = book_idx_tmp ~ to!string(m.captures[1]); -      debug(bookindexmatch) {                     // book index -        writefln( -          "* [bookindex] %s\n", -          book_idx_tmp, -        ); +      if (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"]) { +        an_object["bookindex_nugget"] = book_idx_tmp ~ to!string(m.captures[1]); +        debug(bookindexmatch) {                     // book index +          writefln( +            "* [bookindex] %s\n", +            book_idx_tmp, +          ); +        }        }        book_idx_tmp = "";      } else { -      book_idx_tmp ~= line; +      if (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"]) { +        book_idx_tmp ~= line; +      }      }    }  } @@ -3974,8 +3993,9 @@ struct BookIndexReportSection {  #+BEGIN_SRC d    auto bookindex_build_section(      string[][string][string] bookindex_unordered_hashes, -    int obj_cite_number, -    string segment_object_belongs_to, +    int                      obj_cite_number, +    string                   segment_object_belongs_to, +    bool[string]             opt_action_bool,    ) {      string type;      string lev; @@ -3986,7 +4006,8 @@ struct BookIndexReportSection {      auto mainkeys =        bookindex_unordered_hashes.byKey.array.sort().release;      ObjComposite[][string] bookindex_section; -    if (mainkeys.length > 0) { +    if ((mainkeys.length > 0) +    && (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"])) {        string bi_tmp_seg, bi_tmp_scroll;        attrib="";        lev="B"; @@ -4150,8 +4171,8 @@ struct NotesSection {  #+BEGIN_SRC d    private auto gather_notes_for_endnote_section(      ObjComposite[] contents_am, -    string segment_object_belongs_to, -    ulong counter +    string         segment_object_belongs_to, +    ulong          counter,    )    in {      // endnotes/ footnotes for @@ -4228,7 +4249,10 @@ struct NotesSection {  #+name: ao_emitters_endnotes  #+BEGIN_SRC d -  private auto endnote_objects(int obj_cite_number) +  private auto endnote_objects( +    int            obj_cite_number, +    bool[string]   opt_action_bool, +  )    in {    }    body { @@ -4239,7 +4263,8 @@ struct NotesSection {      string lev, lev_markup_number, lev_collapsed_number;      string attrib;      int[string] indent; -    if (endnotes_["seg"].length > 0) { +    if ((endnotes_["seg"].length > 0) +    && (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"])) {        attrib="";        lev="B";        lev_markup_number="1"; @@ -4314,15 +4339,17 @@ struct NotesSection {            1          );      } -    foreach (i, endnote; endnotes_["seg"]) { -      attrib=""; -      the_endnotes_section["seg"] ~= -        set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); -    } -    foreach (i, endnote; endnotes_["scroll"]) { -      attrib=""; -      the_endnotes_section["scroll"] ~= -        set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); +    if (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"]) { +      foreach (i, endnote; endnotes_["seg"]) { +        attrib=""; +        the_endnotes_section["seg"] ~= +          set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); +      } +      foreach (i, endnote; endnotes_["scroll"]) { +        attrib=""; +        the_endnotes_section["scroll"] ~= +          set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); +      }      }      auto t = tuple(the_endnotes_section, obj_cite_number);      return t; @@ -5198,9 +5225,10 @@ template SiSUdocAbstraction() {      <<abs_init_struct>>      /+ ↓ abstract marked up document +/      auto abstract_doc_source( -      char[][] markup_sourcefile_content, +      char[][]               markup_sourcefile_content,        string[string][string] dochead_make_aa, -      string[string][string] dochead_meta_aa +      string[string][string] dochead_meta_aa, +      bool[string]           opt_action_bool,      ) {        /+ ↓ abstraction init +/        <<abs_init_rest>> diff --git a/org/ao_defaults.org b/org/ao_defaults.org index b5ed652..067fe59 100644 --- a/org/ao_defaults.org +++ b/org/ao_defaults.org @@ -566,6 +566,9 @@ static heading_backmatter                             = ctRegex!(`^:?1[~][!](glo  static heading_biblio                                 = ctRegex!(`^:?(1)[~][!](biblio(?:graphy)?|references?)`);  static heading_glossary                               = ctRegex!(`^:?(1)[~][!](glossary)`);  static heading_blurb                                  = ctRegex!(`^:?(1)[~][!](blurb)`); +static heading_biblio_glossary                        = ctRegex!(`^:?(?:(1)[~][!](?:(?:biblio(?:graphy)?|references?)|glossary)|[A-D1][~])`); +static heading_biblio_blurb                           = ctRegex!(`^:?(?:(1)[~][!](?:(?:biblio(?:graphy)?|references?)|blurb)|[A-D1][~])`); +static heading_blurb_glossary                         = ctRegex!(`^:?(?:(1)[~][!](?:blurb|glossary)|[A-D1][~])`);  static para_bullet                                    = ctRegex!(`^_[*] `);  static para_bullet_indent                             = ctRegex!(`^_([1-9])[*] `);  static para_indent                                    = ctRegex!(`^_([1-9]) `); diff --git a/org/sdp.org b/org/sdp.org index afd2be5..a016400 100644 --- a/org/sdp.org +++ b/org/sdp.org @@ -24,7 +24,7 @@ struct Version {    int minor;    int patch;  } -enum ver = Version(0, 9, 1); +enum ver = Version(0, 9, 2);  #+END_SRC  * sdp.d   sisu document parser                                       :sdp.d: @@ -215,52 +215,68 @@ look into using getopt  #+NAME: sdp_args  #+BEGIN_SRC d  bool[string] opt_action_bool = [ -  "assertions"      : false, -  "concordance"     : false, -  "digest"          : false, -  "docbook"         : false, -  "epub"            : false, -  "html"            : false, -  "manifest"        : false, -  "no_ocn"          : false, -  "odt"             : false, -  "pdf"             : false, -  "postgresql"      : false, -  "qrcode"          : false, -  "sisupod"         : false, -  "source"          : false, -  "sqlite"          : false, -  "text"            : false, -  "verbose"         : false, -  "xhtml"           : false, -  "xml_dom"         : false, -  "xml_sax"         : false, +  "assertions"         : false, +  "concordance"        : false, +  "digest"             : false, +  "docbook"            : false, +  "epub"               : false, +  "html"               : false, +  "manifest"           : false, +  "ocn"                : true, +  "odt"                : false, +  "pdf"                : false, +  "postgresql"         : false, +  "qrcode"             : false, +  "sisupod"            : false, +  "source"             : false, +  "sqlite"             : false, +  "text"               : false, +  "verbose"            : false, +  "xhtml"              : false, +  "xml_dom"            : false, +  "xml_sax"            : false, +  "section_toc"        : true, +  "section_body"       : true, +  "section_endnotes"   : true, +  "section_glossary"   : true, +  "section_biblio"     : true, +  "section_bookindex"  : true, +  "section_blurb"      : true, +  "backmatter"         : true,  ];  auto helpInfo = getopt(args,    std.getopt.config.passThrough, -  "assert",         "--assert set optional assertions on",       &opt_action_bool["assertions"], -  "concordance",    "--concordance file for document",           &opt_action_bool["concordance"], -  "digest",         "--digest hash digest for each object",      &opt_action_bool["digest"], -  "docbook",        "--docbook process docbook output",          &opt_action_bool["docbook"], -  "epub",           "--epub process epub output",                &opt_action_bool["epub"], -  "html",           "--html process html output",                &opt_action_bool["html"], -  "manifest",       "--manifest process manifest output",        &opt_action_bool["manifest"], -  "no-ocn",         "--no-ocn suppress object cite numbers",     &opt_action_bool["no_ocn"], -  "odf",            "--odf process odf:odt output",              &opt_action_bool["odt"], -  "odt",            "--odt process odf:odt output",              &opt_action_bool["odt"], -  "pdf",            "--pdf process pdf output",                  &opt_action_bool["pdf"], -  "pg",             "--pg process postgresql output",            &opt_action_bool["postgresql"], -  "postgresql",     "--postgresql process postgresql output",    &opt_action_bool["postgresql"], -  "qrcode",         "--qrcode with document metadata",           &opt_action_bool["qrcode"], -  "sisupod",        "--sisupod sisupod source content bundled",  &opt_action_bool["sisupod"], -  "source",         "--source markup source text content",       &opt_action_bool["source"], -  "sqlite",         "--sqlite process sqlite output",            &opt_action_bool["sqlite"], -  "text",           "--text process text output",                &opt_action_bool["text"], -  "txt",            "--txt process text output",                 &opt_action_bool["text"], -  "verbose|v",      "--verbose output to terminal",              &opt_action_bool["verbose"], -  "xhtml",          "--xhtml process xhtml output",              &opt_action_bool["xhtml"], -  "xml-dom",        "--xml-dom process xml dom output",          &opt_action_bool["xml_dom"], -  "xml-sax",        "--xml-sax process xml sax output",          &opt_action_bool["xml_sax"], +  "assert",             "--assert set optional assertions on",                        &opt_action_bool["assertions"], +  "concordance",        "--concordance file for document",                            &opt_action_bool["concordance"], +  "digest",             "--digest hash digest for each object",                       &opt_action_bool["digest"], +  "docbook",            "--docbook process docbook output",                           &opt_action_bool["docbook"], +  "epub",               "--epub process epub output",                                 &opt_action_bool["epub"], +  "html",               "--html process html output",                                 &opt_action_bool["html"], +  "manifest",           "--manifest process manifest output",                         &opt_action_bool["manifest"], +  "ocn",                "--ocn object cite numbers (default)",                        &opt_action_bool["ocn"], +  "odf",                "--odf process odf:odt output",                               &opt_action_bool["odt"], +  "odt",                "--odt process odf:odt output",                               &opt_action_bool["odt"], +  "pdf",                "--pdf process pdf output",                                   &opt_action_bool["pdf"], +  "pg",                 "--pg process postgresql output",                             &opt_action_bool["postgresql"], +  "postgresql",         "--postgresql process postgresql output",                     &opt_action_bool["postgresql"], +  "qrcode",             "--qrcode with document metadata",                            &opt_action_bool["qrcode"], +  "sisupod",            "--sisupod sisupod source content bundled",                   &opt_action_bool["sisupod"], +  "source",             "--source markup source text content",                        &opt_action_bool["source"], +  "sqlite",             "--sqlite process sqlite output",                             &opt_action_bool["sqlite"], +  "text",               "--text process text output",                                 &opt_action_bool["text"], +  "txt",                "--txt process text output",                                  &opt_action_bool["text"], +  "verbose|v",          "--verbose output to terminal",                               &opt_action_bool["verbose"], +  "xhtml",              "--xhtml process xhtml output",                               &opt_action_bool["xhtml"], +  "xml-dom",            "--xml-dom process xml dom output",                           &opt_action_bool["xml_dom"], +  "xml-sax",            "--xml-sax process xml sax output",                           &opt_action_bool["xml_sax"], +  "section-toc",        "--section-toc process table of contents (default)",          &opt_action_bool["section_toc"], +  "section-body",       "--section-body process document body (default)",             &opt_action_bool["section_body"], +  "section-endnotes",   "--section-endnotes process document endnotes (default)",     &opt_action_bool["section_endnotes"], +  "section-glossary",   "--section-glossary process document glossary (default)",     &opt_action_bool["section_glossary"], +  "section-biblio",     "--section-biblio process document biblio (default)",         &opt_action_bool["section_biblio"], +  "section-bookindex",  "--section-bookindex process document bookindex (default)",   &opt_action_bool["section_bookindex"], +  "section-blurb",      "--section-blurb process document blurb (default)",           &opt_action_bool["section_blurb"], +  "backmatter",         "--section-backmatter process document backmatter (default)", &opt_action_bool["backmatter"],  );  if (helpInfo.helpWanted) {    defaultGetoptPrinter("Some information about the program.", helpInfo.options); @@ -358,7 +374,7 @@ string[string][string] dochead_meta = header_make_and_meta_tuple[1];  #+NAME: sdp_each_file_do_document_abstraction  #+BEGIN_SRC d  /+ ↓ document abstraction: process document, return abstraction as tuple +/ -auto t = abs.abstract_doc_source(content_body, dochead_make, dochead_meta); +auto t = abs.abstract_doc_source(content_body, dochead_make, dochead_meta, opt_action_bool);  static assert(!isTypeTuple!(t));  auto doc_ao_contents = t[0]; // head ~ toc ~ contents ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~blurb;  auto doc_ao_bookindex_unordered_hashes = t[1]; // redundant?  | 
