From 9c42b4567f35aceacce1298a6d4789d6789e5bfe Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Tue, 17 Dec 2019 13:22:51 -0500 Subject: specify Tuple content for read in files, remove traits.std --- org/default_misc.org | 1 - org/imports.org | 2 -- org/in_source_files.org | 24 ++++++++-------- org/meta_conf_make_meta.org | 4 --- org/meta_debugs.org | 1 - org/metaverse.org | 26 ++++++++--------- org/out_harvest_metadata.org | 1 - org/out_latex.org | 32 ++++++++++----------- org/out_odt.org | 18 ++++++------ org/out_sqlite.org | 10 +++---- org/out_xmls.org | 66 +++++++++++++++++++++----------------------- org/output_show.org | 1 - org/spine.org | 3 -- 13 files changed, 85 insertions(+), 104 deletions(-) (limited to 'org') diff --git a/org/default_misc.org b/org/default_misc.org index cc4083e..8988f3e 100644 --- a/org/default_misc.org +++ b/org/default_misc.org @@ -243,7 +243,6 @@ import std.regex, std.stdio, std.string, - std.traits, std.typecons, std.uni, std.utf, diff --git a/org/imports.org b/org/imports.org index 45705a4..fd6998e 100644 --- a/org/imports.org +++ b/org/imports.org @@ -38,7 +38,6 @@ public import std.regex, std.stdio, std.string, - std.traits, std.typecons, // std.uni, std.utf, @@ -68,7 +67,6 @@ public import std.regex, std.stdio, std.string, - std.traits, std.typecons, // std.uni, std.utf; diff --git a/org/in_source_files.org b/org/in_source_files.org index 20d8d0a..cb95fda 100644 --- a/org/in_source_files.org +++ b/org/in_source_files.org @@ -296,23 +296,21 @@ static template spineRawMarkupContent() { auto raw = MarkupRawUnit(); string[] insert_file_list; string[] images_list; - auto t + Tuple!(char[], char[][], string[], string[]) t = raw.markupSourceHeaderContentRawLineTupleArray(source_txt_str); auto header_raw = t[0]; auto sourcefile_body_content = t[1]; if (fn_src.match(rgx.src_fn_master)) { // filename with path needed if master file (.ssm) not otherwise auto ins = Inserts(); - auto tu + Tuple!(char[][], string[], string[]) tu = ins.scan_master_src_for_insert_files_and_import_content(_opt_action, sourcefile_body_content, fn_src); - static assert(!isTypeTuple!(tu)); sourcefile_body_content = tu[0]; insert_file_list = tu[1].dup; images_list = tu[2].dup; } else if (_opt_action.source || _opt_action.pod) { auto ins = Inserts(); - auto tu + Tuple!(char[][], string[], string[]) tu = ins.scan_master_src_for_insert_files_and_import_content(_opt_action, sourcefile_body_content, fn_src); - static assert(!isTypeTuple!(tu)); images_list = tu[2].dup; } string header_type = ""; @@ -348,7 +346,7 @@ static template spineRawMarkupContent() { } // end src subdoc (inserts) loop <> } - auto scan_master_src_for_insert_files_and_import_content(O)( + Tuple!(char[][], string[], string[]) scan_master_src_for_insert_files_and_import_content(O)( O _opt_action, char[][] sourcefile_body_content, string fn_src @@ -457,14 +455,14 @@ auto markupSourceReadIn(in string fn_src) { #+name: meta_markup_source_raw_tuple_of_header_and_body #+BEGIN_SRC d -auto markupSourceHeaderContentRawLineTupleArray(in string source_txt_str) @safe { +Tuple!(char[], char[][], string[], string[]) markupSourceHeaderContentRawLineTupleArray(in string source_txt_str) @safe { string[] file_insert_list = []; string[] images_list = []; char[][] hc = header0Content1(source_txt_str); char[] header = hc[0]; char[] source_txt = hc[1]; - auto source_line_arr = markupSourceLineArray(source_txt); - auto t = tuple( + char[][] source_line_arr = markupSourceLineArray(source_txt); + Tuple!(char[], char[][], string[], string[]) t = tuple( header, source_line_arr, file_insert_list, @@ -487,8 +485,8 @@ final char[][] getInsertMarkupSourceContentRawLineArray( "not a dr markup filename: «" ~ fn_src_insert ~ "»" ); - auto source_txt_str = readInMarkupSource(fn_src_insert); - auto source_line_arr = markupSourceLineArray(source_txt_str); + string source_txt_str = readInMarkupSource(fn_src_insert); + char[][] source_line_arr = markupSourceLineArray(source_txt_str); return source_line_arr; } #+END_SRC @@ -584,7 +582,7 @@ if (type1["curly_code"] == 1) { #+name: meta_inserts_scan_post #+BEGIN_SRC d -auto t = tuple( +Tuple!(char[][], string[]) t = tuple( contents_insert, _images ); @@ -689,7 +687,7 @@ debug(insert_file) { writeln(__LINE__); writeln(contents.length); } -auto t = tuple( +Tuple!(char[][], string[], string[]) t = tuple( contents, insert_file_list, images diff --git a/org/meta_conf_make_meta.org b/org/meta_conf_make_meta.org index 4b270e0..746f712 100644 --- a/org/meta_conf_make_meta.org +++ b/org/meta_conf_make_meta.org @@ -35,7 +35,6 @@ import std.regex, std.stdio, std.string, - std.traits, std.typecons, std.uni, std.utf, @@ -61,7 +60,6 @@ import std.regex, std.stdio, std.string, - std.traits, std.typecons, std.utf, std.conv : to; @@ -351,7 +349,6 @@ static template contentYAMLtoSpineStruct() { std.regex, std.stdio, std.string, - std.traits, std.typecons, std.utf, std.conv : to; @@ -1168,7 +1165,6 @@ static template contentJSONtoSpineStruct() { std.regex, std.stdio, std.string, - std.traits, std.typecons, std.utf, std.conv : to; diff --git a/org/meta_debugs.org b/org/meta_debugs.org index f070ada..f17c363 100644 --- a/org/meta_debugs.org +++ b/org/meta_debugs.org @@ -63,7 +63,6 @@ import std.range, std.regex, std.string, - std.traits, std.typecons, std.utf, std.conv : to; diff --git a/org/metaverse.org b/org/metaverse.org index 500b6ac..c7f3481 100644 --- a/org/metaverse.org +++ b/org/metaverse.org @@ -1550,7 +1550,6 @@ if (the_document_body_section.length > 0) { #+BEGIN_SRC d auto en_tuple = note_section.endnote_objects(obj_cite_digits, opt_action); -static assert(!isTypeTuple!(en_tuple)); auto the_endnotes_section = en_tuple[0]; obj_cite_digits = en_tuple[1]; debug(endnotes) { @@ -1766,7 +1765,6 @@ auto bi_tuple opt_action, ); destroy(bookindex_unordered_hashes); -static assert(!isTypeTuple!(bi_tuple)); auto the_bookindex_section = bi_tuple[0]; obj_cite_digits = bi_tuple[1]; debug(bookindex) { @@ -5402,7 +5400,7 @@ static struct ObjInlineMarkupMunge { #+name: meta_emitters_obj_inline_markup_munge #+BEGIN_SRC d - auto footnotes_endnotes_markup_and_number_or_stars()(string obj_txt_in, bool reset_note_numbers) @safe { + Tuple!(string, bool, bool, bool) footnotes_endnotes_markup_and_number_or_stars()(string obj_txt_in, bool reset_note_numbers) @safe { /+ endnotes (regular) +/ bool flg_notes_reg = false; bool flg_notes_star = false; @@ -5458,7 +5456,7 @@ static struct ObjInlineMarkupMunge { } else { obj_txt_out = obj_txt_in; } - auto t = tuple( + Tuple!(string, bool, bool, bool) t = tuple( obj_txt_out, flg_notes_reg, flg_notes_star, @@ -5472,7 +5470,7 @@ static struct ObjInlineMarkupMunge { #+name: meta_emitters_obj_inline_markup_munge #+BEGIN_SRC d - private auto object_notes_and_links_()( + private Tuple!(string, bool, bool, bool, bool, bool) object_notes_and_links_()( string obj_txt_in, bool reset_note_numbers=false ) @safe { @@ -5506,7 +5504,7 @@ static struct ObjInlineMarkupMunge { obj_txt_in = obj_txt_in .replaceAll(rgx.para_inline_link_anchor, "┃$1┃"); } - auto ftn = footnotes_endnotes_markup_and_number_or_stars(obj_txt_in, reset_note_numbers); + Tuple!(string, bool, bool, bool) ftn = footnotes_endnotes_markup_and_number_or_stars(obj_txt_in, reset_note_numbers); obj_txt_out = ftn[0]; debug(footnotes) { writeln(obj_txt_out, tail); @@ -5519,7 +5517,7 @@ static struct ObjInlineMarkupMunge { writeln(m.hit); } } - auto t = tuple( + Tuple!(string, bool, bool, bool, bool, bool) t = tuple( obj_txt_out, ftn[1], ftn[2], @@ -5530,7 +5528,7 @@ static struct ObjInlineMarkupMunge { return t; } auto init() { - auto t = object_notes_and_links_(""); + Tuple!(string, bool, bool, bool, bool, bool) t = object_notes_and_links_(""); return t; } invariant() { @@ -5551,7 +5549,7 @@ static struct ObjInlineMarkupMunge { .replaceFirst(rgx.heading, "") .replaceFirst(rgx.object_number_off_all, "") .strip; - auto t = object_notes_and_links_(obj_txt["munge"], reset_note_numbers); + Tuple!(string, bool, bool, bool, bool, bool) t = object_notes_and_links_(obj_txt["munge"], reset_note_numbers); debug(munge) { writeln(__LINE__); writeln(obj_txt_in); @@ -5578,7 +5576,7 @@ static struct ObjInlineMarkupMunge { obj_txt["munge"]=(obj_txt_in) .replaceFirst(rgx.para_attribs, "") .replaceFirst(rgx.object_number_off_all, ""); - auto t = object_notes_and_links_(obj_txt["munge"]); + Tuple!(string, bool, bool, bool, bool, bool) t = object_notes_and_links_(obj_txt["munge"]); debug(munge) { writeln(__LINE__); writeln(obj_txt_in); @@ -5614,7 +5612,7 @@ static struct ObjInlineMarkupMunge { #+BEGIN_SRC d auto munge_group(string obj_txt_in) @safe { obj_txt["munge"]=obj_txt_in; - auto t = object_notes_and_links_(obj_txt["munge"]); + Tuple!(string, bool, bool, bool, bool, bool) t = object_notes_and_links_(obj_txt["munge"]); return t; } invariant() { @@ -5634,7 +5632,7 @@ static struct ObjInlineMarkupMunge { #+BEGIN_SRC d auto munge_block()(string obj_txt_in) @safe { obj_txt["munge"]=obj_txt_in; - auto t = object_notes_and_links_(obj_txt["munge"]); + Tuple!(string, bool, bool, bool, bool, bool) t = object_notes_and_links_(obj_txt["munge"]); return t; } invariant() { @@ -5654,7 +5652,7 @@ static struct ObjInlineMarkupMunge { #+BEGIN_SRC d auto munge_verse()(string obj_txt_in) @safe { obj_txt["munge"]=obj_txt_in; - auto t = object_notes_and_links_(obj_txt["munge"]); + Tuple!(string, bool, bool, bool, bool, bool) t = object_notes_and_links_(obj_txt["munge"]); return t; } invariant() { @@ -5809,7 +5807,7 @@ static struct ObjInlineMarkup { obj_notes_and_links["image_no_dimensions"] = x[5]; break; } - auto t = tuple( + Tuple!(string, string, bool, bool, bool, bool) t = tuple( obj_txt["munge"], anchor_tag, obj_notes_and_links["notes_reg"], diff --git a/org/out_harvest_metadata.org b/org/out_harvest_metadata.org index 9c954a0..7a27ebf 100644 --- a/org/out_harvest_metadata.org +++ b/org/out_harvest_metadata.org @@ -48,7 +48,6 @@ import std.regex, std.stdio, std.string, - std.traits, std.typecons, std.uni, std.utf, diff --git a/org/out_latex.org b/org/out_latex.org index 4e0ff3e..b88324e 100644 --- a/org/out_latex.org +++ b/org/out_latex.org @@ -861,24 +861,24 @@ auto tablarize(O)( string _tablenote; foreach(row_idx, row; _table_rows) { _table_cols = row.split(rgx.table_delimiter_col); - _table ~= ""; - foreach(col_idx, cell; _table_cols) { - if ((_table_cols.length == 1) - && (_table_rows.length <= row_idx+2)) { // check row_idx+2 (rather than == ++row_idx) - _tablenote ~= cell; - } else { - // // _table ~= "\\bfseries "; - // _table ~= cell; - // _table ~= (_table_cols.length > (col_idx + 1)) ? "&" : ""; - _table ~= format(q"┃%s%s┃", - cell, - (_table_cols.length > (col_idx + 1)) ? "&" : "" - ); - } + _table ~= ""; + foreach(col_idx, cell; _table_cols) { + if ((_table_cols.length == 1) + && (_table_rows.length <= row_idx+2)) { // check row_idx+2 (rather than == ++row_idx) + _tablenote ~= cell; + } else { + // // _table ~= "\\bfseries "; + // _table ~= cell; + // _table ~= (_table_cols.length > (col_idx + 1)) ? "&" : ""; + _table ~= format(q"┃%s%s┃", + cell, + (_table_cols.length > (col_idx + 1)) ? "&" : "" + ); } - _table ~= "\\\\"; } - auto t = tuple( + _table ~= "\\\\"; + } + Tuple!(string, string) t = tuple( _table, _tablenote, ); diff --git a/org/out_odt.org b/org/out_odt.org index 59e731c..3092aa5 100644 --- a/org/out_odt.org +++ b/org/out_odt.org @@ -373,13 +373,13 @@ string _font_face(string _txt){ .replaceAll(rgx.inline_strike, "$1") .replaceAll(rgx.inline_insert, "$1") .replaceAll(rgx.inline_cite, "$1") - .replaceAll(rgx.inline_emphasis, format(q"┃%s┃","$1")) - .replaceAll(rgx.inline_bold, format(q"┃%s┃","$1")) - .replaceAll(rgx.inline_italics, format(q"┃%s┃","$1")) - .replaceAll(rgx.inline_underscore, format(q"┃%s┃","$1")) + .replaceAll(rgx.inline_emphasis, format(q"┃%s┃", "$1")) + .replaceAll(rgx.inline_bold, format(q"┃%s┃", "$1")) + .replaceAll(rgx.inline_italics, format(q"┃%s┃", "$1")) + .replaceAll(rgx.inline_underscore, format(q"┃%s┃", "$1")) .replaceAll(rgx.inline_superscript, format(q"┃%s┃","$1")) - .replaceAll(rgx.inline_subscript, format(q"┃%s┃","$1")) - .replaceAll(rgx.inline_mono, format(q"┃%s┃","$1")); + .replaceAll(rgx.inline_subscript, format(q"┃%s┃", "$1")) + .replaceAll(rgx.inline_mono, format(q"┃%s┃", "$1")); return _txt; } #+END_SRC @@ -764,7 +764,7 @@ string code(O,M)( #+name: odt_format_objects #+BEGIN_SRC d -auto tablarize(O)( +Tuple!(string, string) tablarize(O)( const O obj, string _txt, ) @safe { @@ -792,7 +792,7 @@ auto tablarize(O)( } _table ~= ""; } - auto t = tuple( + Tuple!(string, string) t = tuple( _table, _tablenote, ); @@ -814,7 +814,7 @@ string table(O,M)( assert(obj.metainfo.is_of_type == "block"); assert(obj.metainfo.is_a == "table"); string _o_txt_odt = markup(obj); - auto t = tablarize(obj, _o_txt_odt); + Tuple!(string, string) t = tablarize(obj, _o_txt_odt); string _note = t[1]; _o_txt_odt = format(q"┃ diff --git a/org/out_sqlite.org b/org/out_sqlite.org index 0f61a03..0d1bbef 100644 --- a/org/out_sqlite.org +++ b/org/out_sqlite.org @@ -673,7 +673,7 @@ string inline_notes_scroll(M,O)( #+name: sanitize_and_munge_inline_html #+BEGIN_SRC d -auto inline_notes_seg(M,O)( +Tuple!(string, string) inline_notes_seg(M,O)( M doc_matters, const O obj, string _txt, @@ -706,7 +706,7 @@ auto inline_notes_seg(M,O)( writeln(__LINE__, " endnote: ", obj.metainfo.is_a, ": ", obj.text); } } - auto t = tuple( + Tuple!(string, string) t = tuple( _txt, _endnotes, ); @@ -926,7 +926,7 @@ string html_table(M,O)( assert(obj.metainfo.is_of_section == "body"); assert(obj.metainfo.is_of_type == "block"); assert(obj.metainfo.is_a == "table"); - auto _tablarize(O)( + Tuple!(string, string) _tablarize(O)( const O obj, string _txt, ) { @@ -961,14 +961,14 @@ string html_table(M,O)( } _table ~= ""; } - auto t = tuple( + Tuple!(string, string) t = tuple( _table, _tablenote, ); return t; } string _txt = munge_html(doc_matters, obj); - auto t = _tablarize(obj, _txt); + Tuple!(string, string) t = _tablarize(obj, _txt); _txt = t[0]; string _note = t[1]; string o = format(q"┃

