aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRalph Amissah <ralph.amissah@gmail.com>2019-05-08 18:45:02 -0400
committerRalph Amissah <ralph.amissah@gmail.com>2019-08-19 14:42:40 -0400
commit6b46ba599b7f687a592e2e50fdd007ed31319243 (patch)
tree9ba93fc931804a14506bae682eadaaef413f0024
parentbook index sort: Aa-Zz (replaces A-Za-z) (diff)
0.7.0 meta_abstruction, doc "has" struct replaces several tuples
-rw-r--r--org/doc_reform.org104
-rw-r--r--org/meta_abstraction.org131
-rw-r--r--org/meta_debugs.org18
-rw-r--r--org/output_sqlite.org8
-rw-r--r--org/output_xmls.org23
-rwxr-xr-xsrc/doc_reform/doc_reform.d1
-rw-r--r--src/doc_reform/meta/doc_debugs.d18
-rw-r--r--src/doc_reform/meta/metadoc.d57
-rw-r--r--src/doc_reform/meta/metadoc_from_src.d121
-rw-r--r--src/doc_reform/meta/metadoc_summary.d44
-rw-r--r--src/doc_reform/meta/object_setter.d3
-rw-r--r--src/doc_reform/output/epub3.d11
-rw-r--r--src/doc_reform/output/html.d6
-rw-r--r--src/doc_reform/output/sqlite.d8
-rw-r--r--src/doc_reform/output/xmls.d6
-rw-r--r--views/version.txt2
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) {