diff options
-rw-r--r-- | org/doc_reform.org | 104 | ||||
-rw-r--r-- | org/meta_abstraction.org | 131 | ||||
-rw-r--r-- | org/meta_debugs.org | 18 | ||||
-rw-r--r-- | org/output_sqlite.org | 8 | ||||
-rw-r--r-- | org/output_xmls.org | 23 | ||||
-rwxr-xr-x | src/doc_reform/doc_reform.d | 1 | ||||
-rw-r--r-- | src/doc_reform/meta/doc_debugs.d | 18 | ||||
-rw-r--r-- | src/doc_reform/meta/metadoc.d | 57 | ||||
-rw-r--r-- | src/doc_reform/meta/metadoc_from_src.d | 121 | ||||
-rw-r--r-- | src/doc_reform/meta/metadoc_summary.d | 44 | ||||
-rw-r--r-- | src/doc_reform/meta/object_setter.d | 3 | ||||
-rw-r--r-- | src/doc_reform/output/epub3.d | 11 | ||||
-rw-r--r-- | src/doc_reform/output/html.d | 6 | ||||
-rw-r--r-- | src/doc_reform/output/sqlite.d | 8 | ||||
-rw-r--r-- | src/doc_reform/output/xmls.d | 6 | ||||
-rw-r--r-- | views/version.txt | 2 |
16 files changed, 343 insertions, 218 deletions
diff --git a/org/doc_reform.org b/org/doc_reform.org index 32b08be..5b1fc23 100644 --- a/org/doc_reform.org +++ b/org/doc_reform.org @@ -27,7 +27,7 @@ struct Version { int minor; int patch; } -enum _ver = Version(0, 6, 0); +enum _ver = Version(0, 7, 0); #+END_SRC ** compilation restrictions (supported compilers) @@ -583,6 +583,7 @@ struct OptActions { || manifest || pod || source + || sqlite_discrete ) { _is = true; } else { _is = false; } @@ -932,7 +933,7 @@ template DocReformAbstraction() { <<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, tag_assoc, images } + enum docAbst { doc_abstract_obj, doc_has } static auto rgx = Rgx(); auto DocReformAbstraction(E,P,O,M)( E _env, @@ -1068,17 +1069,9 @@ auto da = DocReformDocAbstraction!()( true, ); static assert(!isTypeTuple!(da)); -static assert(da.length==6); -auto doc_abstraction = da[docAbst.doc_abstraction]; /+ head ~ toc ~ body ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~ blurb; +/ -auto _document_section_keys_sequenced = da[docAbst.section_keys]; -string[] _doc_html_segnames = da[docAbst.segnames]; -string[] _doc_epub_segnames_0_4 = da[docAbst.segnames_0_4]; -debug(segnames) { - writeln("segnames lv4: ", _doc_html_segnames); - writeln("segnames lv0 to 4: ", _doc_epub_segnames_0_4); -} -auto _doc_tag_assoc = da[docAbst.tag_assoc]; -auto _images = da[docAbst.images]; +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]; if ((_opt_action.debug_do) || (_opt_action.very_verbose) ) { @@ -1151,6 +1144,9 @@ struct DocumentMatters { auto conf_make_meta() { // TODO meld with all make instructions return _make_and_meta_struct; } + auto has() { + return _doc_has_struct; + } #+END_SRC **** env related @@ -1198,17 +1194,6 @@ struct DocumentMatters { auto src_path_info() { return DocReformPathsSRC!()(_manifest.env.pwd, _manifest.src.file_with_absolute_path); // would like (to have and use) relative path } - auto srcs() { - struct SRC_ { - auto file_insert_list() { - return _header_body_insertfilelist_imagelist[headBody.insert_file_list]; - } - auto image_list() { - return _images; - } - } - return SRC_(); - } auto pod() { return _manifest.pod; } @@ -1220,26 +1205,19 @@ struct DocumentMatters { } return SQLite_(); } - auto xml() { - struct XML_ { - auto keys_seq() { - /+ contains .seg & .scroll sequences +/ - return _document_section_keys_sequenced; - } - string[] segnames() { - return _doc_html_segnames; - } - string[] segnames_lv_0_to_4() { - return _doc_epub_segnames_0_4; + auto output_path() { + return _manifest.output.path; + } + auto srcs() { + struct SRC_ { + auto file_insert_list() { + return _header_body_insertfilelist_imagelist[headBody.insert_file_list]; } - auto tag_associations() { - return _doc_tag_assoc; + auto image_list() { + return _doc_has_struct.imagelist; } } - return XML_(); - } - auto output_path() { - return _manifest.output.path; + return SRC_(); } #+END_SRC @@ -1320,7 +1298,7 @@ string[string] check = [ "last_object_number_body" : "0", "last_object_number_book_index" : "0", ]; -foreach (k; doc_matters.xml.keys_seq.seg) { +foreach (k; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[k]) { if (obj.metainfo.is_of_part != "empty") { if (!empty(obj.metainfo.object_number)) { @@ -1352,48 +1330,58 @@ char_repeat_number = (char_repeat_number > min_repeat_number) ? char_repeat_number : min_repeat_number; writefln( - "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n(%s: %s)\n%s", + "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%s", markup.repeat_character_by_number_provided("-", char_repeat_number), doc_matters.conf_make_meta.meta.title_full, doc_matters.conf_make_meta.meta.creator_author, doc_matters.src.filename, markup.repeat_character_by_number_provided("-", char_repeat_number), - "length toc arr:", + "- toc arr length:", to!int(doc_abstraction["toc"].length), - "length doc_abstraction arr:", + "- doc_abstraction arr length:", to!int(doc_abstraction["body"].length), - "last doc body ocn:", + " doc body last obj on.#:", to!int(check["last_object_number_body"]), - "last object_number:", - to!int(check["last_object_number"]), - "length endnotes:", // subtract headings + " - number of tables:", + doc_matters.has.tables, + " - number of codeblocks:", + doc_matters.has.codeblocks, + " - number of poems:", + doc_matters.has.poems, + " - number of blocks:", + doc_matters.has.blocks, + " - number of groups:", + doc_matters.has.groups, + " - number of images:", + doc_matters.has.images, + "- endnotes length:", // subtract headings (doc_abstraction["endnotes"].length > 2) ? (to!int(doc_abstraction["endnotes"].length - 2)) : 0, - "length glossary:", + "- glossary length:", (doc_abstraction["glossary"].length > 1) ? (to!int(doc_abstraction["glossary"].length)) : 0, - "length biblio:", + "- biblio length:", (doc_abstraction["bibliography"].length > 1) ? (to!int(doc_abstraction["bibliography"].length)) : 0, - "length bookindex:", + "- bookindex length:", (doc_abstraction["bookindex"].length > 1) ? (to!int(doc_abstraction["bookindex"].length)) : 0, - " last book idx ocn:", + " book idx last obj on.#:", to!int(check["last_object_number_book_index"]), - "length blurb:", + "- blurb length:", (doc_abstraction["blurb"].length > 1) ? (to!int(doc_abstraction["blurb"].length)) : 0, + "* last obj on.#:", + to!int(check["last_object_number"]), "number of segments:", - (doc_matters.xml.segnames.length > 1) - ? (to!int(doc_matters.xml.segnames.length)) + (doc_matters.has.segnames_lv4.length > 1) + ? (to!int(doc_matters.has.segnames_lv4.length)) : 0, - __FILE__, - __LINE__, markup.repeat_character_by_number_provided("-", min_repeat_number), ); #+END_SRC diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org index 3f5ba11..d6d687e 100644 --- a/org/meta_abstraction.org +++ b/org/meta_abstraction.org @@ -82,6 +82,7 @@ template DocReformDocAbstraction() { /+ ↓ post loop markup document/text +/ <<abs_post>> <<abs_post_doc_reloop_processing>> + <<abs_struct_doc_has>> <<abs_return_tuple>> /+ post loop markup document/text ↑ +/ } /+ ← closed: abstract doc source +/ @@ -526,6 +527,18 @@ line_occur = [ "glossary" : 0, "blurb" : 0, ]; +uint[string] dochas = [ + "inline_links" : 0, + "inline_notes" : 0, + "inline_notes_star" : 0, + "codeblock" : 0, + "table" : 0, + "block" : 0, + "group" : 0, + "poem" : 0, + "quote" : 0, + "images" : 0, +]; auto obj_type_status = flags_type_init; string[string] object_number_poem = [ "start" : "", @@ -1085,7 +1098,7 @@ if (line.matchFirst(rgx.block_poem_open)) { / processing.remove("verse"); object_number_poem["start"] = obj_cite_digits.object_number.to!string; } -line.flow_txt_block_start(obj_type_status, object_number_poem); +line.flow_txt_block_start(obj_type_status, dochas, object_number_poem); continue; #+END_SRC @@ -2315,7 +2328,7 @@ auto extract_images(S)(S content_block) { } return images_; } -string[] segnames_lv0_to_4; +string[] segnames_0_to_4; #+END_SRC ****** images: dimensions @@ -2405,7 +2418,7 @@ foreach (ref obj; the_document_head_section) { writeln(obj.text); } if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; } if (obj.metainfo.heading_lev_markup == 0) { /+ TODO second hit (of two) with same assertion failure, check, fix and reinstate @@ -2443,7 +2456,7 @@ if (the_table_of_contents_section.length > 1) { foreach (ref obj; the_table_of_contents_section) { if (obj.metainfo.is_a == "heading") { if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.segname_next = segnames["html"][obj.ptr.html_segnames + 1]; assert(obj.tags.anchor_tag_html == segnames["html"][obj.ptr.html_segnames], @@ -2489,7 +2502,7 @@ if (the_document_body_section.length > 1) { writeln(obj.text); } if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.lev4_subtoc = lev4_subtoc[obj.tags.anchor_tag_html]; obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1]; @@ -2518,7 +2531,7 @@ if (the_document_body_section.length > 1) { obj = _links(obj); } } -auto images=uniq(_images.sort()); +auto image_list = (_images.sort()).uniq; #+END_SRC ***** ↻ Loop section: endnotes [en] @@ -2542,7 +2555,7 @@ if (the_endnotes_section.length > 1) { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1]; if (segnames["html"].length > obj.ptr.html_segnames + 1) { @@ -2586,7 +2599,7 @@ if (the_glossary_section.length > 1) { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1]; if (segnames["html"].length > obj.ptr.html_segnames + 1) { @@ -2634,7 +2647,7 @@ if (the_bibliography_section.length > 1) { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1]; if (segnames["html"].length > obj.ptr.html_segnames + 1) { @@ -2683,7 +2696,7 @@ if (the_bookindex_section.length > 1) { / debug(dom) { } if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; } obj_cite_digits = ocn_emit(OCNstatus.on); obj.metainfo.ocn = obj_cite_digits.object_number; @@ -2740,7 +2753,7 @@ if (the_blurb_section.length > 1) { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1]; if (segnames["html"].length > obj.ptr.html_segnames + 1) { @@ -2967,17 +2980,16 @@ if ((opt_action.html) document_section_keys_sequenced["scroll"] ~= "tail"; document_section_keys_sequenced["seg"] ~= "tail"; } -auto sequenced_document_keys = docSectKeysSeq!()(document_section_keys_sequenced); #+END_SRC *** dup #+name: abs_post #+BEGIN_SRC d -auto segnames_lv4 = segnames["html"].dup; +auto segnames_4 = segnames["html"].dup; auto segnames_lv1_to_4 = segnames["epub"].dup; debug(segnames) { - writeln("segnames_lv4: ", segnames_lv4); + writeln("segnames_lv4: ", segnames_4); writeln("segnames_lv1_to_4: ", segnames_lv1_to_4); } #+END_SRC @@ -3009,17 +3021,69 @@ dom_structure_collapsed_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; dom_structure_collapsed_tags_status_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; #+END_SRC +*** doc_has struct + +#+name: abs_struct_doc_has +#+BEGIN_SRC d +auto doc_has() { + struct DocHas_ { + uint inline_links() { + return dochas["inline_links"]; + } + uint inline_notes_reg() { + return dochas["inline_notes"]; + } + uint inline_notes_star() { + return dochas["inline_notes_star"]; + } + uint codeblocks() { + return dochas["codeblock"]; + } + uint tables() { + return dochas["table"]; + } + uint blocks() { + return dochas["block"]; + } + uint groups() { + return dochas["group"]; + } + uint poems() { + return dochas["poem"]; + } + uint quotes() { + return dochas["quote"]; + } + ulong images() { // TODO not ideal rethink + return (image_list.to!string.strip("[","]").split(",").length); + } + auto imagelist() { + return image_list; + } + auto keys_seq() { + return docSectKeysSeq!()(document_section_keys_sequenced); + } + string[] segnames_lv4() { + return segnames_4; + } + string[] segnames_lv_0_to_4() { + return segnames_0_to_4; + } + string[string][string] tag_associations() { + return tag_assoc; + } + } + return DocHas_(); +} +#+END_SRC + *** _return document tuple_ [#A] :return:tuple: #+name: abs_return_tuple #+BEGIN_SRC d auto t = tuple( document_the, - sequenced_document_keys, - segnames_lv4, - segnames_lv0_to_4, - tag_assoc, - images, + doc_has, ); return t; #+END_SRC @@ -3203,9 +3267,10 @@ auto _doc_header_and_make_substitutions_fontface_(L,CMM)( #+name: abs_functions_block #+BEGIN_SRC d void flow_txt_block_start(L,T,N)( - L line, - return ref T obj_type_status, - return ref N object_number_poem + L line, + return ref T obj_type_status, + return ref uint[string] dochas, + return ref N object_number_poem ) { debug(asserts) { static assert(is(typeof(line) == char[])); @@ -3226,6 +3291,7 @@ void flow_txt_block_start(L,T,N)( #+name: abs_functions_block #+BEGIN_SRC d if (auto m = line.matchFirst(rgx.block_curly_code_open)) { + dochas["codeblock"]++; an_object["lang"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["syntax"] = (m["syntax"]) ? m["syntax"].to!string : ""; @@ -3245,6 +3311,7 @@ void flow_txt_block_start(L,T,N)( #+name: abs_functions_block #+BEGIN_SRC d } else if (auto m = line.matchFirst(rgx.block_curly_poem_open)) { + dochas["poem"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -3266,6 +3333,7 @@ void flow_txt_block_start(L,T,N)( #+name: abs_functions_block #+BEGIN_SRC d } else if (auto m = line.matchFirst(rgx.block_curly_group_open)) { + dochas["group"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -3285,6 +3353,7 @@ void flow_txt_block_start(L,T,N)( #+name: abs_functions_block #+BEGIN_SRC d } else if (auto m = line.matchFirst(rgx.block_curly_block_open)) { + dochas["block"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -3304,6 +3373,7 @@ void flow_txt_block_start(L,T,N)( #+name: abs_functions_block #+BEGIN_SRC d } else if (auto m = line.matchFirst(rgx.block_curly_quote_open)) { + dochas["quote"]++; an_object["syntax"] = ""; an_object["attrib"] = m["attrib"].to!string; an_object["lang"] = m["lang"].to!string; @@ -3329,6 +3399,7 @@ void flow_txt_block_start(L,T,N)( line ); } + dochas["table"] ++; an_object["table_head"] = m["attrib"].to!string; an_object["block_type"] = "curly"; obj_type_status["blocks"] = TriState.on; @@ -3341,6 +3412,7 @@ void flow_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! +/ + dochas["table"]++; an_object["table_head"] = m["attrib"].to!string; an_object["block_type"] = "special"; obj_type_status["blocks"] = TriState.on; @@ -3354,6 +3426,7 @@ void flow_txt_block_start(L,T,N)( #+name: abs_functions_block #+BEGIN_SRC d } else if (auto m = line.matchFirst(rgx.block_tic_code_open)) { + dochas["codeblock"]++; an_object["lang"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["syntax"] = (m["syntax"]) ? m["syntax"].to!string : ""; @@ -3373,6 +3446,7 @@ void flow_txt_block_start(L,T,N)( #+name: abs_functions_block #+BEGIN_SRC d } else if (auto m = line.matchFirst(rgx.block_tic_poem_open)) { + dochas["poem"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -3394,6 +3468,7 @@ void flow_txt_block_start(L,T,N)( #+name: abs_functions_block #+BEGIN_SRC d } else if (auto m = line.matchFirst(rgx.block_tic_group_open)) { + dochas["group"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -3413,6 +3488,7 @@ void flow_txt_block_start(L,T,N)( #+name: abs_functions_block #+BEGIN_SRC d } else if (auto m = line.matchFirst(rgx.block_tic_block_open)) { + dochas["block"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -3432,6 +3508,7 @@ void flow_txt_block_start(L,T,N)( #+name: abs_functions_block #+BEGIN_SRC d } else if (auto m = line.matchFirst(rgx.block_tic_quote_open)) { + dochas["quote"]++; an_object["syntax"] = ""; an_object["attrib"] = m["attrib"].to!string; an_object["lang"] = m["lang"].to!string; @@ -3457,6 +3534,7 @@ void flow_txt_block_start(L,T,N)( line ); } + dochas["table"] ++; an_object["table_head"] = m["attrib"].to!string; an_object["block_type"] = "tic"; obj_type_status["blocks"] = TriState.on; @@ -7788,13 +7866,13 @@ pure void assertions_flag_types_block_status_none_or_closed(T)(T obj_type_status template docSectKeysSeq() { auto docSectKeysSeq(string[][string] document_section_keys_sequenced) { struct doc_sect_keys_seq { - auto scroll() { + string[] scroll() { return document_section_keys_sequenced["scroll"]; } - auto seg() { + string[] seg() { return document_section_keys_sequenced["seg"]; } - auto sql() { + string[] sql() { return document_section_keys_sequenced["sql"]; } } @@ -7933,10 +8011,11 @@ struct DocObj_TxtAttrib_ { #+name: meta_structs_init #+BEGIN_SRC d -struct DocObj_Has_ { // has +struct DocObj_Has_ { // doc object has bool inline_links = false; bool inline_notes_reg = false; bool inline_notes_star = false; + bool images = false; bool image_without_dimensions = false; } #+END_SRC diff --git a/org/meta_debugs.org b/org/meta_debugs.org index 7aa01ad..bd141cd 100644 --- a/org/meta_debugs.org +++ b/org/meta_debugs.org @@ -87,7 +87,7 @@ debug(parent) { __FILE__, __LINE__, ); - foreach (key; doc_matters.xml.keys_seq.seg) { + foreach (key; doc_matters.has.keys_seq.seg) { foreach (obj; contents[key]) { if (obj.metainfo.is_of_part != "empty") { if (obj.metainfo.is_a == "heading") { @@ -127,11 +127,11 @@ debug(checkdoc) { const S contents, T doc_matters, ) { - foreach (key; doc_matters.xml.keys_seq.seg) { + foreach (key; doc_matters.has.keys_seq.seg) { if (contents[key].length > 1) { foreach (obj; contents[key]) { if (obj.heading_lev_markup == 4) { - writeln(obj.ptr_html_segnames, ". (", doc_matters.xml.segnames[obj.ptr_html_segnames], ") -> ", obj.text); + writeln(obj.ptr_html_segnames, ". (", doc_matters.has.segnames_lv4[obj.ptr_html_segnames], ") -> ", obj.text); } } } @@ -286,7 +286,7 @@ debug(section_body) { #+BEGIN_SRC d debug(toc_nav_dom) { enum DomTags { none, open, close, close_and_open, open_still, } - foreach (sect; doc_matters.xml.keys_seq.seg) { + foreach (sect; doc_matters.has.keys_seq.seg) { foreach (obj; contents[sect]) { if (obj.metainfo.is_a == "heading") { foreach_reverse (k; 0 .. 7) { @@ -313,7 +313,7 @@ debug(toc_nav_dom) { } } writeln("--------------------"); - foreach (sect; doc_matters.xml.keys_seq.seg) { + foreach (sect; doc_matters.has.keys_seq.seg) { foreach (obj; contents[sect]) { if (obj.metainfo.is_a == "heading") { foreach_reverse (k; 0 .. 7) { @@ -347,7 +347,7 @@ debug(toc_nav_dom) { #+name: meta_output_debugs #+BEGIN_SRC d debug(decendants) { - foreach (sect; doc_matters.xml.keys_seq.scroll) { + foreach (sect; doc_matters.has.keys_seq.scroll) { foreach (obj; contents[sect]) { if (obj.metainfo.is_a == "heading") { writeln(obj.metainfo.ocn, " .. ", obj.metainfo.last_decendant_ocn); @@ -659,7 +659,7 @@ debug(anchor) { __FILE__, __LINE__, ); - foreach (k; doc_matters.xml.keys_seq.seg) { + foreach (k; doc_matters.has.keys_seq.seg) { foreach (obj; contents[k]) { if (obj.metainfo.is_a == "heading") { writefln( @@ -680,7 +680,7 @@ debug(anchor) { #+name: meta_output_debugs #+BEGIN_SRC d debug(heading) { // heading - foreach (k; doc_matters.xml.keys_seq.seg) { + foreach (k; doc_matters.has.keys_seq.seg) { foreach (o; contents[k]) { if (o.metainfo.is_a == "heading") { writefln( @@ -706,7 +706,7 @@ debug(headings) { __FILE__, __LINE__, ); - foreach (k; doc_matters.xml.keys_seq.seg) { + foreach (k; doc_matters.has.keys_seq.seg) { foreach (obj; contents[k]) { if (obj.metainfo.is_a == "heading") { writefln( diff --git a/org/output_sqlite.org b/org/output_sqlite.org index 6894c56..c9123d3 100644 --- a/org/output_sqlite.org +++ b/org/output_sqlite.org @@ -550,8 +550,8 @@ auto inline_links(M,O)( auto pth_html = DocReformPathsHTML!()(doc_matters.output_path, doc_matters.src.language); if (_xml_type == "seg") { foreach (m; _txt.match(rgx.inline_link_hash)) { - if (m.captures[3] in doc_matters.xml.tag_associations) { - if (m.captures[3] == doc_matters.xml.tag_associations[(m.captures[3])]["seg_lv4"]) { + if (m.captures[3] in doc_matters.has.tag_associations) { + if (m.captures[3] == doc_matters.has.tag_associations[(m.captures[3])]["seg_lv4"]) { _txt = _txt.replaceFirst( rgx.inline_link_hash, "┥$1┝┤" @@ -566,7 +566,7 @@ auto inline_links(M,O)( "┥$1┝┤" ~ doc_matters.conf_make_meta.conf.webserv_url_doc_root ~ "/" - ~ doc_matters.xml.tag_associations[(m.captures[3])]["seg_lv4"] + ~ doc_matters.has.tag_associations[(m.captures[3])]["seg_lv4"] ~ ".html" ~ "#" ~ "$3" ~ "├" @@ -1261,7 +1261,7 @@ auto format_and_sqlite_load = SQLiteFormatAndLoadObject!()(doc_matters); string[string] obj_txt; string doc_text; string[] _insert_doc_objects; -foreach (part; doc_matters.xml.keys_seq.sql) { +foreach (part; doc_matters.has.keys_seq.sql) { foreach (obj; doc_abstraction[part]) { switch (obj.metainfo.is_of_part) { case "frontmatter": assert(part == "head", part); diff --git a/org/output_xmls.org b/org/output_xmls.org index 21f4876..14d4f24 100644 --- a/org/output_xmls.org +++ b/org/output_xmls.org @@ -489,10 +489,10 @@ auto inline_links(O,M)( if (_xml_type == "seg" || _xml_type == "epub") { seg_lvs = (_xml_type == "epub") ? "seg_lv1_to_4" : "seg_lv4"; foreach (m; _txt.match(rgx.inline_link_hash)) { - if (m.captures[3] in doc_matters.xml.tag_associations) { + if (m.captures[3] in doc_matters.has.tag_associations) { if ( m.captures[3] - == doc_matters.xml.tag_associations[(m.captures[3])][seg_lvs] + == doc_matters.has.tag_associations[(m.captures[3])][seg_lvs] ) { _txt = _txt.replaceFirst( rgx.inline_link_hash, @@ -502,7 +502,7 @@ auto inline_links(O,M)( _txt = _txt.replaceFirst( rgx.inline_link_hash, "┥$1┝┤" - ~ doc_matters.xml.tag_associations[(m.captures[3])][seg_lvs] + ~ doc_matters.has.tag_associations[(m.captures[3])][seg_lvs] ~ _suffix ~ "#" ~ "$3" ~ "├" ); @@ -1486,7 +1486,7 @@ void scroll(D,M)( #+name: output_html_scroll #+BEGIN_SRC d - foreach (part; doc_matters.xml.keys_seq.scroll) { + foreach (part; doc_matters.has.keys_seq.scroll) { foreach (obj; doc_abstraction[part]) { delimit = xhtml_format.div_delimit(part, previous_part); string _txt = xhtml_format.special_characters(obj); @@ -1726,7 +1726,7 @@ void seg(D,M)( #+name: output_html_seg #+BEGIN_SRC d - foreach (part; doc_matters.xml.keys_seq.seg) { + foreach (part; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[part]) { delimit = xhtml_format.div_delimit(part, previous_part); string _txt = xhtml_format.special_characters(obj); @@ -2022,7 +2022,7 @@ void seg_write_output(M,D,E)( if (!exists(pth_html.seg(doc_matters.src.filename))) { pth_html.seg(doc_matters.src.filename).mkdirRecurse; } - foreach (seg_filename; doc_matters.xml.segnames) { + foreach (seg_filename; doc_matters.has.segnames_lv4) { auto f = File(pth_html.fn_seg(doc_matters.src.filename, seg_filename), "w"); foreach (docseg; doc_html[seg_filename]) { f.writeln(docseg); @@ -2247,7 +2247,7 @@ string epub3_oebps_content(D,M,P)(D doc_abstraction, M doc_matters, P parts) { content ~= " " ~ "</guide>" ~ "\n "; content ~= "" ~ "</package>"; debug(epubmanifest) { - foreach (part; doc_matters.xml.keys_seq.seg) { // TODO + foreach (part; doc_matters.has.keys_seq.seg) { // TODO foreach (obj; doc_abstraction[part]) { if (obj.metainfo.is_a == "heading") { if (obj.metainfo.heading_lev_markup == 4) { @@ -2297,7 +2297,7 @@ string epub3_oebps_toc_nav_xhtml(D,I)(D doc_abstraction, I doc_matters) { <nav epub:type=\"toc\" id=\"toc\">\n", doc_matters.conf_make_meta.meta.title_full, ); - foreach (sect; doc_matters.xml.keys_seq.seg) { + foreach (sect; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[sect]) { if (obj.metainfo.is_a == "heading") { string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip; @@ -2403,7 +2403,7 @@ string epub2_oebps_toc_ncx(D,I)(D doc_abstraction, I doc_matters) { (doc_matters.conf_make_meta.meta.creator_author.empty) ? "" : doc_matters.conf_make_meta.meta.creator_author, // author ); - foreach (sect; doc_matters.xml.keys_seq.seg) { + foreach (sect; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[sect]) { if (obj.metainfo.is_a == "heading") { string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip; @@ -2489,14 +2489,13 @@ void outputEPub3(D,I)( string[] doc_parts; } auto epubWrite = writeOut(); - // writeln(doc_matters.xml.keys_seq.seg); #+END_SRC **** ↻ the loop (sections & objects) format output #+name: output_epub3_xhtml_seg #+BEGIN_SRC d - foreach (part; doc_matters.xml.keys_seq.seg) { + foreach (part; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[part]) { string _txt = xhtml_format.special_characters(obj); #+END_SRC @@ -2874,7 +2873,7 @@ void epub3_write_output_files(W,I)( } } { /+ OEBPS/[segments].xhtml (the document contents) +/ - foreach (seg_filename; doc_matters.xml.segnames_lv_0_to_4) { + foreach (seg_filename; doc_matters.has.segnames_lv_0_to_4) { string fn = pth_epub3.fn_oebps_content_xhtml(doc_matters.src.filename, seg_filename); auto zip_arc_member_file = new ArchiveMember(); zip_arc_member_file.name = fn; diff --git a/src/doc_reform/doc_reform.d b/src/doc_reform/doc_reform.d index baffbc9..ae92a97 100755 --- a/src/doc_reform/doc_reform.d +++ b/src/doc_reform/doc_reform.d @@ -384,6 +384,7 @@ void main(string[] args) { || manifest || pod || source + || sqlite_discrete ) { _is = true; } else { _is = false; } diff --git a/src/doc_reform/meta/doc_debugs.d b/src/doc_reform/meta/doc_debugs.d index 5ca5c39..f96a942 100644 --- a/src/doc_reform/meta/doc_debugs.d +++ b/src/doc_reform/meta/doc_debugs.d @@ -37,7 +37,7 @@ template DocReformDebugs() { __FILE__, __LINE__, ); - foreach (key; doc_matters.xml.keys_seq.seg) { + foreach (key; doc_matters.has.keys_seq.seg) { foreach (obj; contents[key]) { if (obj.metainfo.is_of_part != "empty") { if (obj.metainfo.is_a == "heading") { @@ -100,7 +100,7 @@ template DocReformDebugs() { } debug(toc_nav_dom) { enum DomTags { none, open, close, close_and_open, open_still, } - foreach (sect; doc_matters.xml.keys_seq.seg) { + foreach (sect; doc_matters.has.keys_seq.seg) { foreach (obj; contents[sect]) { if (obj.metainfo.is_a == "heading") { foreach_reverse (k; 0 .. 7) { @@ -127,7 +127,7 @@ template DocReformDebugs() { } } writeln("--------------------"); - foreach (sect; doc_matters.xml.keys_seq.seg) { + foreach (sect; doc_matters.has.keys_seq.seg) { foreach (obj; contents[sect]) { if (obj.metainfo.is_a == "heading") { foreach_reverse (k; 0 .. 7) { @@ -155,7 +155,7 @@ template DocReformDebugs() { } } debug(decendants) { - foreach (sect; doc_matters.xml.keys_seq.scroll) { + foreach (sect; doc_matters.has.keys_seq.scroll) { foreach (obj; contents[sect]) { if (obj.metainfo.is_a == "heading") { writeln(obj.metainfo.ocn, " .. ", obj.metainfo.last_decendant_ocn); @@ -393,7 +393,7 @@ template DocReformDebugs() { __FILE__, __LINE__, ); - foreach (k; doc_matters.xml.keys_seq.seg) { + foreach (k; doc_matters.has.keys_seq.seg) { foreach (obj; contents[k]) { if (obj.metainfo.is_a == "heading") { writefln( @@ -408,7 +408,7 @@ template DocReformDebugs() { } } debug(heading) { // heading - foreach (k; doc_matters.xml.keys_seq.seg) { + foreach (k; doc_matters.has.keys_seq.seg) { foreach (o; contents[k]) { if (o.metainfo.is_a == "heading") { writefln( @@ -428,7 +428,7 @@ template DocReformDebugs() { __FILE__, __LINE__, ); - foreach (k; doc_matters.xml.keys_seq.seg) { + foreach (k; doc_matters.has.keys_seq.seg) { foreach (obj; contents[k]) { if (obj.metainfo.is_a == "heading") { writefln( @@ -580,11 +580,11 @@ template DocReformDebugs() { const S contents, T doc_matters, ) { - foreach (key; doc_matters.xml.keys_seq.seg) { + foreach (key; doc_matters.has.keys_seq.seg) { if (contents[key].length > 1) { foreach (obj; contents[key]) { if (obj.heading_lev_markup == 4) { - writeln(obj.ptr_html_segnames, ". (", doc_matters.xml.segnames[obj.ptr_html_segnames], ") -> ", obj.text); + writeln(obj.ptr_html_segnames, ". (", doc_matters.has.segnames_lv4[obj.ptr_html_segnames], ") -> ", obj.text); } } } diff --git a/src/doc_reform/meta/metadoc.d b/src/doc_reform/meta/metadoc.d index a57159d..d8cc19f 100644 --- a/src/doc_reform/meta/metadoc.d +++ b/src/doc_reform/meta/metadoc.d @@ -27,7 +27,7 @@ template DocReformAbstraction() { mixin outputHub; enum headBody { header, body_content, insert_file_list, image_list } enum makeMeta { make, meta } - enum docAbst { doc_abstraction, section_keys, segnames, segnames_0_4, tag_assoc, images } + enum docAbst { doc_abstract_obj, doc_has } static auto rgx = Rgx(); auto DocReformAbstraction(E,P,O,M)( E _env, @@ -92,17 +92,9 @@ template DocReformAbstraction() { true, ); static assert(!isTypeTuple!(da)); - static assert(da.length==6); - auto doc_abstraction = da[docAbst.doc_abstraction]; /+ head ~ toc ~ body ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~ blurb; +/ - auto _document_section_keys_sequenced = da[docAbst.section_keys]; - string[] _doc_html_segnames = da[docAbst.segnames]; - string[] _doc_epub_segnames_0_4 = da[docAbst.segnames_0_4]; - debug(segnames) { - writeln("segnames lv4: ", _doc_html_segnames); - writeln("segnames lv0 to 4: ", _doc_epub_segnames_0_4); - } - auto _doc_tag_assoc = da[docAbst.tag_assoc]; - auto _images = da[docAbst.images]; + 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]; if ((_opt_action.debug_do) || (_opt_action.very_verbose) ) { @@ -152,6 +144,9 @@ template DocReformAbstraction() { auto conf_make_meta() { // TODO meld with all make instructions return _make_and_meta_struct; } + auto has() { + return _doc_has_struct; + } auto env() { struct Env_ { auto pwd() { @@ -181,17 +176,6 @@ template DocReformAbstraction() { auto src_path_info() { return DocReformPathsSRC!()(_manifest.env.pwd, _manifest.src.file_with_absolute_path); // would like (to have and use) relative path } - auto srcs() { - struct SRC_ { - auto file_insert_list() { - return _header_body_insertfilelist_imagelist[headBody.insert_file_list]; - } - auto image_list() { - return _images; - } - } - return SRC_(); - } auto pod() { return _manifest.pod; } @@ -203,26 +187,19 @@ template DocReformAbstraction() { } return SQLite_(); } - auto xml() { - struct XML_ { - auto keys_seq() { - /+ contains .seg & .scroll sequences +/ - return _document_section_keys_sequenced; - } - string[] segnames() { - return _doc_html_segnames; - } - string[] segnames_lv_0_to_4() { - return _doc_epub_segnames_0_4; + auto output_path() { + return _manifest.output.path; + } + auto srcs() { + struct SRC_ { + auto file_insert_list() { + return _header_body_insertfilelist_imagelist[headBody.insert_file_list]; } - auto tag_associations() { - return _doc_tag_assoc; + auto image_list() { + return _doc_has_struct.imagelist; } } - return XML_(); - } - auto output_path() { - return _manifest.output.path; + return SRC_(); } } auto doc_matters = DocumentMatters(); diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index 3d6b441..6a10534 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -347,6 +347,18 @@ template DocReformDocAbstraction() { "glossary" : 0, "blurb" : 0, ]; + uint[string] dochas = [ + "inline_links" : 0, + "inline_notes" : 0, + "inline_notes_star" : 0, + "codeblock" : 0, + "table" : 0, + "block" : 0, + "group" : 0, + "poem" : 0, + "quote" : 0, + "images" : 0, + ]; auto obj_type_status = flags_type_init; string[string] object_number_poem = [ "start" : "", @@ -807,7 +819,7 @@ template DocReformDocAbstraction() { processing.remove("verse"); object_number_poem["start"] = obj_cite_digits.object_number.to!string; } - line.flow_txt_block_start(obj_type_status, object_number_poem); + line.flow_txt_block_start(obj_type_status, dochas, object_number_poem); continue; } else if (!line.empty) { /+ line not empty +/ /+ non blocks (headings, paragraphs) & closed blocks +/ @@ -1753,7 +1765,7 @@ template DocReformDocAbstraction() { } return images_; } - string[] segnames_lv0_to_4; + string[] segnames_0_to_4; auto _image_dimensions(O,M)(O obj, M manifest_matter) { if (obj.has.image_without_dimensions) { import std.math; @@ -1819,7 +1831,7 @@ template DocReformDocAbstraction() { writeln(obj.text); } if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; } if (obj.metainfo.heading_lev_markup == 0) { /+ TODO second hit (of two) with same assertion failure, check, fix and reinstate @@ -1851,7 +1863,7 @@ template DocReformDocAbstraction() { foreach (ref obj; the_table_of_contents_section) { if (obj.metainfo.is_a == "heading") { if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.segname_next = segnames["html"][obj.ptr.html_segnames + 1]; assert(obj.tags.anchor_tag_html == segnames["html"][obj.ptr.html_segnames], @@ -1891,7 +1903,7 @@ template DocReformDocAbstraction() { writeln(obj.text); } if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.lev4_subtoc = lev4_subtoc[obj.tags.anchor_tag_html]; obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1]; @@ -1920,7 +1932,7 @@ template DocReformDocAbstraction() { obj = _links(obj); } } - auto images=uniq(_images.sort()); + auto image_list = (_images.sort()).uniq; /+ optional only one 1~ level +/ if (the_endnotes_section.length > 1) { dom_structure_markedup_tags_status_buffer = dom_structure_markedup_tags_status.dup; @@ -1936,7 +1948,7 @@ template DocReformDocAbstraction() { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1]; if (segnames["html"].length > obj.ptr.html_segnames + 1) { @@ -1972,7 +1984,7 @@ template DocReformDocAbstraction() { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1]; if (segnames["html"].length > obj.ptr.html_segnames + 1) { @@ -2012,7 +2024,7 @@ template DocReformDocAbstraction() { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1]; if (segnames["html"].length > obj.ptr.html_segnames + 1) { @@ -2053,7 +2065,7 @@ template DocReformDocAbstraction() { debug(dom) { } if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; } obj_cite_digits = ocn_emit(OCNstatus.on); obj.metainfo.ocn = obj_cite_digits.object_number; @@ -2104,7 +2116,7 @@ template DocReformDocAbstraction() { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; if (obj.metainfo.heading_lev_markup <= 4) { - segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub; + segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub; if (obj.metainfo.heading_lev_markup == 4) { obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1]; if (segnames["html"].length > obj.ptr.html_segnames + 1) { @@ -2306,11 +2318,10 @@ template DocReformDocAbstraction() { document_section_keys_sequenced["scroll"] ~= "tail"; document_section_keys_sequenced["seg"] ~= "tail"; } - auto sequenced_document_keys = docSectKeysSeq!()(document_section_keys_sequenced); - auto segnames_lv4 = segnames["html"].dup; + auto segnames_4 = segnames["html"].dup; auto segnames_lv1_to_4 = segnames["epub"].dup; debug(segnames) { - writeln("segnames_lv4: ", segnames_lv4); + writeln("segnames_lv4: ", segnames_4); writeln("segnames_lv1_to_4: ", segnames_lv1_to_4); } destroy(the_document_head_section); @@ -2335,13 +2346,59 @@ template DocReformDocAbstraction() { dom_structure_collapsed_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; dom_structure_collapsed_tags_status_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; + auto doc_has() { + struct DocHas_ { + uint inline_links() { + return dochas["inline_links"]; + } + uint inline_notes_reg() { + return dochas["inline_notes"]; + } + uint inline_notes_star() { + return dochas["inline_notes_star"]; + } + uint codeblocks() { + return dochas["codeblock"]; + } + uint tables() { + return dochas["table"]; + } + uint blocks() { + return dochas["block"]; + } + uint groups() { + return dochas["group"]; + } + uint poems() { + return dochas["poem"]; + } + uint quotes() { + return dochas["quote"]; + } + ulong images() { // TODO not ideal rethink + return (image_list.to!string.strip("[","]").split(",").length); + } + auto imagelist() { + return image_list; + } + auto keys_seq() { + return docSectKeysSeq!()(document_section_keys_sequenced); + } + string[] segnames_lv4() { + return segnames_4; + } + string[] segnames_lv_0_to_4() { + return segnames_0_to_4; + } + string[string][string] tag_associations() { + return tag_assoc; + } + } + return DocHas_(); + } auto t = tuple( document_the, - sequenced_document_keys, - segnames_lv4, - segnames_lv0_to_4, - tag_assoc, - images, + doc_has, ); return t; /+ post loop markup document/text ↑ +/ @@ -2484,9 +2541,10 @@ template DocReformDocAbstraction() { return line; } void flow_txt_block_start(L,T,N)( - L line, - return ref T obj_type_status, - return ref N object_number_poem + L line, + return ref T obj_type_status, + return ref uint[string] dochas, + return ref N object_number_poem ) { debug(asserts) { static assert(is(typeof(line) == char[])); @@ -2495,6 +2553,7 @@ template DocReformDocAbstraction() { } static auto rgx = Rgx(); if (auto m = line.matchFirst(rgx.block_curly_code_open)) { + dochas["codeblock"]++; an_object["lang"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["syntax"] = (m["syntax"]) ? m["syntax"].to!string : ""; @@ -2508,6 +2567,7 @@ template DocReformDocAbstraction() { obj_type_status["code"] = TriState.on; obj_type_status["curly_code"] = TriState.on; } else if (auto m = line.matchFirst(rgx.block_curly_poem_open)) { + dochas["poem"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -2523,6 +2583,7 @@ template DocReformDocAbstraction() { obj_type_status["poem"] = TriState.on; obj_type_status["curly_poem"] = TriState.on; } else if (auto m = line.matchFirst(rgx.block_curly_group_open)) { + dochas["group"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -2536,6 +2597,7 @@ template DocReformDocAbstraction() { obj_type_status["group"] = TriState.on; obj_type_status["curly_group"] = TriState.on; } else if (auto m = line.matchFirst(rgx.block_curly_block_open)) { + dochas["block"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -2549,6 +2611,7 @@ template DocReformDocAbstraction() { obj_type_status["block"] = TriState.on; obj_type_status["curly_block"] = TriState.on; } else if (auto m = line.matchFirst(rgx.block_curly_quote_open)) { + dochas["quote"]++; an_object["syntax"] = ""; an_object["attrib"] = m["attrib"].to!string; an_object["lang"] = m["lang"].to!string; @@ -2568,18 +2631,21 @@ template DocReformDocAbstraction() { line ); } + dochas["table"] ++; an_object["table_head"] = m["attrib"].to!string; an_object["block_type"] = "curly"; obj_type_status["blocks"] = TriState.on; obj_type_status["table"] = TriState.on; obj_type_status["curly_table"] = TriState.on; } else if (auto m = line.matchFirst(rgx.block_curly_table_special_markup)) { /+ table: special table block markup syntax! +/ + dochas["table"]++; an_object["table_head"] = m["attrib"].to!string; an_object["block_type"] = "special"; obj_type_status["blocks"] = TriState.on; obj_type_status["table"] = TriState.on; obj_type_status["curly_table_special_markup"] = TriState.on; } else if (auto m = line.matchFirst(rgx.block_tic_code_open)) { + dochas["codeblock"]++; an_object["lang"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["syntax"] = (m["syntax"]) ? m["syntax"].to!string : ""; @@ -2593,6 +2659,7 @@ template DocReformDocAbstraction() { obj_type_status["code"] = TriState.on; obj_type_status["tic_code"] = TriState.on; } else if (auto m = line.matchFirst(rgx.block_tic_poem_open)) { + dochas["poem"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -2608,6 +2675,7 @@ template DocReformDocAbstraction() { obj_type_status["poem"] = TriState.on; obj_type_status["tic_poem"] = TriState.on; } else if (auto m = line.matchFirst(rgx.block_tic_group_open)) { + dochas["group"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -2621,6 +2689,7 @@ template DocReformDocAbstraction() { obj_type_status["group"] = TriState.on; obj_type_status["tic_group"] = TriState.on; } else if (auto m = line.matchFirst(rgx.block_tic_block_open)) { + dochas["block"]++; an_object["syntax"] = ""; an_object["attrib"] = (m["attrib"]) ? m["attrib"].to!string : ""; an_object["lang"] = (m["lang"]) ? m["lang"].to!string : ""; @@ -2634,6 +2703,7 @@ template DocReformDocAbstraction() { obj_type_status["block"] = TriState.on; obj_type_status["tic_block"] = TriState.on; } else if (auto m = line.matchFirst(rgx.block_tic_quote_open)) { + dochas["quote"]++; an_object["syntax"] = ""; an_object["attrib"] = m["attrib"].to!string; an_object["lang"] = m["lang"].to!string; @@ -2653,6 +2723,7 @@ template DocReformDocAbstraction() { line ); } + dochas["table"] ++; an_object["table_head"] = m["attrib"].to!string; an_object["block_type"] = "tic"; obj_type_status["blocks"] = TriState.on; @@ -6341,13 +6412,13 @@ template DocReformDocAbstraction() { template docSectKeysSeq() { auto docSectKeysSeq(string[][string] document_section_keys_sequenced) { struct doc_sect_keys_seq { - auto scroll() { + string[] scroll() { return document_section_keys_sequenced["scroll"]; } - auto seg() { + string[] seg() { return document_section_keys_sequenced["seg"]; } - auto sql() { + string[] sql() { return document_section_keys_sequenced["sql"]; } } diff --git a/src/doc_reform/meta/metadoc_summary.d b/src/doc_reform/meta/metadoc_summary.d index e44a12c..30f4a83 100644 --- a/src/doc_reform/meta/metadoc_summary.d +++ b/src/doc_reform/meta/metadoc_summary.d @@ -26,7 +26,7 @@ template DocReformAbstractionSummary() { "last_object_number_body" : "0", "last_object_number_book_index" : "0", ]; - foreach (k; doc_matters.xml.keys_seq.seg) { + foreach (k; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[k]) { if (obj.metainfo.is_of_part != "empty") { if (!empty(obj.metainfo.object_number)) { @@ -52,48 +52,58 @@ template DocReformAbstractionSummary() { ? char_repeat_number : min_repeat_number; writefln( - "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n(%s: %s)\n%s", + "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%s", markup.repeat_character_by_number_provided("-", char_repeat_number), doc_matters.conf_make_meta.meta.title_full, doc_matters.conf_make_meta.meta.creator_author, doc_matters.src.filename, markup.repeat_character_by_number_provided("-", char_repeat_number), - "length toc arr:", + "- toc arr length:", to!int(doc_abstraction["toc"].length), - "length doc_abstraction arr:", + "- doc_abstraction arr length:", to!int(doc_abstraction["body"].length), - "last doc body ocn:", + " doc body last obj on.#:", to!int(check["last_object_number_body"]), - "last object_number:", - to!int(check["last_object_number"]), - "length endnotes:", // subtract headings + " - number of tables:", + doc_matters.has.tables, + " - number of codeblocks:", + doc_matters.has.codeblocks, + " - number of poems:", + doc_matters.has.poems, + " - number of blocks:", + doc_matters.has.blocks, + " - number of groups:", + doc_matters.has.groups, + " - number of images:", + doc_matters.has.images, + "- endnotes length:", // subtract headings (doc_abstraction["endnotes"].length > 2) ? (to!int(doc_abstraction["endnotes"].length - 2)) : 0, - "length glossary:", + "- glossary length:", (doc_abstraction["glossary"].length > 1) ? (to!int(doc_abstraction["glossary"].length)) : 0, - "length biblio:", + "- biblio length:", (doc_abstraction["bibliography"].length > 1) ? (to!int(doc_abstraction["bibliography"].length)) : 0, - "length bookindex:", + "- bookindex length:", (doc_abstraction["bookindex"].length > 1) ? (to!int(doc_abstraction["bookindex"].length)) : 0, - " last book idx ocn:", + " book idx last obj on.#:", to!int(check["last_object_number_book_index"]), - "length blurb:", + "- blurb length:", (doc_abstraction["blurb"].length > 1) ? (to!int(doc_abstraction["blurb"].length)) : 0, + "* last obj on.#:", + to!int(check["last_object_number"]), "number of segments:", - (doc_matters.xml.segnames.length > 1) - ? (to!int(doc_matters.xml.segnames.length)) + (doc_matters.has.segnames_lv4.length > 1) + ? (to!int(doc_matters.has.segnames_lv4.length)) : 0, - __FILE__, - __LINE__, markup.repeat_character_by_number_provided("-", min_repeat_number), ); } diff --git a/src/doc_reform/meta/object_setter.d b/src/doc_reform/meta/object_setter.d index dac10da..264d439 100644 --- a/src/doc_reform/meta/object_setter.d +++ b/src/doc_reform/meta/object_setter.d @@ -86,10 +86,11 @@ template ObjectSetter() { bool bullet = false; string language = ""; // not implemented, consider } - struct DocObj_Has_ { // has + struct DocObj_Has_ { // doc object has bool inline_links = false; bool inline_notes_reg = false; bool inline_notes_star = false; + bool images = false; bool image_without_dimensions = false; } struct DocObj_Table_ { diff --git a/src/doc_reform/output/epub3.d b/src/doc_reform/output/epub3.d index a49bb5d..cdfd2a6 100644 --- a/src/doc_reform/output/epub3.d +++ b/src/doc_reform/output/epub3.d @@ -103,7 +103,7 @@ template outputEPub3() { content ~= " " ~ "</guide>" ~ "\n "; content ~= "" ~ "</package>"; debug(epubmanifest) { - foreach (part; doc_matters.xml.keys_seq.seg) { // TODO + foreach (part; doc_matters.has.keys_seq.seg) { // TODO foreach (obj; doc_abstraction[part]) { if (obj.metainfo.is_a == "heading") { if (obj.metainfo.heading_lev_markup == 4) { @@ -145,7 +145,7 @@ template outputEPub3() { <nav epub:type=\"toc\" id=\"toc\">\n", doc_matters.conf_make_meta.meta.title_full, ); - foreach (sect; doc_matters.xml.keys_seq.seg) { + foreach (sect; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[sect]) { if (obj.metainfo.is_a == "heading") { string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip; @@ -242,7 +242,7 @@ template outputEPub3() { (doc_matters.conf_make_meta.meta.creator_author.empty) ? "" : doc_matters.conf_make_meta.meta.creator_author, // author ); - foreach (sect; doc_matters.xml.keys_seq.seg) { + foreach (sect; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[sect]) { if (obj.metainfo.is_a == "heading") { string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip; @@ -322,8 +322,7 @@ template outputEPub3() { string[] doc_parts; } auto epubWrite = writeOut(); - // writeln(doc_matters.xml.keys_seq.seg); - foreach (part; doc_matters.xml.keys_seq.seg) { + foreach (part; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[part]) { string _txt = xhtml_format.special_characters(obj); if (obj.metainfo.is_a == "heading") { @@ -659,7 +658,7 @@ template outputEPub3() { } } { /+ OEBPS/[segments].xhtml (the document contents) +/ - foreach (seg_filename; doc_matters.xml.segnames_lv_0_to_4) { + foreach (seg_filename; doc_matters.has.segnames_lv_0_to_4) { string fn = pth_epub3.fn_oebps_content_xhtml(doc_matters.src.filename, seg_filename); auto zip_arc_member_file = new ArchiveMember(); zip_arc_member_file.name = fn; diff --git a/src/doc_reform/output/html.d b/src/doc_reform/output/html.d index 45b95ce..c9032e5 100644 --- a/src/doc_reform/output/html.d +++ b/src/doc_reform/output/html.d @@ -25,7 +25,7 @@ template outputHTML() { string suffix = ".html"; string previous_part = ""; string delimit = ""; - foreach (part; doc_matters.xml.keys_seq.scroll) { + foreach (part; doc_matters.has.keys_seq.scroll) { foreach (obj; doc_abstraction[part]) { delimit = xhtml_format.div_delimit(part, previous_part); string _txt = xhtml_format.special_characters(obj); @@ -222,7 +222,7 @@ template outputHTML() { string suffix = ".html"; string previous_part = ""; string delimit = ""; - foreach (part; doc_matters.xml.keys_seq.seg) { + foreach (part; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[part]) { delimit = xhtml_format.div_delimit(part, previous_part); string _txt = xhtml_format.special_characters(obj); @@ -476,7 +476,7 @@ template outputHTML() { if (!exists(pth_html.seg(doc_matters.src.filename))) { pth_html.seg(doc_matters.src.filename).mkdirRecurse; } - foreach (seg_filename; doc_matters.xml.segnames) { + foreach (seg_filename; doc_matters.has.segnames_lv4) { auto f = File(pth_html.fn_seg(doc_matters.src.filename, seg_filename), "w"); foreach (docseg; doc_html[seg_filename]) { f.writeln(docseg); diff --git a/src/doc_reform/output/sqlite.d b/src/doc_reform/output/sqlite.d index 0be198b..832e2e7 100644 --- a/src/doc_reform/output/sqlite.d +++ b/src/doc_reform/output/sqlite.d @@ -299,8 +299,8 @@ template SQLiteFormatAndLoadObject() { auto pth_html = DocReformPathsHTML!()(doc_matters.output_path, doc_matters.src.language); if (_xml_type == "seg") { foreach (m; _txt.match(rgx.inline_link_hash)) { - if (m.captures[3] in doc_matters.xml.tag_associations) { - if (m.captures[3] == doc_matters.xml.tag_associations[(m.captures[3])]["seg_lv4"]) { + if (m.captures[3] in doc_matters.has.tag_associations) { + if (m.captures[3] == doc_matters.has.tag_associations[(m.captures[3])]["seg_lv4"]) { _txt = _txt.replaceFirst( rgx.inline_link_hash, "┥$1┝┤" @@ -315,7 +315,7 @@ template SQLiteFormatAndLoadObject() { "┥$1┝┤" ~ doc_matters.conf_make_meta.conf.webserv_url_doc_root ~ "/" - ~ doc_matters.xml.tag_associations[(m.captures[3])]["seg_lv4"] + ~ doc_matters.has.tag_associations[(m.captures[3])]["seg_lv4"] ~ ".html" ~ "#" ~ "$3" ~ "├" @@ -1212,7 +1212,7 @@ template SQLiteInsertDocObjectsLoop() { string[string] obj_txt; string doc_text; string[] _insert_doc_objects; - foreach (part; doc_matters.xml.keys_seq.sql) { + foreach (part; doc_matters.has.keys_seq.sql) { foreach (obj; doc_abstraction[part]) { switch (obj.metainfo.is_of_part) { case "frontmatter": assert(part == "head", part); diff --git a/src/doc_reform/output/xmls.d b/src/doc_reform/output/xmls.d index f27b0f4..90f4e7d 100644 --- a/src/doc_reform/output/xmls.d +++ b/src/doc_reform/output/xmls.d @@ -372,10 +372,10 @@ template outputXHTMLs() { if (_xml_type == "seg" || _xml_type == "epub") { seg_lvs = (_xml_type == "epub") ? "seg_lv1_to_4" : "seg_lv4"; foreach (m; _txt.match(rgx.inline_link_hash)) { - if (m.captures[3] in doc_matters.xml.tag_associations) { + if (m.captures[3] in doc_matters.has.tag_associations) { if ( m.captures[3] - == doc_matters.xml.tag_associations[(m.captures[3])][seg_lvs] + == doc_matters.has.tag_associations[(m.captures[3])][seg_lvs] ) { _txt = _txt.replaceFirst( rgx.inline_link_hash, @@ -385,7 +385,7 @@ template outputXHTMLs() { _txt = _txt.replaceFirst( rgx.inline_link_hash, "┥$1┝┤" - ~ doc_matters.xml.tag_associations[(m.captures[3])][seg_lvs] + ~ doc_matters.has.tag_associations[(m.captures[3])][seg_lvs] ~ _suffix ~ "#" ~ "$3" ~ "├" ); diff --git a/views/version.txt b/views/version.txt index c5b26e9..f812b6e 100644 --- a/views/version.txt +++ b/views/version.txt @@ -4,7 +4,7 @@ struct Version { int minor; int patch; } -enum _ver = Version(0, 6, 0); +enum _ver = Version(0, 7, 0); version (Posix) { version (DigitalMars) { } else version (LDC) { |