diff --git a/org/out_xmls.org b/org/out_xmls.org index 8821cca..5cbe430 100644 --- a/org/out_xmls.org +++ b/org/out_xmls.org @@ -262,9 +262,7 @@ string inline_search_form(M)( _db, ); } else { - _form = format(q"┃%s┃", - "", - ); + _form = format(q"┃%s┃", ""); } o = format(q"┃

%s
┃", @@ -598,7 +596,7 @@ string inline_notes_scroll(O,M)( #+name: xhtml_format_objects #+BEGIN_SRC d -auto inline_notes_seg(O,M)( +Tuple!(string, string[]) inline_notes_seg(O,M)( string _txt, const O obj, M doc_matters, @@ -656,7 +654,7 @@ auto inline_notes_seg(O,M)( writeln(__LINE__, " endnote: ", obj.metainfo.is_a, ": ", obj.text); } } - auto t = tuple( + Tuple!(string, string[]) t = tuple( _txt, _endnotes, ); @@ -930,7 +928,7 @@ string heading_scroll(O,M)( #+name: xhtml_format_objects #+BEGIN_SRC d -auto heading_seg(O,M)( +Tuple!(string, string[]) heading_seg(O,M)( string _txt, const O obj, M doc_matters, @@ -941,7 +939,7 @@ auto heading_seg(O,M)( _txt = t[0]; string[] _endnotes = t[1]; string o = heading(_txt, obj, doc_matters, _xml_type); - auto u = tuple( + Tuple!(string, string[]) u = tuple( o, _endnotes, ); @@ -1025,7 +1023,7 @@ string para_scroll(O,M)( #+name: xhtml_format_objects #+BEGIN_SRC d -auto para_seg(O,M)( +Tuple!(string, string[]) para_seg(O,M)( string _txt, const O obj, M doc_matters, @@ -1036,7 +1034,7 @@ auto para_seg(O,M)( _txt = t[0].to!string; string[] _endnotes = t[1]; string o = para(_txt, obj, doc_matters); - auto u = tuple( + Tuple!(string, string[]) u = tuple( o, _endnotes, ); @@ -1107,7 +1105,7 @@ string quote_scroll(O,M)( #+name: xhtml_format_objects #+BEGIN_SRC d -auto quote_seg(O,M)( +Tuple!(string, string[]) quote_seg(O,M)( string _txt, const O obj, M doc_matters, @@ -1118,7 +1116,7 @@ auto quote_seg(O,M)( _txt = t[0].to!string; string[] _endnotes = t[1]; string o = quote(_txt, obj, doc_matters); - auto u = tuple( + Tuple!(string, string[]) u = tuple( o, _endnotes, ); @@ -1190,7 +1188,7 @@ string group_scroll(O,M)( #+name: xhtml_format_objects #+BEGIN_SRC d -auto group_seg(O,M)( +Tuple!(string, string[]) group_seg(O,M)( string _txt, const O obj, M doc_matters, @@ -1201,7 +1199,7 @@ auto group_seg(O,M)( _txt = t[0].to!string; string[] _endnotes = t[1]; string o = group(_txt, obj, doc_matters); - auto u = tuple( + Tuple!(string, string[]) u = tuple( o, _endnotes, ); @@ -1269,7 +1267,7 @@ string block_scroll(O,M)( #+name: xhtml_format_objects #+BEGIN_SRC d -auto block_seg(O,M)( +Tuple!(string, string[]) block_seg(O,M)( string _txt, const O obj, M doc_matters, @@ -1280,7 +1278,7 @@ auto block_seg(O,M)( _txt = t[0].to!string; string[] _endnotes = t[1]; string o = block(_txt, obj, doc_matters); - auto u = tuple( + Tuple!(string, string[]) u = tuple( o, _endnotes, ); @@ -1348,7 +1346,7 @@ string verse_scroll(O,M)( #+name: xhtml_format_objects #+BEGIN_SRC d -auto verse_seg(O,M)( +Tuple!(string, string[]) verse_seg(O,M)( string _txt, const O obj, M doc_matters, @@ -1359,7 +1357,7 @@ auto verse_seg(O,M)( _txt = t[0].to!string; string[] _endnotes = t[1]; string o = verse(_txt, obj, doc_matters); - auto u = tuple( + Tuple!(string, string[]) u = tuple( o, _endnotes, ); @@ -1443,7 +1441,7 @@ align="left|right|center" #+name: xhtml_format_objects #+BEGIN_SRC d -auto tablarize(O)( +Tuple!(string, string) tablarize(O)( string _txt, const O obj, ) @safe { @@ -1453,24 +1451,24 @@ auto tablarize(O)( string _tablenote; foreach(row_idx, row; _table_rows) { _table_cols = row.split(rgx.table_delimiter_col); - _table ~= ""; - foreach(col_idx, cell; _table_cols) { - if ((_table_cols.length == 1) - && (_table_rows.length <= row_idx+2)) { - _tablenote ~= cell; - } else { - string _col_is = (row_idx == 0 && obj.table.heading) ? "th" : "td"; - string _align = ("style=\"text-align:" - ~ ((obj.table.column_aligns[col_idx] == "l") - ? "left\"" : "right\"")); - _table ~= "<" ~ _col_is ~ " width=\"" ~ obj.table.column_widths[col_idx].to!string ~ "%\" " ~ _align ~ ">"; - _table ~= cell; - _table ~= ""; - } + _table ~= ""; + foreach(col_idx, cell; _table_cols) { + if ((_table_cols.length == 1) + && (_table_rows.length <= row_idx+2)) { + _tablenote ~= cell; + } else { + string _col_is = (row_idx == 0 && obj.table.heading) ? "th" : "td"; + string _align = ("style=\"text-align:" + ~ ((obj.table.column_aligns[col_idx] == "l") + ? "left\"" : "right\"")); + _table ~= "<" ~ _col_is ~ " width=\"" ~ obj.table.column_widths[col_idx].to!string ~ "%\" " ~ _align ~ ">"; + _table ~= cell; + _table ~= ""; } - _table ~= ""; } - auto t = tuple( + _table ~= ""; + } + Tuple!(string, string) t = tuple( _table, _tablenote, ); diff --git a/org/output_show.org b/org/output_show.org index 5d3f4f8..7ce14f2 100644 --- a/org/output_show.org +++ b/org/output_show.org @@ -434,7 +434,6 @@ import std.regex, std.stdio, std.string, - std.traits, std.typecons, std.uni, std.utf, diff --git a/org/spine.org b/org/spine.org index ced7e3b..1ecf248 100644 --- a/org/spine.org +++ b/org/spine.org @@ -1015,7 +1015,6 @@ if ((_opt_action.debug_do) writeln("--->\nstepX commence → (document abstraction)"); } auto t = spineAbstraction!()(_env, program_info, _opt_action, manifest, _make_and_meta_struct); -static assert(!isTypeTuple!(t)); static assert(t.length==2); auto doc_abstraction = t[dAM.abstraction]; auto doc_matters = t[dAM.matters]; @@ -1231,7 +1230,6 @@ if ((_opt_action.debug_do) } auto _header_body_insertfilelist_imagelist = spineRawMarkupContent!()(_opt_action, _manifest.src.path_and_fn); -static assert(!isTypeTuple!(_header_body_insertfilelist_imagelist)); static assert(_header_body_insertfilelist_imagelist.length==4); if ((_opt_action.debug_do) || (_opt_action.very_verbose) @@ -1308,7 +1306,6 @@ auto da = docAbstraction!()( _manifest, true, ); -static assert(!isTypeTuple!(da)); static assert(da.length==2); auto doc_abstraction = da[docAbst.doc_abstract_obj]; /+ head ~ toc ~ body ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~ blurb; +/ auto _doc_has_struct = da[docAbst.doc_has]; -- cgit v1.2.3