aboutsummaryrefslogtreecommitdiffhomepage
path: root/org/meta_abstraction.org
diff options
context:
space:
mode:
Diffstat (limited to 'org/meta_abstraction.org')
-rw-r--r--org/meta_abstraction.org406
1 files changed, 240 insertions, 166 deletions
diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org
index 4d2d85b..92cab2d 100644
--- a/org/meta_abstraction.org
+++ b/org/meta_abstraction.org
@@ -206,6 +206,7 @@ enum DocStructMarkupHeading {
content_non_header
} // header section A-D; header text 1-4
enum OCNstatus { on, off, bkidx, closing, reset, }
+enum OCN_off_block_status { off, on }
enum OCNtype { ocn, non, bkidx, }
/+ biblio variables +/
string biblio_tag_name, biblio_tag_entry, st;
@@ -229,8 +230,9 @@ static auto obj_att = ObjAttributes();
/+ ocn +/
struct OCNset {
int digit;
- int on;
- int off;
+ int object_number;
+ bool off;
+ string identifier;
int bkidx;
int type;
}
@@ -536,7 +538,8 @@ comp_obj_heading_.metainfo.is_of_type = "para";
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Table of Contents";
comp_obj_heading_.metainfo.ocn = 0;
-comp_obj_heading_.metainfo.object_number_off = "";
+comp_obj_heading_.metainfo.identifier = "";
+comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "toc";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -712,7 +715,8 @@ if there is a glossary section you need to:
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Glossary";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "_part_glossary";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -733,7 +737,8 @@ if there is a glossary section you need to:
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Glossary";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "glossary";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -757,7 +762,8 @@ if there is a glossary section you need to:
comp_obj_para.metainfo.is_a = "glossary";
comp_obj_para.text = line.to!string.strip;
comp_obj_para.metainfo.ocn = 0;
- comp_obj_para.metainfo.object_number_off = "";
+ comp_obj_para.metainfo.identifier = "";
+ comp_obj_para.metainfo.object_number_off = true;
comp_obj_para.metainfo.object_number_type = 0;
comp_obj_para.attrib.indent_hang = indent["hang_position"];
comp_obj_para.attrib.indent_base = indent["base_position"];
@@ -839,7 +845,8 @@ if there is a blurb section you need to:
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Blurb";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "_part_blurb";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -860,7 +867,8 @@ if there is a blurb section you need to:
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Blurb";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "blurb";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -884,7 +892,8 @@ if there is a blurb section you need to:
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = line.to!string;
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "blurb";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -905,7 +914,8 @@ if there is a blurb section you need to:
comp_obj_para.metainfo.is_a = "blurb";
comp_obj_para.text = munge.url_links(line.to!string.strip).replaceFirst(rgx.para_attribs, "");
comp_obj_para.metainfo.ocn = 0;
- comp_obj_para.metainfo.object_number_off = "";
+ comp_obj_para.metainfo.identifier = "";
+ comp_obj_para.metainfo.object_number_off = true;
comp_obj_para.metainfo.object_number_type = 0;
comp_obj_para.attrib.indent_hang = indent["hang_position"];
comp_obj_para.attrib.indent_base = indent["base_position"];
@@ -1007,7 +1017,7 @@ if (line.matchFirst(rgx.block_poem_open)) {
/+ poem to verse exceptions! +/
object_reset(an_object);
processing.remove("verse");
- object_number_poem["start"] = obj_cite_digits.on.to!string;
+ object_number_poem["start"] = obj_cite_digits.object_number.to!string;
}
_start_block_(line, obj_type_status, object_number_poem);
continue;
@@ -1205,7 +1215,7 @@ if ((obj_type_status["heading"] == State.on)
/+ heading object (current line empty) +/
obj_cite_digits = (an_object["lev_markup_number"].to!int == 0)
? ocn_emit(OCNstatus.reset)
- : ocn_emit(OCNstatus.on);
+ : ocn_emit(obj_type_status["ocn_status"]);
an_object["is"] = "heading";
an_object_key="body_nugget";
auto substantive_object_and_anchor_tags_tuple
@@ -1260,7 +1270,7 @@ if ((obj_type_status["heading"] == State.on)
++cnt3;
goto default;
default:
- lv0_to_3_tags ~= obj_cite_digits.on.to!string;
+ lv0_to_3_tags ~= obj_cite_digits.object_number.to!string;
lv0_to_3_tags ~= segn;
tag_in_seg["seg_lv4"] = segn; // for html segname need following lv4 not yet known
tag_in_seg["seg_lv1_to_4"] = segn;
@@ -1272,7 +1282,7 @@ if ((obj_type_status["heading"] == State.on)
bookindex_unordered_hashes
= bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_digits, tag_in_seg);
/+ (incrementally build toc) table of contents here! +/
- _anchor_tag=obj_cite_digits.on.to!string;
+ _anchor_tag = obj_cite_digits.identifier;
the_table_of_contents_section = obj_im.table_of_contents_gather_headings(
an_object,
conf_make_meta,
@@ -1360,8 +1370,9 @@ if ((obj_type_status["heading"] == State.on)
comp_obj_para.text = an_object["substantive"].to!string.strip;
comp_obj_para.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_para.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
- comp_obj_para.metainfo.ocn = obj_cite_digits.digit;
- comp_obj_para.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_para.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_para.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_para.metainfo.object_number_off = (obj_cite_digits.off==0) ? true : false; // TODO
comp_obj_para.metainfo.o_n_book_index = obj_cite_digits.bkidx;
comp_obj_para.metainfo.object_number_type = obj_cite_digits.type;
comp_obj_para.attrib.indent_hang = indent["hang_position"];
@@ -1486,7 +1497,8 @@ if (an_object["glossary_nugget"].length == 0) {
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "(skip) there is no Glossary section";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.metainfo.heading_lev_markup = 1;
comp_obj_heading_.metainfo.heading_lev_collapsed = 1;
@@ -1521,7 +1533,8 @@ if (biblio_ordered.length > 0) {
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Bibliography";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "_part_bibliography";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -1540,7 +1553,8 @@ if (biblio_ordered.length > 0) {
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Bibliography";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "bibliography";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -1561,7 +1575,8 @@ if (biblio_ordered.length > 0) {
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "(skip) there is no Bibliography";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.metainfo.heading_lev_markup = 1;
comp_obj_heading_.metainfo.heading_lev_collapsed = 1;
@@ -1598,7 +1613,8 @@ foreach (entry; biblio_ordered) {
comp_obj_para.metainfo.is_a = "bibliography";
comp_obj_para.text = out_.to!string.strip;
comp_obj_para.metainfo.ocn = 0;
- comp_obj_para.metainfo.object_number_off = "";
+ comp_obj_para.metainfo.identifier = "";
+ comp_obj_para.metainfo.object_number_off = true;
comp_obj_para.metainfo.object_number_type = 0;
comp_obj_para.attrib.indent_hang = 0;
comp_obj_para.attrib.indent_base = 1;
@@ -1683,7 +1699,8 @@ if (an_object["blurb_nugget"].length == 0) {
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "(skip) there is no Blurb section";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_para.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_para.metainfo.object_number_off = true;
comp_obj_para.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "";
comp_obj_heading_.tags.anchor_tag_html = "";
@@ -1715,14 +1732,15 @@ comp_obj_toc.metainfo.is_of_section = "toc";
comp_obj_toc.metainfo.is_of_type = "para";
comp_obj_toc.metainfo.is_a = "toc";
comp_obj_toc.metainfo.ocn = 0;
-comp_obj_toc.metainfo.object_number_off = "";
+comp_obj_toc.metainfo.identifier = "";
+comp_obj_toc.metainfo.object_number_off = true;
comp_obj_toc.metainfo.object_number_type = 0;
comp_obj_toc.attrib.indent_hang = indent["hang_position"];
comp_obj_toc.attrib.indent_base = indent["base_position"];
comp_obj_toc.attrib.bullet = false;
if (the_endnotes_section.length > 1) {
toc_txt_ = format(
- "{ %s }#%s",
+ mkup.lnk_o ~ " %s " ~ mkup.lnk_c ~ mkup.url_o ~ "#%s"~ mkup.url_c,
"Endnotes",
"endnotes",
);
@@ -1733,7 +1751,7 @@ if (the_endnotes_section.length > 1) {
}
if (the_glossary_section.length > 1) {
toc_txt_ = format(
- "{ %s }#%s",
+ mkup.lnk_o ~ " %s " ~ mkup.lnk_c ~ mkup.url_o ~ "#%s"~ mkup.url_c,
"Glossary",
"glossary",
);
@@ -1744,7 +1762,7 @@ if (the_glossary_section.length > 1) {
}
if (the_bibliography_section.length > 1){
toc_txt_ = format(
- "{ %s }#%s",
+ mkup.lnk_o ~ " %s " ~ mkup.lnk_c ~ mkup.url_o ~ "#%s"~ mkup.url_c,
"Bibliography",
"bibliography",
);
@@ -1755,7 +1773,7 @@ if (the_bibliography_section.length > 1){
}
if (the_bookindex_section.length > 1) {
toc_txt_ = format(
- "{ %s }#%s",
+ mkup.lnk_o ~ " %s " ~ mkup.lnk_c ~ mkup.url_o ~ "#%s"~ mkup.url_c,
"Book Index",
"bookindex",
);
@@ -1766,7 +1784,7 @@ if (the_bookindex_section.length > 1) {
}
if (the_blurb_section.length > 1) {
toc_txt_ = format(
- "{ %s }#%s",
+ mkup.lnk_o ~ " %s " ~ mkup.lnk_c ~ mkup.url_o ~ "#%s"~ mkup.url_c,
"Blurb",
"blurb",
);
@@ -2294,6 +2312,7 @@ foreach (ref obj; the_document_head_section) {
"Title OCN should be 1 not: " ~ obj.metainfo.ocn.to!string); // bug introduced 0.18.1
+/
obj.metainfo.ocn = 1;
+ obj.metainfo.identifier = "1";
obj.metainfo.object_number_type = OCNtype.ocn;
}
/+ dom structure (marked up & collapsed) +/
@@ -2352,14 +2371,16 @@ if (the_table_of_contents_section.length > 1) {
/+ multiple 1~ levels, loop through document body +/
if (the_document_body_section.length > 1) {
foreach (ref obj; the_document_body_section) {
- if (!(((obj.metainfo.ocn.to!string) in tag_assoc)
- && ("seg_lv4" in tag_assoc[(obj.metainfo.ocn.to!string)]))
- ) {
- tag_assoc[(obj.metainfo.ocn.to!string)]["seg_lv4"]
- = obj.tags.html_segment_anchor_tag_is;
+ if (!(obj.metainfo.identifier.empty)) {
+ if (!(((obj.metainfo.identifier) in tag_assoc)
+ && ("seg_lv4" in tag_assoc[(obj.metainfo.identifier)]))
+ ) {
+ tag_assoc[(obj.metainfo.identifier)]["seg_lv4"]
+ = obj.tags.html_segment_anchor_tag_is;
+ }
+ tag_assoc[(obj.metainfo.identifier)]["seg_lv1_to_4"]
+ = obj.tags.epub_segment_anchor_tag_is;
}
- tag_assoc[(obj.metainfo.ocn.to!string)]["seg_lv1_to_4"]
- = obj.tags.epub_segment_anchor_tag_is;
if (obj.metainfo.is_a == "heading") {
debug(dom) {
writeln(obj.text);
@@ -2413,8 +2434,9 @@ if (the_endnotes_section.length > 1) {
debug(dom) {
writeln(obj.text);
}
- obj_cite_digits = ocn_emit(OCNstatus.on);
- obj.metainfo.ocn = obj_cite_digits.digit;
+ obj_cite_digits = ocn_emit(OCNstatus.on);
+ 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;
if (obj.metainfo.heading_lev_markup == 4) {
@@ -2455,8 +2477,9 @@ if (the_glossary_section.length > 1) {
debug(dom) {
writeln(obj.text);
}
- obj_cite_digits = ocn_emit(OCNstatus.on);
- obj.metainfo.ocn = obj_cite_digits.digit;
+ obj_cite_digits = ocn_emit(OCNstatus.on);
+ 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;
if (obj.metainfo.heading_lev_markup == 4) {
@@ -2480,8 +2503,9 @@ if (the_glossary_section.length > 1) {
}
obj = obj_heading_ancestors(obj, lv_ancestors_txt);
} else if (obj.metainfo.is_a == "glossary") {
- obj_cite_digits = ocn_emit(OCNstatus.on);
- obj.metainfo.ocn = obj_cite_digits.digit;
+ obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj.metainfo.ocn = obj_cite_digits.object_number;
+ obj.metainfo.identifier = obj_cite_digits.identifier;
}
}
}
@@ -2500,8 +2524,9 @@ if (the_bibliography_section.length > 1) {
debug(dom) {
writeln(obj.text);
}
- obj_cite_digits = ocn_emit(OCNstatus.on);
- obj.metainfo.ocn = obj_cite_digits.digit;
+ obj_cite_digits = ocn_emit(OCNstatus.on);
+ 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;
if (obj.metainfo.heading_lev_markup == 4) {
@@ -2525,8 +2550,9 @@ if (the_bibliography_section.length > 1) {
}
obj = obj_heading_ancestors(obj, lv_ancestors_txt);
} else if (obj.metainfo.is_a == "bibliography") {
- obj_cite_digits = ocn_emit(OCNstatus.on);
- obj.metainfo.ocn = obj_cite_digits.on;
+ obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj.metainfo.ocn = obj_cite_digits.object_number;
+ obj.metainfo.identifier = obj_cite_digits.identifier;
}
}
}
@@ -2539,7 +2565,7 @@ if (the_bibliography_section.length > 1) {
#+name: abs_post
#+BEGIN_SRC d
/+ optional only one 1~ level +/
-int ocn_ = obj_cite_digits.on;
+int ocn_ = obj_cite_digits.object_number;
int ocn_bkidx_ = 0;
int ocn_bidx_;
if (the_bookindex_section.length > 1) {
@@ -2553,8 +2579,9 @@ if (the_bookindex_section.length > 1) {
if (obj.metainfo.heading_lev_markup <= 4) {
segnames_lv0_to_4 ~= obj.tags.segment_anchor_tag_epub;
}
- obj_cite_digits = ocn_emit(OCNstatus.on);
- obj.metainfo.ocn = obj_cite_digits.on;
+ obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj.metainfo.ocn = obj_cite_digits.object_number;
+ obj.metainfo.identifier = obj_cite_digits.identifier;
if (obj.metainfo.heading_lev_markup <= 4) {
if (obj.metainfo.heading_lev_markup == 4) {
obj.tags.segname_prev = segnames["html"][obj.ptr.html_segnames - 1];
@@ -2578,7 +2605,8 @@ if (the_bookindex_section.length > 1) {
obj = obj_heading_ancestors(obj, lv_ancestors_txt);
} else if (obj.metainfo.is_a == "bookindex") {
obj_cite_digits = ocn_emit(OCNstatus.bkidx);
- obj.metainfo.ocn = obj_cite_digits.digit;
+ obj.metainfo.ocn = obj_cite_digits.object_number;
+ obj.metainfo.identifier = obj_cite_digits.identifier;
obj.metainfo.o_n_book_index = obj_cite_digits.bkidx;
obj.metainfo.object_number_type = OCNtype.bkidx;
}
@@ -2601,8 +2629,9 @@ if (the_blurb_section.length > 1) {
debug(dom) {
writeln(obj.text);
}
- obj_cite_digits = ocn_emit(OCNstatus.on);
- obj.metainfo.ocn = obj_cite_digits.on;
+ obj_cite_digits = ocn_emit(OCNstatus.on);
+ 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;
if (obj.metainfo.heading_lev_markup == 4) {
@@ -2627,7 +2656,7 @@ if (the_blurb_section.length > 1) {
obj = obj_heading_ancestors(obj, lv_ancestors_txt);
} else if (obj.metainfo.is_a == "blurb") {
obj_cite_digits = ocn_emit(OCNstatus.off);
- obj.metainfo.object_number_off = obj_cite_digits.off.to!string;
+ obj.metainfo.object_number_off = obj_cite_digits.off;
obj.metainfo.object_number_type = OCNtype.non;
}
}
@@ -2748,7 +2777,8 @@ comp_obj_heading_.metainfo.is_of_section = "empty";
comp_obj_heading_.metainfo.is_of_type = "para";
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.metainfo.ocn = 0;
-comp_obj_para.metainfo.object_number_off = "";
+comp_obj_heading_.metainfo.identifier = "";
+comp_obj_para.metainfo.object_number_off = true;
comp_obj_para.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "";
comp_obj_heading_.tags.anchor_tag_html = "";
@@ -2994,39 +3024,46 @@ static auto _check_ocn_status_(L,T)(
static assert(is(typeof(obj_type_status) == int[string]));
}
static auto rgx = Rgx();
- if ((!line.empty) && (obj_type_status["ocn_status_off_for_multiple_objects"] == TriState.off)) {
+ if (
+ !(line.empty)
+ && (obj_type_status["ocn_status_off_for_multiple_objects"] == OCN_off_block_status.off)
+ ) {
/+ not multi-line object, check whether object_number is on or turned off +/
if (line.matchFirst(rgx.object_number_block_marks)) {
/+ switch off object_number +/
if (line.matchFirst(rgx.object_number_off_block)) {
- obj_type_status["ocn_status_off_for_multiple_objects"] = TriState.on;
+ obj_type_status["ocn_status_off_for_multiple_objects"] = OCN_off_block_status.on;
+ obj_type_status["ocn_status"] = OCNstatus.off;
debug(ocnoff) {
writeln(line);
}
}
if (line.matchFirst(rgx.object_number_off_block_dh)) {
- obj_type_status["ocn_status_off_for_multiple_objects"] = TriState.closing;
+ obj_type_status["ocn_status_off_for_multiple_objects"] = OCN_off_block_status.on;
+ obj_type_status["ocn_status"] = OCNstatus.off;
debug(ocnoff) {
writeln(line);
}
}
} else {
- if (obj_type_status["ocn_status_off_for_multiple_objects"] == TriState.off) {
+ if (obj_type_status["ocn_status_off_for_multiple_objects"] == OCN_off_block_status.off) {
if (line.matchFirst(rgx.object_number_off)) {
obj_type_status["ocn_status"] = OCNstatus.off;
} else if (line.matchFirst(rgx.object_number_off_dh)) {
- obj_type_status["ocn_status"] = OCNstatus.closing;
+ obj_type_status["ocn_status"] = OCNstatus.off;
} else {
obj_type_status["ocn_status"] = OCNstatus.on;
}
} else {
- obj_type_status["ocn_status"]
- = obj_type_status["ocn_status_off_for_multiple_objects"];
+ obj_type_status["ocn_status"] = obj_type_status["ocn_status_off_for_multiple_objects"];
}
}
- } else if ((!line.empty) && (obj_type_status["ocn_status_off_for_multiple_objects"] > TriState.off)) {
+ } else if (
+ !(line.empty)
+ && (obj_type_status["ocn_status_off_for_multiple_objects"] > OCN_off_block_status.off)
+ ) {
if (line.matchFirst(rgx.object_number_off_block_close)) {
- obj_type_status["ocn_status_off_for_multiple_objects"] = TriState.off;
+ obj_type_status["ocn_status_off_for_multiple_objects"] = OCN_off_block_status.off;
obj_type_status["ocn_status"] = OCNstatus.on;
debug(ocnoff) {
writeln(line);
@@ -3125,7 +3162,7 @@ void _start_block_(L,T,N)(
/+ curly code open +/
code_block_syntax = (m.captures[1]) ? m.captures[1].to!string : "";
code_block_numbered = (m.captures[2] == "#") ? true : false;
- debug(code) { // code (curly) open
+ debug(codecurly) { // code (curly) open
writefln(
"* [code curly] %s",
line
@@ -3142,7 +3179,7 @@ void _start_block_(L,T,N)(
line
);
}
- object_number_poem["start"] = obj_cite_digits.on.to!string;
+ object_number_poem["start"] = obj_cite_digits.object_number.to!string;
obj_type_status["blocks"] = TriState.on;
obj_type_status["verse_new"] = State.on;
obj_type_status["poem"] = TriState.on;
@@ -3210,7 +3247,7 @@ void _start_block_(L,T,N)(
/+ tic code open +/
code_block_syntax = (m.captures[1]) ? m.captures[1].to!string : "";
code_block_numbered = (m.captures[2] == "#") ? true : false;
- debug(code) { // code (tic) open
+ debug(codetic) { // code (tic) open
writefln(
"* [code tic] %s",
line
@@ -3227,7 +3264,7 @@ void _start_block_(L,T,N)(
line
);
}
- object_number_poem["start"] = obj_cite_digits.on.to!string;
+ object_number_poem["start"] = obj_cite_digits.object_number.to!string;
obj_type_status["blocks"] = TriState.on;
obj_type_status["verse_new"] = State.on;
obj_type_status["poem"] = TriState.on;
@@ -3306,7 +3343,7 @@ void _code_block_(L,O,T)(
static auto rgx = Rgx();
if (obj_type_status["curly_code"] == TriState.on) {
if (line.matchFirst(rgx.block_curly_code_close)) {
- debug(code) { // code (curly) close
+ debug(codecurly) { // code (curly) close
writeln(line);
}
an_object[an_object_key] = an_object[an_object_key]
@@ -3316,14 +3353,14 @@ void _code_block_(L,O,T)(
obj_type_status["code"] = TriState.closing;
obj_type_status["curly_code"] = TriState.off;
} else {
- debug(code) { // code (curly) line
+ debug(codecurly) { // code (curly) line
writeln(line);
}
an_object[an_object_key] ~= line ~= "\n"; // code (curly) line
}
} else if (obj_type_status["tic_code"] == TriState.on) {
if (line.matchFirst(rgx.block_tic_close)) {
- debug(code) { // code (tic) close
+ debug(codetic) { // code (tic) close
writeln(line);
}
an_object[an_object_key] = an_object[an_object_key]
@@ -3333,7 +3370,7 @@ void _code_block_(L,O,T)(
obj_type_status["code"] = TriState.closing;
obj_type_status["tic_code"] = TriState.off;
} else {
- debug(code) { // code (tic) line
+ debug(codetic) { // code (tic) line
writeln(line);
}
an_object[an_object_key] ~= line ~= "\n"; // code (tic) line
@@ -3724,14 +3761,14 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
writeln(__LINE__);
writefln(
"* %s %s",
- obj_cite_digits.on,
+ obj_cite_digits.object_number,
line
);
}
if (an_object.length > 0) {
debug(poem) { // poem (curly) close
writeln(
- obj_cite_digits.on,
+ obj_cite_digits.object_number,
an_object[an_object_key]
);
}
@@ -3745,8 +3782,9 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
comp_obj_block.metainfo.is_of_section = "body";
comp_obj_block.metainfo.is_of_type = "block";
comp_obj_block.metainfo.is_a = "verse";
- comp_obj_block.metainfo.ocn = obj_cite_digits.on;
- comp_obj_block.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_block.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_block.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_block.metainfo.object_number_off = obj_cite_digits.off;
comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
comp_obj_block.metainfo.o_n_book_index = obj_cite_digits.bkidx;
@@ -3762,14 +3800,14 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
processing.remove("verse");
++cntr;
}
- object_number_poem["end"] = obj_cite_digits.on.to!string;
+ object_number_poem["end"] = obj_cite_digits.object_number.to!string;
obj_type_status["blocks"] = TriState.closing;
obj_type_status["poem"] = TriState.closing;
obj_type_status["curly_poem"] = TriState.off;
} else {
processing["verse"] ~= line ~= "\n";
if (obj_type_status["verse_new"] == State.on) {
- obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);
obj_type_status["verse_new"] = State.off;
} else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {
processing["verse"] = processing["verse"].stripRight;
@@ -3782,7 +3820,7 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
debug(poem) { // poem verse
writefln(
"* %s curly\n%s",
- obj_cite_digits.on,
+ obj_cite_digits.object_number,
an_object[an_object_key]
);
}
@@ -3807,8 +3845,9 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
comp_obj_block.metainfo.is_of_section = "body";
comp_obj_block.metainfo.is_of_type = "block";
comp_obj_block.metainfo.is_a = "verse";
- comp_obj_block.metainfo.ocn = obj_cite_digits.on;
- comp_obj_block.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_block.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_block.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_block.metainfo.object_number_off = obj_cite_digits.off;
comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
comp_obj_block.metainfo.o_n_book_index = obj_cite_digits.bkidx;
@@ -3839,7 +3878,7 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
if (an_object.length > 0) {
debug(poem) { // poem (tic) close
writeln(__LINE__);
- writeln(obj_cite_digits.on, line);
+ writeln(obj_cite_digits.object_number, line);
}
processing.remove("verse");
an_object["is"] = "verse";
@@ -3852,8 +3891,9 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
comp_obj_block.metainfo.is_of_section = "body";
comp_obj_block.metainfo.is_of_type = "block";
comp_obj_block.metainfo.is_a = "verse";
- comp_obj_block.metainfo.ocn = obj_cite_digits.on;
- comp_obj_block.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_block.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_block.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_block.metainfo.object_number_off = obj_cite_digits.off;
comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
comp_obj_block.metainfo.o_n_book_index = obj_cite_digits.bkidx;
@@ -3864,7 +3904,7 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
comp_obj_block.has.inline_links = substantive_obj_misc_tuple[sObj.links];
the_document_body_section ~= comp_obj_block;
tag_assoc = inline_para_link_anchor(an_object, tag_in_seg, tag_assoc);
- object_number_poem["end"] = obj_cite_digits.on.to!string;
+ object_number_poem["end"] = obj_cite_digits.object_number.to!string;
object_reset(an_object);
processing.remove("verse");
++cntr;
@@ -3875,7 +3915,7 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
} else {
processing["verse"] ~= line ~= "\n";
if (obj_type_status["verse_new"] == State.on) {
- obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);
obj_type_status["verse_new"] = State.off;
} else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {
processing["verse"] = processing["verse"].stripRight;
@@ -3888,7 +3928,7 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
debug(poem) { // poem (tic) close
writefln(
"* %s tic\n%s",
- obj_cite_digits.on,
+ obj_cite_digits.object_number,
an_object[an_object_key]
);
}
@@ -3914,8 +3954,9 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(
comp_obj_block.metainfo.is_of_section = "body";
comp_obj_block.metainfo.is_of_type = "block";
comp_obj_block.metainfo.is_a = "verse";
- comp_obj_block.metainfo.ocn = obj_cite_digits.on;
- comp_obj_block.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_block.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_block.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_block.metainfo.object_number_off = obj_cite_digits.off;
comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
comp_obj_block.metainfo.o_n_book_index = obj_cite_digits.bkidx;
@@ -4041,7 +4082,7 @@ void _table_closed_make_special_notation_table_(N,CMM)(
CMM conf_make_meta
) {
comp_obj_block = comp_obj_block.init;
- obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);
auto comp_obj_location
= node_construct.node_location_emitter(
content_non_header,
@@ -4057,8 +4098,9 @@ void _table_closed_make_special_notation_table_(N,CMM)(
auto substantive_obj_misc_tuple
= obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, "body_nugget", conf_make_meta, false);
an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];
- comp_obj_block.metainfo.ocn = obj_cite_digits.on;
- comp_obj_block.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_block.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_block.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_block.metainfo.object_number_off = obj_cite_digits.off;
comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
comp_obj_block.metainfo.o_n_book_index = obj_cite_digits.bkidx;
@@ -4109,7 +4151,7 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
#+name: abs_functions_block_line_status_empty
#+BEGIN_SRC d
if (obj_type_status["quote"] == TriState.closing) {
- obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);
an_object["bookindex_nugget"]
= ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";
bookindex_unordered_hashes
@@ -4139,8 +4181,9 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
comp_obj_block.metainfo.is_of_section = "body";
comp_obj_block.metainfo.is_of_type = "block";
comp_obj_block.metainfo.is_a = "quote";
- comp_obj_block.metainfo.ocn = obj_cite_digits.on;
- comp_obj_block.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_block.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_block.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_block.metainfo.object_number_off = obj_cite_digits.off;
comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
comp_obj_block.metainfo.o_n_book_index = obj_cite_digits.bkidx;
@@ -4163,7 +4206,7 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
#+name: abs_functions_block_line_status_empty
#+BEGIN_SRC d
} else if (obj_type_status["group"] == TriState.closing) {
- obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);
an_object["bookindex_nugget"]
= ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";
bookindex_unordered_hashes
@@ -4193,8 +4236,9 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
comp_obj_block.metainfo.is_of_section = "body";
comp_obj_block.metainfo.is_of_type = "block";
comp_obj_block.metainfo.is_a = "group";
- comp_obj_block.metainfo.ocn = obj_cite_digits.on;
- comp_obj_block.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_block.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_block.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_block.metainfo.object_number_off = obj_cite_digits.off;
comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
comp_obj_block.metainfo.o_n_book_index = obj_cite_digits.bkidx;
@@ -4217,7 +4261,7 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
#+name: abs_functions_block_line_status_empty
#+BEGIN_SRC d
} else if (obj_type_status["block"] == TriState.closing) {
- obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);
an_object["bookindex_nugget"]
= ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";
bookindex_unordered_hashes
@@ -4247,8 +4291,9 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
comp_obj_block.metainfo.is_of_section = "body";
comp_obj_block.metainfo.is_of_type = "block";
comp_obj_block.metainfo.is_a = "block";
- comp_obj_block.metainfo.ocn = obj_cite_digits.on;
- comp_obj_block.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_block.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_block.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_block.metainfo.object_number_off = obj_cite_digits.off;
comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
comp_obj_block.metainfo.o_n_book_index = obj_cite_digits.bkidx;
@@ -4295,9 +4340,10 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
comp_obj_poem_ocn.metainfo.is_of_section = "body";
comp_obj_poem_ocn.metainfo.is_of_type = "block";
comp_obj_poem_ocn.metainfo.is_a = "poem";
- comp_obj_poem_ocn.metainfo.ocn = obj_cite_digits.on;
- comp_obj_poem_ocn.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string; //
- comp_obj_poem_ocn.metainfo.o_n_book_index = obj_cite_digits.bkidx; //
+ comp_obj_poem_ocn.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_poem_ocn.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_poem_ocn.metainfo.object_number_off = obj_cite_digits.off;
+ comp_obj_poem_ocn.metainfo.o_n_book_index = obj_cite_digits.bkidx;
comp_obj_poem_ocn.metainfo.object_number_type = obj_cite_digits.type;
comp_obj_poem_ocn.text = "";
the_document_body_section ~= comp_obj_poem_ocn;
@@ -4312,7 +4358,7 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
#+name: abs_functions_block_line_status_empty
#+BEGIN_SRC d
} else if (obj_type_status["code"] == TriState.closing) {
- obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);
an_object["bookindex_nugget"]
= ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";
bookindex_unordered_hashes
@@ -4342,8 +4388,9 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
comp_obj_code.metainfo.is_of_section = "body";
comp_obj_code.metainfo.is_of_type = "block";
comp_obj_code.metainfo.is_a = "code";
- comp_obj_code.metainfo.ocn = obj_cite_digits.on;
- comp_obj_code.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_code.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_code.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_code.metainfo.object_number_off = obj_cite_digits.off;
comp_obj_code.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_code.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
comp_obj_code.metainfo.o_n_book_index = obj_cite_digits.bkidx;
@@ -4366,7 +4413,7 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
#+BEGIN_SRC d
} else if (obj_type_status["table"] == TriState.closing) {
comp_obj_block = comp_obj_block.init;
- obj_cite_digits = ocn_emit(OCNstatus.on);
+ obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);
an_object["bookindex_nugget"]
= ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";
bookindex_unordered_hashes
@@ -4391,8 +4438,9 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(
= obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false);
an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];
comp_obj_block = comp_obj_block.init;
- comp_obj_block.metainfo.ocn = obj_cite_digits.on;
- comp_obj_block.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ comp_obj_block.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_block.metainfo.identifier = obj_cite_digits.identifier;
+ comp_obj_block.metainfo.object_number_off = obj_cite_digits.off;
comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
comp_obj_block.metainfo.o_n_book_index = obj_cite_digits.bkidx;
@@ -5133,36 +5181,48 @@ auto table_substantive_munge_special(O,T)(
#+name: meta_emitters_ocn
#+BEGIN_SRC d
pure struct OCNemitter {
- int ocn_, ocn_on, ocn_on_, ocn_off, ocn_off_, ocn_bkidx, ocn_bkidx_;
+ int ocn_digit, ocn_object_number, ocn_on_, ocn_off_, ocn_bkidx, ocn_bkidx_;
+ string object_identifier;
+ bool ocn_is_off;
auto ocn_emitter(int ocn_status_flag) {
OCNset ocn;
assert(ocn_status_flag <= OCNstatus.reset);
- ocn_on = ocn_off = ocn_bkidx = 0;
+ ocn_object_number = ocn_bkidx = 0;
+ object_identifier = "";
+ ocn_is_off = false;
switch(ocn_status_flag) {
case OCNstatus.reset:
- ocn_ = ocn_on_ = ocn_off_ = 1;
- ocn_bkidx_ = 0;
+ ocn_digit = ocn_on_ = 1;
+ object_identifier = "1";
+ ocn_is_off = false;
+ ocn_off_ = ocn_bkidx_ = 0;
break;
case OCNstatus.on:
- ocn_ = ocn_on = ++ocn_on_;
+ ocn_digit = ocn_object_number = ++ocn_on_;
+ object_identifier = ocn_digit.to!string;
+ ocn_is_off = false;
break;
case OCNstatus.off:
- ocn_ = ocn_off = ++ocn_off_;
+ ocn_digit = 0;
+ ocn_off_ = ++ocn_off_;
+ object_identifier = "a" ~ ocn_off_.to!string;
+ ocn_is_off = true;
break;
case OCNstatus.bkidx:
- ocn_ = ocn_bkidx = ++ocn_bkidx_;
+ ocn_bkidx = ++ocn_bkidx_;
break;
case OCNstatus.closing:
break;
default:
- ocn_ = 0;
- }
- assert(ocn_ >= 0);
- ocn.digit = ocn_;
- ocn.on = ocn_on;
- ocn.off = ocn_off;
- ocn.bkidx = ocn_bkidx;
- ocn.type = ocn_status_flag;
+ ocn_digit = 0;
+ }
+ assert(ocn_digit >= 0);
+ ocn.digit = ocn_digit;
+ ocn.object_number = ocn_object_number; // difference between .object_number and .digit?
+ ocn.identifier = object_identifier;
+ ocn.off = ocn_is_off;
+ ocn.bkidx = ocn_bkidx;
+ ocn.type = ocn_status_flag;
return ocn;
}
invariant() {
@@ -5825,7 +5885,7 @@ static struct ObjInlineMarkup {
"base_position" : obj_["lev_markup_number"].to!int,
];
toc_txt_ = format(
- "{ %s }#%s",
+ mkup.lnk_o ~ " %s " ~ mkup.lnk_c ~ mkup.url_o ~ "#%s"~ mkup.url_c,
heading_toc_,
_anchor_tag,
);
@@ -5836,7 +5896,8 @@ static struct ObjInlineMarkup {
comp_obj_toc.metainfo.is_of_type = "para";
comp_obj_toc.metainfo.is_a = "toc";
comp_obj_toc.metainfo.ocn = 0;
- comp_obj_toc.metainfo.object_number_off = "";
+ comp_obj_toc.metainfo.identifier = "";
+ comp_obj_toc.metainfo.object_number_off = true;
comp_obj_toc.metainfo.object_number_type = 0;
comp_obj_toc.attrib.indent_hang = indent["hang_position"];
comp_obj_toc.attrib.indent_base = indent["base_position"];
@@ -5855,7 +5916,8 @@ static struct ObjInlineMarkup {
comp_obj_toc.metainfo.is_of_type = "para";
comp_obj_toc.metainfo.is_a = "toc";
comp_obj_toc.metainfo.ocn = 0;
- comp_obj_toc.metainfo.object_number_off = "";
+ comp_obj_toc.metainfo.identifier = "";
+ comp_obj_toc.metainfo.object_number_off = true;
comp_obj_toc.metainfo.object_number_type = 0;
comp_obj_toc.attrib.indent_hang = indent["hang_position"];
comp_obj_toc.attrib.indent_base = indent["base_position"];
@@ -5870,7 +5932,8 @@ static struct ObjInlineMarkup {
comp_obj_toc.metainfo.is_of_type = "para";
comp_obj_toc.metainfo.is_a = "toc";
comp_obj_toc.metainfo.ocn = 0;
- comp_obj_toc.metainfo.object_number_off = "";
+ comp_obj_toc.metainfo.identifier = "";
+ comp_obj_toc.metainfo.object_number_off = true;
comp_obj_toc.metainfo.object_number_type = 0;
comp_obj_toc.attrib.bullet = false;
comp_obj_toc.has.inline_links = true;
@@ -5882,7 +5945,7 @@ static struct ObjInlineMarkup {
break;
case 5: .. case 7:
subtoc_txt_ = format(
- "{ %s }#%s",
+ mkup.lnk_o ~ " %s " ~ mkup.lnk_c ~ mkup.url_o ~ "#%s"~ mkup.url_c,
heading_toc_,
_anchor_tag,
);
@@ -6497,15 +6560,15 @@ struct BookIndexNuggetHash {
in {
debug(asserts) {
static assert(is(typeof(bookindex_section) == string));
- static assert(is(typeof(obj_cite_digits.on) == int));
+ static assert(is(typeof(obj_cite_digits.object_number) == int));
}
debug(bookindexraw) {
if (!bookindex_section.empty) {
writeln(
"* [bookindex] ",
- "[", obj_cite_digits.on.to!string, ": ", tag_in_seg["seg_lv4"], "] ", bookindex_section,
+ "[", obj_cite_digits.object_number.to!string, ": ", tag_in_seg["seg_lv4"], "] ", bookindex_section,
" - - - ",
- "[", obj_cite_digits.on.to!string, "] ", bookindex_section
+ "[", obj_cite_digits.object_number.to!string, "] ", bookindex_section
);
}
}
@@ -6523,12 +6586,12 @@ struct BookIndexNuggetHash {
) {
main_term = m.captures[1].strip;
object_number_offset = m.captures[2].to!int;
- object_number_endpoint=(obj_cite_digits.on + object_number_offset);
- object_numbers ~= (obj_cite_digits.on.to!string
+ object_number_endpoint=(obj_cite_digits.object_number + object_number_offset);
+ object_numbers ~= (obj_cite_digits.object_number.to!string
~ "-" ~ object_number_endpoint.to!string);
} else {
main_term = bi_main_term_and_rest[0].strip;
- object_numbers ~= obj_cite_digits.on.to!string;
+ object_numbers ~= obj_cite_digits.object_number.to!string;
}
bi[main_term]["_a"] ~= object_numbers;
object_numbers = null;
@@ -6541,12 +6604,12 @@ struct BookIndexNuggetHash {
if (auto m = sub_terms_bits.match(rgx.bi_term_and_object_numbers_match)) {
sub_term = m.captures[1].strip;
object_number_offset = m.captures[2].to!int;
- object_number_endpoint=(obj_cite_digits.on + object_number_offset);
- object_numbers ~= (obj_cite_digits.on.to!string
+ object_number_endpoint=(obj_cite_digits.object_number + object_number_offset);
+ object_numbers ~= (obj_cite_digits.object_number.to!string
~ " - " ~ object_number_endpoint.to!string);
} else {
sub_term = sub_terms_bits.strip;
- object_numbers ~= obj_cite_digits.on.to!string;
+ object_numbers ~= obj_cite_digits.object_number.to!string;
}
if (!empty(sub_term)) {
bi[main_term][sub_term] ~= object_numbers;
@@ -6656,7 +6719,7 @@ struct BookIndexReportSection {
) {
debug(asserts) {
static assert(is(typeof(bookindex_unordered_hashes) == string[][string][string]));
- static assert(is(typeof(obj_cite_digits.on) == int));
+ static assert(is(typeof(obj_cite_digits.object_number) == int));
}
mixin DocReformNode;
mixin InternalMarkup;
@@ -6684,7 +6747,8 @@ struct BookIndexReportSection {
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Book Index";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "_part_book_index";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -6705,7 +6769,8 @@ struct BookIndexReportSection {
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Index";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "bookindex";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -6764,7 +6829,8 @@ struct BookIndexReportSection {
comp_obj_para.metainfo.is_a = "bookindex";
comp_obj_para.text = bi_tmp.to!string.strip;
comp_obj_para.metainfo.ocn = 0;
- comp_obj_para.metainfo.object_number_off = "";
+ comp_obj_para.metainfo.identifier = "";
+ comp_obj_para.metainfo.object_number_off = true;
comp_obj_para.metainfo.object_number_type = 0;
comp_obj_para.tags.anchor_tags = bi_tmp_tags;
comp_obj_para.attrib.indent_hang = 0;
@@ -6779,7 +6845,8 @@ struct BookIndexReportSection {
comp_obj_heading_ = comp_obj_heading_.init;
comp_obj_heading_.text = "(skip) there is no Book Index";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.metainfo.heading_lev_markup = 1;
comp_obj_heading_.metainfo.heading_lev_collapsed = 1;
@@ -6923,7 +6990,8 @@ struct NotesSection {
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Endnotes";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "_part_endnotes";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -6943,7 +7011,8 @@ struct NotesSection {
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "Endnotes";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.tags.segment_anchor_tag_epub = "endnotes";
comp_obj_heading_.tags.anchor_tag_html = comp_obj_heading_.tags.segment_anchor_tag_epub;
@@ -6965,7 +7034,8 @@ struct NotesSection {
comp_obj_heading_.metainfo.is_a = "heading";
comp_obj_heading_.text = "(skip) there are no Endnotes";
comp_obj_heading_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
+ comp_obj_heading_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true;
comp_obj_heading_.metainfo.object_number_type = 0;
comp_obj_heading_.metainfo.heading_lev_markup = 1;
comp_obj_heading_.metainfo.heading_lev_collapsed = 1;
@@ -6981,8 +7051,9 @@ struct NotesSection {
comp_obj_endnote_.metainfo.is_of_type = "para";
comp_obj_endnote_.metainfo.is_a = "endnote";
comp_obj_endnote_.metainfo.ocn = 0;
- comp_obj_heading_.metainfo.object_number_off = "";
- comp_obj_heading_.metainfo.object_number_type = 0;
+ comp_obj_endnote_.metainfo.identifier = "";
+ comp_obj_heading_.metainfo.object_number_off = true; // check
+ comp_obj_heading_.metainfo.object_number_type = 0; // check
comp_obj_endnote_.attrib.indent_hang = 0;
comp_obj_endnote_.attrib.indent_base = 0;
comp_obj_endnote_.attrib.bullet = false;
@@ -7172,19 +7243,19 @@ struct NodeStructureMetadata {
)
in {
debug(asserts) {
- static assert(is(typeof(lev_markup_number) == string));
- static assert(is(typeof(tag_in_seg) == string[string]));
- static assert(is(typeof(obj_cite_digits.on) == int));
- static assert(is(typeof(cntr_) == int));
- static assert(is(typeof(ptr_) == int));
- static assert(is(typeof(is_) == string));
+ static assert(is(typeof(lev_markup_number) == string));
+ static assert(is(typeof(tag_in_seg) == string[string]));
+ static assert(is(typeof(obj_cite_digits.object_number) == int));
+ static assert(is(typeof(cntr_) == int));
+ static assert(is(typeof(ptr_) == int));
+ static assert(is(typeof(is_) == string));
}
assert(is_ != "heading");
- assert(obj_cite_digits.on.to!int >= 0);
+ assert(obj_cite_digits.object_number.to!int >= 0);
}
body {
- assert(is_ != "heading"); // should not be necessary
- assert(obj_cite_digits.on.to!int >= 0); // should not be necessary
+ assert(is_ != "heading");
+ assert(obj_cite_digits.object_number.to!int >= 0);
if (lv7 > State.off) {
p_["lev_markup_number"] = DocStructMarkupHeading.h_text_4;
p_["object_number"] = lv7;
@@ -7201,7 +7272,8 @@ struct NodeStructureMetadata {
ObjGenericComposite comp_obj_location;
comp_obj_location = comp_obj_location.init;
comp_obj_location.metainfo.is_a = is_;
- comp_obj_location.metainfo.ocn = obj_cite_digits.on;
+ comp_obj_location.metainfo.ocn = obj_cite_digits.object_number;
+ comp_obj_location.metainfo.identifier = obj_cite_digits.identifier;
comp_obj_location.tags.anchor_tag_html = tag_in_seg["seg_lv4"];
comp_obj_location.tags.segment_anchor_tag_epub = tag_in_seg["seg_lv1_to_4"];
comp_obj_location.tags.heading_lev_anchor_tag = lev_anchor_tag;
@@ -7251,7 +7323,7 @@ struct NodeStructureMetadata {
static assert(is(typeof(lev_markup_number) == string));
static assert(is(typeof(lev_collapsed_number) == string));
static assert(is(typeof(tag_in_seg) == string[string]));
- static assert(is(typeof(obj_cite_digits.on) == int));
+ static assert(is(typeof(obj_cite_digits.object_number) == int));
static assert(is(typeof(cntr_) == int));
static assert(is(typeof(ptr_) == int));
static assert(is(typeof(lv_ancestors_txt) == string[]));
@@ -7259,19 +7331,19 @@ struct NodeStructureMetadata {
static assert(is(typeof(html_segnames_ptr) == int));
}
assert(is_ == "heading");
- assert((obj_cite_digits.on).to!int >= 0);
+ assert((obj_cite_digits.object_number).to!int >= 0);
assert(
lev_markup_number.match(rgx.levels_numbered),
- ("not a valid heading level: " ~ lev_markup_number ~ " at " ~ obj_cite_digits.on.to!string)
+ ("not a valid heading level: " ~ lev_markup_number ~ " at " ~ obj_cite_digits.object_number.to!string)
);
if (lev_markup_number.match(rgx.levels_numbered)) {
if (lev_markup_number.to!int == 0) {
/+ TODO first hit (of two) with this assertion failure, check, fix & reinstate
- assert(obj_cite_digits.on.to!int == 1,
+ assert(obj_cite_digits.object_number.to!int == 1,
"ERROR header lev markup number is: " ~
lev_markup_number.to!string ~
- " obj_cite_digits.on.to!int should == 1 but is: " ~
- obj_cite_digits.on.to!string ~
+ " obj_cite_digits.object_number.to!int should == 1 but is: " ~
+ obj_cite_digits.object_number.to!string ~
"\n" ~ _text);
+/
}
@@ -7365,8 +7437,9 @@ struct NodeStructureMetadata {
_comp_obj_heading_.metainfo.is_of_type = "para";
_comp_obj_heading_.metainfo.is_a = "heading";
_comp_obj_heading_.text = _text.to!string.strip;
- _comp_obj_heading_.metainfo.ocn = obj_cite_digits.on;
- _comp_obj_heading_.metainfo.object_number_off = (obj_cite_digits.off==0) ? "" : obj_cite_digits.off.to!string;
+ _comp_obj_heading_.metainfo.ocn = obj_cite_digits.object_number;
+ _comp_obj_heading_.metainfo.identifier = obj_cite_digits.identifier;
+ _comp_obj_heading_.metainfo.object_number_off = obj_cite_digits.off;
// _comp_obj_heading_.metainfo.o_n_book_index = obj_cite_digits.bkidx;
_comp_obj_heading_.metainfo.object_number_type = obj_cite_digits.type;
_comp_obj_heading_.tags.segment_anchor_tag_epub = tag_in_seg["seg_lv1_to_4"];
@@ -7751,13 +7824,14 @@ struct DocObj_MetaInfo_ {
string object_number_blurb() const @property {
return (o_n_blurb==0) ? "" : o_n_blurb.to!string;
}
- string object_number_off = "";
+ bool object_number_off = false;
bool visible_object_number = false;
// enum ONtype { none, substantive, non_substantive, glossary, bibliography, book_index, blurb, comment }
int object_number_type = 0; // { ocn, non, bkidx }
/+ node +/
string[string][string] node;
int ocn = 0;
+ string identifier = "";
string object_number() const @property {
return (ocn==0) ? "" : ocn.to!string;
}