diff options
Diffstat (limited to 'org')
| -rw-r--r-- | org/doc_reform.org | 1 | ||||
| -rw-r--r-- | org/meta_abstraction.org | 337 | ||||
| -rw-r--r-- | org/meta_conf_make_meta.org | 141 | 
3 files changed, 175 insertions, 304 deletions
| diff --git a/org/doc_reform.org b/org/doc_reform.org index d5027fb..32b08be 100644 --- a/org/doc_reform.org +++ b/org/doc_reform.org @@ -904,7 +904,6 @@ template DocReformHarvestGetFromHead() { // TODO    <<doc_reform_mixin>>    enum headBody { header, body_content, insert_file_list, image_list }    enum makeMeta { make, meta } -  enum docAbst  { doc_abstraction, section_keys, segnames, segnames_0_4, images }    static auto rgx = Rgx();    auto DocReformHarvestGetFromHead(E,O,M)( // TODO      E _env, diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org index e3d97ce..677f353 100644 --- a/org/meta_abstraction.org +++ b/org/meta_abstraction.org @@ -54,43 +54,37 @@ template DocReformDocAbstraction() {      <<make_tests>>      /+ ↓ ↻ loop markup document/text line by line +/      srcDocLoop: -    foreach (line; markup_sourcefile_content) { +    foreach (line; markup_sourcefile_content) {                                        /+ ↓ markup document/text line by line +/        // "line" variable can be empty but should never be null -      /+ ↓ markup document/text line by line +/        <<abs_in_loop_body_00>>        if (obj_type_status["code"] == TriState.on) {          <<abs_in_loop_body_00_code_block>> -      } else if (!matchFirst(line, rgx.skip_from_regular_parse)) { -        /+ object other than "code block" object -           (includes regular text paragraph, headings & blocks other than code) +/ +      } else if (!matchFirst(line, rgx.skip_from_regular_parse)) {                     /+ object other than "code block" object +/ +        /+ (includes regular text paragraph, headings & blocks other than code) +/          /+ heading, glossary, blurb, poem, group, block, quote, table +/          <<abs_in_loop_body_non_code_obj>> -        } else { -          /+ not within a block group +/ +        } else {                                                                       /+ not within a block group +/            <<abs_in_loop_body_open_block_obj_assert>>            if (line.matchFirst(rgx.block_open)) {              <<abs_in_loop_body_open_block_obj>> -          } else if (!line.empty) { -            /+ line not empty +/ +          } else if (!line.empty) {                                                    /+ line not empty +/              /+ non blocks (headings, paragraphs) & closed blocks +/              <<abs_in_loop_body_not_block_obj>> -          } else if (obj_type_status["blocks"] == TriState.closing) { -            /+ line empty, with blocks flag +/ +          } else if (obj_type_status["blocks"] == TriState.closing) {                  /+ line empty, with blocks flag +/              <<abs_in_loop_body_not_block_obj_line_empty_blocks_flags>> -          } else { -            /+ line.empty, post contents, empty variables: +/ +          } else {                                                                     /+ line.empty, post contents, empty variables: +/              <<abs_in_loop_body_not_block_obj_line_empty>>            } // close else for line empty          } // close else for not the above        } // close after non code, other blocks or regular text        <<abs_in_loop_body_01>> -    } /+ ← srcDocLoop closed: loop markup document/text line by line +/ +    }                                                                                  /+ ← srcDocLoop closed: loop markup document/text line by line +/      /+ ↓ post loop markup document/text +/      <<abs_post>>      <<abs_post_doc_reloop_processing>>      <<abs_return_tuple>>      /+ post loop markup document/text ↑ +/ -  } /+ ← closed: abstract doc source +/ +  }                                                                                    /+ ← closed: abstract doc source +/    /+ ↓ abstraction functions +/    <<abs_functions_object_reset>>    <<abs_functions_header_set_common>> @@ -964,25 +958,25 @@ if there is a blurb section you need to:        tag_assoc[comp_obj_heading_.tags.segment_anchor_tag_epub]["seg_lv1_to_4"] = comp_obj_heading_.tags.segment_anchor_tag_epub;      } else if (line.matchFirst(rgx.heading)      && (opt_action.backmatter && opt_action.section_blurb)) { -      comp_obj_heading_                                = comp_obj_heading_.init; -      comp_obj_heading_.metainfo.is_of_part            = "backmatter"; -      comp_obj_heading_.metainfo.is_of_section         = "blurb"; -      comp_obj_heading_.metainfo.is_of_type            = "para"; -      comp_obj_heading_.metainfo.is_a                  = "heading"; -      comp_obj_heading_.text                           = line.to!string; -      comp_obj_heading_.metainfo.ocn                   = 0; -      comp_obj_heading_.metainfo.identifier            = ""; -      comp_obj_heading_.metainfo.dummy_heading         = false; -      comp_obj_heading_.metainfo.object_number_off     = true; -      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_                                              = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part                          = "backmatter"; +      comp_obj_heading_.metainfo.is_of_section                       = "blurb"; +      comp_obj_heading_.metainfo.is_of_type                          = "para"; +      comp_obj_heading_.metainfo.is_a                                = "heading"; +      comp_obj_heading_.text                                         = line.to!string; +      comp_obj_heading_.metainfo.ocn                                 = 0; +      comp_obj_heading_.metainfo.identifier                          = ""; +      comp_obj_heading_.metainfo.dummy_heading                       = false; +      comp_obj_heading_.metainfo.object_number_off                   = true; +      comp_obj_heading_.metainfo.object_number_type                  = 0;        comp_obj_heading_.tags.segment_anchor_tag_epub                 = "blurb";        comp_obj_heading_.tags.anchor_tag_html                         = comp_obj_heading_.tags.segment_anchor_tag_epub;        comp_obj_heading_.tags.in_segment_html                         = comp_obj_heading_.tags.anchor_tag_html; -      comp_obj_heading_.metainfo.heading_lev_markup    = an_object["lev_markup_number"].to!int;    // make int, remove need to conv -      comp_obj_heading_.metainfo.heading_lev_collapsed = an_object["lev_collapsed_number"].to!int; // make int, remove need to conv -      comp_obj_heading_.metainfo.parent_ocn            = 1; -      comp_obj_heading_.metainfo.parent_lev_markup     = 0; -      the_blurb_section                                ~= comp_obj_heading_; +      comp_obj_heading_.metainfo.heading_lev_markup                  = an_object["lev_markup_number"].to!int;    // make int, remove need to conv +      comp_obj_heading_.metainfo.heading_lev_collapsed               = an_object["lev_collapsed_number"].to!int; // make int, remove need to conv +      comp_obj_heading_.metainfo.parent_ocn                          = 1; +      comp_obj_heading_.metainfo.parent_lev_markup                   = 0; +      the_blurb_section                                              ~= comp_obj_heading_;        tag_assoc[comp_obj_heading_.tags.anchor_tag_html]["seg_lv4"]              = comp_obj_heading_.tags.in_segment_html;        tag_assoc[comp_obj_heading_.tags.segment_anchor_tag_epub]["seg_lv1_to_4"] = comp_obj_heading_.tags.segment_anchor_tag_epub;      } else { @@ -1013,10 +1007,10 @@ if there is a blurb section you need to:  #+name: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d -} else if (obj_type_status["quote"] == TriState.on) { -  /+ within block object: quote +/ -  line = line._doc_header_and_make_substitutions_(conf_make_meta); -  line = line._doc_header_and_make_substitutions_fontface_(conf_make_meta); +} else if (obj_type_status["quote"] == TriState.on) {                          /+ within block object: quote +/ +  line = line +    ._doc_header_and_make_substitutions_(conf_make_meta) +    ._doc_header_and_make_substitutions_fontface_(conf_make_meta);    line.txt_block_quote(an_object, obj_type_status);    continue;  #+END_SRC @@ -1026,11 +1020,10 @@ if there is a blurb section you need to:  #+name: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d  /+ within block object: group +/ -} else if (obj_type_status["group"] == TriState.on) { -  /+ within block object: group +/ -  line = line._doc_header_and_make_substitutions_(conf_make_meta); -  line = line._doc_header_and_make_substitutions_fontface_(conf_make_meta); +} else if (obj_type_status["group"] == TriState.on) {                          /+ within block object: group +/    line = line +    ._doc_header_and_make_substitutions_(conf_make_meta) +    ._doc_header_and_make_substitutions_fontface_(conf_make_meta)      .replaceAll(rgx.para_delimiter, mkup.br_paragraph ~ "$1");    line.txt_block_group(an_object, obj_type_status);    continue; @@ -1040,10 +1033,10 @@ if there is a blurb section you need to:  #+name: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d -} else if (obj_type_status["block"] == TriState.on) { -  /+ within block object: block +/ -  line = line._doc_header_and_make_substitutions_(conf_make_meta); -  line = line._doc_header_and_make_substitutions_fontface_(conf_make_meta); +} else if (obj_type_status["block"] == TriState.on) {                          /+ within block object: block +/ +  line = line +    ._doc_header_and_make_substitutions_(conf_make_meta) +    ._doc_header_and_make_substitutions_fontface_(conf_make_meta);    if (auto m = line.match(rgx.spaces_keep)) {      line = line        .replaceAll(rgx.spaces_keep, (m.captures[1]).translate([ ' ' : mkup.nbsp ])); @@ -1056,8 +1049,7 @@ if there is a blurb section you need to:  #+name: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d -} else if (obj_type_status["poem"] == TriState.on) { -  /+ within block object: poem +/ +} else if (obj_type_status["poem"] == TriState.on) {                           /+ within block object: poem +/    line.txt_block_poem(an_object, obj_type_status, cntr, object_number_poem, conf_make_meta, tag_in_seg);    continue;  #+END_SRC @@ -1066,8 +1058,7 @@ if there is a blurb section you need to:  #+name: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d -} else if (obj_type_status["table"] == TriState.on) { -  /+ within block object: table +/ +} else if (obj_type_status["table"] == TriState.on) {                          /+ within block object: table +/    line.txt_block_table(an_object, obj_type_status, conf_make_meta);    continue;  #+END_SRC @@ -1089,8 +1080,7 @@ assertions_flag_types_block_status_none_or_closed(obj_type_status);  #+name: abs_in_loop_body_open_block_obj  #+BEGIN_SRC d -if (line.matchFirst(rgx.block_poem_open)) { -  /+ poem to verse exceptions! +/ +if (line.matchFirst(rgx.block_poem_open)) {                                    /+ poem to verse exceptions! +/    object_reset(an_object);    processing.remove("verse");    object_number_poem["start"] = obj_cite_digits.object_number.to!string; @@ -1114,7 +1104,7 @@ assert(    "code block status: none or closed"  );  if (obj_type_status["blocks"] == TriState.closing) { -  debug(check) {                           // block +  debug(check) {      writeln(__LINE__);      writeln(line);    } @@ -1134,8 +1124,7 @@ if (obj_type_status["blocks"] == TriState.closing) {  #+BEGIN_SRC d  if (line.matchFirst(rgx.book_index)  || line.matchFirst(rgx.book_index_open) -|| obj_type_status["book_index"] == State.on )  { -  /+ book_index +/ +|| obj_type_status["book_index"] == State.on )  {                              /+ book_index +/    line._book_index_(book_idx_tmp, an_object, obj_type_status, opt_action);  #+END_SRC @@ -1143,8 +1132,7 @@ if (line.matchFirst(rgx.book_index)  #+name: abs_in_loop_body_not_block_obj  #+BEGIN_SRC d -} else { -  /+ not book_index +/ +} else {                                                                       /+ not book_index +/  #+END_SRC  ******** matched: comment                              :comment:match: @@ -1152,8 +1140,7 @@ if (line.matchFirst(rgx.book_index)  #+name: abs_in_loop_body_not_block_obj  #+BEGIN_SRC d    an_object_key="body_nugget"; -  if (auto m = line.matchFirst(rgx.comment)) { -    /+ matched comment +/ +  if (auto m = line.matchFirst(rgx.comment)) {                                 /+ matched comment +/      debug(comment) {        writeln(line);      } @@ -1177,19 +1164,16 @@ if (line.matchFirst(rgx.book_index)    } else if (((line_occur["para"] == State.off)    && (line_occur["heading"] == State.off))    && ((obj_type_status["para"] == State.off) -  && (obj_type_status["heading"] == State.off))) { -    /+ heading or para but neither flag nor line exists +/ +  && (obj_type_status["heading"] == State.off))) {                             /+ heading or para but neither flag nor line exists +/      if ((conf_make_meta.make.headings.length > 2) -    && (obj_type_status["make_headings"] == State.off)) { -      /+ heading found +/ +    && (obj_type_status["make_headings"] == State.off)) {                      /+ heading found +/        line._heading_found_(conf_make_meta.make.headings, heading_match_str, heading_match_rgx, obj_type_status);      }      if ((obj_type_status["make_headings"] == State.on)      && ((line_occur["para"] == State.off)      && (line_occur["heading"] == State.off))      && ((obj_type_status["para"] == State.off) -    && (obj_type_status["heading"] == State.off))) { -      /+ heading make set +/ +    && (obj_type_status["heading"] == State.off))) {                           /+ heading make set +/        line = line._heading_make_set_(line_occur, heading_match_rgx, obj_type_status);      }      /+ TODO node info: all headings identified at this point, @@ -1198,15 +1182,14 @@ if (line.matchFirst(rgx.book_index)         - should be incorporated in composite objects         - should happen before endnote links set (they need to be moved down?)      +/ -    if (line.matchFirst(rgx.heading)) { -      /+ heading match +/ +    if (line.matchFirst(rgx.heading)) {                                        /+ heading match +/        line = line._doc_header_and_make_substitutions_(conf_make_meta);        line._heading_matched_(line_occur, an_object, an_object_key, lv, collapsed_lev, obj_type_status, conf_make_meta); -    } else if (line_occur["para"] == State.off) { -      /+ para match +/ +    } else if (line_occur["para"] == State.off) {                              /+ para match +/        an_object_key="body_nugget"; -      line = line._doc_header_and_make_substitutions_(conf_make_meta); -      line = line._doc_header_and_make_substitutions_fontface_(conf_make_meta); +      line = line +        ._doc_header_and_make_substitutions_(conf_make_meta) +        ._doc_header_and_make_substitutions_fontface_(conf_make_meta);        line._para_match_(an_object, an_object_key, indent, bullet, obj_type_status, line_occur);      }  #+END_SRC @@ -1215,8 +1198,7 @@ if (line.matchFirst(rgx.book_index)  #+name: abs_in_loop_body_not_block_obj  #+BEGIN_SRC d -  } else if (line_occur["heading"] > State.off) { -    /+ heading +/ +  } else if (line_occur["heading"] > State.off) {                              /+ heading +/      debug(heading) {        writeln(line);      } @@ -1228,13 +1210,13 @@ if (line.matchFirst(rgx.book_index)  #+name: abs_in_loop_body_not_block_obj  #+BEGIN_SRC d -  } else if (line_occur["para"] > State.off) { -    /+ paragraph +/ +  } else if (line_occur["para"] > State.off) {                                 /+ paragraph +/      debug(para) {        writeln(an_object_key, "-> ", line);      } -    line = line._doc_header_and_make_substitutions_(conf_make_meta); -    line = line._doc_header_and_make_substitutions_fontface_(conf_make_meta); +    line = line +      ._doc_header_and_make_substitutions_(conf_make_meta) +      ._doc_header_and_make_substitutions_fontface_(conf_make_meta);      an_object[an_object_key] ~= " " ~ line;      ++line_occur["para"];    } @@ -1287,8 +1269,7 @@ if (_new_doc) {    tag_in_seg = tag_in_seg.init;  }  if ((obj_type_status["heading"] == State.on) -&& (line_occur["heading"] > State.off)) { -  /+ heading object (current line empty) +/ +&& (line_occur["heading"] > State.off)) {                                      /+ heading object (current line empty) +/    obj_cite_digits = (an_object["lev_markup_number"].to!int == 0)    ? ocn_emit(OCNstatus.reset)    : ocn_emit(obj_type_status["ocn_status"]); @@ -1329,7 +1310,7 @@ if ((obj_type_status["heading"] == State.on)      tag_assoc[anchor_tag]["seg_lv1_to_4"] = tag_in_seg["seg_lv1_to_4"];    } else if (an_object["lev_markup_number"].to!int < 4) {      string segn; -    switch (an_object["lev_markup_number"].to!int) { /+ names used for epub markup segments A to D +/ +    switch (an_object["lev_markup_number"].to!int) {                           /+ names used for epub markup segments A to D +/      case 0:        segn = "_the_title";        goto default; @@ -1465,7 +1446,7 @@ if ((obj_type_status["heading"] == State.on)    comp_obj_para.has.inline_links                            = substantive_obj_misc_tuple[sObj.links];    comp_obj_para.has.image_without_dimensions                = substantive_obj_misc_tuple[sObj.image_no_dimensions];    the_document_body_section                                 ~= comp_obj_para; -  tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); +  tag_assoc                                                 = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc);    _common_reset_(line_occur, an_object, obj_type_status);    indent=[      "hang_position" : 0, @@ -1494,12 +1475,11 @@ if (the_document_body_section.length > 0) {    && (the_document_body_section.length > previous_length)) {      if ((the_document_body_section[$-1].metainfo.is_a == "heading")      && (the_document_body_section[$-1].metainfo.heading_lev_markup < 5)) { -      obj_type_status["biblio_section"]   = State.off;        obj_type_status["glossary_section"] = State.off; +      obj_type_status["biblio_section"]   = State.off;        obj_type_status["blurb_section"]    = State.off;      } -    if (the_document_body_section[$-1].metainfo.is_a == "verse") { -      /+ scan for endnotes for whole poem (each verse in poem) +/ +    if (the_document_body_section[$-1].metainfo.is_a == "verse") {             /+ scan for endnotes for whole poem (each verse in poem) +/        foreach (i; previous_length .. the_document_body_section.length) {          if (the_document_body_section[i].metainfo.is_a == "verse") {            if ((the_document_body_section[i].text).match( @@ -1513,8 +1493,7 @@ if (the_document_body_section.length > 0) {            }          }        } -    } else { -      /+ scan object for endnotes +/ +    } else {                                                                   /+ scan object for endnotes +/        previous_length = the_document_body_section.length.to!int;        if ((the_document_body_section[$-1].text).match(          rgx.inline_notes_al_regular_number_note @@ -2696,8 +2675,7 @@ if (the_bibliography_section.length > 1) {  int ocn_       = obj_cite_digits.object_number;  int ocn_bkidx_ = 0;  int ocn_bidx_; -if (the_bookindex_section.length > 1) { -  /+ scroll +/ +if (the_bookindex_section.length > 1) {                                        /+ scroll +/    dom_structure_markedup_tags_status_buffer = dom_structure_markedup_tags_status.dup;    dom_structure_collapsed_tags_status_buffer = dom_structure_collapsed_tags_status.dup;    foreach (ref obj; the_bookindex_section) { @@ -3086,7 +3064,7 @@ auto _common_reset_(L,O,T)(    line_occur["para"]         = State.off;    obj_type_status["heading"] = State.off;    obj_type_status["para"]    = State.off; -  an_object = object_reset(an_object); +  an_object                  = an_object.object_reset;  }  #+END_SRC @@ -3103,13 +3081,11 @@ static auto _check_ocn_status_(L,T)(      static assert(is(typeof(obj_type_status) == int[string]));    }    static auto rgx = Rgx(); -  if ( -    !(line.empty) +  if (!(line.empty)      && (obj_type_status["ocn_status_off_for_multiple_objects"] == OCN_off_block_status.off)    ) {      /+ not multi-line object, check whether object_number is on or turned off +/ -    if (line.matchFirst(rgx.object_number_block_marks)) { -      /+ switch off object_number +/ +    if (line.matchFirst(rgx.object_number_block_marks)) {                      /+ switch off object_number +/        if (line.matchFirst(rgx.object_number_off_block)) {          obj_type_status["ocn_status_off_for_multiple_objects"] = OCN_off_block_status.on;          obj_type_status["ocn_status"]                          = OCNstatus.off; @@ -3252,7 +3228,6 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d    if (auto m = line.matchFirst(rgx.block_curly_code_open)) { -    /+ curly code open +/      code_block_syntax = (m[1]) ? m[1].to!string : "";      code_block_numbered = (m[2].matchFirst(rgx.code_numbering))        ? true : false; @@ -3272,7 +3247,6 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d    } else if (line.matchFirst(rgx.block_curly_poem_open)) { -    /+ curly poem open +/      debug(poem) {                              // poem (curly) open        writefln(          "* [poem curly] %s", @@ -3291,7 +3265,6 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d    } else if (line.matchFirst(rgx.block_curly_group_open)) { -    /+ curly group open +/      debug(group) {                             // group (curly) open        writefln(          "* [group curly] %s", @@ -3308,7 +3281,6 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d    } else if (line.matchFirst(rgx.block_curly_block_open)) { -    /+ curly block open +/      debug(block) {                             // block (curly) open        writefln(          "* [block curly] %s", @@ -3325,7 +3297,6 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d    } else if (line.matchFirst(rgx.block_curly_quote_open)) { -    /+ curly quote open +/      debug(quote) {                             // quote (curly) open        writefln(          "* [quote curly] %s", @@ -3341,8 +3312,7 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d -  } else if (auto m = line.matchFirst(rgx.block_curly_table_open)) { -    /+ curly table open +/ +  } else if (auto m = line.matchFirst(rgx.block_curly_table_open)) {           /+ curly table open +/      debug(table) {                             // table (curly) open        writefln(          "* [table curly] %s", @@ -3360,8 +3330,7 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d -  } else if (auto m = line.matchFirst(rgx.block_curly_table_special_markup)) { -    /+ table: special table block markup syntax! +/ +  } else if (auto m = line.matchFirst(rgx.block_curly_table_special_markup)) { /+ table: special table block markup syntax! +/      an_object["table_head"]                       = m["attrib"].to!string;      an_object["block_type"]                       = "special";      obj_type_status["blocks"]                     = TriState.on; @@ -3375,7 +3344,6 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_tic_code_open)) { -    /+ tic code open +/      code_block_syntax = (m[1]) ? m[1].to!string : "";      code_block_numbered = (m[2].matchFirst(rgx.code_numbering))        ? true : false; @@ -3395,7 +3363,6 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d    } else if (line.matchFirst(rgx.block_tic_poem_open)) { -    /+ tic poem open +/      debug(poem) {                              // poem (tic) open        writefln(          "* [poem tic] %s", @@ -3414,7 +3381,6 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d    } else if (line.matchFirst(rgx.block_tic_group_open)) { -    /+ tic group open +/      debug(group) {                             // group (tic) open        writefln(          "* [group tic] %s", @@ -3431,7 +3397,6 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d    } else if (line.matchFirst(rgx.block_tic_block_open)) { -    /+ tic block open +/      debug(block) {                             // block (tic) open        writefln(          "* [block tic] %s", @@ -3448,7 +3413,6 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d    } else if (line.matchFirst(rgx.block_tic_quote_open)) { -    /+ tic quote open +/      debug(quote) {                             // quote (tic) open        writefln(          "* [quote tic] %s", @@ -3464,8 +3428,7 @@ void txt_block_start(L,T,N)(  #+name: abs_functions_block  #+BEGIN_SRC d -  } else if (auto m = line.matchFirst(rgx.block_tic_table_open)) { -    /+ tic table open +/ +  } else if (auto m = line.matchFirst(rgx.block_tic_table_open)) {             /+ tic table open +/      debug(table) {                             // table (tic) open        writefln(          "* [table tic] %s", @@ -3615,15 +3578,16 @@ void txt_block_biblio(    auto jsn = BibJsnStr();    static auto rgx = Rgx();    if (line.matchFirst(rgx.heading_biblio) -      && obj_type_status["para"]  != State.on -      && obj_type_status["group"] != State.on -      && obj_type_status["block"] != State.on -      && obj_type_status["poem"]  != State.on -      && obj_type_status["table"] != State.on -      && obj_type_status["quote"] != State.on) { +    && obj_type_status["para"]  != State.on +    && obj_type_status["group"] != State.on +    && obj_type_status["block"] != State.on +    && obj_type_status["poem"]  != State.on +    && obj_type_status["table"] != State.on +    && obj_type_status["quote"] != State.on +  ) { +    obj_type_status["glossary_section"] = State.off;      obj_type_status["biblio_section"]   = TriState.on;      obj_type_status["blurb_section"]    = State.off; -    obj_type_status["glossary_section"] = State.off;    }    if (line.empty) {      debug { @@ -3953,16 +3917,16 @@ void txt_block_poem(L,O,T,C,N,CMM,Ts)(            comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number;            comp_obj_block.metainfo.identifier             = obj_cite_digits.identifier;            comp_obj_block.metainfo.object_number_off      = obj_cite_digits.off; -          comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; -          comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];            comp_obj_block.metainfo.o_n_book_index         = obj_cite_digits.bkidx;            comp_obj_block.metainfo.object_number_type     = obj_cite_digits.type; +          comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; +          comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];            comp_obj_block.text                            = an_object["substantive"];            comp_obj_block.has.inline_notes_reg            = substantive_obj_misc_tuple[sObj.notes_reg];            comp_obj_block.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star];            comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];            the_document_body_section                      ~= comp_obj_block; -          tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); +          tag_assoc                                      = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc);          }          object_reset(an_object);          processing.remove("verse"); @@ -4016,16 +3980,16 @@ void txt_block_poem(L,O,T,C,N,CMM,Ts)(          comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number;          comp_obj_block.metainfo.identifier             = obj_cite_digits.identifier;          comp_obj_block.metainfo.object_number_off      = obj_cite_digits.off; -        comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; -        comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];          comp_obj_block.metainfo.o_n_book_index         = obj_cite_digits.bkidx;          comp_obj_block.metainfo.object_number_type     = obj_cite_digits.type; +        comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; +        comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];          comp_obj_block.text                            = an_object["substantive"];          comp_obj_block.has.inline_notes_reg            = substantive_obj_misc_tuple[sObj.notes_reg];          comp_obj_block.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star];          comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];          the_document_body_section                      ~= comp_obj_block; -        tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); +        tag_assoc                                      = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc);          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -4062,16 +4026,16 @@ void txt_block_poem(L,O,T,C,N,CMM,Ts)(          comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number;          comp_obj_block.metainfo.identifier             = obj_cite_digits.identifier;          comp_obj_block.metainfo.object_number_off      = obj_cite_digits.off; -        comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; -        comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];          comp_obj_block.metainfo.o_n_book_index         = obj_cite_digits.bkidx;          comp_obj_block.metainfo.object_number_type     = obj_cite_digits.type; +        comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; +        comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];          comp_obj_block.text                            = an_object["substantive"];          comp_obj_block.has.inline_notes_reg            = substantive_obj_misc_tuple[sObj.notes_reg];          comp_obj_block.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star];          comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];          the_document_body_section                      ~= comp_obj_block; -        tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); +        tag_assoc                                      = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc);          object_number_poem["end"]                      = obj_cite_digits.object_number.to!string;          object_reset(an_object);          processing.remove("verse"); @@ -4125,16 +4089,16 @@ void txt_block_poem(L,O,T,C,N,CMM,Ts)(          comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number;          comp_obj_block.metainfo.identifier             = obj_cite_digits.identifier;          comp_obj_block.metainfo.object_number_off      = obj_cite_digits.off; -        comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; -        comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];          comp_obj_block.metainfo.o_n_book_index         = obj_cite_digits.bkidx;          comp_obj_block.metainfo.object_number_type     = obj_cite_digits.type; +        comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; +        comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];          comp_obj_block.text                            = an_object["substantive"];          comp_obj_block.has.inline_notes_reg            = substantive_obj_misc_tuple[sObj.notes_reg];          comp_obj_block.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star];          comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];          the_document_body_section                      ~= comp_obj_block; -        tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); +        tag_assoc                                      = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc);          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -4165,8 +4129,8 @@ you need:  #+name: abs_functions_block_table  #+BEGIN_SRC d  void txt_block_table(L,O,T,CMM)( -             L line, -  return ref O an_object, +             L   line, +  return ref O   an_object,    return ref T   obj_type_status,    return ref CMM conf_make_meta,  ) { @@ -4352,16 +4316,16 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(      comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number;      comp_obj_block.metainfo.identifier             = obj_cite_digits.identifier;      comp_obj_block.metainfo.object_number_off      = obj_cite_digits.off; -    comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; -    comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];      comp_obj_block.metainfo.o_n_book_index         = obj_cite_digits.bkidx;      comp_obj_block.metainfo.object_number_type     = obj_cite_digit_type; +    comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; +    comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];      comp_obj_block.text                            = an_object["substantive"];      comp_obj_block.has.inline_notes_reg            = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_block.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star];      comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];      the_document_body_section                      ~= comp_obj_block; -    tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); +    tag_assoc                                      = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc);      obj_type_status["blocks"]                      = TriState.off;      obj_type_status["quote"]                       = TriState.off;      object_reset(an_object); @@ -4407,16 +4371,16 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(      comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number;      comp_obj_block.metainfo.identifier             = obj_cite_digits.identifier;      comp_obj_block.metainfo.object_number_off      = obj_cite_digits.off; -    comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; -    comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];      comp_obj_block.metainfo.o_n_book_index         = obj_cite_digits.bkidx;      comp_obj_block.metainfo.object_number_type     = obj_cite_digits.type; +    comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; +    comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];      comp_obj_block.text                            = an_object["substantive"];      comp_obj_block.has.inline_notes_reg            = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_block.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star];      comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];      the_document_body_section                      ~= comp_obj_block; -    tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); +    tag_assoc                                      = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc);      obj_type_status["blocks"]                      = TriState.off;      obj_type_status["group"]                       = TriState.off;      object_reset(an_object); @@ -4462,10 +4426,10 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(      comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number;      comp_obj_block.metainfo.identifier             = obj_cite_digits.identifier;      comp_obj_block.metainfo.object_number_off      = obj_cite_digits.off; -    comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; -    comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];      comp_obj_block.metainfo.o_n_book_index         = obj_cite_digits.bkidx;      comp_obj_block.metainfo.object_number_type     = obj_cite_digit_type; +    comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; +    comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];      comp_obj_block.text                            = an_object["substantive"];      comp_obj_block.has.inline_notes_reg            = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_block.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star]; @@ -4557,12 +4521,12 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(      comp_obj_code.metainfo.is_of_type             = "block";      comp_obj_code.metainfo.is_a                   = "code";      comp_obj_code.metainfo.ocn                    = obj_cite_digits.object_number; -    comp_obj_code.metainfo.identifier            = obj_cite_digits.identifier; +    comp_obj_code.metainfo.identifier             = obj_cite_digits.identifier;      comp_obj_code.metainfo.object_number_off      = obj_cite_digits.off; -    comp_obj_code.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; -    comp_obj_code.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];      comp_obj_code.metainfo.o_n_book_index         = obj_cite_digits.bkidx;      comp_obj_code.metainfo.object_number_type     = obj_cite_digits.type; +    comp_obj_code.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"]; +    comp_obj_code.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];      comp_obj_code.text                            = an_object["substantive"];      comp_obj_code.has.inline_notes_reg            = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_code.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star]; @@ -4649,8 +4613,7 @@ auto _book_index_(L,I,O,T,B)(      static assert(is(typeof(obj_type_status) == int[string]));    }    static auto rgx = Rgx(); -  if (auto m = line.match(rgx.book_index)) { -    /+ match book_index +/ +  if (auto m = line.match(rgx.book_index)) {                                   /+ match book_index +/      debug(bookindexmatch) {        writefln(          "* [bookindex] %s\n", @@ -4658,8 +4621,7 @@ auto _book_index_(L,I,O,T,B)(        );      }      an_object["bookindex_nugget"] = m.captures[1].to!string; -  } else if (auto m = line.match(rgx.book_index_open))  { -    /+ match open book_index +/ +  } else if (auto m = line.match(rgx.book_index_open))  {                      /+ match open book_index +/      obj_type_status["book_index"] = State.on;      if (opt_action.backmatter && opt_action.section_bookindex) {        book_idx_tmp = m.captures[1].to!string; @@ -4670,8 +4632,7 @@ auto _book_index_(L,I,O,T,B)(          );        }      } -  } else if (obj_type_status["book_index"] == State.on )  { -    /+ book_index flag set +/ +  } else if (obj_type_status["book_index"] == State.on )  {                    /+ book_index flag set +/      if (auto m = line.match(rgx.book_index_close))  {        obj_type_status["book_index"] = State.off;        if (opt_action.backmatter @@ -4716,8 +4677,7 @@ auto _heading_found_(L,X,H,R,T)(    }    static auto rgx = Rgx();    if ((_make_unmarked_headings.length > 2) -  && (obj_type_status["make_headings"] == State.off)) { -    /+ headings found +/ +  && (obj_type_status["make_headings"] == State.off)) {                        /+ headings found +/      debug(headingsfound) {        writeln(_make_unmarked_headings);      } @@ -4810,8 +4770,7 @@ auto _heading_make_set_(L,C,R,T)(    && ((line_occur["para"] == State.off)    && (line_occur["heading"] == State.off))    && ((obj_type_status["para"] == State.off) -  && (obj_type_status["heading"] == State.off))) { -    /+ heading make set +/ +  && (obj_type_status["heading"] == State.off))) {                             /+ heading make set +/      if (line.matchFirst(heading_match_rgx["h_B"])) {        line = "B~ " ~ line;        debug(headingsfound) { @@ -4883,14 +4842,13 @@ auto _heading_matched_(L,C,O,K,Lv,Lc,T,CMM)(      static assert(is(typeof(obj_type_status) == int[string]));    }    static auto rgx = Rgx(); -  if (auto m = line.match(rgx.heading)) { -    /+ heading match +/ +  if (auto m = line.match(rgx.heading)) {                                      /+ heading match +/      ++line_occur["heading"];      obj_type_status["heading"]            = State.on;      obj_type_status["para"]               = State.off;      if (line.match(rgx.heading_seg_and_above)) { -      obj_type_status["biblio_section"]   = State.off;        obj_type_status["glossary_section"] = State.off; +      obj_type_status["biblio_section"]   = State.off;        obj_type_status["blurb_section"]    = State.off;      }      an_object[an_object_key] ~= line ~= "\n"; @@ -5277,31 +5235,6 @@ auto table_array_munge(O,T)(  }  #+END_SRC -****** table array munge simple open & close - -#+name: abs_functions_table -#+BEGIN_SRC d -auto table_array_munge_open_close(O,T)( -  return ref O  table_object, -  return ref T  table_array, -) { -  static auto rgx = Rgx(); -  static auto mng = InlineMarkup(); -  string _table_substantive; -  foreach(row; table_array) { -    foreach(col; row) { -      _table_substantive ~= mng.tc_o ~ col ~ mng.tc_c; -    } -    _table_substantive ~= "\n"; -  } -  debug(table_dev) { -    writeln(_table_substantive); -  } -  comp_obj_block.text = _table_substantive; -  return table_object; -} -#+END_SRC -  ***** table substantive munge  #+name: abs_functions_table @@ -5433,7 +5366,7 @@ static struct ObjInlineMarkupMunge {      static auto mng = InlineMarkup();      /+ url matched +/      obj_txt_in = obj_txt_in.replaceAll(rgx.inline_notes_al_special, ""); // TODO reinstate when special footnotes are implemented -    if (obj_txt_in.match(rgx.smid_image_generic)) { /+ images with and without links +/ +    if (obj_txt_in.match(rgx.smid_image_generic)) {                            /+ images with and without links +/        debug(images) {          writeln("Image: ", obj_txt_in);        } @@ -6265,56 +6198,6 @@ private:    }  #+END_SRC -******** unittests - -#+name: meta_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags -#+BEGIN_SRC d -  unittest { -    string txt_lev="1"; -    string txt_in, txt_out; - -    txt_in = "1~copyright Copyright"; -    txt_out ="1~copyright Copyright"; -    assert(_make_segment_anchor_tags_if_none_provided(txt_in, txt_lev) == txt_out); - -    txt_in = "1~ 6. Writing Copyright Licenses"; -    txt_out ="1~s6 6. Writing Copyright Licenses"; -    assert(_make_segment_anchor_tags_if_none_provided(txt_in, txt_lev) == txt_out); - -    txt_in= "1~ 1. Reinforcing trends"; -    txt_out= "1~s1 1. Reinforcing trends"; -    assert(_make_segment_anchor_tags_if_none_provided(txt_in, txt_lev) == txt_out); - -    txt_in= "1~ 11 SCIENCE AS A COMMONS"; -    txt_out= "1~s11 11 SCIENCE AS A COMMONS"; -    assert(_make_segment_anchor_tags_if_none_provided(txt_in, txt_lev) == txt_out); - -    txt_in= "1~ Chapter 1"; -    txt_out="1~chapter_1 Chapter 1"; -    assert(_make_segment_anchor_tags_if_none_provided(txt_in, txt_lev) == txt_out); - -    txt_in= "1~ Chapter 1."; -    txt_out="1~chapter_1 Chapter 1."; -    assert(_make_segment_anchor_tags_if_none_provided(txt_in, txt_lev) == txt_out); - -    txt_in= "1~ Chapter 1: Done"; -    txt_out="1~chapter_1 Chapter 1: Done"; -    assert(_make_segment_anchor_tags_if_none_provided(txt_in, txt_lev) == txt_out); - -    txt_in=  "1~ Chapter 11 - The Battle Over the Institutional Ecology of the Digital Environment"; -    txt_out= "1~chapter_11 Chapter 11 - The Battle Over the Institutional Ecology of the Digital Environment"; -    assert(_make_segment_anchor_tags_if_none_provided(txt_in, txt_lev) == txt_out); - -    txt_in= "1~ CHAPTER I."; -    txt_out="1~x1 CHAPTER I."; -    assert(_make_segment_anchor_tags_if_none_provided(txt_in, txt_lev) == txt_out); - -    txt_in= "1~ CHAPTER II."; -    txt_out="1~x2 CHAPTER II."; -    assert(_make_segment_anchor_tags_if_none_provided(txt_in, txt_lev) == txt_out); -  } -#+END_SRC -  ****** }  #+name: meta_emitters_obj_inline_markup_close diff --git a/org/meta_conf_make_meta.org b/org/meta_conf_make_meta.org index 71f9124..a0440e3 100644 --- a/org/meta_conf_make_meta.org +++ b/org/meta_conf_make_meta.org @@ -499,64 +499,59 @@ if ("make" in _json.object) {    ) {      _struct_composite.make_str.emphasis = _json.object["make"]["emphasis"].str;    } -  if ("footer" in _json.object["make"] -    && (_json.object["make"]["footer"].type().to!string == "string") -  ) { -    char[][] __match_footer_array -      = (cast(char[]) _json.object["make"]["footer"].str) -        .split(_rgx.make_heading_delimiter); -    _struct_composite.make_str.footer = __match_footer_array.to!(string[]); -  } else if ("footer" in _json.object["make"] -    && _json.object["make"]["footer"].type().to!string == "array") { -    string[] _match_footer_array; -    foreach (_match_heading; _json.object["make"]["footer"].arrayNoRef) { -      _match_footer_array ~= _match_heading.str; +  if ("footer" in _json.object["make"]) { +    if (_json.object["make"]["footer"].type().to!string == "string") { +      char[][] __match_footer_array +        = (cast(char[]) _json.object["make"]["footer"].str) +          .split(_rgx.make_heading_delimiter); +      _struct_composite.make_str.footer = __match_footer_array.to!(string[]); +    } else if (_json.object["make"]["footer"].type().to!string == "array") { +      string[] _match_footer_array; +      foreach (_match_heading; _json.object["make"]["footer"].arrayNoRef) { +        _match_footer_array ~= _match_heading.str; +      } +      _struct_composite.make_str.footer = _match_footer_array;      } -    _struct_composite.make_str.footer = _match_footer_array; -  } -  if ("headings" in _json.object["make"] -    && (_json.object["make"]["headings"].type().to!string == "string") -  ) { -   char[][] __match_headings_array -      = (cast(char[]) _json.object["make"]["headings"].str) -        .split(_rgx.make_heading_delimiter); -    _struct_composite.make_str.headings = __match_headings_array.to!(string[]); -  } else if ("headings" in _json.object["make"] -    && _json.object["make"]["headings"].type().to!string == "array") { -    string[] _match_headings_array; -    foreach (_match_heading; _json.object["make"]["headings"].arrayNoRef) { -      _match_headings_array ~= _match_heading.str; +  } +  if ("headings" in _json.object["make"]) { +    if (_json.object["make"]["headings"].type().to!string == "string") { +     char[][] __match_headings_array +        = (cast(char[]) _json.object["make"]["headings"].str) +          .split(_rgx.make_heading_delimiter); +      _struct_composite.make_str.headings = __match_headings_array.to!(string[]); +    } else if (_json.object["make"]["headings"].type().to!string == "array") { +      string[] _match_headings_array; +      foreach (_match_heading; _json.object["make"]["headings"].arrayNoRef) { +        _match_headings_array ~= _match_heading.str; +      } +      _struct_composite.make_str.headings = _match_headings_array;      } -    _struct_composite.make_str.headings = _match_headings_array; -  } -  if ("home_button_image" in _json.object["make"] -    && (_json.object["make"]["home_button_image"].type().to!string == "string") -  ) { -   char[][] __match_home_button_image_array -      = (cast(char[]) _json.object["make"]["home_button_image"].str) -        .split(_rgx.make_heading_delimiter); -    _struct_composite.make_str.home_button_image = __match_home_button_image_array.to!(string[]); -  } else if ("home_button_image" in _json.object["make"] -    && _json.object["make"]["home_button_image"].type().to!string == "array") { -    string[] _match_home_button_image_array; -    foreach (_match_heading; _json.object["make"]["home_button_image"].arrayNoRef) { -      _match_home_button_image_array ~= _match_heading.str; +  } +  if ("home_button_image" in _json.object["make"]) { +    if (_json.object["make"]["home_button_image"].type().to!string == "string") { +     char[][] __match_home_button_image_array +        = (cast(char[]) _json.object["make"]["home_button_image"].str) +          .split(_rgx.make_heading_delimiter); +      _struct_composite.make_str.home_button_image = __match_home_button_image_array.to!(string[]); +    } else if (_json.object["make"]["home_button_image"].type().to!string == "array") { +      string[] _match_home_button_image_array; +      foreach (_match_heading; _json.object["make"]["home_button_image"].arrayNoRef) { +        _match_home_button_image_array ~= _match_heading.str; +      } +      _struct_composite.make_str.home_button_image = _match_home_button_image_array;      } -    _struct_composite.make_str.home_button_image = _match_home_button_image_array;    } -  if ("home_button_text" in _json.object["make"] -    && (_json.object["make"]["home_button_text"].type().to!string == "string") -  ) { -    _struct_composite.make_str.home_button_text = _json.object["make"]["home_button_text"].str; -  } else if ("home_button_text" in _json.object["make"] -    && _json.object["make"]["home_button_text"].type().to!string == "array" -  ) { -    string[] _match_home_button_text_array; -    foreach (_match_heading; _json.object["make"]["home_button_text"].arrayNoRef) { -      _match_home_button_text_array ~= _match_heading.str; +  if ("home_button_text" in _json.object["make"]) { +    if (_json.object["make"]["home_button_text"].type().to!string == "string") { +      _struct_composite.make_str.home_button_text = _json.object["make"]["home_button_text"].str; +    } else if (_json.object["make"]["home_button_text"].type().to!string == "array") { +      string[] _match_home_button_text_array; +      foreach (_match_heading; _json.object["make"]["home_button_text"].arrayNoRef) { +        _match_home_button_text_array ~= _match_heading.str; +      } +      string _match_home_button_text_str = (_match_home_button_text_array).join("; "); +      _struct_composite.make_str.home_button_text = _match_home_button_text_str;      } -    string _match_home_button_text_str = (_match_home_button_text_array).join("; "); -    _struct_composite.make_str.home_button_text = _match_home_button_text_str;    }    if ("italics" in _json.object["make"]      && (_json.object["make"]["italics"].type().to!string == "string") @@ -588,35 +583,29 @@ if ("make" in _json.object) {        break;      }    } -  if ("auto_num_depth" in _json.object["make"] -    && (_json.object["make"]["auto_num_depth"].type().to!string == "INTEGER") -  ) { -    _struct_composite.make_str.auto_num_depth = _json.object["make"]["auto_num_depth"].integer.to!int; -  } else if ("auto_num_depth" in _json.object["make"] -    && (_json.object["make"]["auto_num_depth"].type().to!string == "string") -  ) { -    _struct_composite.make_str.auto_num_depth = _json.object["make"]["auto_num_depth"].str.to!int; +  if ("auto_num_depth" in _json.object["make"]) { +    if (_json.object["make"]["auto_num_depth"].type().to!string == "int") { // TODO watch this match +      _struct_composite.make_str.auto_num_depth = _json.object["make"]["auto_num_depth"].integer.to!int; +    } else if (_json.object["make"]["auto_num_depth"].type().to!string == "string") { +      _struct_composite.make_str.auto_num_depth = _json.object["make"]["auto_num_depth"].str.to!int; +    }    }    if ("substitute" in _json.object["make"]) {      string[][] _sub; -    if ( -      (_json.object["make"]["substitute"].type().to!string == "array") -      && (_json.object["make"]["substitute"][0].type().to!string == "array") -    ) { -      foreach (substitute_pair; _json.object["make"]["substitute"].arrayNoRef) { -        if ((substitute_pair.type().to!string) == "array") { -          if (!empty(substitute_pair[0].str) && !empty(substitute_pair[1].str)) { -            _sub ~= [ substitute_pair[0].str,  substitute_pair[1].str]; +    if (_json.object["make"]["substitute"].type().to!string == "array") { +      if (_json.object["make"]["substitute"][0].type().to!string == "array") { +        foreach (substitute_pair; _json.object["make"]["substitute"].arrayNoRef) { +          if ((substitute_pair.type().to!string) == "array") { +            if (!empty(substitute_pair[0].str) && !empty(substitute_pair[1].str)) { +              _sub ~= [ substitute_pair[0].str,  substitute_pair[1].str]; +            }            }          } +      } else if (_json.object["make"]["substitute"][0].type().to!string == "string") { +         if (!empty(_json.object["make"]["substitute"][0].str) && !empty(_json.object["make"]["substitute"][1].str)) { +           _sub = [[_json.object["make"]["substitute"][0].str, _json.object["make"]["substitute"][1].str]]; +         }        } -    } else if ( -      (_json.object["make"]["substitute"].type().to!string == "array") -      && (_json.object["make"]["substitute"][0].type().to!string == "string") -    ) { -       if (!empty(_json.object["make"]["substitute"][0].str) && !empty(_json.object["make"]["substitute"][1].str)) { -         _sub = [[_json.object["make"]["substitute"][0].str, _json.object["make"]["substitute"][1].str]]; -       }      }      // writeln(_sub);      _struct_composite.make_str.substitute  = _sub; | 
