diff options
Diffstat (limited to 'org/ao_abstract_doc_source.org')
-rw-r--r-- | org/ao_abstract_doc_source.org | 197 |
1 files changed, 90 insertions, 107 deletions
diff --git a/org/ao_abstract_doc_source.org b/org/ao_abstract_doc_source.org index 1e5ef1c..4b6adb1 100644 --- a/org/ao_abstract_doc_source.org +++ b/org/ao_abstract_doc_source.org @@ -44,10 +44,8 @@ mixin InternalMarkup; #+BEGIN_SRC d /+ initialize +/ auto rgx = Rgx(); -ObjComposite[] the_document_head_section; ObjComposite[][string] the_table_of_contents_section; -ObjComposite[] the_document_body_section; -ObjComposite[] the_bibliography_section; +ObjComposite[] the_document_head_section, the_document_body_section, the_bibliography_section; string[string] an_object, processing; string[] anchor_tags; string segment_object_belongs_to; @@ -239,16 +237,16 @@ continue; **** non code objects (other blocks or regular text) [+4] :non_code: -***** within block group [+1] :block:active: -****** within block group: biblio :biblio: +***** in section (biblio, glossary, blurb) (block group) [+1] :block:active: +****** DONE within block group: biblio :biblio: #+name: abs_in_loop_body_non_code_obj #+BEGIN_SRC d if ((matchFirst(line, rgx.heading_biblio) -|| (type["heading_biblio"] == State.on)) +|| (type["biblio_section"] == State.on)) && (!matchFirst(line, rgx.heading)) && (!matchFirst(line, rgx.comment))) { - /+ within block object: biblio +/ + /+ within section (block object): biblio +/ _biblio_block_(line, type, bib_entry, biblio_entry_str_json, biblio_arr_json); debug(bibliobuild) { writeln("- ", biblio_entry_str_json); @@ -392,9 +390,9 @@ if ((matchFirst(line, rgx.book_index)) debug(comment) { writeln(line); } - an_object["nugget"] ~= line ~= "\n"; + an_object["body_nugget"] ~= line ~= "\n"; the_document_body_section ~= - set_abstract_object.contents_comment(strip(an_object["nugget"])); + set_abstract_object.contents_comment(strip(an_object["body_nugget"])); _common_reset_(line_occur, an_object, type); processing.remove("verse"); ++counter; @@ -447,7 +445,7 @@ if ((matchFirst(line, rgx.book_index)) debug(heading) { // heading writeln(line); } - an_object["nugget"] ~= line ~= "\n"; + an_object["body_nugget"] ~= line ~= "\n"; ++line_occur["heading"]; #+END_SRC @@ -460,7 +458,7 @@ if ((matchFirst(line, rgx.book_index)) debug(para) { writeln(line); } - an_object["nugget"] ~= line; + an_object["body_nugget"] ~= line; ++line_occur["para"]; } } @@ -508,10 +506,10 @@ if ((type["heading"] == State.on) && (line_occur["heading"] > State.off)) { /+ heading object (current line empty) +/ obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; + an_object["bookindex_nugget"] = + ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); + bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); an_object["is"] = "heading"; 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? @@ -540,7 +538,7 @@ if ((type["heading"] == State.on) an_object["is"] ); // heading an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); ++heading_pointer; debug(segments) { writeln(an_object["lev_markup_number"]); @@ -574,10 +572,10 @@ if ((type["heading"] == State.on) } else if ((type["para"] == State.on) && (line_occur["para"] > State.off)) { /+ paragraph object (current line empty) +/ obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; + an_object["bookindex_nugget"] = + ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); + bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); an_object["is"] = "para"; _node = node_construct.node_emitter( @@ -593,7 +591,7 @@ if ((type["heading"] == State.on) 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["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); the_document_body_section ~= set_abstract_object.contents_para( an_object["is"], @@ -852,14 +850,14 @@ debug(bookindex) { // bookindex the_document_head_section ~= the_document_body_section[0]; the_document_body_section=the_document_body_section[1..$]; auto document_the = [ - "head": the_document_head_section, - "toc_seg": the_table_of_contents_section["seg"], - "toc_scroll": the_table_of_contents_section["scroll"], - "body": the_document_body_section, - "endnotes_seg": the_endnotes_section["seg"], - "endnotes_scroll": the_endnotes_section["scroll"], - // "glossary": the_glossary_section, // TODO - "bibliography": the_bibliography_section, + "head": the_document_head_section, + "toc_seg": the_table_of_contents_section["seg"], + "toc_scroll": the_table_of_contents_section["scroll"], + "body": the_document_body_section, + "endnotes_seg": the_endnotes_section["seg"], + "endnotes_scroll": the_endnotes_section["scroll"], + // "glossary": the_glossary_section, // TODO + "bibliography": the_bibliography_section, "bookindex_scroll": the_bookindex_section["scroll"], "bookindex_seg": the_bookindex_section["seg"], ]; @@ -895,11 +893,11 @@ functions used in document abstraction #+name: abs_functions_object_reset #+BEGIN_SRC d auto object_reset(ref string[string] an_object) { - an_object.remove("nugget"); + an_object.remove("body_nugget"); an_object.remove("substantive"); an_object.remove("is"); an_object.remove("attrib"); - an_object.remove("bookindex"); + an_object.remove("bookindex_nugget"); } #+END_SRC @@ -1162,7 +1160,7 @@ void _code_block_( debug(code) { // code (curly) line writeln(line); } - an_object["nugget"] ~= line ~= "\n"; // code (curly) line + an_object["body_nugget"] ~= line ~= "\n"; // code (curly) line } } else if (type["tic_code"] == TriState.on) { if (matchFirst(line, rgx.block_tic_close)) { @@ -1176,7 +1174,7 @@ void _code_block_( debug(code) { // code (tic) line writeln(line); } - an_object["nugget"] ~= line ~= "\n"; // code (tic) line + an_object["body_nugget"] ~= line ~= "\n"; // code (tic) line } } } @@ -1278,7 +1276,7 @@ void _biblio_block_( ref string[] biblio_arr_json ) { if (matchFirst(line, rgx.heading_biblio)) { - type["heading_biblio"] = TriState.on; + type["biblio_section"] = TriState.on; } if (line.empty) { debug { @@ -1405,7 +1403,7 @@ void _poem_block_( ) { if (type["curly_poem"] == TriState.on) { if (matchFirst(line, rgx.block_curly_poem_close)) { - an_object["nugget"]="verse"; // check that this is as you please + an_object["body_nugget"]="verse"; // check that this is as you please debug(poem) { // poem (curly) close writefln( "* [poem curly] %s", @@ -1413,7 +1411,7 @@ void _poem_block_( ); } if (processing.length > 0) { - an_object["nugget"] = processing["verse"]; + an_object["body_nugget"] = processing["verse"]; } debug(poem) { // poem (curly) close writeln(__LINE__); @@ -1427,7 +1425,7 @@ void _poem_block_( debug(poem) { // poem (curly) close writeln( obj_cite_number, - an_object["nugget"] + an_object["body_nugget"] ); } an_object["is"] = "verse"; @@ -1436,7 +1434,7 @@ void _poem_block_( 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["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); the_document_body_section ~= set_abstract_object.contents_block( an_object["is"], @@ -1465,12 +1463,12 @@ void _poem_block_( } if (type["verse_new"] == State.on) { verse_line=1; - an_object["nugget"] = processing["verse"]; + an_object["body_nugget"] = processing["verse"]; debug(poem) { // poem verse writefln( "* %s curly\n%s", obj_cite_number, - an_object["nugget"] + an_object["body_nugget"] ); } processing.remove("verse"); @@ -1488,7 +1486,7 @@ void _poem_block_( 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["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); the_document_body_section ~= set_abstract_object.contents_block( an_object["is"], @@ -1503,7 +1501,7 @@ void _poem_block_( } } else if (type["tic_poem"] == TriState.on) { if (auto m = matchFirst(line, rgx.block_tic_close)) { // tic_poem_close - an_object["nugget"]="verse"; // check that this is as you please + an_object["body_nugget"]="verse"; // check that this is as you please debug(poem) { // poem (curly) close writefln( "* [poem tic] %s", @@ -1511,7 +1509,7 @@ void _poem_block_( ); } if (processing.length > 0) { // needs looking at - an_object["nugget"] = processing["verse"]; + an_object["body_nugget"] = processing["verse"]; } if (an_object.length > 0) { debug(poem) { // poem (tic) close @@ -1525,7 +1523,7 @@ void _poem_block_( 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["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); the_document_body_section ~= set_abstract_object.contents_block( an_object["is"], @@ -1553,12 +1551,12 @@ void _poem_block_( } if (type["verse_new"] == State.on) { verse_line=1; - an_object["nugget"] = processing["verse"]; + an_object["body_nugget"] = processing["verse"]; debug(poem) { // poem (tic) close writefln( "* %s tic\n%s", obj_cite_number, - an_object["nugget"] + an_object["body_nugget"] ); } processing.remove("verse"); @@ -1577,7 +1575,7 @@ void _poem_block_( 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["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); the_document_body_section ~= set_abstract_object.contents_block( an_object["is"], @@ -1615,7 +1613,7 @@ void _group_block_( debug(group) { // group writeln(line); } - an_object["nugget"] ~= line ~= "\n"; // build group array (or string) + an_object["body_nugget"] ~= line ~= "\n"; // build group array (or string) } } else if (type["tic_group"] == TriState.on) { if (matchFirst(line, rgx.block_tic_close)) { @@ -1629,7 +1627,7 @@ void _group_block_( debug(group) { // group writeln(line); } - an_object["nugget"] ~= line ~= "\n"; // build group array (or string) + an_object["body_nugget"] ~= line ~= "\n"; // build group array (or string) } } } @@ -1656,7 +1654,7 @@ void _block_block_( debug(block) { // block writeln(line); } - an_object["nugget"] ~= line ~= "\n"; // build block array (or string) + an_object["body_nugget"] ~= line ~= "\n"; // build block array (or string) } } else if (type["tic_block"] == TriState.on) { if (matchFirst(line, rgx.block_tic_close)) { @@ -1670,7 +1668,7 @@ void _block_block_( debug(block) { // block writeln(line); } - an_object["nugget"] ~= line ~= "\n"; // build block array (or string) + an_object["body_nugget"] ~= line ~= "\n"; // build block array (or string) } } } @@ -1697,7 +1695,7 @@ void _quote_block_( debug(quote) { // quote writeln(line); } - an_object["nugget"] ~= line ~= "\n"; // build quote array (or string) + an_object["body_nugget"] ~= line ~= "\n"; // build quote array (or string) } } else if (type["tic_quote"] == TriState.on) { if (matchFirst(line, rgx.block_tic_close)) { @@ -1711,7 +1709,7 @@ void _quote_block_( debug(quote) { // quote writeln(line); } - an_object["nugget"] ~= line ~= "\n"; // build quote array (or string) + an_object["body_nugget"] ~= line ~= "\n"; // build quote array (or string) } } } @@ -1738,7 +1736,7 @@ void _table_block_( debug(table) { // table writeln(line); } - an_object["nugget"] ~= line ~= "\n"; // build table array (or string) + an_object["body_nugget"] ~= line ~= "\n"; // build table array (or string) } } else if (type["tic_table"] == TriState.on) { if (matchFirst(line, rgx.block_tic_close)) { @@ -1752,7 +1750,7 @@ void _table_block_( debug(table) { // table writeln(line); } - an_object["nugget"] ~= line ~= "\n"; // build table array (or string) + an_object["body_nugget"] ~= line ~= "\n"; // build table array (or string) } } } @@ -1787,10 +1785,10 @@ void _block_flag_line_empty_( if (type["code"] == TriState.closing) { obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; + an_object["bookindex_nugget"] = + ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); + bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); an_object["is"] = "code"; _node = node_construct.node_emitter( @@ -1806,7 +1804,7 @@ void _block_flag_line_empty_( 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["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); the_document_body_section ~= set_abstract_object.contents_block_code( an_object["is"], @@ -1820,10 +1818,10 @@ void _block_flag_line_empty_( type["blocks"] = TriState.off; type["code"] = TriState.off; } else if (type["poem"] == TriState.closing) { - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; + an_object["bookindex_nugget"] = + ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); + bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); an_object["is"] = "verse"; // check also _node = node_construct.node_emitter( @@ -1848,10 +1846,10 @@ void _block_flag_line_empty_( } else if (type["table"] == TriState.closing) { obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; + an_object["bookindex_nugget"] = + ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); + bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); an_object["is"] = "table"; _node = node_construct.node_emitter( @@ -1867,7 +1865,7 @@ void _block_flag_line_empty_( 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["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); the_document_body_section ~= set_abstract_object.contents_block( an_object["is"], @@ -1883,10 +1881,10 @@ void _block_flag_line_empty_( } else if (type["group"] == TriState.closing) { obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; + an_object["bookindex_nugget"] = + ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); + bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); an_object["is"] = "group"; _node = node_construct.node_emitter( @@ -1902,7 +1900,7 @@ void _block_flag_line_empty_( 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["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); the_document_body_section ~= set_abstract_object.contents_block( an_object["is"], @@ -1917,10 +1915,10 @@ void _block_flag_line_empty_( type["group"] = TriState.off; } else if (type["block"] == TriState.closing) { obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; + an_object["bookindex_nugget"] = + ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); + bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); an_object["is"] = "block"; _node = node_construct.node_emitter( @@ -1936,7 +1934,7 @@ void _block_flag_line_empty_( 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["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); the_document_body_section ~= set_abstract_object.contents_block( an_object["is"], @@ -1952,10 +1950,10 @@ void _block_flag_line_empty_( } else if (type["quote"] == TriState.closing) { obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; + an_object["bookindex_nugget"] = + ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); + bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); an_object["is"] = "quote"; _node = node_construct.node_emitter( @@ -1971,7 +1969,7 @@ void _block_flag_line_empty_( 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["nugget"], _node); + obj_att.obj_attributes(an_object["is"], an_object["body_nugget"], _node); the_document_body_section ~= set_abstract_object.contents_block( an_object["is"], @@ -2006,7 +2004,7 @@ auto _book_index_( to!string(m.captures[1]), ); } - an_object["bookindex"] = to!string(m.captures[1]); + an_object["bookindex_nugget"] = to!string(m.captures[1]); } else if (auto m = match(line, rgx.book_index_open)) { /+ match open book_index +/ type["book_index"] = State.on; @@ -2021,7 +2019,7 @@ auto _book_index_( /+ book_index flag set +/ if (auto m = match(line, rgx.book_index_close)) { type["book_index"] = State.off; - an_object["bookindex"] = book_idx_tmp ~ to!string(m.captures[1]); + an_object["bookindex_nugget"] = book_idx_tmp ~ to!string(m.captures[1]); debug(bookindexmatch) { // book index writefln( "* [bookindex] %s\n", @@ -2205,17 +2203,17 @@ auto _heading_matched_( if (auto m = match(line, rgx.heading)) { /+ heading match +/ type["heading"] = State.on; - type["heading_biblio"] = State.off; + type["biblio_section"] = State.off; type["para"] = State.off; ++line_occur["heading"]; - an_object["nugget"] ~= line ~= "\n"; + an_object["body_nugget"] ~= 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["nugget"]=replaceFirst(an_object["nugget"], + an_object["body_nugget"]=replaceFirst(an_object["body_nugget"], rgx.variable_doc_title, (dochead_meta_aa["title"]["full"] ~ ",")); - an_object["nugget"]=replaceFirst(an_object["nugget"], + an_object["body_nugget"]=replaceFirst(an_object["body_nugget"], rgx.variable_doc_author, dochead_meta_aa["creator"]["author"]); collapsed_lev["h0"] = 1; an_object["lev_collapsed_number"] = @@ -2343,60 +2341,45 @@ auto _para_match_( ref string[string] indent, ref bool bullet, ref int[string] type, - ref int[string] line_occur + ref int[string] line_occur, ) { if (line_occur["para"] == State.off) { /+ para matches +/ + type["para"] = State.on; + an_object["body_nugget"] ~= line; + indent=[ + "hang_position" : "0", + "base_position" : "0", + ]; + bullet = false; if (auto m = matchFirst(line, rgx.para_indent)) { debug(paraindent) { // para indent writeln(line); } - type["para"] = State.on; - an_object["nugget"] ~= line ~= "\n"; // is newline needed? indent["hang_position"] = to!string(m.captures[1]); indent["base_position"] = "0"; - bullet = false; } else if (matchFirst(line, rgx.para_bullet)) { debug(parabullet) { // para bullet writeln(line); } - type["para"] = State.on; - an_object["nugget"] ~= line; - indent=[ - "hang_position" : "0", - "base_position" : "0", - ]; bullet = true; } else if (auto m = matchFirst(line, rgx.para_indent_hang)) { debug(paraindenthang) { // para indent hang writeln(line); } - type["para"] = State.on; - an_object["nugget"] ~= line; indent=[ "hang_position" : to!string(m.captures[1]), "base_position" : to!string(m.captures[2]), ]; - bullet = false; } else if (auto m = matchFirst(line, rgx.para_bullet_indent)) { debug(parabulletindent) { // para bullet indent writeln(line); } - type["para"] = State.on; - an_object["nugget"] ~= line; indent=[ "hang_position" : to!string(m.captures[1]), "base_position" : "0", ]; bullet = true; - } else { - type["para"] = State.on; - an_object["nugget"] ~= line; - indent=[ - "hang_position" : "0", - "base_position" : "0", - ]; - bullet = false; } ++line_occur["para"]; } @@ -2616,7 +2599,7 @@ struct ObjInlineMarkup { ) in { } body { - obj_txt["munge"]=obj_["nugget"].dup; + obj_txt["munge"]=obj_["body_nugget"].dup; obj_txt["munge"]=(match(obj_["is"], ctRegex!(`verse|code`))) ? obj_txt["munge"] : strip(obj_txt["munge"]); @@ -2696,7 +2679,7 @@ struct ObjInlineMarkup { ) in { } body { - char[] heading_toc_ = to!(char[])(obj_["nugget"].dup.strip); + char[] heading_toc_ = to!(char[])(obj_["body_nugget"].dup.strip); heading_toc_ = _clean_heading_toc_(heading_toc_); auto attrib=""; string toc_txt_; |