diff options
Diffstat (limited to 'lib/sdp')
-rw-r--r-- | lib/sdp/ao_abstract_doc_source.d | 3743 | ||||
-rw-r--r-- | lib/sdp/ao_ansi_colors.d | 74 | ||||
-rw-r--r-- | lib/sdp/ao_defaults.d | 309 | ||||
-rw-r--r-- | lib/sdp/ao_emitter.d | 1479 | ||||
-rw-r--r-- | lib/sdp/ao_object_setter.d | 124 | ||||
-rw-r--r-- | lib/sdp/ao_output_debugs.d | 417 | ||||
-rw-r--r-- | lib/sdp/ao_read_source_files.d | 281 | ||||
-rw-r--r-- | lib/sdp/ao_rgx.d | 181 | ||||
-rw-r--r-- | lib/sdp/compile_time_info.d | 38 | ||||
-rwxr-xr-x | lib/sdp/sdp.d | 186 | ||||
-rw-r--r-- | lib/sdp/version.txt | 8 |
11 files changed, 0 insertions, 6840 deletions
diff --git a/lib/sdp/ao_abstract_doc_source.d b/lib/sdp/ao_abstract_doc_source.d deleted file mode 100644 index 00cff5c..0000000 --- a/lib/sdp/ao_abstract_doc_source.d +++ /dev/null @@ -1,3743 +0,0 @@ -/+ - document abstraction - ao_abstract_doc_source.d -+/ -template SiSUdocAbstraction() { - private: - struct Abstraction { - - /+ ↓ abstraction imports +/ - import - lib.sdp.ao_defaults, // sdp/ao_defaults.d - lib.sdp.ao_object_setter, // sdp/ao_object_setter.d - lib.sdp.ao_rgx, // sdp/ao_rgx.d - lib.sdp.ao_ansi_colors; // sdp/ao_ansi_colors.d - - /+ ↓ abstraction mixins +/ - mixin ObjectSetter; - mixin InternalMarkup; - // // mixin SiSUrgxInitFlags; - // // mixin AssertionsOnBlocks; - // mixin SiSUbiblio; // issue - // mixin SiSUheader; - - /+ ↓ abstraction struct init +/ - /+ initialize +/ - - auto rgx = Rgx(); - ObjComposite[] contents_the_objects; - - string[string] an_object, processing; - auto set_abstract_object = ObjectAbstractSet(); - auto set_header = HeaderDocMetadataMakeJson(); - auto note_section = NotesSection(); - - /+ enum +/ - enum State { off, on } - enum TriState { off, on, closing } // make aware, possibility of third state - enum DocStructMarkupHeading { - h_sect_A, - h_sect_B, - h_sect_C, - h_sect_D, - h_text_1, - h_text_2, - h_text_3, - h_text_4, - h_text_5, // extra level, drop - content_non_header - } // header section A-D; header text 1-4 - enum DocStructCollapsedHeading { lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7 } // not yet used - - /+ biblio variables +/ - string biblio_tag_name, biblio_tag_entry, st; - string[] biblio_arr_json; - JSONValue[] bib_arr_json; - int bib_entry; - - /+ counters +/ - long counter, previous_count; - int[string] line_occur; - int verse_line, heading_pointer; - - /+ paragraph attributes +/ - string[string] indent; - bool bullet = true; - string content_non_header = "8"; - - auto obj_im = ObjInlineMarkup(); - auto obj_att = ObjAttrib(); - - /+ ocn +/ - int obj_cite_number, obj_cite_number_; - auto object_citation_number = OCNemitter(); - int obj_cite_number_emit(int obj_cite_number_status_flag) { - return object_citation_number.obj_cite_number_emitter(obj_cite_number_status_flag); - } - - /+ book index variables +/ - string book_idx_tmp; - string[][string][string] bookindex_unordered_hashes; - auto bookindex_extract_hash = BookIndexNuggetHash(); - string[][string][string] bkidx_hash(string bookindex_section, int obj_cite_number) { - return bookindex_extract_hash.bookindex_nugget_hash(bookindex_section, obj_cite_number); - } - - /+ node +/ - string node; - auto node_construct = NodeStructureMetadata(); - string node_jstr( - string lev_markup_number, - int obj_cite_number_, - long counter, - int heading_pointer, - string is_ - ) { - return node_construct.node_emitter( - lev_markup_number, - obj_cite_number_, - counter, - heading_pointer, - is_ - ); - } - string node_jstr_heading( - string lev_markup_number, - string lev_collapsed_number, - int obj_cite_number_, - long counter, - int heading_pointer, - string is_ - ) { - return node_construct.node_emitter_heading( - lev_markup_number, - lev_collapsed_number, - obj_cite_number_, - counter, - heading_pointer, - is_ - ); - } - // mixin SiSUdocAbstractionFunctions; - - /+ ↓ abstract marked up document +/ - auto abstract_doc_source(char[][] markup_sourcefile_content) { - - /+ ↓ abstraction init +/ - scope(success) { - } - scope(failure) { - } - scope(exit) { - destroy(contents_the_objects); - destroy(an_object); - destroy(processing); - destroy(biblio_arr_json); - } - auto type = flags_type_init; - auto dochead_make = parseJSON(header_make_jsonstr).object; - auto dochead_metadata = parseJSON(header_metadata_jsonstr).object; - mixin ScreenTxtColors; - int tell_lo(string color, int obj_cite_number, in char[] line) { - writefln( - "%s%s %s", - scr_txt_marker[color], - to!string(obj_cite_number), - to!string(line) - ); - return 0; - } - int tell_l(string color, in char[] line) { - writefln( - "%s%s", - scr_txt_marker[color], - line - ); - return 0; - } - string[string] obj_cite_number_poem = [ - "start" : "", - "end" : "" - ]; - int[string] lv = [ - "lv" : State.off, - "h0" : State.off, - "h1" : State.off, - "h2" : State.off, - "h3" : State.off, - "h4" : State.off, - "h5" : State.off, - "h6" : State.off, - "h7" : State.off, - "lev_collapsed_number" : 0, - ]; - int[string] collapsed_lev = [ - "h0" : State.off, - "h1" : State.off, - "h2" : State.off, - "h3" : State.off, - "h4" : State.off, - "h5" : State.off, - "h6" : State.off, - "h7" : State.off - ]; - string[string] heading_match_str = [ - "h_A": "^(none)", - "h_B": "^(none)", - "h_C": "^(none)", - "h_D": "^(none)", - "h_1": "^(none)", - "h_2": "^(none)", - "h_3": "^(none)", - "h_4": "^(none)" - ]; - auto heading_match_rgx = [ - "h_A": regex(r"^(none)"), - "h_B": regex(r"^(none)"), - "h_C": regex(r"^(none)"), - "h_D": regex(r"^(none)"), - "h_1": regex(r"^(none)"), - "h_2": regex(r"^(none)"), - "h_3": regex(r"^(none)"), - "h_4": regex(r"^(none)") - ]; - /+ abstraction init ↑ +/ - - /+ ↓ loop markup document/text line by line +/ - srcDocLoop: - foreach (line; markup_sourcefile_content) { - - /+ ↓ markup document/text line by line +/ - /+ scope +/ - scope(exit) { - } - scope(failure) { - stderr.writefln( - "%s\n%s\n%s:%s failed here:\n line: %s", - __MODULE__, __FUNCTION__, - __FILE__, __LINE__, - line, - ); - } - line = replaceAll(line, rgx.true_dollar, "$$$$"); - // dollar represented as $$ needed to stop submatching on $ - // (substitutions using ${identifiers} must take into account (e.g. happen earlier)) - debug(source) { // source lines - writeln(line); - // writeln(scr_txt_marker["green"], line); - } - debug(srclines) { - if (!line.empty) { // source lines, not empty - writefln( - "%s%s", - scr_txt_marker["green"], - line - ); - } - } - if (!line.empty) { - check_obj_cite_number_status(line, type); - } - if (type["code"] == TriState.on) { - /+ block object: code +/ - code_block(line, an_object, type); - continue; - } else if (!match(line, rgx.regular_parse_skip)) { - /+ object other than code block object (includes regular text paragraph) +/ - if (((match(line, rgx.heading_biblio) - || (type["heading_biblio"] == State.on))) - && (!match(line, rgx.heading)) - && (!match(line, rgx.comment))) { - /+ within block object: biblio +/ - biblio_block(line, type, bib_entry, biblio_arr_json); - continue; - } else if (type["poem"] == TriState.on) { - /+ within block object: poem +/ - poem_block(line, an_object, type, counter, obj_cite_number_poem); - continue; - /+ within block object: group +/ - } else if (type["group"] == TriState.on) { - /+ within block object: group +/ - group_block(line, an_object, type); - continue; - } else if (type["block"] == TriState.on) { - /+ within block object: block +/ - block_block(line, an_object, type); - continue; - } else if (type["quote"] == TriState.on) { - /+ within block object: quote +/ - quote_block(line, an_object, type); - continue; - } else if (type["table"] == TriState.on) { - /+ within block object: table +/ - table_block(line, an_object, type); - continue; - } else { - /+ not within a block group +/ - assert( - (type["blocks"] == TriState.off) - || (type["blocks"] == TriState.closing), - "block status: none or closed" - ); - assertions_flag_types_block_status_none_or_closed(type); - if (match(line, rgx.block_open)) { - if (match(line, (rgx.block_poem_open))) { - /+ poem to verse exceptions! +/ - object_reset(an_object); - processing.remove("verse"); - obj_cite_number_poem["start"] = to!string(obj_cite_number); - } - start_block(line, type, obj_cite_number_poem); - continue; - } else if (!line.empty) { - /+ line not empty +/ - /+ non blocks (headers, paragraphs) & closed blocks +/ - assert( - !line.empty, - "line tested, line not empty surely" - ); - assert( - (type["blocks"] == TriState.off) - || (type["blocks"] == TriState.closing), - "code block status: none or closed" - ); - if (type["blocks"] == TriState.closing) { - // blocks closed, unless followed by book index - debug(check) { // block - writeln(__LINE__); - tell_l("red", line); - } - assert( - match(line, rgx.book_index) - || match(line, rgx.book_index_open) - || type["book_index"] == State.on - ); - } - if ((match(line, rgx.book_index)) - || (match(line, rgx.book_index_open)) - || (type["book_index"] == State.on )) { - /+ book_index +/ - book_index(line, book_idx_tmp, an_object, type); - } else { - /+ not book_index +/ - if (auto m = match(line, rgx.comment)) { - /+ matched comment +/ - debug(comment) { - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; - contents_the_objects ~= - set_abstract_object.contents_comment(strip(an_object["obj"])); - header_set_common(line_occur, an_object, type); - processing.remove("verse"); - type["header_make"] = State.off; - type["header_metadata"] = State.off; - ++counter; - } else if ((match(line, rgx.header_make)) - || (match(line, rgx.header_metadata)) - || (type["header_make"] == State.on - && (line_occur["header_make"] > State.off)) - || (type["header_metadata"] == State.on - && (line_occur["header_metadata"] > State.off))) { - header_extract(line, line_occur, an_object, type); - } else if (((line_occur["para"] == State.off) - && (line_occur["heading"] == State.off)) - && ((type["para"] == State.off) - && (type["heading"] == State.off))) { - /+ heading or para but neither flag nor line exists +/ - if ((to!string(dochead_make["make"]["headings"]).length > 2) - && (type["make_headings"] == State.off)) { - /+ heading found +/ - auto dochead_make_headings = - to!string(dochead_make["make"]["headings"]); - heading_found(line, dochead_make_headings, heading_match_str, heading_match_rgx, type); - } - if ((type["make_headings"] == State.on) - && ((line_occur["para"] == State.off) - && (line_occur["heading"] == State.off)) - && ((type["para"] == State.off) - && (type["heading"] == State.off))) { - /+ heading make set +/ - heading_make_set(line, line_occur, heading_match_rgx, type); - } - if (auto m = match(line, rgx.heading)) { - /+ heading match +/ - heading_match(line, line_occur, an_object, lv, collapsed_lev, type); - } else if (line_occur["para"] == State.off) { - /+ para match +/ - para_match(line, an_object, indent, bullet, type); - } - } else if (line_occur["header_make"] > State.off) { - /+ header_make +/ - // should be caught by sub-header - debug(header) { - tell_l("red", line); - } - an_object["obj"] ~= line ~= "\n"; - ++line_occur["header_make"]; - } else if (line_occur["header_metadata"] > State.off) { - /+ header_metadata +/ - // should be caught by sub-header - debug(header) { // para - tell_l("red", line); - } - an_object["obj"] ~= line ~= "\n"; - ++line_occur["header_metadata"]; - } else if (line_occur["heading"] > State.off) { - /+ heading +/ - debug(heading) { // heading - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; - ++line_occur["heading"]; - } else if (line_occur["para"] > State.off) { - /+ paragraph +/ - debug(para) { - tell_l("blue", line); - } - an_object["obj"] ~= line; - ++line_occur["para"]; - } - } - } else if (type["blocks"] == TriState.closing) { - /+ line empty, with blocks flag +/ - block_flag_line_empty(line, an_object, contents_the_objects, bookindex_unordered_hashes, obj_cite_number, node, counter, type, obj_cite_number_poem); // watch - } else { - /+ line empty +/ - /+ line.empty, post contents, empty variables: +/ - assert( - line.empty, - "line should be empty" - ); - assert( - (type["blocks"] == State.off), - "code block status: none" - ); - if ((type["header_make"] == State.on) - && (line_occur["header_make"] > State.off)) { - /+ header_make instructions (current line empty) +/ - auto dochead_metadata_and_make = - set_header.header_metadata_and_make_jsonstr(strip(an_object["obj"]), dochead_metadata, dochead_make); - static assert(!isTypeTuple!(dochead_metadata_and_make)); - dochead_metadata = dochead_metadata_and_make[0]; - dochead_make = dochead_metadata_and_make[1]; - header_set_common(line_occur, an_object, type); - processing.remove("verse"); - } else if ((type["header_metadata"] == State.on) - && (line_occur["header_metadata"] > State.off)) { - /+ header_metadata (current line empty) +/ - auto dochead_metadata_and_make = - set_header.header_metadata_and_make_jsonstr(strip(an_object["obj"]), dochead_metadata, dochead_make); - static assert(!isTypeTuple!(dochead_metadata_and_make)); - dochead_metadata = dochead_metadata_and_make[0]; - dochead_make = dochead_metadata_and_make[1]; - header_set_common(line_occur, an_object, type); - type["header_make"] = State.off; - type["header_metadata"] = State.off; - processing.remove("verse"); - } else if ((type["heading"] == State.on) - && (line_occur["heading"] > State.off)) { - /+ heading object (current line empty) +/ - obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; - bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); - an_object["is"] = "heading"; - node = - node_jstr_heading( - an_object["lev_markup_number"], - an_object["lev_collapsed_number"], - obj_cite_number, - counter, - heading_pointer, - an_object["is"] - ); // heading - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - ++heading_pointer; - contents_the_objects ~= - set_abstract_object.contents_heading( - an_object["substantive"], - an_object["attrib"], - obj_cite_number, - to!int(an_object["lev_markup_number"]), - to!int(an_object["lev_collapsed_number"]) - ); - // track previous heading and make assertions - debug(objectrelated1) { // check - tell_l("blue", line); - // writeln(an_object["obj"]); - // writeln(contents_am[counter]["obj_cite_number"], " ", contents_am[counter]["obj"]); - // writeln(m.hit, "\n"); - } - header_set_common(line_occur, an_object, type); - type["header_make"] = State.off; - type["header_metadata"] = State.off; - an_object.remove("lev"); - an_object.remove("lev_markup_number"); - // an_object["lev_markup_number"]="9"; - processing.remove("verse"); - ++counter; - } else if ((type["para"] == State.on) && (line_occur["para"] > State.off)) { - /+ paragraph object (current line empty) +/ - obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; - bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); - an_object["is"] = "para"; - node = - node_jstr( - content_non_header, - obj_cite_number, - counter, - heading_pointer-1, - an_object["is"] - ); - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - contents_the_objects ~= - set_abstract_object.contents_para( - an_object["is"], - an_object["substantive"], - an_object["attrib"], - obj_cite_number, - indent, - bullet - ); - // contents_the_objects ~= - // set_abstract_object.contents_para( - // an_object, - // obj_cite_number, - // indent, - // bullet - // ); - header_set_common(line_occur, an_object, type); - type["header_make"] = State.off; - type["header_metadata"] = State.off; - indent["first"] = "0"; - indent["second"] = "0"; - bullet = false; - processing.remove("verse"); - ++counter; - } else { - assert( - line == null, - "line variable should be empty, should not occur" - ); - // check what happens when paragraph separated by 2 newlines - } - } // close else for line empty - } // close else for not the above - } // close after non code, other blocks or regular text - if (((contents_the_objects[$-1].is_a == "para") - || (contents_the_objects[$-1].is_a == "heading")) - && (counter-1 > previous_count)) { - if (match(contents_the_objects[$-1].object, - rgx.inline_notes_delimiter_al_regular_number_note)) { - // endnotes/ footnotes for - // doc objects other than paragraphs & headings - // various forms of grouped text - previous_count=contents_the_objects.length -1; - note_section.gather_notes_for_endnote_section( - contents_the_objects, - contents_the_objects.length -1 - ); - // notes[notepoint]=note_section.notes_section(contents_the_objects, counter-1); - // notepoint +=1; - } - } - } /+ ← closed: loop markup document/text line by line +/ - - /+ ↓ post loop markup document/text +/ - debug(objectrelated2) { // check - tell_l("blue", line); - // writeln(__FILE__, ":", __LINE__); - // writeln(counter); - // // contents_am[0..counter] - // writeln(contents_am.length); - } - /+ - Backmatter: - * endnotes - * glossary - * references / bibliography - * book index - +/ - obj_im.obj_inline_markup("doc_end_reset", ""); - auto en_tuple = - note_section.endnote_objects(obj_cite_number); - static assert(!isTypeTuple!(en_tuple)); - auto endnotes_section = en_tuple[0]; - obj_cite_number = en_tuple[1]; - debug(endnotes) { - writefln( - "%s %s", - __LINE__, - endnotes_section.length - ); - foreach (n; endnotes_section) { - writeln(n); - } - } - auto biblio_unsorted_incomplete = biblio_arr_json.dup; - // destroy(biblio_arr_json); - auto biblio = Bibliography(); - auto biblio_ordered = - biblio.bibliography(biblio_unsorted_incomplete, bib_arr_json); - auto bi = BookIndexReportSection(); - auto bi_tuple = - bi.bookindex_build_section(bookindex_unordered_hashes, obj_cite_number); - static assert(!isTypeTuple!(bi_tuple)); - auto bookindex_section = bi_tuple[0]; - obj_cite_number = bi_tuple[1]; - debug(bookindex) { // bookindex - foreach (bi_entry; bookindex_section) { - writeln(bi_entry["obj"]); - } - } - auto document_the = - contents_the_objects ~ endnotes_section ~ bookindex_section; - debug(heading) { // heading - string spc; - foreach (o; document_the) { - if (o["is"] == "heading") { - switch (o["lev_markup_number"]) { - case "0": - // case to!string(DocStructMarkupHeading.h_sect_A): - spc=""; - break; - case "1": - // case to!string(DocStructMarkupHeading.h_sect_B): - spc=" "; - break; - case "2": - // case to!string(DocStructMarkupHeading.h_sect_C): - spc=" "; - break; - case "3": - // case to!string(DocStructMarkupHeading.h_sect_D): - spc=" "; - break; - case "4": - // case to!string(DocStructMarkupHeading.h_text_1): - spc=" "; - break; - case "5": - // case to!string(DocStructMarkupHeading.h_text_2): - spc=" "; - break; - case "6": - // case to!string(DocStructMarkupHeading.h_text_3): - spc=" "; - break; - case "7": - // case to!string(DocStructMarkupHeading.h_text_4): - spc=" "; - break; - case "8": - // case to!string(DocStructMarkupHeading.h_text_5): - spc=" "; - break; - default: - spc=""; - break; - } - // writeln( - // spc, "* ", " ", - // o - // ); - writefln( - "%s* $s\n %s", - spc, - strip(o["obj"]), - o["attrib"] - ); - // writeln(spc, "* ", to!string(o["lev_collapsed_number"]), " ", strip(o["obj"])); - // tell_l("yellow", spc, strip(o["obj"])); - } - } - } - destroy(contents_the_objects); - destroy(endnotes_section); - destroy(bookindex_section); - // struct Document { - // char content; - // char head_make; - // char head_metadata; - // char bookindex_section; - // char biblio; - // } - // struct Document { - // char content; - // char head_make; - // char head_metadata; - // char bookindex_section; - // char biblio; - // } - auto t = - tuple( - document_the, - dochead_make, - dochead_metadata, - bookindex_unordered_hashes, - biblio_ordered - ); - return t; - /+ post loop markup document/text ↑ +/ - - } /+ ← closed: abstract doc source +/ - - /+ ↓ abstraction functions +/ - auto object_reset(ref string[string] an_object) { - an_object.remove("obj"); - an_object.remove("substantive"); - an_object.remove("is"); - an_object.remove("attrib"); - an_object.remove("bookindex"); - } - auto header_set_common( - ref int[string] line_occur, - ref string[string] an_object, - ref int[string] type - ) { - // line_occur["header"] = State.off; - line_occur["header_make"] = State.off; - line_occur["header_metadata"] = State.off; - line_occur["heading"] = State.off; - line_occur["para"]= State.off; - type["header"] = State.off; - // type["header_make"] = State.off; - // type["header_metadata"] = State.off; - type["heading"] = State.off; - type["para"] = State.off; - object_reset(an_object); - } - auto check_obj_cite_number_status(char[] line, ref int[string] type) { - if ((!line.empty) && (type["obj_cite_number_status_multi_obj"] == TriState.off)) { - /+ not multi-line object, check whether obj_cite_number is on or turned off +/ - if (match(line, rgx.obj_cite_number_block_marks)) { - /+ switch off obj_cite_number +/ - if (match(line, rgx.obj_cite_number_off_block)) { - type["obj_cite_number_status_multi_obj"] = TriState.on; - debug(ocnoff) { - tell_l("fuchsia", line); - } - } - if (match(line, rgx.obj_cite_number_off_block_dh)) { - type["obj_cite_number_status_multi_obj"] = TriState.closing; - debug(ocnoff) { - tell_l("fuchsia", line); - } - } - } else { - if (type["obj_cite_number_status_multi_obj"] == TriState.off) { - if (match(line, rgx.obj_cite_number_off)) { - type["obj_cite_number_status"] = TriState.on; - } else if (match(line, rgx.obj_cite_number_off_dh)) { - type["obj_cite_number_status"] = TriState.closing; - } else { - // type["obj_cite_number_status"] = TriState.closing; - type["obj_cite_number_status"] = TriState.off; - } - } else { - type["obj_cite_number_status"] = - type["obj_cite_number_status_multi_obj"]; - } - } - } else if ((!line.empty) && (type["obj_cite_number_status_multi_obj"] > TriState.off)) { - if (auto m = match(line, rgx.obj_cite_number_off_block_close)) { - type["obj_cite_number_status_multi_obj"] = TriState.off; - type["obj_cite_number_status"] = TriState.off; - debug(ocnoff) { - tell_l("green", line); - } - } - } - return 0; - } - auto start_block( - char[] line, - ref int[string] type, - string[string] obj_cite_number_poem - ) { - if (match(line, rgx.block_curly_code_open)) { - /+ curly code open +/ - debug(code) { // code (curly) open - writefln( - "%s* [code curly] %s%s", - scr_txt_color["blue"], - scr_txt_color["off"], - line - ); - } - type["blocks"] = TriState.on; - type["code"] = TriState.on; - type["curly_code"] = TriState.on; - } else if (match(line, rgx.block_curly_poem_open)) { - /+ curly poem open +/ - debug(poem) { // poem (curly) open - writefln( - "%s* [poem curly] %s%s", - scr_txt_color["red"], - scr_txt_color["off"], - line - ); - } - obj_cite_number_poem["start"] = - to!string(obj_cite_number); - type["blocks"] = TriState.on; - type["verse_new"] = State.on; - type["poem"] = TriState.on; - type["curly_poem"] = TriState.on; - } else if (match(line, rgx.block_curly_group_open)) { - /+ curly group open +/ - debug(group) { // group (curly) open - writefln( - "%s* [group curly] %s%s", - scr_txt_color["blue"], - scr_txt_color["off"], - line - ); - } - type["blocks"] = TriState.on; - type["group"] = TriState.on; - type["curly_group"] = TriState.on; - } else if (match(line, rgx.block_curly_block_open)) { - /+ curly block open +/ - debug(block) { // block (curly) open - writefln( - "%s* [block curly] %s%s", - scr_txt_color["blue"], - scr_txt_color["off"], - line - ); - } - type["blocks"] = TriState.on; - type["block"] = TriState.on; - type["curly_block"] = TriState.on; - } else if (match(line, rgx.block_curly_quote_open)) { - /+ curly quote open +/ - debug(quote) { // quote (curly) open - writefln( - "%s* [quote curly] %s%s", - scr_txt_color["blue"], - scr_txt_color["off"], - line - ); - } - type["blocks"] = TriState.on; - type["quote"] = TriState.on; - type["curly_quote"] = TriState.on; - } else if (match(line, rgx.block_curly_table_open)) { - /+ curly table open +/ - debug(table) { // table (curly) open - writefln( - "%s* [table curly] %s%s", - scr_txt_color["blue"], - scr_txt_color["off"], - line - ); - } - type["blocks"] = TriState.on; - type["table"] = TriState.on; - type["curly_table"] = TriState.on; - } else if (match(line, rgx.block_tic_code_open)) { - /+ tic code open +/ - debug(code) { // code (tic) open - writefln( - "%s* [code tic] %s%s", - scr_txt_color["blue"], - scr_txt_color["off"], - line - ); - } - type["blocks"] = TriState.on; - type["code"] = TriState.on; - type["tic_code"] = TriState.on; - } else if (match(line, rgx.block_tic_poem_open)) { - /+ tic poem open +/ - debug(poem) { // poem (tic) open - writefln( - "%s* [poem tic] %s%s", - scr_txt_color["red"], - scr_txt_color["off"], - line - ); - } - obj_cite_number_poem["start"] = to!string(obj_cite_number); - type["blocks"] = TriState.on; - type["verse_new"] = State.on; - type["poem"] = TriState.on; - type["tic_poem"] = TriState.on; - } else if (match(line, rgx.block_tic_group_open)) { - /+ tic group open +/ - debug(group) { // group (tic) open - writefln( - "%s* [group tic] %s%s", - scr_txt_color["blue"], - scr_txt_color["off"], - line - ); - } - type["blocks"] = TriState.on; - type["group"] = TriState.on; - type["tic_group"] = TriState.on; - } else if (match(line, rgx.block_tic_block_open)) { - /+ tic block open +/ - debug(block) { // block (tic) open - writefln( - "%s* [block tic] %s%s", - scr_txt_color["blue"], - scr_txt_color["off"], - line - ); - } - type["blocks"] = TriState.on; - type["block"] = TriState.on; - type["tic_block"] = TriState.on; - } else if (match(line, rgx.block_tic_quote_open)) { - /+ tic quote open +/ - debug(quote) { // quote (tic) open - writefln( - "%s* [quote tic] %s%s", - scr_txt_color["blue"], - scr_txt_color["off"], - line - ); - } - type["blocks"] = TriState.on; - type["quote"] = TriState.on; - type["tic_quote"] = TriState.on; - } else if (match(line, rgx.block_tic_table_open)) { - /+ tic table open +/ - debug(table) { // table (tic) open - writefln( - "%s* [table tic] %s%s", - scr_txt_color["blue"], - scr_txt_color["off"], - line - ); - } - type["blocks"] = TriState.on; - type["table"] = TriState.on; - type["tic_table"] = TriState.on; - } - return 0; - } - auto code_block( - char[] line, - ref string[string] an_object, - ref int[string] type - ) { - if (type["curly_code"] == TriState.on) { - if (auto m = match(line, rgx.block_curly_code_close)) { - debug(code) { // code (curly) close - tell_l("blue", line); - } - type["blocks"] = TriState.closing; - type["code"] = TriState.closing; - type["curly_code"] = TriState.off; - } else { - debug(code) { // code (curly) line - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; // code (curly) line - } - } else if (type["tic_code"] == TriState.on) { - if (auto m = match(line, rgx.block_tic_close)) { - debug(code) { // code (tic) close - tell_l("blue", line); - } - type["blocks"] = TriState.closing; - type["code"] = TriState.closing; - type["tic_code"] = TriState.off; - } else { - debug(code) { // code (tic) line - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; // code (tic) line - } - } - return 0; - } - final string biblio_tag_map(string abr) { - auto btm = [ - "au" : "author_raw", - "ed" : "editor_raw", - "ti" : "fulltitle", - "lng" : "language", - "jo" : "journal", - "vol" : "volume", - "edn" : "edition", - "yr" : "year", - "pl" : "place", - "pb" : "publisher", - "pub" : "publisher", - "pg" : "pages", - "pgs" : "pages", - "sn" : "short_name" - ]; - return btm[abr]; - } - auto biblio_block( - char[] line, - ref int[string] type, - ref int bib_entry, - ref string[] biblio_arr_json - ) { - if (match(line, rgx.heading_biblio)) { - type["heading_biblio"] = TriState.on; - } - if (empty(line) && (bib_entry == TriState.off)) { - biblio_arr_json ~= biblio_entry_tags_jsonstr; - bib_entry = TriState.on; - } - debug(biblio) { - writefln( - "%s * %s %s", - scr_txt_color["yellow"], - scr_txt_color["off"], - line - ); - } - if (match(line, rgx.biblio_tags)) { - auto bt = match(line, rgx.biblio_tags); - bib_entry = 0; - st=to!string(bt.captures[1]); - biblio_tag_entry=to!string(bt.captures[2]); - JSONValue j = parseJSON(biblio_arr_json[$-1]); - biblio_tag_name = (match(st, rgx.biblio_abbreviations)) - ? (biblio_tag_map(st)) - : st; - j.object[biblio_tag_name] = biblio_tag_entry; - auto header_tag_value=to!string(bt.captures[2]); - switch (biblio_tag_name) { - case "author_raw": // author_arr author (fn sn) - j["author_arr"] = - split(header_tag_value, rgx.arr_delimiter); - string tmp; - biblioAuthorLoop: - foreach (au; j["author_arr"].array) { - if (auto x = match(au.str, rgx.name_delimiter)) { - tmp ~= x.captures[2] ~ " " ~ x.captures[1] ~ ", "; - } else { - tmp ~= au.str; - } - } - tmp = replace(tmp, rgx.trailing_comma, ""); - // tmp = replace(tmp, regex(r"(,[ ]*)$","g"), ""); - j["author"].str = tmp; - break; - case "editor_raw": // editor_arr editor (fn sn) - j["editor_arr"] = - split(header_tag_value, rgx.arr_delimiter); - string tmp; - biblioEditorLoop: - foreach (ed; j["editor_arr"].array) { - if (auto x = match(ed.str, rgx.name_delimiter)) { - tmp ~= x.captures[2] ~ " " ~ x.captures[1] ~ ", "; - } else { - tmp ~= ed.str; - } - } - tmp = replace(tmp, rgx.trailing_comma, ""); - // tmp = replace(tmp, regex(r"(,[ ]*)$","g"), ""); - j["editor"].str = tmp; - break; - case "fulltitle": // title & subtitle - break; - default: - break; - } - // header_tag_value=""; - auto s = to!string(j); - s = j.toString(); - debug(biblio) { - writefln( - "%s* %s%s: %s\n%s", - scr_txt_color["red"], - scr_txt_color["off"], - biblio_tag_name, - biblio_tag_entry, - j[biblio_tag_name] - ); - } - biblio_arr_json ~= s; - biblio_tag_entry=""; - } - return 0; - } - auto poem_block( - char[] line, - ref string[string] an_object, - ref int[string] type, - ref long counter, - string[string] obj_cite_number_poem - ) { - if (type["curly_poem"] == TriState.on) { - if (auto m = match(line, rgx.block_curly_poem_close)) { - an_object["obj"]="verse"; // check that this is as you please - debug(poem) { // poem (curly) close - writefln( - "%s* [poem curly] %s%s", - scr_txt_color["red"], - scr_txt_color["off"], - line - ); - } - if (processing.length > 0) { - an_object["obj"] = processing["verse"]; - } - debug(poem) { // poem (curly) close - writeln(__LINE__); - writefln( - "%s%s %s", - scr_txt_marker["fuchsia"], - obj_cite_number, - line - ); - // writeln(an_object.keys); - // writeln(an_object.length); - } - if (an_object.length > 0) { - debug(poem) { // poem (curly) close - tell_lo( - "fuchsia", - obj_cite_number, - an_object["obj"] - ); - } - an_object["is"] = "verse"; - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - contents_the_objects ~= - set_abstract_object.contents_block( - an_object["is"], - an_object["substantive"], - an_object["attrib"], - obj_cite_number - ); - object_reset(an_object); - processing.remove("verse"); - ++counter; - } - obj_cite_number_poem["end"] = - to!string(obj_cite_number); - type["blocks"] = TriState.closing; - type["poem"] = TriState.closing; - type["curly_poem"] = TriState.off; - } else { - processing["verse"] ~= line ~= "\n"; - if (type["verse_new"] == State.on) { - obj_cite_number = - obj_cite_number_emit(type["obj_cite_number_status"]); - type["verse_new"] = State.off; - } else if (match(line, rgx.line_delimiter_only)) { - verse_line = TriState.off; - type["verse_new"] = State.on; - } - if (type["verse_new"] == State.on) { - verse_line=1; - an_object["obj"] = processing["verse"]; - debug(poem) { // poem verse - writefln( - "%s%s curly\n%s", - scr_txt_marker["green"], - obj_cite_number, - an_object["obj"] - ); - } - processing.remove("verse"); - an_object["is"] = "verse"; - node = node_jstr( - content_non_header, - obj_cite_number, - counter, - heading_pointer-1, - an_object["is"] - ); - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - contents_the_objects ~= - set_abstract_object.contents_block( - an_object["is"], - an_object["substantive"], - an_object["attrib"], - obj_cite_number - ); - object_reset(an_object); - processing.remove("verse"); - ++counter; - } - } - } else if (type["tic_poem"] == TriState.on) { - if (auto m = match(line, rgx.block_tic_close)) { // tic_poem_close - an_object["obj"]="verse"; // check that this is as you please - debug(poem) { // poem (curly) close - writefln( - "%s* [poem tic] %s%s", - scr_txt_color["red"], - scr_txt_color["off"], - line - ); - } - if (processing.length > 0) { // needs looking at - an_object["obj"] = processing["verse"]; - } - if (an_object.length > 0) { - debug(poem) { // poem (tic) close - writeln(__LINE__); - tell_lo("fuchsia", obj_cite_number, line); - } - processing.remove("verse"); - an_object["is"] = "verse"; - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - contents_the_objects ~= - set_abstract_object.contents_block( - an_object["is"], - an_object["substantive"], - an_object["attrib"], - obj_cite_number - ); - obj_cite_number_poem["end"] = to!string(obj_cite_number); - object_reset(an_object); - processing.remove("verse"); - ++counter; - } - type["blocks"] = TriState.closing; - type["poem"] = TriState.closing; - type["tic_poem"] = TriState.off; - } else { - processing["verse"] ~= line ~= "\n"; - if (type["verse_new"] == State.on) { - obj_cite_number = - obj_cite_number_emit(type["obj_cite_number_status"]); - type["verse_new"] = State.off; - } else if (match(line, rgx.line_delimiter_only)) { - type["verse_new"] = State.on; - verse_line = TriState.off; - } - if (type["verse_new"] == State.on) { - verse_line=1; - an_object["obj"] = processing["verse"]; - debug(poem) { // poem (tic) close - writefln( - "%s%s tic\n%s", - scr_txt_marker["green"], - obj_cite_number, - an_object["obj"] - ); - } - processing.remove("verse"); - an_object["is"] = "verse"; - node = - node_jstr( - content_non_header, - obj_cite_number, - counter, - heading_pointer-1, - an_object["is"] - ); - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - contents_the_objects ~= - set_abstract_object.contents_block( - an_object["is"], - an_object["substantive"], - an_object["attrib"], - obj_cite_number - ); - object_reset(an_object); - processing.remove("verse"); - ++counter; - } - } - } - return 0; - } - auto group_block( - char[] line, - ref string[string] an_object, - ref int[string] type - ) { - if (type["curly_group"] == State.on) { - if (match(line, rgx.block_curly_group_close)) { - debug(group) { // group (curly) close - tell_l("blue", line); - } - type["blocks"] = TriState.closing; - type["group"] = TriState.closing; - type["curly_group"] = TriState.off; - } else { - debug(group) { // group - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; // build group array (or string) - } - } else if (type["tic_group"] == TriState.on) { - if (match(line, rgx.block_tic_close)) { - debug(group) { // group (tic) close - tell_l("blue", line); - } - type["blocks"] = TriState.closing; - type["group"] = TriState.closing; - type["tic_group"] = TriState.off; - } else { - debug(group) { // group - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; // build group array (or string) - } - } - return 0; - } - auto block_block( - char[] line, - ref string[string] an_object, - ref int[string] type - ) { - if (type["curly_block"] == TriState.on) { - if (match(line, rgx.block_curly_block_close)) { - debug(block) { // block (curly) close - tell_l("blue", line); - } - type["blocks"] = TriState.closing; - type["block"] = TriState.closing; - type["curly_block"] = TriState.off; - } else { - debug(block) { // block - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; // build block array (or string) - } - } else if (type["tic_block"] == TriState.on) { - if (match(line, rgx.block_tic_close)) { - debug(block) { // block (tic) close - tell_l("blue", line); - } - type["blocks"] = TriState.closing; - type["block"] = TriState.closing; - type["tic_block"] = TriState.off; - } else { - debug(block) { // block - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; // build block array (or string) - } - } - return 0; - } - auto quote_block(char[] line, ref string[string] an_object, ref int[string] type) { - if (type["curly_quote"] == TriState.on) { - if (match(line, rgx.block_curly_quote_close)) { - debug(quote) { // quote (curly) close - tell_l("blue", line); - } - type["blocks"] = TriState.closing; - type["quote"] = TriState.closing; - type["curly_quote"] = TriState.off; - } else { - debug(quote) { // quote - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; // build quote array (or string) - } - } else if (type["tic_quote"] == TriState.on) { - if (match(line, rgx.block_tic_close)) { - debug(quote) { // quote (tic) close - tell_l("blue", line); - } - type["blocks"] = TriState.closing; - type["quote"] = TriState.closing; - type["tic_quote"] = TriState.off; - } else { - debug(quote) { // quote - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; // build quote array (or string) - } - } - return 0; - } - auto table_block(char[] line, ref string[string] an_object, ref int[string] type) { - if (type["curly_table"] == TriState.on) { - if (match(line, rgx.block_curly_table_close)) { - debug(table) { // table (curly) close - tell_l("blue", line); - } - type["blocks"] = TriState.closing; - type["table"] = TriState.closing; - type["curly_table"] = TriState.off; - } else { - debug(table) { // table - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; // build table array (or string) - } - } else if (type["tic_table"] == TriState.on) { - if (match(line, rgx.block_tic_close)) { - debug(table) { // table (tic) close - tell_l("blue", line); - } - type["blocks"] = TriState.closing; - type["table"] = TriState.closing; - type["tic_table"] = TriState.off; - } else { - debug(table) { // table - tell_l("blue", line); - } - an_object["obj"] ~= line ~= "\n"; // build table array (or string) - } - } - return 0; - } - auto block_flag_line_empty( - char[] line, - ref string[string] an_object, - ref ObjComposite[] contents_the_objects, - ref string[][string][string] bookindex_unordered_hashes, - ref int obj_cite_number, - ref string node, - ref long counter, - ref int[string] type, - string[string] obj_cite_number_poem - ) { - // line.empty, post contents, empty variables --------------- - assert( - line.empty, - "line should be empty" - ); - assert( - (type["blocks"] == TriState.closing), - "code block status: closed" - ); - assertions_flag_types_block_status_none_or_closed(type); - if (type["code"] == TriState.closing) { - obj_cite_number = - obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; - bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); - an_object["is"] = "code"; - node = - node_jstr( - content_non_header, - obj_cite_number, - counter, - heading_pointer-1, - an_object["is"] - ); - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - contents_the_objects ~= - set_abstract_object.contents_block( - an_object["is"], - an_object["substantive"], - an_object["attrib"], - obj_cite_number - ); - object_reset(an_object); - processing.remove("verse"); - ++counter; - type["blocks"] = TriState.off; - type["code"] = TriState.off; - } else if (type["poem"] == TriState.closing) { - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; - bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); - // obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["is"] = "verse"; // check also - node = - node_jstr( - content_non_header, - obj_cite_number, - counter, - heading_pointer-1, - an_object["is"] - // "verse" - ); - contents_the_objects ~= - set_abstract_object.contents_block_obj_cite_number_string( - "poem", - "", - (obj_cite_number_poem["start"], obj_cite_number_poem["end"]), - node - ); // bookindex - object_reset(an_object); - processing.remove("verse"); - // ++obj_cite_number; - type["blocks"] = TriState.off; - type["poem"] = TriState.off; - } else if (type["table"] == TriState.closing) { - obj_cite_number = - obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; - bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); - an_object["is"] = "table"; - node = - node_jstr( - content_non_header, - obj_cite_number, - counter, - heading_pointer-1, - an_object["is"] - ); - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - contents_the_objects ~= - set_abstract_object.contents_block( - an_object["is"], - an_object["substantive"], - an_object["attrib"], - obj_cite_number - ); - object_reset(an_object); - processing.remove("verse"); - ++counter; - type["blocks"] = TriState.off; - type["table"] = TriState.off; - } else if (type["group"] == TriState.closing) { - obj_cite_number = - obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; - bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); - an_object["is"] = "group"; - node = - node_jstr( - content_non_header, - obj_cite_number, - counter, - heading_pointer-1, - an_object["is"] - ); - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - contents_the_objects ~= - set_abstract_object.contents_block( - an_object["is"], - an_object["substantive"], - an_object["attrib"], - obj_cite_number - ); - object_reset(an_object); - processing.remove("verse"); - ++counter; - type["blocks"] = TriState.off; - type["group"] = TriState.off; - } else if (type["block"] == TriState.closing) { - obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; - bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); - an_object["is"] = "block"; - node = - node_jstr( - content_non_header, - obj_cite_number, - counter, - heading_pointer-1, - an_object["is"] - ); - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - contents_the_objects ~= - set_abstract_object.contents_block( - an_object["is"], - an_object["substantive"], - an_object["attrib"], - obj_cite_number - ); - object_reset(an_object); - processing.remove("verse"); - ++counter; - type["blocks"] = TriState.off; - type["block"] = TriState.off; - } else if (type["quote"] == TriState.closing) { - obj_cite_number = - obj_cite_number_emit(type["obj_cite_number_status"]); - an_object["bookindex"] = - ("bookindex" in an_object) ? an_object["bookindex"] : ""; - bookindex_unordered_hashes = - bkidx_hash(an_object["bookindex"], obj_cite_number); - an_object["is"] = "quote"; - node = - node_jstr( - content_non_header, - obj_cite_number, - counter, - heading_pointer-1, - an_object["is"] - ); - an_object["substantive"] = - obj_im.obj_inline_markup(an_object["is"], an_object["obj"]); - an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); - contents_the_objects ~= - set_abstract_object.contents_block( - an_object["is"], - an_object["substantive"], - an_object["attrib"], - obj_cite_number - ); - object_reset(an_object); - processing.remove("verse"); - ++counter; - type["blocks"] = TriState.off; - type["quote"] = TriState.off; - } - return 0; - } - auto book_index( - char[] line, - ref string book_idx_tmp, - ref string[string] an_object, - ref int[string] type - ) { - if (auto m = match(line, rgx.book_index)) { - /+ match book_index +/ - debug(bookindexmatch) { // book index - writefln( - "%s* [bookindex] %s%s\n", - scr_txt_color["blue"], - scr_txt_color["off"], - to!string(m.captures[1]), - ); - // writeln(scr_txt_marker["blue"], to!string(m.captures[1]), "\n"); - } - an_object["bookindex"] = to!string(m.captures[1]); - } else if (auto m = match(line, rgx.book_index_open)) { - /+ match open book_index +/ - type["book_index"] = State.on; - book_idx_tmp = to!string(m.captures[1]); - debug(bookindexmatch) { // book index - writefln( - "%s* [bookindex] %s%s\n", - scr_txt_color["blue"], - scr_txt_color["off"], - book_idx_tmp, - ); - // writeln(scr_txt_marker["blue"], book_idx_tmp, "\n"); - } - } else if (type["book_index"] == State.on ) { - /+ book_index flag set +/ - if (auto m = match(line, rgx.book_index_close)) { - type["book_index"] = State.off; - an_object["bookindex"] = book_idx_tmp ~ to!string(m.captures[1]); - debug(bookindexmatch) { // book index - writefln( - "%s* [bookindex] %s%s\n", - scr_txt_color["blue"], - scr_txt_color["off"], - book_idx_tmp, - ); - // writeln(scr_txt_marker["blue"], book_idx_tmp, "\n"); - } - book_idx_tmp = ""; - } else { - book_idx_tmp ~= line; - } - } - } - auto header_extract( - char[] line, - ref int[string] line_occur, - ref string[string] an_object, - ref int[string] type - ) { - if (auto m = match(line, rgx.header_make)) { - /+ matched header_make +/ - debug(header1) { // header - tell_l("yellow", line); - } - type["header"] = State.on; - type["header_make"] = State.on; - type["header_metadata"] = State.off; - type["heading"] = State.off; - type["para"] = State.off; - ++line_occur["header_make"]; - an_object["obj"] ~= line ~= "\n"; - } else if (auto m = match(line, rgx.header_metadata)) { - /+ matched header_metadata +/ - debug(header1) { // header - tell_l("yellow", line); - } - type["header"] = State.on; - type["header_make"] = State.off; - type["header_metadata"] = State.on; - type["heading"] = State.off; - type["para"] = State.off; - ++line_occur["header_metadata"]; - an_object["obj"] ~= line ~= "\n"; - } else if (type["header_make"] == State.on - && (line_occur["header_make"] > State.off)) { - /+ header_make flag set +/ - if (auto m = match(line, rgx.header_sub)) { - /+ sub-header +/ - debug(header1) { - tell_l("yellow", line); - } - // type["header"] = State.on; - ++line_occur["header_make"]; - an_object["obj"] ~= line ~= "\n"; - } - } else if (type["header_metadata"] == State.on - && (line_occur["header_metadata"] > State.off)) { - /+ header_metadata flag set +/ - if (auto m = match(line, rgx.header_sub)) { - /+ sub-header +/ - debug(header1) { - tell_l("yellow", line); - } - ++line_occur["header_metadata"]; - an_object["obj"] ~= line ~= "\n"; - } - } - return 0; - } - auto heading_found( - char[] line, - string dochead_make_headings, - ref string[string] heading_match_str, - ref Regex!(char)[string] heading_match_rgx, - ref int[string] type - ) { - if ((to!string(dochead_make_headings).length > 2) - && (type["make_headings"] == State.off)) { - /+ headings found +/ - debug(headingsfound) { - writeln(dochead_make_headings); - } - auto make_headings_txt = - match( - to!string(dochead_make_headings), - rgx.within_quotes); - char[][] make_headings_spl = - split( - cast(char[]) make_headings_txt.captures[1], - rgx.make_heading_delimiter); - debug(headingsfound) { - writeln(make_headings_spl.length); - writeln(make_headings_spl); - } - switch (make_headings_spl.length) { - case 7 : - if (!empty(make_headings_spl[6])) { - heading_match_str["h_4"] = - "^(" ~ to!string(make_headings_spl[6]) ~ ")"; - heading_match_rgx["h_4"] = - regex(heading_match_str["h_4"]); - } - goto case; - case 6 : - if (!empty(make_headings_spl[5])) { - heading_match_str["h_3"] = - "^(" ~ to!string(make_headings_spl[5]) ~ ")"; - heading_match_rgx["h_3"] = - regex(heading_match_str["h_3"]); - } - goto case; - case 5 : - if (!empty(make_headings_spl[4])) { - heading_match_str["h_2"] = - "^(" ~ to!string(make_headings_spl[4]) ~ ")"; - heading_match_rgx["h_2"] = - regex(heading_match_str["h_2"]); - } - goto case; - case 4 : - if (!empty(make_headings_spl[3])) { - heading_match_str["h_1"] = - "^(" ~ to!string(make_headings_spl[3]) ~ ")"; - heading_match_rgx["h_1"] = - regex(heading_match_str["h_1"]); - } - goto case; - case 3 : - if (!empty(make_headings_spl[2])) { - heading_match_str["h_D"] = - "^(" ~ to!string(make_headings_spl[2]) ~ ")"; - heading_match_rgx["h_D"] = - regex(heading_match_str["h_D"]); - } - goto case; - case 2 : - if (!empty(make_headings_spl[1])) { - heading_match_str["h_C"] = - "^(" ~ to!string(make_headings_spl[1]) ~ ")"; - heading_match_rgx["h_C"] = - regex(heading_match_str["h_C"]); - } - goto case; - case 1 : - if (!empty(make_headings_spl[0])) { - heading_match_str["h_B"] = - "^(" ~ to!string(make_headings_spl[0]) ~ ")"; - heading_match_rgx["h_B"] = - regex(heading_match_str["h_B"]); - } - break; - default: - break; - } - type["make_headings"] = State.on; - } - } - auto heading_make_set( - ref char[] line, - ref int[string] line_occur, - ref Regex!(char)[string] heading_match_rgx, - ref int[string] type - ) { - if ((type["make_headings"] == State.on) - && ((line_occur["para"] == State.off) - && (line_occur["heading"] == State.off)) - && ((type["para"] == State.off) - && (type["heading"] == State.off))) { - /+ heading make set +/ - if (match(line, heading_match_rgx["h_B"])) { - line = "B~ " ~ line; - debug(headingsfound) { - writeln(line); - } - } - if (match(line, heading_match_rgx["h_C"])) { - line = "C~ " ~ line; - debug(headingsfound) { - writeln(line); - } - } - if (match(line, heading_match_rgx["h_D"])) { - line = "D~ " ~ line; - debug(headingsfound) { - writeln(line); - } - } - if (match(line, heading_match_rgx["h_1"])) { - line = "1~ " ~ line; - debug(headingsfound) { - writeln(line); - } - } - if (match(line, heading_match_rgx["h_2"])) { - line = "2~ " ~ line; - debug(headingsfound) { - writeln(line); - } - } - if (match(line, heading_match_rgx["h_3"])) { - line = "3~ " ~ line; - debug(headingsfound) { - writeln(line); - } - } - if (match(line, heading_match_rgx["h_4"])) { - line = "4~ " ~ line; - debug(headingsfound) { - writeln(line); - } - } - } - } - auto heading_match( - char[] line, - ref int[string] line_occur, - ref string[string] an_object, - ref int[string] lv, - ref int[string] collapsed_lev, - ref int[string] type - ) { - if (auto m = match(line, rgx.heading)) { - /+ heading match +/ - type["heading"] = State.on; - type["header"] = State.off; - type["header_make"] = State.off; - type["header_metadata"] = State.off; - type["heading_biblio"] = State.off; - type["para"] = State.off; - ++line_occur["heading"]; - an_object["obj"] ~= line ~= "\n"; - an_object["lev"] ~= m.captures[1]; - assertions_doc_structure(an_object, lv); // includes most of the logic for collapsed levels - switch (an_object["lev"]) { - case "A": - collapsed_lev["h0"] = 1; - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h0"]); - lv["lv"] = DocStructMarkupHeading.h_sect_A; - ++lv["h0"]; - lv["h1"] = State.off; - lv["h2"] = State.off; - lv["h3"] = State.off; - lv["h4"] = State.off; - lv["h5"] = State.off; - lv["h6"] = State.off; - lv["h7"] = State.off; - goto default; - case "B": - collapsed_lev["h1"] = collapsed_lev["h0"] + 1; - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h1"]); - lv["lv"] = DocStructMarkupHeading.h_sect_B; - ++lv["h1"]; - lv["h2"] = State.off; - lv["h3"] = State.off; - lv["h4"] = State.off; - lv["h5"] = State.off; - lv["h6"] = State.off; - lv["h7"] = State.off; - goto default; - case "C": - collapsed_lev["h2"] = collapsed_lev["h1"] + 1; - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h2"]); - lv["lv"] = DocStructMarkupHeading.h_sect_C; - ++lv["h2"]; - lv["h3"] = State.off; - lv["h4"] = State.off; - lv["h5"] = State.off; - lv["h6"] = State.off; - lv["h7"] = State.off; - goto default; - case "D": - collapsed_lev["h3"] = collapsed_lev["h2"] + 1; - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h3"]); - lv["lv"] = DocStructMarkupHeading.h_sect_D; - ++lv["h3"]; - lv["h4"] = State.off; - lv["h5"] = State.off; - lv["h6"] = State.off; - lv["h7"] = State.off; - goto default; - case "1": - if (lv["h3"] > State.off) { - collapsed_lev["h4"] = collapsed_lev["h3"] + 1; - } else if (lv["h2"] > State.off) { - collapsed_lev["h4"] = collapsed_lev["h2"] + 1; - } else if (lv["h1"] > State.off) { - collapsed_lev["h4"] = collapsed_lev["h1"] + 1; - } else if (lv["h0"] > State.off) { - collapsed_lev["h4"] = collapsed_lev["h0"] + 1; - } - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h4"]); - lv["lv"] = DocStructMarkupHeading.h_text_1; - ++lv["h4"]; - lv["h5"] = State.off; - lv["h6"] = State.off; - lv["h7"] = State.off; - goto default; - case "2": - if (lv["h5"] > State.off) { - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h5"]); - } else if (lv["h4"] > State.off) { - collapsed_lev["h5"] = collapsed_lev["h4"] + 1; - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h5"]); - } - lv["lv"] = DocStructMarkupHeading.h_text_2; - ++lv["h5"]; - lv["h6"] = State.off; - lv["h7"] = State.off; - goto default; - case "3": - if (lv["h6"] > State.off) { - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h6"]); - } else if (lv["h5"] > State.off) { - collapsed_lev["h6"] = collapsed_lev["h5"] + 1; - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h6"]); - } - lv["lv"] = DocStructMarkupHeading.h_text_3; - ++lv["h6"]; - lv["h7"] = State.off; - goto default; - case "4": - if (lv["h7"] > State.off) { - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h7"]); - } else if (lv["h6"] > State.off) { - collapsed_lev["h7"] = collapsed_lev["h6"] + 1; - an_object["lev_collapsed_number"] = - to!string(collapsed_lev["h7"]); - } - lv["lv"] = DocStructMarkupHeading.h_text_4; - ++lv["h7"]; - goto default; - default: - an_object["lev_markup_number"] = to!string(lv["lv"]); - } - debug(heading) { // heading - // writeln(m.captures[1], " ", m.captures[2], "\n"); // figure inclusion of post capture text - // writeln(m.hit, "\n"); - tell_l("yellow", strip(line)); - } - } - } - auto para_match( - char[] line, - ref string[string] an_object, - ref string[string] indent, - ref bool bullet, - ref int[string] type - ) { - if (line_occur["para"] == State.off) { - /+ para matches +/ - // paragraphs - // (fl ag_type["heading"] = true) && - if (auto m = match(line, rgx.para_indent)) { - debug(paraindent) { // para indent - tell_l("blue", line); - } - type["para"] = State.on; - an_object["obj"] ~= line ~= "\n"; - indent["first"] = to!string(m.captures[1]); - indent["second"] = "0"; - bullet = false; - } else if (auto m = match(line, rgx.para_bullet)) { - debug(parabullet) { // para bullet - tell_l("blue", line); - } - type["para"] = State.on; - an_object["obj"] ~= line; - indent["first"] = "0"; - indent["second"] = "0"; - bullet = true; - } else if (auto m = match(line, rgx.para_indent_hang)) { - debug(paraindenthang) { // para indent hang - tell_l("blue", line); - } - type["para"] = State.on; - an_object["obj"] ~= line; - indent["first"] = to!string(m.captures[1]); - indent["second"] = to!string(m.captures[2]); - bullet = false; - } else if (auto m = match(line, rgx.para_bullet_indent)) { - debug(parabulletindent) { // para bullet indent - tell_l("blue", line); - } - type["para"] = State.on; - an_object["obj"] ~= line; - indent["first"] = to!string(m.captures[1]); - indent["second"] = "0"; - bullet = true; - } else { - // !line.empty - type["para"] = State.on; - an_object["obj"] ~= line; - indent["first"] = "0"; - indent["second"] = "0"; - bullet = false; - } - ++line_occur["para"]; - } - } - /+ abstraction functions ↑ +/ - - /+ ↓ abstraction function emitters +/ - struct OCNemitter { - // class OCNemitter : AssertOCN { - int obj_cite_number, obj_cite_number_; - int obj_cite_number_emitter(int obj_cite_number_status_flag) - in { assert(obj_cite_number_status_flag <= 2); } - body { - if (obj_cite_number_status_flag == 0) { - obj_cite_number=++obj_cite_number_; - } else { - obj_cite_number=0; - } - assert(obj_cite_number >= 0); - return obj_cite_number; - } - invariant() { - } - } - struct ObjAttributes { - // class ObjAttributes : AssertObjAttributes { - string[string] obj_txt; - string para_and_blocks(string obj_txt_in) - in { } - body { - auto rgx = Rgx(); - obj_txt["munge"]=obj_txt_in; - if (match(obj_txt_in, rgx.para_bullet)) { - obj_txt["attrib"] =" \"bullet\": \"true\"," - ~ " \"indent_first\": 0," - ~ " \"indent_rest\": 0,"; - } else if (auto m = match(obj_txt_in, rgx.para_bullet_indent)) { - obj_txt["attrib"] =" \"bullet\": \"true\"," - ~ " \"indent_first\": " ~ to!string(m.captures[1]) ~ "," - ~ " \"indent_rest\": " ~ to!string(m.captures[1]) ~ ","; - } else if (auto m = match(obj_txt_in, rgx.para_indent_hang)) { - obj_txt["attrib"] =" \"bullet\": \"false\"," - ~ " \"indent_first\": " ~ to!string(m.captures[1]) ~ "," - ~ " \"indent_rest\": " ~ to!string(m.captures[2]) ~ ","; - } else if (auto m = match(obj_txt_in, rgx.para_indent)) { - obj_txt["attrib"] =" \"bullet\": \"false\"," - ~ " \"indent_first\": " ~ to!string(m.captures[1]) ~ "," - ~ " \"indent_rest\": " ~ to!string(m.captures[1]) ~ ","; - } else { - obj_txt["attrib"] =" \"bullet\": \"false\"," - ~ " \"indent_first\": 0," - ~ " \"indent_rest\": 0,"; - } - return obj_txt["attrib"]; - } - string para(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"para\"," - ~ " \"is\": \"para\""; - return obj_txt["attrib"]; - } - invariant() { - } - string heading(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"para\"," - ~ " \"is\": \"heading\""; - // obj_txt["struct"]=; - return obj_txt["attrib"]; - } - invariant() { - } - string header_make(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"head\"," - ~ " \"of\": \"header\"," - ~ " \"is\": \"header_make\""; - return obj_txt["attrib"]; - } - invariant() { - } - string header_metadata(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"head\"," - ~ " \"of\": \"header\"," - ~ " \"is\": \"header_metadata\""; - return obj_txt["attrib"]; - } - invariant() { - } - string code(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"code\""; - return obj_txt["attrib"]; - } - invariant() { - } - string group(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"group\""; - return obj_txt["attrib"]; - } - invariant() { - } - string block(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"block\""; - return obj_txt["attrib"]; - } - invariant() { - } - string verse(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"verse\""; - return obj_txt["attrib"]; - } - invariant() { - } - string quote(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"quote\""; - return obj_txt["attrib"]; - } - invariant() { - } - string table(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"table\""; - return obj_txt["attrib"]; - } - invariant() { - } - string comment(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"comment\"," - ~ " \"of\": \"comment\"," - ~ " \"is\": \"comment\""; - return obj_txt["attrib"]; - } - invariant() { - } - } - struct ObjInlineMarkupMunge { - // struct ObjInlineMarkupMunge : AssertObjInlineMarkup { - string[string] obj_txt; - int n_foot, n_foot_reg, n_foot_sp_asterisk, n_foot_sp_plus; - string obj_txt_out, tail, note; - private auto initialize_note_numbers() { - n_foot = 0; - n_foot_reg = 0; - n_foot_sp_asterisk = 0; - n_foot_sp_plus = 0; - } - private auto object_notes_(string obj_txt_in) - in { } - body { - auto rgx = Rgx(); - auto mkup = InlineMarkup(); - obj_txt_out = ""; - tail = ""; - obj_txt_in = replaceAll( - obj_txt_in, - rgx.inline_notes_curly_sp_asterisk, - (mkup.en_a_o ~ "*" ~ " $1" ~ mkup.en_a_c) - ); - obj_txt_in = - replaceAll( - obj_txt_in, - rgx.inline_notes_curly_sp_plus, - (mkup.en_a_o ~ "+" ~ " $1" ~ mkup.en_a_c) - ); - obj_txt_in = - replaceAll( - obj_txt_in, - rgx.inline_notes_curly, - (mkup.en_a_o ~ " $1" ~ mkup.en_a_c) - ); - if (match(obj_txt_in, rgx.inline_notes_al_gen)) { - foreach(m; matchAll(obj_txt_in, rgx.inline_text_and_note_al)) { - if (match(obj_txt_in, rgx.inline_al_delimiter_open_asterisk)) { - ++n_foot_sp_asterisk; - n_foot=n_foot_sp_asterisk; - } else if (match(obj_txt_in, rgx.inline_al_delimiter_open_plus)) { - ++n_foot_sp_plus; - n_foot=n_foot_sp_plus; - } else { - ++n_foot_reg; - n_foot=n_foot_reg; - } - obj_txt_out ~= replaceFirst( - m.hit, - rgx.inline_al_delimiter_open_regular, - (mkup.en_a_o ~ to!string(n_foot)) - ); - tail = m.post; - // if (!empty(m.post)) { - // tail = m.post; - // } else { - // tail = ""; - // } - } - } else { - obj_txt_out = obj_txt_in; - } - debug(footnotes) { - writeln(obj_txt_out, tail); - } - obj_txt_out = obj_txt_out ~ tail; - debug(footnotesdone) { - foreach(m; matchAll(obj_txt_out, - (mkup.en_a_o ~ `\s*(.+?)` ~ mkup.en_a_c))) { - writeln(m.captures[1]); - writeln(m.hit); - } - } - return obj_txt_out; - } - string para(string obj_txt_in) - in { } - body { - auto rgx = Rgx(); - obj_txt["munge"]=obj_txt_in; - obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.para_attribs, ""); - obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.obj_cite_number_off_all, ""); - obj_txt["munge"]=object_notes_(obj_txt["munge"]); - debug(munge) { - writeln(__LINE__); - writeln(obj_txt_in); - writeln(__LINE__); - writeln(to!string(obj_txt["munge"])); - } - return obj_txt["munge"]; - } - string heading(string obj_txt_in) - in { } - body { - auto rgx = Rgx(); - obj_txt["munge"]=obj_txt_in; - obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading, ""); - obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.obj_cite_number_off_all, ""); - obj_txt["munge"]=object_notes_(obj_txt["munge"]); - debug(munge) { - writeln(__LINE__); - writeln(obj_txt_in); - writeln(__LINE__); - writeln(to!string(obj_txt["munge"])); - } - return obj_txt["munge"]; - } - invariant() { - } - string header_make(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - string header_metadata(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - string code(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - string group(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["munge"]=object_notes_(obj_txt["munge"]); - return obj_txt["munge"]; - } - invariant() { - } - string block(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["munge"]=object_notes_(obj_txt["munge"]); - return obj_txt["munge"]; - } - invariant() { - } - string verse(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["munge"]=object_notes_(obj_txt["munge"]); - return obj_txt["munge"]; - } - invariant() { - } - string quote(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - string table(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - string comment(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - } - struct ObjInlineMarkup { - // struct ObjInlineMarkup : AssertObjInlineMarkup { - auto munge = ObjInlineMarkupMunge(); - string[string] obj_txt; - string obj_inline_markup(string obj_is_, string obj_raw) - in { } - body { - obj_txt["munge"]=obj_raw.dup; - obj_txt["munge"]=(match(obj_is_, ctRegex!(`verse|code`))) - ? obj_txt["munge"] - : strip(obj_txt["munge"]); - switch (obj_is_) { - case "header_make": - obj_txt["munge"]=munge.header_make(obj_txt["munge"]); - break; - case "header_metadata": - obj_txt["munge"]=munge.header_metadata(obj_txt["munge"]); - break; - case "heading": - obj_txt["munge"]=munge.heading(obj_txt["munge"]); - break; - case "para": - obj_txt["munge"]=munge.para(obj_txt["munge"]); - break; - case "code": - obj_txt["munge"]=munge.code(obj_txt["munge"]); - break; - case "group": - obj_txt["munge"]=munge.group(obj_txt["munge"]); - break; - case "block": - obj_txt["munge"]=munge.block(obj_txt["munge"]); - break; - case "verse": - obj_txt["munge"]=munge.verse(obj_txt["munge"]); - break; - case "quote": - obj_txt["munge"]=munge.quote(obj_txt["munge"]); - break; - case "table": - obj_txt["munge"]=munge.table(obj_txt["munge"]); - break; - case "comment": - obj_txt["munge"]=munge.comment(obj_txt["munge"]); - break; - case "doc_end_reset": - munge.initialize_note_numbers(); - break; - default: - break; - } - return obj_txt["munge"]; - } - invariant() { - } - } - struct ObjAttrib { - // struct ObjAttrib : AssertObjAttrib { - // auto sink = appender!(char[])(); - auto attrib = ObjAttributes(); - string[string] obj_attrib; - string obj_attributes(string obj_is_, string obj_raw, string node) - in { } - body { - // string s = "{ \"language\": \"D\", \"rating\": 3.14, \"code\": \"42\" }"; - scope(exit) { - // destroy(obj_is_); - destroy(obj_raw); - destroy(node); - } - JSONValue node_j = parseJSON(node); - obj_attrib.remove("json"); - obj_attrib["json"] ="{"; - switch (obj_is_) { - case "header_make": - obj_attrib["json"] ~= attrib.header_make(obj_raw); - break; - case "header_metadata": - obj_attrib["json"] ~= attrib.header_metadata(obj_raw); - break; - case "heading": - obj_attrib["json"] ~= attrib.heading(obj_raw); // - break; - case "para": - obj_attrib["json"] ~= attrib.para_and_blocks(obj_raw) - ~ attrib.para(obj_raw); - break; - case "code": - obj_attrib["json"] ~= attrib.code(obj_raw); - break; - case "group": - obj_attrib["json"] ~= attrib.para_and_blocks(obj_raw) - ~ attrib.group(obj_raw); - break; - case "block": - obj_attrib["json"] ~= attrib.para_and_blocks(obj_raw) - ~ attrib.block(obj_raw); - break; - case "verse": - obj_attrib["json"] ~= attrib.verse(obj_raw); - break; - case "quote": - obj_attrib["json"] ~= attrib.quote(obj_raw); - break; - case "table": - obj_attrib["json"] ~= attrib.table(obj_raw); - break; - case "comment": - obj_attrib["json"] ~= attrib.comment(obj_raw); - break; - default: - obj_attrib["json"] ~= attrib.para(obj_raw); - break; - } - obj_attrib["json"] ~=" }"; - JSONValue oa_j = parseJSON(obj_attrib["json"]); - assert( - (oa_j.type == JSON_TYPE.OBJECT) && - (node_j.type == JSON_TYPE.OBJECT) - ); - if (obj_is_ == "heading") { - oa_j.object["obj_cite_number"] = node_j["obj_cite_number"]; - oa_j.object["lev_markup_number"] = node_j["lev_markup_number"]; - oa_j.object["lev_collapsed_number"] = node_j["lev_collapsed_number"]; - oa_j.object["heading_pointer"] = - node_j["heading_pointer"]; // check - oa_j.object["doc_object_pointer"] = - node_j["doc_object_pointer"]; // check - } - oa_j.object["parent_obj_cite_number"] = node_j["parent_obj_cite_number"]; - oa_j.object["parent_lev_markup_number"] = node_j["parent_lev_markup_number"]; - obj_attrib["json"] = oa_j.toString(); - debug(structattrib) { - if (oa_j["is"].str() == "heading") { - // writeln(__LINE__); - writeln(obj_attrib["json"]); - // writeln(node); - writeln( - "is: ", oa_j["is"].str(), - "; obj_cite_number: ", oa_j["obj_cite_number"].integer() - ); - } - } - // obj_attrib["json"]="{}"; - return obj_attrib["json"]; - } - invariant() { - } - } - struct HeaderDocMetadataMakeJson { - // class HeaderMetadataMakeHash : AssertHeaderMetadataMakeJson { - auto rgx = Rgx(); - string hm, hs; - auto header_metadata_and_make_jsonstr( - string header, - JSONValue[string] dochead_metadata, - JSONValue[string] dochead_make - ) - in { } - body { - scope(exit) { - destroy(header); - destroy(dochead_metadata); - destroy(dochead_make); - } - if (auto t = match(header, rgx.head_main)) { - char[][] obj_spl = split( - cast(char[]) header, - rgx.line_delimiter_ws_strip - ); - auto hm = to!string(t.captures[1]); - if (match(hm, rgx.main_headers)) { - foreach (line; obj_spl) { - if (auto m = match(line, rgx.head_main)) { - if (!empty(m.captures[2])) { - if (hm == "creator") { - dochead_metadata[hm]["author"].str = - to!string(m.captures[2]); - } else if (hm == "title") { - dochead_metadata[hm]["main"].str = - to!string(m.captures[2]); - } else if (hm == "publisher") { - dochead_metadata[hm]["name"].str = - to!string(m.captures[2]); - } - } - } else if (auto s = match(line, rgx.head_sub)) { - if (!empty(s.captures[2])) { - auto hs = to!string(s.captures[1]); - if ((hm == "make" ) - && (dochead_make[hm].type() == JSON_TYPE.OBJECT)) { - switch (hm) { - case "make": - if (match(hs, rgx.subhead_make)) { - if (dochead_make[hm][hs].type() == JSON_TYPE.STRING) { - dochead_make[hm][hs].str = to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - default: - break; - } - } else if (dochead_metadata[hm].type() == JSON_TYPE.OBJECT) { - switch (hm) { - case "creator": - if (match(hs, rgx.subhead_creator)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "title": - if (match(hs, rgx.subhead_title)) { - if ((hs == "subtitle") - && (dochead_metadata[hm]["sub"].type() == JSON_TYPE.STRING)) { - dochead_metadata[hm]["sub"].str = - to!string(s.captures[2]); - } else if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "rights": - if (match(hs, rgx.subhead_rights)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "date": - if (match(hs, rgx.subhead_date)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "original": - if (match(hs, rgx.subhead_original)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "classify": - if (match(hs, rgx.subhead_classify)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "identifier": - if (match(hs, rgx.subhead_identifier)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "notes": - if (match(hs, rgx.subhead_notes)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "publisher": - if (match(hs, rgx.subhead_publisher)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "links": - destroy(hm); - destroy(hs); - // if (match(hs, rgx.subhead_links)) { - // if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - // dochead_metadata[hm][hs].str = to!string(s.captures[2]); - // } - // } else { - // writeln("not a valid header type:", hm, ":", hs); - // destroy(hm); - // destroy(hs); - // } - break; - default: - break; - } - } - } - } - } - } else { - writeln("not a valid header type:", hm); - } - } - auto t = tuple(dochead_metadata, dochead_make); - static assert(!isTypeTuple!(t)); - return t; - } - // invariant() { - // } - } - class HeaderMetadataMakeHash { - // class HeaderMetadataMakeHash : AssertHeaderMetadataMakeHash { - auto rgx = Rgx(); - string header_main; - string[string] head; - string[string] header_topic_hash(string header) - in { } - body { - if (auto t = match(header, rgx.head_main)) { - char[][] obj_spl = split( - cast(char[]) header, - rgx.line_delimiter_ws_strip - ); - auto header_main = to!string(t.captures[1]); - head[header_main] = "{"; - foreach (line; obj_spl) { - if (auto m = match(line, rgx.head_main)) { - if (!empty(m.captures[2])) { - head[header_main] ~= - "\"" ~ header_main ~ - "\": \"" ~ - to!string(m.captures[2]) ~ - "\","; - } - } else if (auto s = match(line, rgx.head_sub)) { - head[header_main] ~= "\"" ~ s.captures[1] ~ "\":"; - if (!empty(s.captures[2])) { - head[header_main] ~= "\"" ~ s.captures[2] ~ "\","; - } - } - } - head[header_main] = replaceFirst( - head[header_main], - rgx.tailing_comma, - "" - ); - head[header_main] ~= "}"; - debug(headerjson) { - JSONValue j = parseJSON(head[header_main]); - assert( - (j.type == JSON_TYPE.OBJECT) - ); - } - } - return head; - } - invariant() { - } - } - struct BookIndexNuggetHash { - // class BookIndexNuggetHash : AssertBookIndexNuggetHash { - string main_term, sub_term, sub_term_bits; - int obj_cite_number_offset, obj_cite_number_endpoint; - string[] obj_cite_numbers; - string[][string][string] bi; - string[][string][string] hash_nugget; - string[] bi_main_terms_split_arr; - string[][string][string] bookindex_nugget_hash(string bookindex_section, int obj_cite_number) - in { - debug(bookindexraw) { - mixin ScreenTxtColors; - if (!bookindex_section.empty) { - writeln( - scr_txt_color["blue"], "* [bookindex] ", scr_txt_color["off"], - "[", to!string(obj_cite_number), "] ", bookindex_section - ); - } - } - } - body { - auto rgx = Rgx(); - if (!bookindex_section.empty) { - auto bi_main_terms_split_arr = - split(bookindex_section, rgx.bi_main_terms_split); - foreach (bi_main_terms_content; bi_main_terms_split_arr) { - auto bi_main_term_and_rest = - split(bi_main_terms_content, rgx.bi_main_term_plus_rest_split); - if (auto m = match( - bi_main_term_and_rest[0], - rgx.bi_term_and_obj_cite_numbers_match) - ) { - main_term = strip(m.captures[1]); - obj_cite_number_offset = to!int(m.captures[2]); - obj_cite_number_endpoint=(obj_cite_number + obj_cite_number_offset); - obj_cite_numbers ~= (to!string(obj_cite_number) ~ "-" ~ to!string(obj_cite_number_endpoint)); - } else { - main_term = strip(bi_main_term_and_rest[0]); - obj_cite_numbers ~= to!string(obj_cite_number); - } - bi[main_term]["_a"] ~= obj_cite_numbers; - obj_cite_numbers=null; - if (bi_main_term_and_rest.length > 1) { - auto bi_sub_terms_split_arr = - split( - bi_main_term_and_rest[1], - rgx.bi_sub_terms_plus_obj_cite_number_offset_split - ); - foreach (sub_terms_bits; bi_sub_terms_split_arr) { - if (auto m = match(sub_terms_bits, rgx.bi_term_and_obj_cite_numbers_match)) { - sub_term = strip(m.captures[1]); - obj_cite_number_offset = to!int(m.captures[2]); - obj_cite_number_endpoint=(obj_cite_number + obj_cite_number_offset); - obj_cite_numbers ~= (to!string(obj_cite_number) ~ " - " ~ to!string(obj_cite_number_endpoint)); - } else { - sub_term = strip(sub_terms_bits); - obj_cite_numbers ~= to!string(obj_cite_number); - } - if (!empty(sub_term)) { - bi[main_term][sub_term] ~= obj_cite_numbers; - } - obj_cite_numbers=null; - } - } - } - } - hash_nugget = bi; - return hash_nugget; - } - invariant() { - } - } - struct BookIndexReport { - // class BookIndexReport : AssertBookIndexReport { - int mkn, skn; - auto bookindex_report_sorted( - string[][string][string] bookindex_unordered_hashes - ) { - auto mainkeys=bookindex_unordered_hashes.byKey.array. - sort!("toLower(a) < toLower(b)", SwapStrategy.stable).release; - foreach (mainkey; mainkeys) { - auto subkeys=bookindex_unordered_hashes[mainkey].byKey.array. - sort!("toLower(a) < toLower(b)", SwapStrategy.stable).release; - foreach (subkey; subkeys) { - debug(bookindex) { - writeln( - mainkey, ": ", - subkey, ": ", - to!string(bookindex_unordered_hashes[mainkey][subkey]) - ); - } - ++skn; - } - ++mkn; - } - // return bookindex_the; - } - } - struct BookIndexReportIndent { - int mkn, skn; - auto bookindex_report_indented( - string[][string][string] bookindex_unordered_hashes - ) { - auto mainkeys= - bookindex_unordered_hashes.byKey.array.sort().release; - foreach (mainkey; mainkeys) { - debug(bookindex) { - writeln(mainkey); - } - auto subkeys= - bookindex_unordered_hashes[mainkey].byKey.array.sort().release; - foreach (subkey; subkeys) { - debug(bookindex) { - writeln(" ", subkey); - writeln(" ", to!string( - bookindex_unordered_hashes[mainkey][subkey] - )); - } - // bookindex_the[mkn][mainkey][skn][subkey] ~= (bookindex_unordered_hashes[mainkey][subkey]); - ++skn; - } - ++mkn; - } - } - } - struct BookIndexReportSection { - int mkn, skn; - auto rgx = Rgx(); - auto bookindex_write_section( - string[][string][string] bookindex_unordered_hashes - ) { - auto mainkeys=bookindex_unordered_hashes.byKey.array.sort().release; - foreach (mainkey; mainkeys) { - write("_0_1 !{", mainkey, "}! "); - foreach (ref_; bookindex_unordered_hashes[mainkey]["_a"]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - write(" {", ref_, "}#", go, ", "); - } - writeln(" \\\\"); - bookindex_unordered_hashes[mainkey].remove("_a"); - auto subkeys= - bookindex_unordered_hashes[mainkey].byKey.array.sort().release; - foreach (subkey; subkeys) { - write(" ", subkey, ", "); - foreach (ref_; bookindex_unordered_hashes[mainkey][subkey]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - write(" {", ref_, "}#", go, ", "); - } - writeln(" \\\\"); - ++skn; - } - ++mkn; - } - } - auto bookindex_build_section( - string[][string][string] bookindex_unordered_hashes, - int obj_cite_number - ) { - string type; - string lev, lev_markup_number, lev_collapsed_number; - string attrib; - string[string] indent; - auto set_abstract_object = ObjectAbstractSet(); - auto mainkeys = - bookindex_unordered_hashes.byKey.array.sort().release; - string bi_tmp; - ObjComposite[] bookindex_section; - // writeln(mainkeys.length); - // B~ Book Index - attrib=""; - lev="B"; - lev_markup_number="1"; - lev_collapsed_number="1"; - bookindex_section ~= - set_abstract_object.contents_heading( - "Book Index", - attrib, - obj_cite_number, - to!int(lev_markup_number), - to!int(lev_collapsed_number) - ); - ++obj_cite_number; - ++mkn; - // 1~ Index - attrib=""; - lev="1"; - lev_markup_number="4"; - lev_collapsed_number="2"; - bookindex_section ~= - set_abstract_object.contents_heading( - "Index", - attrib, - obj_cite_number, - to!int(lev_markup_number), - to!int(lev_collapsed_number) - ); - ++obj_cite_number; - ++mkn; - foreach (mainkey; mainkeys) { - bi_tmp = "!{" ~ mainkey ~ "}! "; - // bi_tmp = "_0_1 !{" ~ mainkey ~ "}! "; - foreach (ref_; bookindex_unordered_hashes[mainkey]["_a"]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; - } - bi_tmp ~= " \\\\\n "; - bookindex_unordered_hashes[mainkey].remove("_a"); - auto subkeys = - bookindex_unordered_hashes[mainkey].byKey.array.sort().release; - foreach (subkey; subkeys) { - bi_tmp ~= subkey ~ ", "; - foreach (ref_; bookindex_unordered_hashes[mainkey][subkey]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; - } - bi_tmp ~= " \\\\\n "; - ++skn; - } - bi_tmp = replaceFirst(bi_tmp, rgx.trailing_linebreak, ""); - type="para"; - attrib=""; - indent["first"] = "0"; - indent["second"] = "1"; - attrib=""; - // bookindex_section ~= - // set_abstract_object.contents_para( - // obj, - // obj_cite_number, - // indent, - // false - // ); - bookindex_section ~= - set_abstract_object.contents_para( - type, - bi_tmp, - attrib, - obj_cite_number, - indent, - false - ); - ++obj_cite_number; - ++mkn; - } - auto t = tuple(bookindex_section, obj_cite_number); - return t; - } - auto bookindex_build_section_( - string[][string][string] bookindex_unordered_hashes - ) { - auto mainkeys = - bookindex_unordered_hashes.byKey.array.sort().release; - string bi_tmp; - string[] bookindex_section; - // int bi_num; - // writeln(mainkeys.length); - foreach (mainkey; mainkeys) { - bi_tmp = "_0_1 !{" ~ mainkey ~ "}! "; - foreach (ref_; bookindex_unordered_hashes[mainkey]["_a"]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; - } - bi_tmp ~= " \\\\\n "; - bookindex_unordered_hashes[mainkey].remove("_a"); - auto subkeys = - bookindex_unordered_hashes[mainkey].byKey.array.sort().release; - foreach (subkey; subkeys) { - bi_tmp ~= subkey ~ ", "; - // bi_tmp ~= " " ~ subkey ~ ", "; - foreach (ref_; bookindex_unordered_hashes[mainkey][subkey]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; - } - bi_tmp ~= " \\\\\n "; - ++skn; - } - bi_tmp = replaceFirst(bi_tmp, rgx.trailing_linebreak, ""); - bookindex_section ~= bi_tmp; - ++mkn; - } - return bookindex_section; - } - } - struct NotesSection { - string object_notes; - long previous_count; - int mkn; - auto rgx = Rgx(); - private auto gather_notes_for_endnote_section( - ObjComposite[] contents_am, - ulong counter - ) - in { - // endnotes/ footnotes for - // doc objects other than paragraphs & headings - // various forms of grouped text - assert((contents_am[counter].is_a == "para") - || (contents_am[counter].is_a == "heading")); - assert(counter > previous_count); - previous_count=counter; - assert( - match(contents_am[counter].object, - rgx.inline_notes_delimiter_al_regular_number_note) - ); - } - body { - foreach(m; - matchAll(contents_am[counter].object, - rgx.inline_notes_delimiter_al_regular_number_note)) { - debug(endnotes_build) { - writeln( - "{^{", m.captures[1], ".}^}#noteref_", m.captures[1], " ", - m.captures[2]); // sometimes need segment name (segmented html & epub) - // writeln("{^{", m.captures[1], ".}^}#", contents_am[counter]["obj_cite_number"], " ", m.captures[2]); - } - object_notes ~= - "{^{" ~ m.captures[1] ~ ".}^}#noteref_" ~ - m.captures[1] ~ " " ~ m.captures[2] ~ "』"; - } - return object_notes; - } - private auto gathered_notes() - in { - } - body { - string[] endnotes_; - if (object_notes.length > 1) { - endnotes_ = (split(object_notes, rgx.break_string))[0..$-1]; - } - return endnotes_; - } - private auto endnote_objects(int obj_cite_number) - in { - } - body { - auto set_abstract_object = ObjectAbstractSet(); - ObjComposite[] endnotes_section; - auto endnotes_ = gathered_notes(); - // auto endnotes_ = (split(object_notes, rgx.break_string))[0..$-1]; - string type; - string lev, lev_markup_number, lev_collapsed_number; - string attrib; - string[string] indent; - // B~ Endnotes - attrib=""; - lev="B"; - lev_markup_number="1"; - lev_collapsed_number="1"; - endnotes_section ~= - set_abstract_object.contents_heading( - "Endnotes", - attrib, - obj_cite_number, - to!int(lev_markup_number), - to!int(lev_collapsed_number) - ); - ++obj_cite_number; - ++mkn; - // 1~ Endnotes - attrib=""; - lev="1"; - lev_markup_number="4"; - lev_collapsed_number="2"; - endnotes_section ~= - set_abstract_object.contents_heading( - "Endnotes", - attrib, - obj_cite_number, - to!int(lev_markup_number), - to!int(lev_collapsed_number) - ); - ++obj_cite_number; - ++mkn; - foreach (endnote; endnotes_) { - type="para"; - attrib=""; - indent["first"] = "0"; - indent["second"] = "0"; - attrib=""; - // endnotes ~= - // set_abstract_object.contents_para( - // obj, - // obj_cite_number, - // indent, - // false - // ); - endnotes_section ~= - set_abstract_object.contents_para( - type, - endnote, - attrib, - obj_cite_number, - indent, - false - ); - ++obj_cite_number; - ++mkn; - } - auto t = tuple(endnotes_section, obj_cite_number); - return t; - } - } - struct Bibliography { - public JSONValue[] bibliography(ref string[] biblio_unsorted_incomplete, ref JSONValue[] bib_arr_json) - in { } - body { - JSONValue[] biblio_unsorted = - biblio_unsorted_complete(biblio_unsorted_incomplete, bib_arr_json); - JSONValue[] biblio_sorted = biblio_sort(biblio_unsorted); - biblio_debug(biblio_sorted); - return biblio_sorted; - } - final private JSONValue[] biblio_unsorted_complete( - string[] biblio_unordered, - ref JSONValue[] bib_arr_json - ) { - foreach (bibent; biblio_unordered) { - // update bib to include deemed_author, needed for: - // sort_bibliography_array_by_deemed_author_year_title - // either: sort on multiple fields, or; create such sort field - JSONValue j = parseJSON(bibent); - if (!empty(j["fulltitle"].str)) { - if (!empty(j["author_raw"].str)) { - j["deemed_author"]=j["author_arr"][0]; - } else if (!empty(j["editor_raw"].str)) { - j["deemed_author"]=j["editor_arr"][0]; - } - j["sortby_deemed_author_year_title"] = ( - j["deemed_author"].str ~ - "; " ~ - j["year"].str ~ - "; " ~ - j["fulltitle"].str - ); - } - bib_arr_json ~= j; - } - JSONValue[] biblio_unsorted_array_of_json_objects = - bib_arr_json.dup; - return biblio_unsorted_array_of_json_objects; - } - final private JSONValue[] biblio_sort(JSONValue[] biblio_unordered) { - JSONValue[] biblio_sorted; - biblio_sorted = - sort!((a, b){ - return ((a["sortby_deemed_author_year_title"].str) < (b["sortby_deemed_author_year_title"].str)); - })(biblio_unordered).array; - debug(bibliosorted) { - foreach (j; biblio_sorted) { - if (!empty(j["fulltitle"].str)) { - writeln(j["sortby_deemed_author_year_title"]); - // writeln(j["deemed_author"], " (", j["author"], ") ", j["fulltitle"]); - } - } - } - return biblio_sorted; - } - auto biblio_debug(JSONValue[] biblio_sorted) { - debug(biblio) { - foreach (j; biblio_sorted) { - if (!empty(j["fulltitle"].str)) { - writeln(j["sortby_deemed_author_year_title"]); - } - } - } - } - } - struct NodeStructureMetadata { - // class NodeStructureMetadata : AssertNodeJSON { - int lv, lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7; - int obj_cite_number; - int[string] p_; // p_ parent_ - string node; - string node_emitter( - string lev_markup_number, - int obj_cite_number_, - long counter_, - int pointer_, - string is_ - ) - in { - auto rgx = Rgx(); - assert(is_ != "heading"); - assert(to!int(obj_cite_number_) >= 0); - } - body { - // scope(failure) { - // writeln(__FILE__, ":", __LINE__, " failed here:"); - // writeln(" is : ", is_); - // writeln(" node: ", node); - // } - assert(is_ != "heading"); // should not be necessary - assert(to!int(obj_cite_number_) >= 0); // should not be necessary - int obj_cite_number=to!int(obj_cite_number_); - if (lv7 > State.off) { - p_["lev_markup_number"] = DocStructMarkupHeading.h_text_4; - p_["obj_cite_number"] = lv7; - } else if (lv6 > State.off) { - p_["lev_markup_number"] = DocStructMarkupHeading.h_text_3; - p_["obj_cite_number"] = lv6; - } else if (lv5 > State.off) { - p_["lev_markup_number"] = DocStructMarkupHeading.h_text_2; - p_["obj_cite_number"] = lv5; - } else { - p_["lev_markup_number"] = DocStructMarkupHeading.h_text_1; - p_["obj_cite_number"] = lv4; - } - node=("{ " ~ - "\"is\": \"" ~ is_ ~ "\"" ~ - ", \"heading_pointer\": " ~ to!string(pointer_) ~ - ", \"doc_object_pointer\": " ~ to!string(counter_) ~ - ", \"obj_cite_number\": " ~ to!string(obj_cite_number_) ~ - ", \"parent_obj_cite_number\": " ~ to!string(p_["obj_cite_number"]) ~ - ", \"parent_lev_markup_number\": " ~ to!string(p_["lev_markup_number"]) ~ - " }" - ); - debug(node) { - mixin ScreenTxtColors; - if (match(lev_markup_number, rgx.levels_numbered_headings)) { - writeln(scr_txt_marker["yellow"], to!string(node)); - } else { - writeln(scr_txt_marker["white"], to!string(node)); - } - } - JSONValue j = parseJSON(node); - assert(j["parent_lev_markup_number"].integer >= 4); - assert(j["parent_lev_markup_number"].integer <= 7); - assert(j["parent_obj_cite_number"].integer >= 0); - return node; - } - invariant() { - } - string node_emitter_heading( - string lev_markup_number, - string lev_collapsed_number, - int obj_cite_number_, - long counter_, - int pointer_, - string is_ - ) - in { - auto rgx = Rgx(); - assert(is_ == "heading"); - assert(to!int(obj_cite_number_) >= 0); - assert( - match(lev_markup_number, rgx.levels_numbered), - ("not a valid heading level: " ~ lev_markup_number ~ " at " ~ to!string(obj_cite_number_)) - ); - // assert(to!int(obj_cite_number_) >= 0); - if (match(lev_markup_number, rgx.levels_numbered)) { - if (to!int(lev_markup_number) == 0) { - assert(to!int(obj_cite_number_) == 1); - // writeln(lev_markup_number); - } - } - } - body { - // scope(failure) { - // writeln(__FILE__, ":", __LINE__, " failed here:"); - // writeln(" is : ", is_); - // writeln(" node: ", node); - // } - auto rgx = Rgx(); - int obj_cite_number = to!int(obj_cite_number_); - switch (lev_markup_number) { // switch (to!string(lv)) { - case "0": - lv = DocStructMarkupHeading.h_sect_A; - lv0 = obj_cite_number; - lv1=0; lv2=0; lv3=0; lv4=0; lv5=0; lv6=0; lv7=0; - p_["lev_markup_number"] = 0; - p_["obj_cite_number"] = 0; - break; - case "1": - lv = DocStructMarkupHeading.h_sect_B; - lv1 = obj_cite_number; - lv2=0; lv3=0; lv4=0; lv5=0; lv6=0; lv7=0; - p_["lev_markup_number"] = - DocStructMarkupHeading.h_sect_A; - p_["obj_cite_number"] = lv0; - break; - case "2": - lv = DocStructMarkupHeading.h_sect_C; - lv2 = obj_cite_number; - lv3=0; lv4=0; lv5=0; lv6=0; lv7=0; - p_["lev_markup_number"] = - DocStructMarkupHeading.h_sect_B; - p_["obj_cite_number"] = lv1; - break; - case "3": - lv = DocStructMarkupHeading.h_sect_D; - lv3=obj_cite_number; - lv4=0; lv5=0; lv6=0; lv7=0; - p_["lev_markup_number"] = - DocStructMarkupHeading.h_sect_C; - p_["obj_cite_number"] = lv2; - break; - case "4": - lv = DocStructMarkupHeading.h_text_1; - lv4 = obj_cite_number; - lv5=0; lv6=0; lv7=0; - if (lv3 > State.off) { - p_["lev_markup_number"] = - DocStructMarkupHeading.h_sect_D; - p_["obj_cite_number"] = lv3; - } else if (lv2 > State.off) { - p_["lev_markup_number"] = - DocStructMarkupHeading.h_sect_C; - p_["obj_cite_number"] = lv2; - } else if (lv1 > State.off) { - p_["lev_markup_number"] = - DocStructMarkupHeading.h_sect_B; - p_["obj_cite_number"] = lv1; - } else { - p_["lev_markup_number"] = - DocStructMarkupHeading.h_sect_A; - p_["obj_cite_number"] = lv0; - } - break; - case "5": - lv = DocStructMarkupHeading.h_text_2; - lv5 = obj_cite_number; - lv6=0; lv7=0; - p_["lev_markup_number"] = - DocStructMarkupHeading.h_text_1; - p_["obj_cite_number"] = lv4; - break; - case "6": - lv = DocStructMarkupHeading.h_text_3; - lv6 = obj_cite_number; - lv7=0; - p_["lev_markup_number"] = - DocStructMarkupHeading.h_text_2; - p_["obj_cite_number"] = lv5; - break; - case "7": - lv = DocStructMarkupHeading.h_text_4; - lv7 = obj_cite_number; - p_["lev_markup_number"] = - DocStructMarkupHeading.h_text_3; - p_["obj_cite_number"] = lv6; - break; - default: - // if (lv7 > State.off) { - // p_["lev_markup_number"] = 7; p_["obj_cite_number"] = lv7; - // } else if (lv6 > State.off) { - // p_["lev_markup_number"] = 6; p_["obj_cite_number"] = lv6; - // } else if (lv5 > State.off) { - // p_["lev_markup_number"] = 5; p_["obj_cite_number"] = lv5; - // } else { - // p_["lev_markup_number"] = 4; p_["obj_cite_number"] = lv4; - // } - break; - } - node=("{ " ~ - "\"is\": \"" ~ is_ ~ "\"" ~ - ", \"heading_pointer\": " ~ to!string(pointer_) ~ - ", \"doc_object_pointer\": " ~ to!string(counter_) ~ - ", \"obj_cite_number\": " ~ to!string(obj_cite_number_) ~ - ", \"lev_markup_number\": " ~ to!string(lev_markup_number) ~ - ", \"lev_collapsed_number\": " ~ to!string(lev_collapsed_number) ~ - ", \"parent_obj_cite_number\": " ~ to!string(p_["obj_cite_number"]) ~ - ", \"parent_lev_markup_number\": " ~ to!string(p_["lev_markup_number"]) ~ - " }" - ); - debug(heading) { - mixin ScreenTxtColors; - if (match(lev_markup_number, rgx.levels_numbered_headings)) { - writeln(scr_txt_marker["yellow"], to!string(node)); - } - } - debug(node) { - mixin ScreenTxtColors; - if (match(lev_markup_number, rgx.levels_numbered_headings)) { - writeln(scr_txt_marker["yellow"], to!string(node)); - } else { - writeln(scr_txt_marker["white"], to!string(node)); - } - } - JSONValue j = parseJSON(node); - assert(j["parent_lev_markup_number"].integer <= 7); - assert(j["parent_obj_cite_number"].integer >= 0); - if (match(lev_markup_number, rgx.levels_numbered_headings)) { - assert(j["lev_markup_number"].integer <= 7); - assert(j["obj_cite_number"].integer >= 0); - if (j["parent_lev_markup_number"].integer > 0) { - assert(j["parent_lev_markup_number"].integer < j["lev_markup_number"].integer); - if (j["obj_cite_number"].integer != 0) { - assert(j["parent_obj_cite_number"].integer < j["obj_cite_number"].integer); - } - } - if (j["lev_markup_number"].integer == 0) { - assert(j["parent_lev_markup_number"].integer == DocStructMarkupHeading.h_sect_A); - } else if (j["lev_markup_number"].integer == DocStructMarkupHeading.h_sect_B) { - assert(j["parent_lev_markup_number"].integer == DocStructMarkupHeading.h_sect_A); - } else if (j["lev_markup_number"].integer == DocStructMarkupHeading.h_sect_C) { - assert(j["parent_lev_markup_number"].integer == DocStructMarkupHeading.h_sect_B); - } else if (j["lev_markup_number"].integer == DocStructMarkupHeading.h_sect_D) { - assert(j["parent_lev_markup_number"].integer == DocStructMarkupHeading.h_sect_C); - } else if (j["lev_markup_number"].integer == DocStructMarkupHeading.h_text_1) { - assert(j["parent_lev_markup_number"].integer <= DocStructMarkupHeading.h_sect_D); - } else if (j["lev_markup_number"].integer == DocStructMarkupHeading.h_text_2) { - assert(j["parent_lev_markup_number"].integer == DocStructMarkupHeading.h_text_1); - } else if (j["lev_markup_number"].integer == DocStructMarkupHeading.h_text_3) { - assert(j["parent_lev_markup_number"].integer == DocStructMarkupHeading.h_text_2); - } else if (j["lev_markup_number"].integer == DocStructMarkupHeading.h_text_4) { - assert(j["parent_lev_markup_number"].integer == DocStructMarkupHeading.h_text_3); - } else if (j["lev_markup_number"].integer == DocStructMarkupHeading.h_text_5) { - // writeln(j["parent_lev_markup_number"].integer); - // assert(j["parent_lev_markup_number"].integer >= 4); - // assert(j["parent_lev_markup_number"].integer <= 7); - } - } - return node; - } - invariant() { - } - } - /+ abstraction functions emitters ↑ +/ - - /+ ↓ abstraction functions assertions +/ - auto assertions_doc_structure(string[string] an_object, int[string] lv) { - if (lv["h3"] > State.off) { - assert(lv["h0"] > State.off); - assert(lv["h1"] > State.off); - assert(lv["h2"] > State.off); - } else if (lv["h2"] > State.off) { - assert(lv["h0"] > State.off); - assert(lv["h1"] > State.off); - assert(lv["h3"] == State.off); - } else if (lv["h1"] > State.off) { - assert(lv["h0"] > State.off); - assert(lv["h2"] == State.off); - assert(lv["h3"] == State.off); - } else if (lv["h0"] > State.off) { - assert(lv["h1"] == State.off); - assert(lv["h2"] == State.off); - assert(lv["h3"] == State.off); - } else { - assert(lv["h0"] == State.off); - assert(lv["h1"] == State.off); - assert(lv["h2"] == State.off); - assert(lv["h3"] == State.off); - } - if (lv["h7"] > State.off) { - assert(lv["h4"] > State.off); - assert(lv["h5"] > State.off); - assert(lv["h6"] > State.off); - } else if (lv["h6"] > State.off) { - assert(lv["h4"] > State.off); - assert(lv["h5"] > State.off); - assert(lv["h7"] == State.off); - } else if (lv["h5"] > State.off) { - assert(lv["h4"] > State.off); - assert(lv["h6"] == State.off); - assert(lv["h7"] == State.off); - } else if (lv["h4"] > State.off) { - assert(lv["h5"] == State.off); - assert(lv["h6"] == State.off); - assert(lv["h7"] == State.off); - } else { - assert(lv["h4"] == State.off); - assert(lv["h5"] == State.off); - assert(lv["h6"] == State.off); - assert(lv["h7"] == State.off); - } - if (lv["h0"] == State.off) { - assert(lv["h1"] == State.off); - assert(lv["h2"] == State.off); - assert(lv["h3"] == State.off); - assert(lv["h4"] == State.off); - assert(lv["h5"] == State.off); - assert(lv["h6"] == State.off); - assert(lv["h7"] == State.off); - } - if (lv["h1"] == State.off) { - assert(lv["h2"] == State.off); - assert(lv["h3"] == State.off); - } - if (lv["h2"] == State.off) { - assert(lv["h3"] == State.off); - } - if (lv["h3"] == State.off) { - } - if (lv["h4"] == State.off) { - assert(lv["h5"] == State.off); - assert(lv["h6"] == State.off); - assert(lv["h7"] == State.off); - } - if (lv["h5"] == State.off) { - assert(lv["h6"] == State.off); - assert(lv["h7"] == State.off); - } - if (lv["h6"] == State.off) { - assert(lv["h7"] == State.off); - } - if (lv["h7"] == State.off) { - } - switch (to!string(an_object["lev"])) { - case "A": - if (lv["h0"] == State.off) { - assert(lv["h1"] == State.off); - assert(lv["h2"] == State.off); - assert(lv["h3"] == State.off); - assert(lv["h4"] == State.off); - assert(lv["h5"] == State.off); - assert(lv["h6"] == State.off); - assert(lv["h7"] == State.off); - } else { // (lv["h0"] > State.off) - assert(lv["h0"] == State.off,"error should not enter level A a second time"); - } - break; - case "B": - if (lv["h1"] == State.off) { - assert(lv["h0"] > State.off); - assert(lv["h2"] == State.off); - assert(lv["h3"] == State.off); - } else { // (lv["h1"] > State.off) - assert(lv["h0"] > State.off); - assert(lv["h1"] > State.off); // - } - break; - case "C": - if (lv["h2"] == State.off) { - assert(lv["h0"] > State.off); - assert(lv["h1"] > State.off); - assert(lv["h3"] == State.off); - } else { // (lv["h2"] > State.off) - assert(lv["h0"] > State.off); - assert(lv["h1"] > State.off); - assert(lv["h2"] > State.off); // - } - break; - case "D": - if (lv["h3"] == State.off) { - assert(lv["h0"] > State.off); - assert(lv["h1"] > State.off); - assert(lv["h2"] > State.off); - } else { // (lv["h3"] > State.off) - assert(lv["h0"] > State.off); - assert(lv["h1"] > State.off); - assert(lv["h2"] > State.off); - assert(lv["h3"] > State.off); - } - break; - case "1": - if (lv["h4"] == State.off) { - assert(lv["h0"] > State.off); - } else { // (lv["h4"] > State.off) - assert(lv["h0"] > State.off); - assert(lv["h4"] > State.off); // - } - break; - case "2": - if (lv["h5"] == State.off) { - assert(lv["h0"] > State.off); - assert(lv["h4"] > State.off); - } else { // (lv["h5"] > State.off) - assert(lv["h0"] > State.off); - assert(lv["h4"] > State.off); - assert(lv["h5"] > State.off); // - } - break; - case "3": - if (lv["h6"] == State.off) { - assert(lv["h0"] > State.off); - assert(lv["h4"] > State.off); - assert(lv["h5"] > State.off); - } else { // (lv["h6"] > State.off) - assert(lv["h0"] > State.off); - assert(lv["h4"] > State.off); - assert(lv["h5"] > State.off); - assert(lv["h6"] > State.off); // - } - break; - case "4": - if (lv["h7"] == State.off) { - assert(lv["h0"] > State.off); - assert(lv["h4"] > State.off); - assert(lv["h5"] > State.off); - assert(lv["h6"] > State.off); - } else { // (lv["h7"] > State.off) - assert(lv["h0"] > State.off); - assert(lv["h4"] > State.off); - assert(lv["h5"] > State.off); - assert(lv["h6"] > State.off); - assert(lv["h7"] > State.off); // - } - break; - default: - break; - } - } - auto assertions_flag_types_block_status_none_or_closed(int[string] type) { - assert( - (type["code"] == TriState.off) - || (type["code"] == TriState.closing), - "code block status: off or closing"); - assert( - (type["poem"] == TriState.off) - || (type["poem"] == TriState.closing), - "poem status: off or closing"); - assert( - (type["table"] == TriState.off) - || (type["table"] == TriState.closing), - "table status: off or closing"); - assert( - (type["group"] == TriState.off) - || (type["group"] == TriState.closing), - "group block status: off or closing"); - assert( - (type["block"] == TriState.off) - || (type["block"] == TriState.closing), - "block status: off or closing"); - } - /+ abstraction functions assertions ↑ +/ - - } /+ ← closed: struct Abstraction +/ - -} /+ ← closed: template SiSUdocAbstraction +/ diff --git a/lib/sdp/ao_ansi_colors.d b/lib/sdp/ao_ansi_colors.d deleted file mode 100644 index e5a46f9..0000000 --- a/lib/sdp/ao_ansi_colors.d +++ /dev/null @@ -1,74 +0,0 @@ -/+ - utils - ao_util.d -+/ -template ScreenTxtColors() { - string[string] scr_txt_color = [ - "off" : "\033[0m", - "white" : "\033[37m", - "white_bold" : "\033[1m", - "marker" : "\033[42m", - "bold" : "\033[1m", - "underline" : "\033[4m", - "invert" : "\033[7m", - "darkgrey_hi" : "\033[100m", - "grey_hi" : "\033[47m", - "pink_hi" : "\033[105m", - "fuchsia_hi" : "\033[45m", - "red_hi" : "\033[41m", - "orange_hi" : "\033[101m", - "yellow_hi" : "\033[103m", - "brown_hi" : "\033[43m", - "lightgreen_hi" : "\033[102m", - "green_hi" : "\033[42m", - "cyan_hi" : "\033[106m", - "blue_hi" : "\033[104m", - "navy_hi" : "\033[44m", - "grey" : "\033[90m", - "pink" : "\033[95m", - "fuchsia" : "\033[35m", - "ruby" : "\033[31m", - "red" : "\033[91m", - "orange" : "\033[91m", - "yellow" : "\033[93m", - "brown" : "\033[33m", - "green" : "\033[92m", - "darkgreen" : "\033[32m", - "cyan" : "\033[36m", - "blue" : "\033[94m", - "navy" : "\033[34m", - "black" : "\033[30m" - ]; - string[string] scr_txt_marker = [ - "white" : "\033[37m*\033[0m ", - "bold" : "\033[1m*\033[0m ", - "invert" : "\033[7m*\033[0m ", - "darkgrey_hi" : "\033[100m*\033[0m ", - "grey_hi" : "\033[47m*\033[0m ", - "pink_hi" : "\033[105m*\033[0m ", - "fuchsia_hi" : "\033[45m*\033[0m ", - "red_hi" : "\033[41m*\033[0m ", - "orange_hi" : "\033[101m*\033[0m ", - "yellow_hi" : "\033[103m*\033[0m ", - "brown_hi" : "\033[43m*\033[0m ", - "lightgreen_hi" : "\033[102m*\033[0m ", - "green_hi" : "\033[42m*\033[0m ", - "cyan_hi" : "\033[106m*\033[0m ", - "blue_hi" : "\033[104m*\033[0m ", - "navy_hi" : "\033[44m*\033[0m ", - "grey" : "\033[90m*\033[0m ", - "pink" : "\033[95m*\033[0m ", - "fuchsia" : "\033[35m*\033[0m ", - "ruby" : "\033[31m*\033[0m ", - "red" : "\033[91m*\033[0m ", - "orange" : "\033[91m*\033[0m ", - "yellow" : "\033[93m*\033[0m ", - "brown" : "\033[33m*\033[0m ", - "green" : "\033[92m*\033[0m ", - "darkgreen" : "\033[32m*\033[0m ", - "cyan" : "\033[36m*\033[0m ", - "blue" : "\033[94m*\033[0m ", - "navy" : "\033[34m*\033[0m ", - "black" : "\033[30m*\033[0m " - ]; -} diff --git a/lib/sdp/ao_defaults.d b/lib/sdp/ao_defaults.d deleted file mode 100644 index 04f5506..0000000 --- a/lib/sdp/ao_defaults.d +++ /dev/null @@ -1,309 +0,0 @@ -/+ - defaults - ao_defaults.d -+/ -template SiSUheader() { - auto header_make_jsonstr = `{ - "make": { - "cover_image" : "", - "home_button_image" : "", - "home_button_text" : "", - "footer" : "", - "headings" : "", - "num_top" : "", - "breaks" : "", - "substitute" : "", - "bold" : "", - "italics" : "", - "emphasis" : "", - "texpdf_font" : "", - "css" : "" - } - }`; - auto header_metadata_jsonstr = `{ - "creator": { - "author" : "", - "translator" : "", - "illustrator" : "" - }, - "title": { - "main" : "", - "sub" : "", - "full" : "", - "language" : "", - "edition" : "", - "note" : "" - }, - "rights": { - "copyright" : "", - "illustrations" : "", - "license" : "", - "cover" : "" - }, - "date": { - "published" : "", - "created" : "", - "issued" : "", - "available" : "", - "valid" : "", - "modified" : "", - "added_to_site" : "" - }, - "original": { - "title" : "", - "language" : "", - "source" : "" - }, - "classify": { - "topic_register" : "", - "subject" : "", - "keywords" : "", - "loc" : "", - "dewey" : "" - }, - "identifier": { - "oclc" : "", - "pg" : "", - "isbn" : "" - }, - "notes": { - "abstract" : "", - "description" : "" - }, - "publisher": { - "name" : "" - }, - "links": { - } - }`; // links - auto pointer_head_main = - [ - "creator", - "title", - "rights", - "date", - "original", - "classify", - "identifier", - "notes", - "make", - "links" - ]; - auto pointer_head_sub_creator = - [ - "author", - "translator", - "illustrator", - "cover" - ]; - auto pointer_head_sub_title = - [ - "main", - "sub", - "full", - "language", - "edition", - "note" - ]; - auto pointer_head_sub_rights = - [ - "copyright", - "illustrations", - "license" - ]; - auto pointer_head_sub_date = - [ - "published", - "created", - "issued", - "valid", - "modified", - "added_to_site" - ]; - auto pointer_head_sub_original = - [ - "title", - "language", - "source" - ]; - auto pointer_head_sub_classify = - [ - "topic_register", - "subject", - "keywords", - "loc", - "dewey" - ]; - auto pointer_head_sub_identifier = - [ - "oclc", - "pg", - "isbn" - ]; - auto pointer_head_sub_notes = - [ - "abstract", - "description" - ]; - auto pointer_head_sub_publisher = - [ "name" ]; - auto pointer_head_sub_make = - [ - "cover_image", - "home_button_image", - "home_button_text", - "footer", "headings", - "num_top", - "breaks", - "substitute", - "bold", - "italics", - "emphasis", - "texpdf_font", - "css" - ]; - auto config_jsonstr = `{ - }`; -} -/+ regex flags +/ -template SiSUrgxInitFlags() { - int[string] flags_type_init() { - int[string] flags_type_init = [ - "make_headings" : 0, - "header_make" : 0, - "header_metadata" : 0, - "heading" : 0, - "heading_biblio" : 0, - "para" : 0, - "blocks" : 0, // 0..2 generic - "code" : 0, // 0..2 - "poem" : 0, // 0..2 - "table" : 0, // 0..2 - "group" : 0, // 0..2 - "block" : 0, // 0..2 - "quote" : 0, // 0..2 - "verse_new" : 0, - "curly_code" : 0, - "curly_poem" : 0, - "curly_table" : 0, - "curly_group" : 0, - "curly_block" : 0, - "curly_quote" : 0, - "tic_code" : 0, - "tic_poem" : 0, - "tic_table" : 0, - "tic_group" : 0, - "tic_block" : 0, - "tic_quote" : 0, - "obj_cite_number_status" : 0, // 0 obj_cite_number; 1 no obj_cite_number; 2 no obj_cite_number & dummy headings - "obj_cite_number_status_multi_obj" : 0, // 0 obj_cite_number; 1 no obj_cite_number; 2 no obj_cite_number & dummy headings - "book_index" : 0, - ]; - return flags_type_init; - } -} -template SiSUbiblio() { - auto biblio_entry_tags_jsonstr = `{ - "is" : "", - "sortby_deemed_author_year_title" : "", - "deemed_author" : "", - "author_raw" : "", - "author" : "", - "author_arr" : [ "" ], - "editor_raw" : "", - "editor" : "", - "editor_arr" : [ "" ], - "title" : "", - "subtitle" : "", - "fulltitle" : "", - "language" : "", - "trans" : "", - "src" : "", - "journal" : "", - "in" : "", - "volume" : "", - "edition" : "", - "year" : "", - "place" : "", - "publisher" : "", - "url" : "", - "pages" : "", - "note" : "", - "short_name" : "", - "id" : "" - }`; // is: book, article, magazine, newspaper, blog, other -} -template InternalMarkup() { - struct InlineMarkup { - auto en_a_o = "【"; auto en_a_c = "】"; - auto en_b_o = "〖"; auto en_b_c = "〗"; - // auto segname_prefix_auto_num_extract = "c"; - // auto segname_prefix_auto_num_provide = "s"; - // auto segname_prefix_auto_num_other = "x"; - // auto obj_cite_number_id_char = ""; //'o'; now as before; remove for html5 - // auto note = "note_"; - // auto note_ref = "noteref_"; - // auto note_astx = "note_astx_"; - // auto note_ref_astx = "noteref_astx_"; - // auto note_plus = "note_plus_"; - // auto note_ref_plus = "noteref_plus_"; - // auto meta_o = "〔@"; auto meta_c = "〕"; - // auto lv_o_0 = 0; - // auto lv_o_1 = 1; - // auto lv_o_2 = 2; - // auto lv_o_3 = 3; - // auto lv_o_4 = 4; - // auto lv_o_5 = 5; - // auto lv_o_6 = 6; - // auto lv_o_7 = 7; - // auto lv_o_8 = 8; - // auto lv_o_9 = 9; - // auto lv_o = "〔"; auto lv_c = "〕"; - // auto bl_o = "〔"; auto bl_c = "〕"; // block text mark - // auto gr_o = "〔"; auto gr_c = "〕"; // group text mark #REPLACE & RETIRE - // auto id_o = "〔"; auto id_c = "〕"; // object id mark - // auto tc_o = "『"; auto tc_c = "』"; // table row mark #Mx[:tc_c]="』\n" - // auto tc_p = "┆'" - // auto pa_o = "〔"; auto pa_c = "〕"; // affects paragraph mark - // auto mk_o = "〔"; auto mk_c = "〕"; // generic mark - // auto gl_o = "〔"; auto gl_c = "〕"; // glyph - // auto fa_o = "〔"; auto fa_o_c = "¤"; auto fa_c_o = "¤"; auto fa_c = "〕"; - // auto idx_o = "▩"; auto idx_c = "▩"; - // auto nbsp = "░"; // '▭ ' - // auto br_line = "╱"; // lB ▌ 9612 ┘ ¶ - // auto br_nl = "╲"; // lB ▌ 』 ┘ - // auto br_paragraph = "█"; // FB █ 9608 # PP ∥ 8741 #▐ #'┘' #'¶' #FB █ 9608 lB ▌ 9612 RB ▐ 9616 - // auto br_obj = "break_obj"; - // auto br_page_line = "▭"; - // auto br_page = "┼"; - // auto br_page_new = "╋"; - // auto lnk_o = "⌠"; lnk_c = "⌡"; // '⌈' '⌋' '⌠' '⌡' #Mx[:lnk_o= '◁'; Mx[:lnk_c= '▷' #‹ › - // auto url_o = "◘"; auto url_c = "◙"; - // auto rel_o = "⌈"; auto rel_c = "⌋"; - // auto tag_o = "⌊"; auto tag_c = "⌉"; - // auto sm_set_o = "◢"; auto sm_set_c = "◣"; - // auto sm_subset_o = "◢"; auto sm_subset_c = "◣"; - // auto vline = "┆"; // ¦ | - // auto src_bold_o = "!{"; auto src_bold_c = "}!"; - // auto src_italics_o = "/{"; auto src_italics_c = "}/"; - // auto src_underscore_o = "_{"; auto src_underscore_c = "}_"; - // auto src_cite_o = ""{"; auto src_cite_c = "}""; - // auto src_insert_o = "+{"; auto src_insert_c = "}+"; - // auto src_strike_o = "-{"; auto src_strike_c = "}-"; - // auto src_superscript_o = "^{"; auto src_superscript_c = "}^"; - // auto src_subscript_o = ";{"; auto src_subscript_c = "}'" - // auto src_hilite_o = "*{"; auto src_hilite_c = "}*"; - // auto src_monospace_o = "#{"; auto src_monospace_c = "}#"; - // auto srcrgx_bold_o = "\\!\\{"; auto srcrgx_bold_c = "\\}\\!"; - // auto srcrgx_italics_o = "\\/\\{"; auto srcrgx_italics_c = "\\}\\/"; - // auto srcrgx_underscore_o = "_\\{"; auto srcrgx_underscore_c = "\\}_"; - // auto srcrgx_cite_o = "\"\\{"; auto srcrgx_cite_c = "\\}\""; - // auto srcrgx_insert_o = "\\+\\{"; auto srcrgx_insert_c = "\\}\\+"; - // auto srcrgx_strike_o = "\\-\\{"; auto srcrgx_strike_c = "\\}\\-"; - // auto srcrgx_superscript_o = "\\^\\{"; auto srcrgx_superscript_c = "\\}\\^"; - // auto srcrgx_subscript_o = ",\\{"; auto srcrgx_subscript_c = "\\},"; - // auto srcrgx_hilite_o = "\\*\\{"; auto srcrgx_hilite_c = "\\}\\*"; - // auto srcrgx_monospace_o = "\\#\\{"; auto srcrgx_monospace_c = "\\}\\#"; - // ⊹ - } -} diff --git a/lib/sdp/ao_emitter.d b/lib/sdp/ao_emitter.d deleted file mode 100644 index 7ed9fa8..0000000 --- a/lib/sdp/ao_emitter.d +++ /dev/null @@ -1,1479 +0,0 @@ -/+ - emitters - ao_emitters.d -+/ -mixin template Emitters() { - mixin InternalMarkup; - struct CLI { - string[string] extract_actions(string cmdlnins, string[string] actions) - in { } - body { - switch (cmdlnins) { - case "--no-assert": - actions["assert"] = "no"; - break; - default: - break; - } - return actions; - } - } - struct OCNemitter { - // class OCNemitter : AssertOCN { - int ocn, ocn_; - int ocn_emitter(int ocn_status_flag) - in { assert(ocn_status_flag <= 2); } - body { - if (ocn_status_flag == 0) { - ocn=++ocn_; - } else { - ocn=0; - } - assert(ocn >= 0); - return ocn; - } - invariant() { - } - } - struct ObjAttributes { - // class ObjAttributes : AssertObjAttributes { - string[string] obj_txt; - string para_and_blocks(string obj_txt_in) - in { } - body { - auto rgx = Rgx(); - obj_txt["munge"]=obj_txt_in; - if (match(obj_txt_in, rgx.para_bullet)) { - obj_txt["attrib"] =" \"bullet\": \"true\"," - ~ " \"indent_first\": 0," - ~ " \"indent_rest\": 0,"; - } else if (auto m = match(obj_txt_in, rgx.para_bullet_indent)) { - obj_txt["attrib"] =" \"bullet\": \"true\"," - ~ " \"indent_first\": " ~ to!string(m.captures[1]) ~ "," - ~ " \"indent_rest\": " ~ to!string(m.captures[1]) ~ ","; - } else if (auto m = match(obj_txt_in, rgx.para_indent_hang)) { - obj_txt["attrib"] =" \"bullet\": \"false\"," - ~ " \"indent_first\": " ~ to!string(m.captures[1]) ~ "," - ~ " \"indent_rest\": " ~ to!string(m.captures[2]) ~ ","; - } else if (auto m = match(obj_txt_in, rgx.para_indent)) { - obj_txt["attrib"] =" \"bullet\": \"false\"," - ~ " \"indent_first\": " ~ to!string(m.captures[1]) ~ "," - ~ " \"indent_rest\": " ~ to!string(m.captures[1]) ~ ","; - } else { - obj_txt["attrib"] =" \"bullet\": \"false\"," - ~ " \"indent_first\": 0," - ~ " \"indent_rest\": 0,"; - } - return obj_txt["attrib"]; - } - string para(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"para\"," - ~ " \"is\": \"para\""; - return obj_txt["attrib"]; - } - invariant() { - } - string heading(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"para\"," - ~ " \"is\": \"heading\""; - // obj_txt["struct"]=; - return obj_txt["attrib"]; - } - invariant() { - } - string header_make(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"head\"," - ~ " \"of\": \"header\"," - ~ " \"is\": \"header_make\""; - return obj_txt["attrib"]; - } - invariant() { - } - string header_metadata(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"head\"," - ~ " \"of\": \"header\"," - ~ " \"is\": \"header_metadata\""; - return obj_txt["attrib"]; - } - invariant() { - } - string code(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"code\""; - return obj_txt["attrib"]; - } - invariant() { - } - string group(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"group\""; - return obj_txt["attrib"]; - } - invariant() { - } - string block(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"block\""; - return obj_txt["attrib"]; - } - invariant() { - } - string verse(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"verse\""; - return obj_txt["attrib"]; - } - invariant() { - } - string quote(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"quote\""; - return obj_txt["attrib"]; - } - invariant() { - } - string table(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"content\"," - ~ " \"of\": \"block\"," - ~ " \"is\": \"table\""; - return obj_txt["attrib"]; - } - invariant() { - } - string comment(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["attrib"] = " \"use\": \"comment\"," - ~ " \"of\": \"comment\"," - ~ " \"is\": \"comment\""; - return obj_txt["attrib"]; - } - invariant() { - } - } - struct ObjInlineMarkupMunge { - // struct ObjInlineMarkupMunge : AssertObjInlineMarkup { - string[string] obj_txt; - int n_foot, n_foot_reg, n_foot_sp_asterisk, n_foot_sp_plus; - string obj_txt_out, tail, note; - private auto initialize_note_numbers() { - n_foot = 0; - n_foot_reg = 0; - n_foot_sp_asterisk = 0; - n_foot_sp_plus = 0; - } - private auto object_notes_(string obj_txt_in) - in { } - body { - auto rgx = Rgx(); - auto mkup = InternalMarkup(); - obj_txt_out = ""; - tail = ""; - obj_txt_in = replaceAll( - obj_txt_in, - rgx.inline_notes_curly_sp_asterisk, - (mkup.en_a_o ~ "*" ~ " $1" ~ mkup.en_a_c) - ); - obj_txt_in = - replaceAll( - obj_txt_in, - rgx.inline_notes_curly_sp_plus, - (mkup.en_a_o ~ "+" ~ " $1" ~ mkup.en_a_c) - ); - obj_txt_in = - replaceAll( - obj_txt_in, - rgx.inline_notes_curly, - (mkup.en_a_o ~ " $1" ~ mkup.en_a_c) - ); - if (match(obj_txt_in, rgx.inline_notes_al_gen)) { - foreach(m; matchAll(obj_txt_in, rgx.inline_text_and_note_al)) { - if (match(obj_txt_in, rgx.inline_al_delimiter_open_asterisk)) { - n_foot_sp_asterisk++; - n_foot=n_foot_sp_asterisk; - } else if (match(obj_txt_in, rgx.inline_al_delimiter_open_plus)) { - n_foot_sp_plus++; - n_foot=n_foot_sp_plus; - } else { - n_foot_reg++; - n_foot=n_foot_reg; - } - obj_txt_out ~= replaceFirst( - m.hit, - rgx.inline_al_delimiter_open_regular, - (mkup.en_a_o ~ to!string(n_foot)) - ); - tail = m.post; - // if (!empty(m.post)) { - // tail = m.post; - // } else { - // tail = ""; - // } - } - } else { - obj_txt_out = obj_txt_in; - } - debug(footnotes) { - writeln(obj_txt_out, tail); - } - obj_txt_out = obj_txt_out ~ tail; - debug(footnotesdone) { - foreach(m; matchAll(obj_txt_out, - (mkup.en_a_o ~ `\s*(.+?)` ~ mkup.en_a_c))) { - writeln(m.captures[1]); - writeln(m.hit); - } - } - return obj_txt_out; - } - string para(string obj_txt_in) - in { } - body { - auto rgx = Rgx(); - obj_txt["munge"]=obj_txt_in; - obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.para_attribs, ""); - obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.ocn_off_all, ""); - obj_txt["munge"]=object_notes_(obj_txt["munge"]); - debug(munge) { - writeln(__LINE__); - writeln(obj_txt_in); - writeln(__LINE__); - writeln(to!string(obj_txt["munge"])); - } - return obj_txt["munge"]; - } - string heading(string obj_txt_in) - in { } - body { - auto rgx = Rgx(); - obj_txt["munge"]=obj_txt_in; - obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading, ""); - obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.ocn_off_all, ""); - obj_txt["munge"]=object_notes_(obj_txt["munge"]); - debug(munge) { - writeln(__LINE__); - writeln(obj_txt_in); - writeln(__LINE__); - writeln(to!string(obj_txt["munge"])); - } - return obj_txt["munge"]; - } - invariant() { - } - string header_make(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - string header_metadata(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - string code(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - string group(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["munge"]=object_notes_(obj_txt["munge"]); - return obj_txt["munge"]; - } - invariant() { - } - string block(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["munge"]=object_notes_(obj_txt["munge"]); - return obj_txt["munge"]; - } - invariant() { - } - string verse(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - obj_txt["munge"]=object_notes_(obj_txt["munge"]); - return obj_txt["munge"]; - } - invariant() { - } - string quote(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - string table(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - string comment(string obj_txt_in) - in { } - body { - obj_txt["munge"]=obj_txt_in; - return obj_txt["munge"]; - } - invariant() { - } - } - struct ObjInlineMarkup { - // struct ObjInlineMarkup : AssertObjInlineMarkup { - auto munge = ObjInlineMarkupMunge(); - string[string] obj_txt; - string obj_inline_markup(string obj_is_, string obj_raw) - in { } - body { - obj_txt["munge"]=obj_raw.dup; - obj_txt["munge"]=(match(obj_is_, ctRegex!(`verse|code`))) - ? obj_txt["munge"] - : strip(obj_txt["munge"]); - switch (obj_is_) { - case "header_make": - obj_txt["munge"]=munge.header_make(obj_txt["munge"]); - break; - case "header_metadata": - obj_txt["munge"]=munge.header_metadata(obj_txt["munge"]); - break; - case "heading": - obj_txt["munge"]=munge.heading(obj_txt["munge"]); - break; - case "para": - obj_txt["munge"]=munge.para(obj_txt["munge"]); - break; - case "code": - obj_txt["munge"]=munge.code(obj_txt["munge"]); - break; - case "group": - obj_txt["munge"]=munge.group(obj_txt["munge"]); - break; - case "block": - obj_txt["munge"]=munge.block(obj_txt["munge"]); - break; - case "verse": - obj_txt["munge"]=munge.verse(obj_txt["munge"]); - break; - case "quote": - obj_txt["munge"]=munge.quote(obj_txt["munge"]); - break; - case "table": - obj_txt["munge"]=munge.table(obj_txt["munge"]); - break; - case "comment": - obj_txt["munge"]=munge.comment(obj_txt["munge"]); - break; - case "doc_end_reset": - munge.initialize_note_numbers(); - break; - default: - break; - } - return obj_txt["munge"]; - } - invariant() { - } - } - struct ObjAttrib { - // struct ObjAttrib : AssertObjAttrib { - // auto sink = appender!(char[])(); - auto attrib = ObjAttributes(); - string[string] obj_attrib; - string obj_attributes(string obj_is_, string obj_raw, string node) - in { } - body { - // string s = "{ \"language\": \"D\", \"rating\": 3.14, \"code\": \"42\" }"; - scope(exit) { - // destroy(obj_is_); - destroy(obj_raw); - destroy(node); - } - JSONValue node_j = parseJSON(node); - obj_attrib.remove("json"); - obj_attrib["json"] ="{"; - switch (obj_is_) { - case "header_make": - obj_attrib["json"] ~= attrib.header_make(obj_raw); - break; - case "header_metadata": - obj_attrib["json"] ~= attrib.header_metadata(obj_raw); - break; - case "heading": - obj_attrib["json"] ~= attrib.heading(obj_raw); // - break; - case "para": - obj_attrib["json"] ~= attrib.para_and_blocks(obj_raw) - ~ attrib.para(obj_raw); - break; - case "code": - obj_attrib["json"] ~= attrib.code(obj_raw); - break; - case "group": - obj_attrib["json"] ~= attrib.para_and_blocks(obj_raw) - ~ attrib.group(obj_raw); - break; - case "block": - obj_attrib["json"] ~= attrib.para_and_blocks(obj_raw) - ~ attrib.block(obj_raw); - break; - case "verse": - obj_attrib["json"] ~= attrib.verse(obj_raw); - break; - case "quote": - obj_attrib["json"] ~= attrib.quote(obj_raw); - break; - case "table": - obj_attrib["json"] ~= attrib.table(obj_raw); - break; - case "comment": - obj_attrib["json"] ~= attrib.comment(obj_raw); - break; - default: - obj_attrib["json"] ~= attrib.para(obj_raw); - break; - } - obj_attrib["json"] ~=" }"; - JSONValue oa_j = parseJSON(obj_attrib["json"]); - assert( - (oa_j.type == JSON_TYPE.OBJECT) && - (node_j.type == JSON_TYPE.OBJECT) - ); - if (obj_is_ == "heading") { - oa_j.object["ocn"] = node_j["ocn"]; - oa_j.object["lvn"] = node_j["lvn"]; - oa_j.object["lcn"] = node_j["lcn"]; - oa_j.object["heading_pointer"] = - node_j["heading_pointer"]; // check - oa_j.object["doc_object_pointer"] = - node_j["doc_object_pointer"]; // check - } - oa_j.object["parent_ocn"] = node_j["parent_ocn"]; - oa_j.object["parent_lvn"] = node_j["parent_lvn"]; - obj_attrib["json"] = oa_j.toString(); - debug(structattrib) { - if (oa_j["is"].str() == "heading") { - // writeln(__LINE__); - writeln(obj_attrib["json"]); - // writeln(node); - writeln( - "is: ", oa_j["is"].str(), - "; ocn: ", oa_j["ocn"].integer() - ); - } - } - // obj_attrib["json"]="{}"; - return obj_attrib["json"]; - } - invariant() { - } - } - struct HeaderDocMetadataMakeJson { - // class HeaderMetadataMakeHash : AssertHeaderMetadataMakeJson { - auto rgx = Rgx(); - string hm, hs; - auto header_metadata_and_make_jsonstr( - string header, - JSONValue[string] dochead_metadata, - JSONValue[string] dochead_make - ) - in { } - body { - scope(exit) { - destroy(header); - destroy(dochead_metadata); - destroy(dochead_make); - } - if (auto t = match(header, rgx.head_main)) { - char[][] obj_spl = split( - cast(char[]) header, - rgx.line_delimiter_ws_strip - ); - auto hm = to!string(t.captures[1]); - if (match(hm, rgx.main_headers)) { - foreach (line; obj_spl) { - if (auto m = match(line, rgx.head_main)) { - if (!empty(m.captures[2])) { - if (hm == "creator") { - dochead_metadata[hm]["author"].str = - to!string(m.captures[2]); - } else if (hm == "title") { - dochead_metadata[hm]["main"].str = - to!string(m.captures[2]); - } else if (hm == "publisher") { - dochead_metadata[hm]["name"].str = - to!string(m.captures[2]); - } - } - } else if (auto s = match(line, rgx.head_sub)) { - if (!empty(s.captures[2])) { - auto hs = to!string(s.captures[1]); - if ((hm == "make" ) - && (dochead_make[hm].type() == JSON_TYPE.OBJECT)) { - switch (hm) { - case "make": - if (match(hs, rgx.subhead_make)) { - if (dochead_make[hm][hs].type() == JSON_TYPE.STRING) { - dochead_make[hm][hs].str = to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - default: - break; - } - } else if (dochead_metadata[hm].type() == JSON_TYPE.OBJECT) { - switch (hm) { - case "creator": - if (match(hs, rgx.subhead_creator)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "title": - if (match(hs, rgx.subhead_title)) { - if ((hs == "subtitle") - && (dochead_metadata[hm]["sub"].type() == JSON_TYPE.STRING)) { - dochead_metadata[hm]["sub"].str = - to!string(s.captures[2]); - } else if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "rights": - if (match(hs, rgx.subhead_rights)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "date": - if (match(hs, rgx.subhead_date)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "original": - if (match(hs, rgx.subhead_original)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "classify": - if (match(hs, rgx.subhead_classify)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "identifier": - if (match(hs, rgx.subhead_identifier)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "notes": - if (match(hs, rgx.subhead_notes)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "publisher": - if (match(hs, rgx.subhead_publisher)) { - if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - dochead_metadata[hm][hs].str = - to!string(s.captures[2]); - } - } else { - writeln("not a valid header type:", hm, ":", hs); - destroy(hm); - destroy(hs); - } - break; - case "links": - destroy(hm); - destroy(hs); - // if (match(hs, rgx.subhead_links)) { - // if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { - // dochead_metadata[hm][hs].str = to!string(s.captures[2]); - // } - // } else { - // writeln("not a valid header type:", hm, ":", hs); - // destroy(hm); - // destroy(hs); - // } - break; - default: - break; - } - } - } - } - } - } else { - writeln("not a valid header type:", hm); - } - } - auto t = tuple(dochead_metadata, dochead_make); - static assert(!isTypeTuple!(t)); - return t; - } - // invariant() { - // } - } - class HeaderMetadataMakeHash { - // class HeaderMetadataMakeHash : AssertHeaderMetadataMakeHash { - auto rgx = Rgx(); - string header_main; - string[string] head; - string[string] header_topic_hash(string header) - in { } - body { - if (auto t = match(header, rgx.head_main)) { - char[][] obj_spl = split( - cast(char[]) header, - rgx.line_delimiter_ws_strip - ); - auto header_main = to!string(t.captures[1]); - head[header_main] = "{"; - foreach (line; obj_spl) { - if (auto m = match(line, rgx.head_main)) { - if (!empty(m.captures[2])) { - head[header_main] ~= - "\"" ~ header_main ~ - "\": \"" ~ - to!string(m.captures[2]) ~ - "\","; - } - } else if (auto s = match(line, rgx.head_sub)) { - head[header_main] ~= "\"" ~ s.captures[1] ~ "\":"; - if (!empty(s.captures[2])) { - head[header_main] ~= "\"" ~ s.captures[2] ~ "\","; - } - } - } - head[header_main] = replaceFirst( - head[header_main], - rgx.tailing_comma, - "" - ); - head[header_main] ~= "}"; - debug(headerjson) { - JSONValue j = parseJSON(head[header_main]); - assert( - (j.type == JSON_TYPE.OBJECT) - ); - } - } - return head; - } - invariant() { - } - } - struct BookIndexNuggetHash { - // class BookIndexNuggetHash : AssertBookIndexNuggetHash { - string main_term, sub_term, sub_term_bits; - uint ocn_offset, ocn_endpoint; - string[] ocns; - string[][string][string] bi; - string[][string][string] hash_nugget; - string[] bi_main_terms_split_arr; - string[][string][string] bookindex_nugget_hash(string bookindex, int ocn) - in { - debug(bookindexraw) { - mixin ScreenTxtColors; - if (!bookindex.empty) { - writeln( - scr_txt_color["blue"], "* [bookindex] ", scr_txt_color["off"], - "[", to!string(ocn), "] ", bookindex - ); - } - } - } - body { - auto rgx = Rgx(); - if (!bookindex.empty) { - auto bi_main_terms_split_arr = - split(bookindex, rgx.bi_main_terms_split); - foreach (bi_main_terms_content; bi_main_terms_split_arr) { - auto bi_main_term_and_rest = - split(bi_main_terms_content, rgx.bi_main_term_plus_rest_split); - if (auto m = match( - bi_main_term_and_rest[0], - rgx.bi_term_and_ocns_match) - ) { - main_term = strip(m.captures[1]); - ocn_offset = to!uint(m.captures[2]); - ocn_endpoint=(ocn + ocn_offset); - ocns ~= (to!string(ocn) ~ "-" ~ to!string(ocn_endpoint)); - } else { - main_term = strip(bi_main_term_and_rest[0]); - ocns ~= to!string(ocn); - } - bi[main_term]["_a"] ~= ocns; - ocns=null; - if (bi_main_term_and_rest.length > 1) { - auto bi_sub_terms_split_arr = - split( - bi_main_term_and_rest[1], - rgx.bi_sub_terms_plus_ocn_offset_split - ); - foreach (sub_terms_bits; bi_sub_terms_split_arr) { - if (auto m = match(sub_terms_bits, rgx.bi_term_and_ocns_match)) { - sub_term = strip(m.captures[1]); - ocn_offset = to!uint(m.captures[2]); - ocn_endpoint=(ocn + ocn_offset); - ocns ~= (to!string(ocn) ~ " - " ~ to!string(ocn_endpoint)); - } else { - sub_term = strip(sub_terms_bits); - ocns ~= to!string(ocn); - } - if (!empty(sub_term)) { - bi[main_term][sub_term] ~= ocns; - } - ocns=null; - } - } - // ocns=null; - } - } - hash_nugget = bi; - // bi=null; // bi.init; // use to empty for each next object; else, harvest hashes at the end of the document - return hash_nugget; - } - invariant() { - } - } - struct BookIndexReport { - // class BookIndexReport : AssertBookIndexReport { - int mkn, skn; - auto bookindex_report_sorted( - string[][string][string] bookindex_unordered_hashes - ) { - auto mainkeys=bookindex_unordered_hashes.byKey.array. - sort!("toLower(a) < toLower(b)", SwapStrategy.stable).release; - foreach (mainkey; mainkeys) { - auto subkeys=bookindex_unordered_hashes[mainkey].byKey.array. - sort!("toLower(a) < toLower(b)", SwapStrategy.stable).release; - foreach (subkey; subkeys) { - debug(bookindex) { - writeln( - mainkey, ": ", - subkey, ": ", - to!string(bookindex_unordered_hashes[mainkey][subkey]) - ); - } - // bookindex_the[mkn][mainkey][skn][subkey] ~= (bookindex_unordered_hashes[mainkey][subkey]); - skn++; - } - mkn++; - } - // return bookindex_the; - } - } - struct BookIndexReportIndent { - int mkn, skn; - auto bookindex_report_indented( - string[][string][string] bookindex_unordered_hashes - ) { - auto mainkeys= - bookindex_unordered_hashes.byKey.array.sort().release; - foreach (mainkey; mainkeys) { - debug(bookindex) { - writeln(mainkey); - } - auto subkeys= - bookindex_unordered_hashes[mainkey].byKey.array.sort().release; - foreach (subkey; subkeys) { - debug(bookindex) { - writeln(" ", subkey); - writeln(" ", to!string( - bookindex_unordered_hashes[mainkey][subkey] - )); - } - // bookindex_the[mkn][mainkey][skn][subkey] ~= (bookindex_unordered_hashes[mainkey][subkey]); - skn++; - } - mkn++; - } - } - } - struct BookIndexReportSection { - mixin ObjectSetters; - int mkn, skn; - auto rgx = Rgx(); - auto bookindex_write_section( - string[][string][string] bookindex_unordered_hashes - ) { - auto mainkeys=bookindex_unordered_hashes.byKey.array.sort().release; - foreach (mainkey; mainkeys) { - write("_0_1 !{", mainkey, "}! "); - foreach (ref_; bookindex_unordered_hashes[mainkey]["_a"]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - write(" {", ref_, "}#", go, ", "); - } - writeln(" \\\\"); - bookindex_unordered_hashes[mainkey].remove("_a"); - auto subkeys= - bookindex_unordered_hashes[mainkey].byKey.array.sort().release; - foreach (subkey; subkeys) { - write(" ", subkey, ", "); - foreach (ref_; bookindex_unordered_hashes[mainkey][subkey]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - write(" {", ref_, "}#", go, ", "); - } - writeln(" \\\\"); - skn++; - } - mkn++; - } - } - auto bookindex_build_section( - string[][string][string] bookindex_unordered_hashes, - int ocn - ) { - string type; - int type_heading; - string lev, lvn, lcn; - string attrib; - string indent_first; - string indent_second; - auto set_oa = ObjectAbstractSet(); - auto mainkeys = - bookindex_unordered_hashes.byKey.array.sort().release; - string bi_tmp; - string[string][] bookindex; - writeln(mainkeys.length); - // B~ Book Index - type_heading=1; - bi_tmp = "Book Index"; - attrib=""; - lev="B"; - lvn="1"; - lcn="1"; - bookindex ~= - set_oa.contents_heading( - type_heading, - bi_tmp, - attrib, - ocn, - lev, - lvn, - lcn - ); - ocn++; - mkn++; - // 1~ Index - type_heading=1; - bi_tmp = "Index"; - attrib=""; - lev="1"; - lvn="4"; - lcn="2"; - bookindex ~= - set_oa.contents_heading( - type_heading, - bi_tmp, - attrib, - ocn, - lev, - lvn, - lcn - ); - ocn++; - mkn++; - foreach (mainkey; mainkeys) { - bi_tmp = "!{" ~ mainkey ~ "}! "; - // bi_tmp = "_0_1 !{" ~ mainkey ~ "}! "; - foreach (ref_; bookindex_unordered_hashes[mainkey]["_a"]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; - } - bi_tmp ~= " \\\\\n "; - bookindex_unordered_hashes[mainkey].remove("_a"); - auto subkeys = - bookindex_unordered_hashes[mainkey].byKey.array.sort().release; - foreach (subkey; subkeys) { - bi_tmp ~= subkey ~ ", "; - foreach (ref_; bookindex_unordered_hashes[mainkey][subkey]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; - } - bi_tmp ~= " \\\\\n "; - skn++; - } - bi_tmp = replaceFirst(bi_tmp, rgx.trailing_linebreak, ""); - type="para"; - attrib=""; - indent_first = "0"; - indent_second = "1"; - attrib=""; - bookindex ~= - set_oa.contents_para( - type, - bi_tmp, - attrib, - ocn, - indent_first, - indent_second, - false - ); - ocn++; - mkn++; - } - auto t = tuple(bookindex, ocn); - return t; - } - auto bookindex_build_section_( - string[][string][string] bookindex_unordered_hashes - ) { - auto mainkeys = - bookindex_unordered_hashes.byKey.array.sort().release; - string bi_tmp; - string[] bookindex; - // int bi_num; - writeln(mainkeys.length); - foreach (mainkey; mainkeys) { - bi_tmp = "_0_1 !{" ~ mainkey ~ "}! "; - foreach (ref_; bookindex_unordered_hashes[mainkey]["_a"]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; - } - bi_tmp ~= " \\\\\n "; - bookindex_unordered_hashes[mainkey].remove("_a"); - auto subkeys = - bookindex_unordered_hashes[mainkey].byKey.array.sort().release; - foreach (subkey; subkeys) { - bi_tmp ~= subkey ~ ", "; - // bi_tmp ~= " " ~ subkey ~ ", "; - foreach (ref_; bookindex_unordered_hashes[mainkey][subkey]) { - auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; - } - bi_tmp ~= " \\\\\n "; - skn++; - } - bi_tmp = replaceFirst(bi_tmp, rgx.trailing_linebreak, ""); - bookindex ~= bi_tmp; - mkn++; - } - return bookindex; - } - } - struct NotesSection { - mixin ObjectSetters; - string object_notes; - ulong previous_count; - int mkn; - auto rgx = Rgx(); - private auto gather_notes_for_endnote_section( - string[string][] contents_arbitrary_max_length_set, - ulong counter - ) - in { - // endnotes/ footnotes for - // doc objects other than paragraphs & headings - // various forms of grouped text - assert((contents_arbitrary_max_length_set[counter]["is"] == "para") - || (contents_arbitrary_max_length_set[counter]["is"] == "heading")); - assert(counter > previous_count); - previous_count=counter; - assert( - match(contents_arbitrary_max_length_set[counter]["obj"], - rgx.inline_notes_delimiter_al_regular_number_note) - ); - } - body { - foreach(m; - matchAll(contents_arbitrary_max_length_set[counter]["obj"], - rgx.inline_notes_delimiter_al_regular_number_note)) { - debug(endnotes_build) { - writeln( - "{^{", m.captures[1], ".}^}#noteref_", m.captures[1], " ", - m.captures[2]); // sometimes need segment name (segmented html & epub) - // writeln("{^{", m.captures[1], ".}^}#", contents_arbitrary_max_length_set[counter]["ocn"], " ", m.captures[2]); - } - object_notes ~= - "{^{" ~ m.captures[1] ~ ".}^}#noteref_" ~ - m.captures[1] ~ " " ~ m.captures[2] ~ "』"; - } - return object_notes; - } - private auto gathered_notes() - in { - } - body { - string[] endnotes_; - if (object_notes.length > 1) { - endnotes_ = (split(object_notes, rgx.break_string))[0..$-1]; - } - return endnotes_; - } - private auto endnote_objects(int ocn) - in { - } - body { - auto set_oa = ObjectAbstractSet(); - string[string][] endnotes; - auto endnotes_ = gathered_notes(); - // auto endnotes_ = (split(object_notes, rgx.break_string))[0..$-1]; - string type; - int type_heading; - string lev, lvn, lcn; - string attrib; - string indent_first; - string indent_second; - // B~ Endnotes - type_heading=1; - attrib=""; - lev="B"; - lvn="1"; - lcn="1"; - endnotes ~= - set_oa.contents_heading( - type_heading, - "Endnotes", - attrib, - ocn, - lev, - lvn, - lcn - ); - ocn++; - mkn++; - // 1~ Endnotes - type_heading=1; - attrib=""; - lev="1"; - lvn="4"; - lcn="2"; - endnotes ~= - set_oa.contents_heading( - type_heading, - "Endnotes", - attrib, - ocn, - lev, - lvn, - lcn - ); - ocn++; - mkn++; - foreach (endnote; endnotes_) { - type="para"; - attrib=""; - indent_first = "0"; - indent_second = "0"; - attrib=""; - endnotes ~= - set_oa.contents_para( - type, - endnote, - attrib, - ocn, - indent_first, - indent_second, - false - ); - ocn++; - mkn++; - } - auto t = tuple(endnotes, ocn); - return t; - } - } - struct Bibliography { - public JSONValue[] bibliography(ref string[] biblio_unsorted_incomplete, ref JSONValue[] bib_arr_json) - in { } - body { - JSONValue[] biblio_unsorted = - biblio_unsorted_complete(biblio_unsorted_incomplete, bib_arr_json); - JSONValue[] biblio_sorted = biblio_sort(biblio_unsorted); - biblio_debug(biblio_sorted); - return biblio_sorted; - } - final private JSONValue[] biblio_unsorted_complete( - string[] biblio_unordered, - ref JSONValue[] bib_arr_json - ) { - // JSONValue[] bib_arr_json; - // int count_biblio_entry; - // count_biblio_entry=0; // watch - foreach (bibent; biblio_unordered) { - // update bib to include deemed_author, needed for: - // sort_bibliography_array_by_deemed_author_year_title - // either: sort on multiple fields, or; create such sort field - JSONValue j = parseJSON(bibent); - if (!empty(j["fulltitle"].str)) { - if (!empty(j["author_raw"].str)) { - j["deemed_author"]=j["author_arr"][0]; - } else if (!empty(j["editor_raw"].str)) { - j["deemed_author"]=j["editor_arr"][0]; - } - j["sortby_deemed_author_year_title"] = ( - j["deemed_author"].str ~ - "; " ~ - j["year"].str ~ - "; " ~ - j["fulltitle"].str - ); - // bib[count_biblio_entry] = j.toString(); - } - bib_arr_json ~= j; - // count_biblio_entry++; - // bib_arr_json[count_biblio_entry] = j; - // count_biblio_entry++; - } - JSONValue[] biblio_unsorted_array_of_json_objects = - bib_arr_json.dup; - return biblio_unsorted_array_of_json_objects; - } - final private JSONValue[] biblio_sort(JSONValue[] biblio_unordered) { - JSONValue[] biblio_sorted; - biblio_sorted = - sort!((a, b){ - return ((a["sortby_deemed_author_year_title"].str) < (b["sortby_deemed_author_year_title"].str)); - })(biblio_unordered).array; - debug(bibliosorted) { - foreach (j; biblio_sorted) { - if (!empty(j["fulltitle"].str)) { - writeln(j["sortby_deemed_author_year_title"]); - // writeln(j["deemed_author"], " (", j["author"], ") ", j["fulltitle"]); - } - } - } - return biblio_sorted; - } - auto biblio_debug(JSONValue[] biblio_sorted) { - debug(biblio) { - foreach (j; biblio_sorted) { - if (!empty(j["fulltitle"].str)) { - writeln(j["sortby_deemed_author_year_title"]); - } - } - } - } - } - struct NodeStructureMetadata { - // class NodeStructureMetadata : AssertNodeJSON { - int lv, lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7; - uint ocn; - uint[string] p_; // p_ parent_ - string node; - string node_emitter( - string lvn, - int ocn_, - int counter_, - int pointer_, - string is_ - ) - in { - auto rgx = Rgx(); - assert(is_ != "heading"); - assert(to!int(ocn_) >= 0); - } - body { - // scope(failure) { - // writeln(__FILE__, ":", __LINE__, " failed here:"); - // writeln(" is : ", is_); - // writeln(" node: ", node); - // } - assert(is_ != "heading"); // should not be necessary - assert(to!int(ocn_) >= 0); // should not be necessary - uint ocn=to!uint(ocn_); - if (lv7 > 0) { - p_["lvn"] = 7; p_["ocn"] = lv7; - } else if (lv6 > 0) { - p_["lvn"] = 6; p_["ocn"] = lv6; - } else if (lv5 > 0) { - p_["lvn"] = 5; p_["ocn"] = lv5; - } else { - p_["lvn"] = 4; p_["ocn"] = lv4; - } - node=("{ " ~ - "\"is\": \"" ~ is_ ~ "\"" ~ - ", \"heading_pointer\": " ~ to!string(pointer_) ~ - ", \"doc_object_pointer\": " ~ to!string(counter_) ~ - ", \"ocn\": " ~ to!string(ocn_) ~ - ", \"parent_ocn\": " ~ to!string(p_["ocn"]) ~ - ", \"parent_lvn\": " ~ to!string(p_["lvn"]) ~ - " }" - ); - debug(node) { - mixin ScreenTxtColors; - if (match(lvn, rgx.levels_numbered_headings)) { - writeln(scr_txt_marker["yellow"], to!string(node)); - } else { - writeln(scr_txt_marker["white"], to!string(node)); - } - } - JSONValue j = parseJSON(node); - assert(j["parent_lvn"].integer >= 4); - assert(j["parent_lvn"].integer <= 7); - assert(j["parent_ocn"].integer >= 0); - return node; - } - invariant() { - } - string node_emitter_heading( - string lvn, - string lcn, - int ocn_, - int counter_, - int pointer_, - string is_ - ) - in { - auto rgx = Rgx(); - assert(is_ == "heading"); - assert(to!uint(ocn_) >= 0); - assert( - match(lvn, rgx.levels_numbered), - ("not a valid heading level: " ~ lvn ~ " at " ~ to!string(ocn_)) - ); - // assert(to!uint(ocn_) >= 0); - if (match(lvn, rgx.levels_numbered)) { - if (to!uint(lvn) == 0) { - assert(to!uint(ocn_) == 1); - // writeln(lvn); - } - } - } - body { - // scope(failure) { - // writeln(__FILE__, ":", __LINE__, " failed here:"); - // writeln(" is : ", is_); - // writeln(" node: ", node); - // } - auto rgx = Rgx(); - uint ocn=to!uint(ocn_); - switch (lvn) { // switch (to!string(lv)) { - case "0": - lv=0; - lv0=ocn; lv1=0; lv2=0; lv3=0; lv4=0; lv5=0; lv6=0; lv7=0; - p_["lvn"] = 0; p_["ocn"] = 0; - break; - case "1": - lv=1; - lv1=ocn; lv2=0; lv3=0; lv4=0; lv5=0; lv6=0; lv7=0; - p_["lvn"] = 0; p_["ocn"] = lv0; - break; - case "2": - lv=2; - lv2=ocn; lv3=0; lv4=0; lv5=0; lv6=0; lv7=0; - p_["lvn"] = 1; p_["ocn"] = lv1; - break; - case "3": - lv=3; - lv3=ocn; lv4=0; lv5=0; lv6=0; lv7=0; - p_["lvn"] = 2; p_["ocn"] = lv2; - break; - case "4": - lv=4; - lv4=ocn; lv5=0; lv6=0; lv7=0; - if (lv3 > 0) { - p_["lvn"] = 3; p_["ocn"] = lv3; - } else if (lv2 > 0) { - p_["lvn"] = 2; p_["ocn"] = lv2; - } else if (lv1 > 0) { - p_["lvn"] = 1; p_["ocn"] = lv1; - } else { - p_["lvn"] = 0; p_["ocn"] = lv0; - } - break; - case "5": - lv=5; - lv5=ocn; lv6=0; lv7=0; - p_["lvn"] = 4; p_["ocn"] = lv4; - break; - case "6": - lv=6; - lv6=ocn; lv7=0; - p_["lvn"] = 5; p_["ocn"] = lv5; - break; - case "7": - lv=7; - lv7=ocn; - p_["lvn"] = 6; p_["ocn"] = lv6; - break; - default: - // if (lv7 > 0) { - // p_["lvn"] = 7; p_["ocn"] = lv7; - // } else if (lv6 > 0) { - // p_["lvn"] = 6; p_["ocn"] = lv6; - // } else if (lv5 > 0) { - // p_["lvn"] = 5; p_["ocn"] = lv5; - // } else { - // p_["lvn"] = 4; p_["ocn"] = lv4; - // } - break; - } - node=("{ " ~ - "\"is\": \"" ~ is_ ~ "\"" ~ - ", \"heading_pointer\": " ~ to!string(pointer_) ~ - ", \"doc_object_pointer\": " ~ to!string(counter_) ~ - ", \"ocn\": " ~ to!string(ocn_) ~ - ", \"lvn\": " ~ to!string(lvn) ~ - ", \"lcn\": " ~ to!string(lcn) ~ - ", \"parent_ocn\": " ~ to!string(p_["ocn"]) ~ - ", \"parent_lvn\": " ~ to!string(p_["lvn"]) ~ - " }" - ); - debug(heading) { - mixin ScreenTxtColors; - if (match(lvn, rgx.levels_numbered_headings)) { - writeln(scr_txt_marker["yellow"], to!string(node)); - } - } - debug(node) { - mixin ScreenTxtColors; - if (match(lvn, rgx.levels_numbered_headings)) { - writeln(scr_txt_marker["yellow"], to!string(node)); - } else { - writeln(scr_txt_marker["white"], to!string(node)); - } - } - JSONValue j = parseJSON(node); - assert(j["parent_lvn"].integer <= 7); - assert(j["parent_ocn"].integer >= 0); - if (match(lvn, rgx.levels_numbered_headings)) { - assert(j["lvn"].integer <= 7); - assert(j["ocn"].integer >= 0); - if (j["parent_lvn"].integer > 0) { - assert(j["parent_lvn"].integer < j["lvn"].integer); - if (j["ocn"].integer != 0) { - assert(j["parent_ocn"].integer < j["ocn"].integer); - } - } - if (j["lvn"].integer == 0) { - assert(j["parent_lvn"].integer == 0); - } else if (j["lvn"].integer == 1) { - assert(j["parent_lvn"].integer == 0); - } else if (j["lvn"].integer == 2) { - assert(j["parent_lvn"].integer == 1); - } else if (j["lvn"].integer == 3) { - assert(j["parent_lvn"].integer == 2); - } else if (j["lvn"].integer == 4) { - assert(j["parent_lvn"].integer <= 3); - } else if (j["lvn"].integer == 5) { - assert(j["parent_lvn"].integer == 4); - } else if (j["lvn"].integer == 6) { - assert(j["parent_lvn"].integer == 5); - } else if (j["lvn"].integer == 7) { - assert(j["parent_lvn"].integer == 6); - } else if (j["lvn"].integer == 8) { - // writeln(j["parent_lvn"].integer); - // assert(j["parent_lvn"].integer >= 4); - // assert(j["parent_lvn"].integer <= 7); - } - } - return node; - } - invariant() { - } - } -} diff --git a/lib/sdp/ao_object_setter.d b/lib/sdp/ao_object_setter.d deleted file mode 100644 index 4492e8a..0000000 --- a/lib/sdp/ao_object_setter.d +++ /dev/null @@ -1,124 +0,0 @@ -/+ - object setter - ao_object_setter.d -+/ -template ObjectSetter() { - /+ structs +/ - struct HeadingAttrib { - int lev = 9; // use of enum should make this redundant, remove - int lev_markup_number = 9; - int lev_collapsed_number = 9; - } - struct ParaAttrib { - int indent_first = 0; - int indent_second = 0; - bool bullet = false; - } - struct BlockAttrib { - } - struct Comment { - // no .attrib and no .obj_cite_number - } - struct Node { - int ocn = 0; - int parent_lev = 0; - int parent_ocn = 0; - string node = ""; - } - struct ObjComposite { - // size_t id; - string use = ""; - string of = ""; - string is_a = ""; - string object = ""; - string obj_cite_number = ""; // not used for calculations? output only? else int - HeadingAttrib heading_attrib; - ParaAttrib para_attrib; - BlockAttrib block_attrib; - Node node_structure; - } - struct ObjCompositeArr { - ObjComposite[] oca; - } - - /+ structs setter +/ - struct ObjectAbstractSet { - import std.conv : to; - auto contents_comment(in string object) { - ObjComposite object_set; - object_set.use = "comment"; - object_set.of = "comment"; - object_set.is_a = "comment"; - object_set.object = object; - return object_set; - } - auto contents_heading( - in string object, - in string attrib, - in int obj_cite_number, - in int lev_markup_number, - in int lev_collapsed_number, - ) { - ObjComposite object_set; - object_set.use = "content"; - object_set.of = "para"; - object_set.is_a = "heading"; - object_set.object = object; - object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); - object_set.heading_attrib.lev_markup_number = lev_markup_number; - object_set.heading_attrib.lev_collapsed_number = lev_collapsed_number; - // object_set.node_structure.node = node; - return object_set; - } - auto contents_para( - in string is_a, - in string object, - in string attrib, - in int obj_cite_number, - in string[string] indent, - in bool bullet - ) { - ObjComposite object_set; - object_set.use = "content"; - object_set.of = "para"; - object_set.is_a = "para"; - object_set.object = object; - object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); - object_set.para_attrib.indent_first = 0; // indent["first"]; - object_set.para_attrib.indent_second = 0; // indent["second"]; - object_set.para_attrib.bullet = false; - // object_set.node_structure.node = node; - return object_set; - } - auto contents_block( - in string type, - in string object, - in string attrib, - in int obj_cite_number - ) { - ObjComposite object_set; - object_set.use = "content"; - object_set.of = "block"; - object_set.is_a = type; - object_set.object = object; - object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); - // object_set.node_structure.node = node; - return object_set; - } - auto contents_block_obj_cite_number_string( - in string type, - in string object, - in string obj_cite_number, - in string node - ) { - ObjComposite object_set; - object_set.use = "content"; - object_set.of = "block"; - object_set.is_a = type; - object_set.object = object; - object_set.obj_cite_number = obj_cite_number; - object_set.node_structure.node = node; - return object_set; - } - } -} diff --git a/lib/sdp/ao_output_debugs.d b/lib/sdp/ao_output_debugs.d deleted file mode 100644 index 9c66312..0000000 --- a/lib/sdp/ao_output_debugs.d +++ /dev/null @@ -1,417 +0,0 @@ -/+ - output debugs - ao_output_debugs.d -+/ -template SiSUoutputDebugs() { - struct SDPoutputDebugs { - auto tst_debugs(S)(auto ref const S s) { - mixin RgxInit; - mixin ScreenTxtColors; - auto rgx = Rgx(); - } - auto abstract_doc_source_debugs(S)(auto ref const S contents, - JSONValue[string] docmake, - JSONValue[string] dochead, - string[][string][string] bookindex_unordered_hashes, - JSONValue[] biblio, - string fn_src, - bool[string] opt_action_bool - ) { - mixin RgxInit; - mixin ScreenTxtColors; - auto rgx = Rgx(); - debug(parent) { - writefln( - "%s:%s", - __FILE__, - __LINE__, - ); - foreach (obj; contents) { - if (obj.use == "content") { - if (obj.is_a == "heading") { - writefln( - "%s%s node: %s heading: %s %s", - scr_txt_marker["cyan"], - obj.obj_cite_number, - obj.node, - obj.lev_markup_number, - obj.object, - ); - } else { - } - } - } - } - debug(dumpdoc) { - writefln( - "%s\n%s:%s", - "-------------------------------", - __FILE__, - __LINE__, - ); - foreach (obj; contents) { - if (obj.use == "content") { - writefln( - "[%s][%s]\n%s", - obj.obj_cite_number, - obj.is_a, - obj.object - ); - } - } - } - debug(objects) { - writefln( - "%s\n%s:%s", - "-------------------------------", - __FILE__, - __LINE__, - ); - foreach (obj; contents) { - if (obj.use == "content") { - writefln( - "%s* [%s][%s] %s%s", - scr_txt_color["green"], - obj.obj_cite_number, - obj.is_a, - scr_txt_color["off"], - obj.object - ); - } - } - } - debug(headermakejson) { - writefln( - "%s\n%s\n%s", - "document header, metadata & make instructions:", - dochead, - pointer_head_main, - ); - foreach (main_header; pointer_head_main) { - switch (main_header) { - case "make": - foreach (sub_header; pointer_head_sub_make) { - if (to!string(dochead[main_header][sub_header]).length > 2) { - writefln( - "%s:%s: %s", - main_header, - sub_header, - dochead[main_header][sub_header] - ); - } - } - break; - default: - break; - } - } - } - debug(headermetadatajson) { - writefln( - "%s\n%s\n%s", - "document header, metadata & make instructions:", - dochead, - pointer_head_main, - ); - foreach (main_header; pointer_head_main) { - switch (main_header) { - case "creator": - foreach (sub_header; pointer_head_sub_creator) { - if (to!string(dochead[main_header][sub_header]).length > 2) { - writefln( - "%s:%s: %s", - main_header, - sub_header, - dochead[main_header][sub_header] - ); - } - } - break; - case "title": - foreach (sub_header; pointer_head_sub_title) { - if (to!string(dochead[main_header][sub_header]).length > 2) { - writefln( - "%s:%s: %s", - main_header, - sub_header, - dochead[main_header][sub_header] - ); - } - } - break; - case "rights": - foreach (sub_header; pointer_head_sub_rights) { - if (to!string(dochead[main_header][sub_header]).length > 2) { - writefln( - "%s:%s: %s", - main_header, - sub_header, - dochead[main_header][sub_header] - ); - } - } - break; - case "date": - foreach (sub_header; pointer_head_sub_date) { - if (to!string(dochead[main_header][sub_header]).length > 2) { - writefln( - "%s:%s: %s", - main_header, - sub_header, - dochead[main_header][sub_header] - ); - } - } - break; - case "original": - foreach (sub_header; pointer_head_sub_original) { - if (to!string(dochead[main_header][sub_header]).length > 2) { - writefln( - "%s:%s: %s", - main_header, - sub_header, - dochead[main_header][sub_header] - ); - } - } - break; - case "classify": - foreach (sub_header; pointer_head_sub_classify) { - if (to!string(dochead[main_header][sub_header]).length > 2) { - writefln( - "%s:%s: %s", - main_header, - sub_header, - dochead[main_header][sub_header] - ); - } - } - break; - case "identifier": - foreach (sub_header; pointer_head_sub_identifier) { - if (to!string(dochead[main_header][sub_header]).length > 2) { - writefln( - "%s:%s: %s", - main_header, - sub_header, - dochead[main_header][sub_header] - ); - } - } - break; - case "notes": - foreach (sub_header; pointer_head_sub_notes) { - if (to!string(dochead[main_header][sub_header]).length > 2) { - writefln( - "%s:%s: %s", - main_header, - sub_header, - dochead[main_header][sub_header] - ); - } - } - break; - case "publisher": - foreach (sub_header; pointer_head_sub_publisher) { - if (to!string(dochead[main_header][sub_header]).length > 2) { - writefln( - "%s:%s: %s", - main_header, - sub_header, - dochead[main_header][sub_header] - ); - } - } - break; - default: - break; - } - } - } - debug(bookindex) { - writefln( - "%s\n%s:%s", - "-------------------------------", - __FILE__, - __LINE__, - ); - auto bookindex = BookIndexReport(); - bookindex.bookindex_report_sorted(bookindex_unordered_hashes); - } - debug(summary) { - string[string] check = [ - "last_obj_cite_number" : "NA [debug \"checkdoc\" not run]", - ]; - debug(checkdoc) { - foreach (obj; contents) { - if (obj.use == "content") { - if (!empty(obj.obj_cite_number)) { - check["last_obj_cite_number"] = obj.obj_cite_number; - } - } - } - } - debug(headings) { - writefln( - "%s\n%s:%s", - "-------------------------------", - __FILE__, - __LINE__, - ); - foreach (obj; contents) { - if (obj.is_a == "heading") { - writefln( - "%s%s~ [%s] %s", - scr_txt_marker["yellow"], - obj.heading_attrib.lev, - obj.obj_cite_number, - // "[", obj["is"], "] ", - obj.object - ); - } - } - } - writefln( - "%s%s%s\n%s\n%s%s\n%s%s\n%s%s\n%s:%s", - scr_txt_color["green"], - "-------------------------------", - scr_txt_color["off"], - fn_src, - "length contents array: ", - contents.length, - "last obj_cite_number: ", - check["last_obj_cite_number"], - "length bookindex: ", - bookindex_unordered_hashes.length, - __FILE__, - __LINE__, - ); - debug(checkdoc) { - if (auto mfn=match(fn_src, rgx.src_fn)) { - if (opt_action_bool["assertions"]) { - switch (mfn.captures[2]) { - case "live-manual.ssm": - assert(check["last_obj_cite_number"] == - "1019","last obj_cite_number should be: 1019 (check test, document is frequently updated)"); // ok - break; - case "sisu_markup.sst": - assert(check["last_obj_cite_number"] == - "297","last obj_cite_number expected to be: 297 rather than " ~ check["last_obj_cite_number"]); // ok - // assert(check["last_obj_cite_number"] == "297","last obj_cite_number expected to be: 297 rather than " ~ check["last_obj_cite_number"]); - // notes for first divergance study sisu headings 247 250 - // sisu has issue with code that contains heading 1~ which results in no obj_cite_number! ?? - // sisu currently has incorrect last body obj_cite_number of 294! - // bug in sisu? attend - break; - // sisu-markup-samples: - case "accelerando.charles_stross.sst": - assert(check["last_obj_cite_number"] == - "2861","last obj_cite_number expected to be: 2861 rather than " ~ check["last_obj_cite_number"]); // ok - break; - case "alices_adventures_in_wonderland.lewis_carroll.sst": - assert(check["last_obj_cite_number"] == - "805","last obj_cite_number expected to be: 805 rather than " ~ check["last_obj_cite_number"]); // 808 - break; - case "autonomy_markup0.sst": - assert(check["last_obj_cite_number"] == - "77","last obj_cite_number expected to be: 77 rather than " ~ check["last_obj_cite_number"]); // ok endnotes - // assert(check["last_obj_cite_number"] == "78","last obj_cite_number expected to be: 78 rather than " ~ check["last_obj_cite_number"]); - break; - case "content.cory_doctorow.sst": - assert(check["last_obj_cite_number"] == - "953","last obj_cite_number expected to be: 953 rather than " ~ check["last_obj_cite_number"]); // 1007 way off, check obj_cite_number off switches - // assert(check["last_obj_cite_number"] == "953","last obj_cite_number expected to be: 953 rather than " ~ check["last_obj_cite_number"]); - break; - case "democratizing_innovation.eric_von_hippel.sst": - // fixed ERROR! range violation, broken check! endnotes, bookindex, biblio - // error in bookindex ... (ch1; ch6; ch8 ) - assert(check["last_obj_cite_number"] == - "905","last obj_cite_number expected to be: 905 rather than " ~ check["last_obj_cite_number"]); // 911 - break; - case "down_and_out_in_the_magic_kingdom.cory_doctorow.sst": - assert(check["last_obj_cite_number"] == - "1417","last obj_cite_number expected to be: 1417 rather than " ~ check["last_obj_cite_number"]); // 1455 check obj_cite_number off switches - break; - case "for_the_win.cory_doctorow.sst": - assert(check["last_obj_cite_number"] == - "3510","last obj_cite_number expected to be: 3510 rather than " ~ check["last_obj_cite_number"]); // 3569 check obj_cite_number off switches - break; - case "free_as_in_freedom_2.richard_stallman_and_the_free_software_revolution.sam_williams.richard_stallman.sst": - assert(check["last_obj_cite_number"] == - "1082","last obj_cite_number expected to be: 1082 rather than " ~ check["last_obj_cite_number"]); // check 1079 too few - break; - case "free_culture.lawrence_lessig.sst": - assert(check["last_obj_cite_number"] == - "1330","last obj_cite_number expected to be: 1330 rather than " ~ check["last_obj_cite_number"]); // 1312 - // fixed ERROR! range violation, broken check! - // error in bookindex ... sections piracy (ch1) & property (ch10 market concentration) fixed - break; - case "free_for_all.peter_wayner.sst": // endnotes, bookindex, biblio - assert(check["last_obj_cite_number"] == - "1559","last obj_cite_number expected to be: 1559 rather than " ~ check["last_obj_cite_number"]); // 1560, check obj_cite_number off switches, has endnotes so 2 too many - // assert(check["last_obj_cite_number"] == "1559","last obj_cite_number expected to be: 1559 rather than " ~ check["last_obj_cite_number"]); - break; - case "gpl2.fsf.sst": - assert(check["last_obj_cite_number"] == - "65","last obj_cite_number expected to be: 65 rather than " ~ check["last_obj_cite_number"]); // ok endnotes? check - // assert(check["last_obj_cite_number"] == "66","last obj_cite_number expected to be: 66 rather than " ~ check["last_obj_cite_number"]); - break; - case "gpl3.fsf.sst": - assert(check["last_obj_cite_number"] == - "123","last obj_cite_number expected to be: 123 rather than " ~ check["last_obj_cite_number"]); // ok - break; - case "gullivers_travels.jonathan_swift.sst": - assert(check["last_obj_cite_number"] == - "668","last obj_cite_number expected to be: 668 rather than " ~ check["last_obj_cite_number"]); // 674 - break; - case "little_brother.cory_doctorow.sst": - assert(check["last_obj_cite_number"] == - "3130","last obj_cite_number expected to be: 3130 rather than " ~ check["last_obj_cite_number"]); // 3204, check obj_cite_number off switches - break; - case "the_cathedral_and_the_bazaar.eric_s_raymond.sst": - assert(check["last_obj_cite_number"] == - "258","last obj_cite_number expected to be: 258 rather than " ~ check["last_obj_cite_number"]); // ok - break; - case "the_public_domain.james_boyle.sst": - assert(check["last_obj_cite_number"] == - "970","last obj_cite_number expected to be: 970 rather than " ~ check["last_obj_cite_number"]); // 978 - break; - case "the_wealth_of_networks.yochai_benkler.sst": // endnotes, bookindex - assert(check["last_obj_cite_number"] == - "829","last obj_cite_number expected to be: 829 rather than " ~ check["last_obj_cite_number"]); // ok - // assert(check["last_obj_cite_number"] == "832","last obj_cite_number expected to be: 832 rather than " ~ check["last_obj_cite_number"]); - // has endnotes and bookindex, issue with sisu.rb - break; - case "through_the_looking_glass.lewis_carroll.sst": - assert(check["last_obj_cite_number"] == - "949","last obj_cite_number expected to be: 949 rather than " ~ check["last_obj_cite_number"]); // 955 - break; - case "two_bits.christopher_kelty.sst": // endnotes, bookindex, biblio - assert(check["last_obj_cite_number"] == - "1190","last obj_cite_number expected to be: 1190 rather than " ~ check["last_obj_cite_number"]); // 1191 - // assert(check["last_obj_cite_number"] == "1193","last obj_cite_number expected to be: 1193 rather than " ~ check["last_obj_cite_number"]); // 1191 ok? - // has endnotes and bookindex, issue with sisu.rb - break; - // fixed ERROR! range violation! - // error in bookindex ... (ch3 the movement) - case "un_contracts_international_sale_of_goods_convention_1980.sst": - assert(check["last_obj_cite_number"] == - "377","last obj_cite_number expected to be: 377 rather than " ~ check["last_obj_cite_number"]); // ok - break; - case "viral_spiral.david_bollier.sst": // endnotes, bookindex - assert(check["last_obj_cite_number"] == - "1078","last obj_cite_number expected to be: 1078 rather than " ~ check["last_obj_cite_number"]); // 1100 - // fixed ERROR! range violation! - // error in bookindex ... (ch7 ... building the cc machine, an extra semi colon) - break; - default: - writeln(fn_src); - break; - } - } - } - } - } - } - } -} diff --git a/lib/sdp/ao_read_source_files.d b/lib/sdp/ao_read_source_files.d deleted file mode 100644 index a5ca084..0000000 --- a/lib/sdp/ao_read_source_files.d +++ /dev/null @@ -1,281 +0,0 @@ -/+ - ao_read_source_files.d - - open markup files - - if master file scan for addional files to import/insert -+/ -// module ao_read_source_files; -template SiSUmarkupRaw() { - private import - std.exception, - std.regex, - std.stdio, - std.utf, - std.conv : to; - private import - ao_rgx; // ao_defaults.d - mixin RgxInit; - auto rgx = Rgx(); - struct MarkupRaw { - final char[][] sourceContent(in string fn_src) { - auto raw = MarkupRawUnit(); - auto sourcefile_content = - raw.markupSourceContentRawLineArray(fn_src, rgx.src_pth); - if (match(fn_src, rgx.src_fn_master)) { - auto ins = Inserts(); - sourcefile_content = - ins.scan_master_doc_source_for_insert_filenames(sourcefile_content, fn_src); - // auto ins = SiSUdocInserts.Inserts(); - } - return sourcefile_content; - } - } - private - struct MarkupRawUnit { - private import std.file; - final private string readInMarkupSource(in string fn_src) { - enforce( - exists(fn_src)!=0, - "file not found" - ); - string source_txt_str; - try { - if (exists(fn_src)) { - source_txt_str = readText(fn_src); - } - } - catch (ErrnoException ex) { - //// Handle errors - // switch(ex.errno) { - // case EPERM: - // case EACCES: - // // Permission denied - // break; - // case ENOENT: - // // File does not exist - // break; - // default: - // // Handle other errors - // break; - // } - } - catch (UTFException ex) { - // Handle validation errors - } - catch (FileException ex) { - // Handle errors - } - std.utf.validate(source_txt_str); - return source_txt_str; - } - final private char[][] markupSourceLineArray(in string src_text) { - char[][] source_line_arr = - split(cast(char[]) src_text, rgx.line_delimiter); - return source_line_arr; - } - final char[][] markupSourceContentRawLineArray(in string fn_src, Regex!(char) rgx_file ) { - enforce( - match(fn_src, rgx_file), - "not a sisu markup filename" - ); - auto source_txt_str = readInMarkupSource(fn_src); - auto source_line_arr = markupSourceLineArray(source_txt_str); - return source_line_arr; - } - } - struct Inserts { - private import ao_defaults; // ao_defaults.d - private import ao_ansi_colors; // ao_ansi_colors.d - auto scan_subdoc_source( - char[][] markup_sourcefile_insert_content, - string fn_src - ) { - mixin SiSUrgxInitFlags; - char[][] contents_insert; - auto type1 = flags_type_init; - mixin ScreenTxtColors; - int tell_l(string color, in char[] line) { - writeln(scr_txt_marker[color], line); - return 0; - } - auto fn_pth_full = match(fn_src, rgx.src_pth); - auto markup_src_file_path = fn_pth_full.captures[1]; - foreach (line; markup_sourcefile_insert_content) { - if (type1["curly_code"] == 1) { - type1["header_make"] = 0; - type1["header_metadata"] = 0; - if (auto m = match(line, rgx.block_curly_code_close)) { - type1["curly_code"] = 0; - } - contents_insert ~= line; - } else if (auto m = match(line, rgx.block_curly_code_open)) { - type1["curly_code"] = 1; - type1["header_make"] = 0; - type1["header_metadata"] = 0; - contents_insert ~= line; - } else if (type1["tic_code"] == 1) { - type1["header_make"] = 0; - type1["header_metadata"] = 0; - if (auto m = match(line, rgx.block_tic_close)) { - type1["tic_code"] = 0; - } - contents_insert ~= line; - } else if (auto m = match(line, rgx.block_tic_code_open)) { - type1["tic_code"] = 1; - type1["header_make"] = 0; - type1["header_metadata"] = 0; - contents_insert ~= line; - } else if ( - (type1["header_make"] == 1) - && match(line, rgx.header_sub) - ) { - type1["header_make"] = 1; - type1["header_metadata"] = 0; - // cont_dynamic_array ~= "% " ~ line; - } else if ( - (type1["header_metadata"] == 1) - && match(line, rgx.header_sub) - ) { - type1["header_metadata"] = 1; - type1["header_make"] = 0; - // cont_dynamic_array ~= "% " ~ line; - } else if (auto m = match(line, rgx.insert_src_fn_ssi_or_sst)) { - type1["header_make"] = 0; - type1["header_metadata"] = 0; - auto insert_fn = m.captures[2]; - auto insert_sub_pth = m.captures[1]; - auto fn_src_insert = - to!string(markup_src_file_path ~ insert_sub_pth ~ insert_fn); - auto raw = MarkupRawUnit(); - auto markup_sourcesubfile_insert_content = - raw.markupSourceContentRawLineArray(fn_src_insert, rgx.src_fn_find_inserts); - debug(insert) { // insert file - tell_l("red", line); - tell_l("red", fn_src_insert); - tell_l("fuchsia", "ERROR"); - writeln( - " length contents insert array: ", - markup_sourcesubfile_insert_content.length - ); - } - auto ins = Inserts(); - /+ - 1. load file, - 2. read lines; - 3. scan lines, - 4. if filename insert, and insert filename - 5. repeat 1 - 6. else - 7. add line to new array; - +/ - } else { - type1["header_make"] = 0; - type1["header_metadata"] = 0; - contents_insert ~= line; - } - } // end src subdoc (inserts) loop - return contents_insert; - } - auto scan_master_doc_source_for_insert_filenames( - char[][] sourcefile_content, - string fn_src - ) { - mixin SiSUrgxInitFlags; - char[][] contents; - auto type = flags_type_init; - mixin ScreenTxtColors; - int tell_l(string color, in char[] line) { - writeln(scr_txt_marker[color], line); - return 0; - } - auto fn_pth_full = match(fn_src, rgx.src_pth); - auto markup_src_file_path = fn_pth_full.captures[1]; - foreach (line; sourcefile_content) { - if (type["curly_code"] == 1) { - type["header_make"] = 0; - type["header_metadata"] = 0; - if (auto m = match(line, rgx.block_curly_code_close)) { - type["curly_code"] = 0; - } - contents ~= line; - } else if (auto m = match(line, rgx.block_curly_code_open)) { - type["curly_code"] = 1; - type["header_make"] = 0; - type["header_metadata"] = 0; - contents ~= line; - } else if (type["tic_code"] == 1) { - type["header_make"] = 0; - type["header_metadata"] = 0; - if (auto m = match(line, rgx.block_tic_close)) { - type["tic_code"] = 0; - } - contents ~= line; - } else if (auto m = match(line, rgx.block_tic_code_open)) { - type["tic_code"] = 1; - type["header_make"] = 0; - type["header_metadata"] = 0; - contents ~= line; - } else if ( - (type["header_make"] == 1) - && match(line, rgx.header_sub) - ) { - contents ~= line; - } else if ( - (type["header_metadata"] == 1) - && match(line, rgx.header_sub) - ) { - contents ~= line; - } else if (auto m = match(line, rgx.header_make)) { - type["header_make"] = 1; - type["header_metadata"] = 0; - contents ~= line; - } else if (auto m = match(line, rgx.header_metadata)) { - type["header_make"] = 0; - type["header_metadata"] = 1; - contents ~= line; - } else if (auto m = match(line, rgx.insert_src_fn_ssi_or_sst)) { - type["header_make"] = 0; - type["header_metadata"] = 0; - auto insert_fn = m.captures[2]; - auto insert_sub_pth = m.captures[1]; - auto fn_src_insert = - to!string(markup_src_file_path ~ insert_sub_pth ~ insert_fn); - auto raw = MarkupRawUnit(); - auto markup_sourcefile_insert_content = - raw.markupSourceContentRawLineArray(fn_src_insert, rgx.src_fn_find_inserts); - debug(insert) { // insert file - tell_l("red", line); - tell_l("red", fn_src_insert); - writeln( - " length contents insert array: ", - markup_sourcefile_insert_content.length - ); - } - auto ins = Inserts(); - auto contents_insert = ins.scan_subdoc_source( - markup_sourcefile_insert_content, - to!string(fn_src_insert) - ); - contents ~= contents_insert; - /+ - 1. load file, - 2. read lines; - 3. scan lines, - 4. if filename insert, and insert filename - 5. repeat 1 - 6. else - 7. add line to new array; - +/ - } else { - type["header_make"] = 0; - type["header_metadata"] = 0; - contents ~= line; - } - } // end src doc loop - debug(insert) { // insert file - writeln(__LINE__); - writeln(contents.length); - } - return contents; - } - } -} diff --git a/lib/sdp/ao_rgx.d b/lib/sdp/ao_rgx.d deleted file mode 100644 index e675ca1..0000000 --- a/lib/sdp/ao_rgx.d +++ /dev/null @@ -1,181 +0,0 @@ -/+ - regex - ao_rgx.d -+/ -template RgxInit() { - struct Rgx { - /+ misc +/ - static flag_action = ctRegex!(`^(--[a-z][a-z0-9-]+)$`); - static flag_action_str = ctRegex!(` (--[a-z][a-z0-9-]+)`); - static src_pth = ctRegex!(`^([a-zA-Z0-9._-]+/)*([a-zA-Z0-9._-]+[.]ss[tm])$`); - static src_fn = ctRegex!(`^([a-zA-Z0-9._-]+/)*([a-zA-Z0-9._-]+[.]ss[tm])$`); - static src_fn_master = ctRegex!(`^([a-zA-Z0-9._-]+/)*([a-zA-Z0-9._-]+[.]ssm)$`); - static src_fn_find_inserts = ctRegex!(`^([a-zA-Z0-9._-]+/)*([a-zA-Z0-9._-]+[.]ss[im])$`); - // static ssm_fn = ctRegex!(`^[a-zA-Z0-9._-]+[.]ssm$`); - static line_delimiter = ctRegex!("\n"); - // static arr_delimiter = ctRegex!(`\s*[;]\s*`); - static within_quotes = ctRegex!(`"(.+?)"`); - static make_heading_delimiter = ctRegex!(`[;][ ]*`); - static arr_delimiter = ctRegex!(`[ ]*[;][ ]*`); - static name_delimiter = ctRegex!(`^([^,]+)[ ]*,[ ]+(.+?)$`); - // static name_delimiter = ctRegex!(`^(.+?)[ ]*,[ ]*(.+?)$`); - static book_index_go = ctRegex!("([0-9]+)(?:-[0-9]+)?"); - static trailing_comma = ctRegex!(",[ ]*$"); - static trailing_linebreak = ctRegex!(",[ ]{1,2}\\\\\\\\\n[ ]{4}$","m"); - static line_delimiter_ws_strip = ctRegex!("[ ]*\n[ ]*"); - static line_delimiter_only = ctRegex!("^\n"); - static para_delimiter = ctRegex!("\n[ ]*\n+"); - static levels_markup = ctRegex!(`^[A-D1-4]$`); - static levels_numbered = ctRegex!(`^[0-9]$`); - static levels_numbered_headings = ctRegex!(`^[0-7]$`); - /+ insert markup file +/ - // static insert_src_fn_ssi_or_sst = ctRegex!(`^<<\s*([a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[ti])$`); - static insert_src_fn_ssi_or_sst = ctRegex!(`^<<\s*(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[ti])$`); - // static insert_ssi_or_sst_fn = ctRegex!(`^<<\s*[a-zA-Z0-9._-]+[.]ss[ti]`); - /+ comments +/ - static comment = ctRegex!(`^%+ `); - /+ header +/ - static header = ctRegex!(`^@([a-z_]+):(?:\s|$)`); - static header_make = ctRegex!(`^@(make):(?:\s|$)`); - static header_metadata = ctRegex!(`^@([a-z_]+):(?:\s|$)`); - static header_sub = ctRegex!(`^[ ]+:([a-z_]+):\s`); - static head_main = ctRegex!(`^@([a-z_]+):\s*(.*)`, "m"); - static head_sub = ctRegex!(`^[ ]*:([a-z_]+):\s+(.+)`, "m"); - /+ heading & paragraph operators +/ - static heading = ctRegex!(`^:?([A-D1-4])[~]([a-z0-9_.-]*[?]?) `); - static heading_marker = ctRegex!(`^:?([A-D1-4])[~]`); - static heading_title = ctRegex!(`^:?[A-D1-4][~][a-z0-9_.-]*[?]?\s+(.+?)$`); - static heading_all = ctRegex!(`^:?([A-D1-4])[~]([a-z0-9_.-]*[?]?)\s+(.+?)$`); // test, particularly [2] name/hashtag which may or may not be, does this affect title [3] - static heading_biblio = ctRegex!(`^:?(1)[~][!](biblio(?:graphy)?|references?)`); - static heading_glossary = ctRegex!(`^:?(1)[~][!](glossary)`); - static para_bullet = ctRegex!(`^_[*] `); - static para_bullet_indent = ctRegex!(`^_([1-9])[*] `); - static para_indent = ctRegex!(`^_([1-9]) `); - static para_indent_hang = ctRegex!(`^_([0-9])_([0-9]) `); - static para_attribs = ctRegex!(`^_(([0-9])(_([0-9]))?|_([1-9])?[*]) `); - /+ blocked markup +/ - static block_open = ctRegex!("^((code|poem|group|block|quote|table)[{].*?$)|^`{3} (code|poem|group|block|quote|table)"); - // static block_open_less_code = ctRegex!("^(((poem|group|block|quote|table)[{].*?$)|`{3} (poem|group|block|quote|table))"); - static block_poem_open = ctRegex!("^((poem[{].*?$)|`{3} poem)"); - /+ blocked markup tics +/ - static block_tic_open = ctRegex!("^`{3} (code|poem|group|block|quote|table)"); - // static block_tic_open_less_code = ctRegex!("^`{3} (poem|group|block|quote|table)"); - static block_tic_code_open = ctRegex!("^`{3} (code)"); - static block_tic_poem_open = ctRegex!("^`{3} (poem)"); - static block_tic_group_open = ctRegex!("^`{3} (group)"); - static block_tic_block_open = ctRegex!("^`{3} (block)"); - static block_tic_quote_open = ctRegex!("^`{3} (quote)"); - static block_tic_table_open = ctRegex!("^`{3} (table)"); - static block_tic_close = ctRegex!("^(`{3})$","m"); - /+ blocked markup curly +/ - static block_curly_open = ctRegex!(`^((code|poem|group|block|quote|table)[{].*?$)`); - // static block_curly_open_less_code = ctRegex!(`^((poem|group|block|quote|table)[{].*?$)`); - static block_curly_code_open = ctRegex!(`^(code[{].*?$)`); - static block_curly_code_close = ctRegex!(`^([}]code)`); - static block_curly_poem_open = ctRegex!(`^(poem[{].*?$)`); - static block_curly_poem_close = ctRegex!(`^([}]poem)`); - static block_curly_group_open = ctRegex!(`^(group[{].*?$)`); - static block_curly_group_close = ctRegex!(`^([}]group)`); - static block_curly_block_open = ctRegex!(`^(block[{].*?$)`); - static block_curly_block_close = ctRegex!(`^([}]block)`); - static block_curly_quote_open = ctRegex!(`^(quote[{].*?$)`); - static block_curly_quote_close = ctRegex!(`^([}]quote)`); - static block_curly_table_open = ctRegex!(`^(table[{].*?$)`); - static block_curly_table_close = ctRegex!(`^([}]table)`); - /+ inline markup font face mod +/ - static inline_emphasis = ctRegex!(`\*\{(?P<text>.+?)\}\*`); - static inline_bold = ctRegex!(`!\{(?P<text>.+?)\}!`); - static inline_italics = ctRegex!(`/\{(?P<text>.+?)\}/`); - static inline_superscript = ctRegex!(`\^\{(?P<text>.+?)\}\^`); - static inline_subscript = ctRegex!(`,\{(?P<text>.+?)\},`); - static inline_strike = ctRegex!(`-\{(?P<text>.+?)\}-`); - static inline_insert = ctRegex!(`\+\{(?P<text>.+?)\}\+`); - static inline_mono = ctRegex!(`#\{(?P<text>.+?)\}#`); - /+ inline markup footnotes +/ - static true_dollar = ctRegex!(`\$`, "gm"); - static inline_notes_al = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg"); - static inline_notes_al_gen = ctRegex!(`【.+?】`, "m"); - static inline_notes_curly_gen = ctRegex!(`~\{.+?\}~`, "m"); - static inline_notes_curly = ctRegex!(`~\{\s*(.+?)\}~`, "mg"); - // static inline_notes_curly = ctRegex!(`~\{(?:[*+]\s+|\s*)(.+?)\}~`, "mg"); - static inline_al_delimiter_open_regular = ctRegex!(`【`, "m"); - static inline_al_delimiter_close_regular = ctRegex!(`】`, "m"); - static inline_al_delimiter_open_and_close_regular = ctRegex!(`【|】`, "m"); - static inline_notes_delimiter_al_regular = ctRegex!(`【(.+?)】`, "m"); - static inline_notes_delimiter_al_regular_number_note = ctRegex!(`【(\d+)\s+(.+?)】`, "m"); - - static inline_al_delimiter_open_asterisk = ctRegex!(`【\*`, "m"); - static inline_al_delimiter_open_plus = ctRegex!(`【\+`, "m"); - - static inline_curly_delimiter_open_regular = ctRegex!(`~\{\s*`, "m"); - static inline_curly_delimiter_close_regular = ctRegex!(`\s*\}~`, "m"); - static inline_curly_delimiter_open_and_close_regular = ctRegex!(`~\{\s*|\s*\}~`, "m"); - static inline_notes_delimiter_curly_regular = ctRegex!(`~\{[ ]*(.+?)\}~`, "m"); - // static inline_notes_curly_regular = ctRegex!(`(?:[~][{][ ]*)(.+?)(?:[}][~])`, "m"); - // static inline_notes_curly_regular = ctRegex!(`~\{\s*(.+?)\}~`, "m"); - // static inline_notes_curly = ctRegex!(`~\{(?:[*+]\s+|\s*)(.+?)\}~`, "mg"); - static inline_notes_curly_sp = ctRegex!(`~\{[*+]+\s+(.+?)\}~`, "m"); - static inline_notes_curly_sp_asterisk = ctRegex!(`~\{[*]+\s+(.+?)\}~`, "m"); - static inline_notes_curly_sp_plus = ctRegex!(`~\{[+]+\s+(.+?)\}~`, "m"); - // static inline_text_and_note_curly = ctRegex!(`(.+?)~\{(?:[*+]\s+|\s*)(.+?)\}~`, "mg"); - static inline_text_and_note_al = ctRegex!(`(?P<text>.+?)【(?:[*+ ]*)(?P<note>.+?)】`, "mg"); - static inline_text_and_note_curly = ctRegex!(`(?P<text>.+?)(?:(?:[~])[{][*+ ]*)(?P<note>.+?)(?:[}][~])`, "mg"); - // static inline_text_and_note_curly = ctRegex!(`(?P<text>.+?)~\{(?:[*+]\s+|\s*)(?P<note>.+?)\}~`, "mg"); - // static inline_text_and_note_curly_sp = ctRegex!(`(.+?)~\{[*+]+\s+(.+?)\}~`, "mg"); - // static inline_text_and_note_curly_sp_asterisk = ctRegex!(`(.+?)~\{[*]+\s+(.+?)\}~`, "mg"); - // static inline_text_and_note_curly_sp_plus = ctRegex!(`(.+?)~\{[+]+\s+(.+?)\}~`, "mg"); - static inline_note_curly_delimiters = ctRegex!(`(~\{[*+]?\s*)(.+?)(\}~)`, "mg"); - static inline_notes_square = ctRegex!(`~\[\s*(.+?)\]~`, "mg"); - static inline_text_and_note_square_sp = ctRegex!(`(.+?)~\[[*+]+\s+(.+?)\]~`, "mg"); - static inline_text_and_note_square = ctRegex!(`(.+?)~\[\s*(.+?)\]~`, "mg"); - static inline_note_square_delimiters = ctRegex!(`(~\[\s*)(.+?)(\]~)`, "mg"); - /+ inline markup book index +/ - static book_index = ctRegex!(`^=\{\s*(.+?)\}$`, "m"); - static book_index_open = ctRegex!(`^=\{\s*([^}]+?)$`); - static book_index_close = ctRegex!(`^(.*?)\}$`, "m"); // strip - /+ no obj_cite_number object +/ - static obj_cite_number_off = ctRegex!(`~#$`, "m"); - static obj_cite_number_off_dh = ctRegex!(`-#$`, "m"); - static obj_cite_number_off_all = ctRegex!(`[~-]#$`, "m"); - /+ no obj_cite_number block +/ - static obj_cite_number_off_block = ctRegex!(`^--~#$`); - static obj_cite_number_off_block_dh = ctRegex!(`^---#$`); - static obj_cite_number_off_block_close = ctRegex!(`^--\+#$`); - // static auto_obj_cite_number_ignore = ctRegex!(`^[+~*$-]{3,}$`); // reminder - static obj_cite_number_block_marks = ctRegex!(`^--[+~-]#$`); - /+ ignore outside code blocks +/ - static regular_parse_skip = ctRegex!(`^(--[+~-]#|-[\\]{2}-|=[.\\]{2}=)$`); // not structural info - /+ line & page breaks +/ - static break_line_within_object = ctRegex!(`[\\]{2}( |$)`); - // static break_line_break_within_object = ctRegex!(`( |^)[\\]{2}( |$)`); - static break_page = ctRegex!(`^-[\\]{2}-$`); - static break_page_new = ctRegex!(`^=[\\]{2}=$`); - static break_page_line_across = ctRegex!(`^=[.]{2}=$`); - static break_string = ctRegex!(`』`); - // ancestry, parent - static parent = ctRegex!(`([0-7]):([0-9]+)`); - /+ json +/ - static tailing_comma = ctRegex!(`,$`, "m"); - /+ head +/ - static main_headers = ctRegex!(`^(?:creator|title|rights|date|original|classify|identifier|notes|publisher|make|links)$`, "m"); - static subhead_creator = ctRegex!(`^(?:author|translator|illustrator)$`, "m"); - static subhead_title = ctRegex!(`^(?:main|sub(?:title)?|full|language|edition|note)$`, "m"); - static subhead_rights = ctRegex!(`^(?:copyright|illustrations|license|cover)$`, "m"); - static subhead_date = ctRegex!(`^(?:published|created|issued|available|valid|modified|added_to_site)$`, "m"); - static subhead_original = ctRegex!(`^(?:title|language|source)$`, "m"); - static subhead_classify = ctRegex!(`^(?:topic_register|subject|keywords|loc|dewey)$`, "m"); - static subhead_identifier = ctRegex!(`^(?:oclc|pg|isbn)$`, "m"); - static subhead_notes = ctRegex!(`^(?:abstract|description)$`, "m"); - static subhead_publisher = ctRegex!(`^(?:name)$`, "m"); - static subhead_make = ctRegex!(`^(?:cover_image|home_button_image|home_button_text|footer|headings|num_top|breaks|substitute|bold|italics|emphasis|texpdf_font|css)$`, "m"); - /+ biblio tags +/ - static biblio_tags = ctRegex!(`^(is|au|author_raw|author|author_arr|editor_raw|ed|editor_arr|ti|title|subtitle|fulltitle|lng|language|trans|src|jo|journal|in|vol|volume|edn|edition|yr|year|pl|place|pb|pub|publisher|url|pg|pages|note|short_name|id):\s+(.+)`); - static biblio_abbreviations = ctRegex!(`^(au|ed|ti|lng|jo|vol|edn|yr|pl|pb|pub|pg|pgs|sn)$`); - // static biblio_tags = ctRegex!(`^(is|author_raw|author|author_arr|editor_raw|editor_arr|title|subtitle|fulltitle|language|trans|src|journal|in|volume|edition|year|place|publisher|url|pages|note|short_name|id):\s+(.+)`); - /+ bookindex split +/ - static bi_main_terms_split = ctRegex!(`\s*;\s*`); - static bi_main_term_plus_rest_split = ctRegex!(`\s*:\s*`); - static bi_sub_terms_plus_obj_cite_number_offset_split = ctRegex!(`\s*\|\s*`); - static bi_term_and_obj_cite_numbers_match = ctRegex!(`^(.+?)\+(\d+)`); - } -} diff --git a/lib/sdp/compile_time_info.d b/lib/sdp/compile_time_info.d deleted file mode 100644 index 783ac62..0000000 --- a/lib/sdp/compile_time_info.d +++ /dev/null @@ -1,38 +0,0 @@ -/+ - compile_time_info - compile_time_info.d -+/ -template CompileTimeInfo() { - version(Windows) { - pragma(msg, "[ Windows compilation ]"); - enum os = "Windows"; - } else version(OSX) { - pragma(msg, "[ Mac OS X POSIX System compilation ]"); - enum os = "OSX"; - } else version(linux) { - pragma(msg, "[ Linux POSIX System compilation ]"); - enum os = "Linux"; - } else version(FreeBSD) { - pragma(msg, "[ FreeBSD POSIX System compilation ]"); - enum os = "FreeBSD"; - } else version(OpenBSD) { - pragma(msg, "[ OpenBSD POSIX System compilation ]"); - enum os = "OpenBSD"; - } else version(NetBSD) { - pragma(msg, "[ NetBSD POSIX System compilation ]"); - enum os = "NetBSD"; - } else version(DragonFlyBSD) { - pragma(msg, "[ DragonFlyBSD POSIX System compilation ]"); - enum os = "DragonFlyBSD"; - } else version(POSIX) { - pragma(msg, "[ POSIX System compilation ]"); - enum os = "POSIX"; - } else { - static assert(0, "OS not listed"); - } - version(D_LP64) { - enum bits = "64 bit"; - } else { - enum bits = "32 bit"; - } -} diff --git a/lib/sdp/sdp.d b/lib/sdp/sdp.d deleted file mode 100755 index 8c44d16..0000000 --- a/lib/sdp/sdp.d +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/env rdmd -// [used by rdmd] -/+ - sdp - sdp.d -+/ -/+ sdp sisu document parser +/ -private import - std.getopt, - std.process, - std.stdio, - std.algorithm, - std.array, - std.container, - std.exception, - std.json, - // std.path, - std.range, - std.regex, - // std.stdio, - std.string, - std.traits, - std.typecons, - std.utf, - // std.variant, - std.conv : to; -/+ sdp sisu document parser +/ -import - compile_time_info, // compile_time_info.d - ao_abstract_doc_source, // ao_abstract_doc_source.d - ao_defaults, // ao_defaults.d - ao_read_source_files, // ao_read_source_files.d - ao_output_debugs, // ao_output_debugs.d - ao_rgx, // ao_rgx.d - ao_ansi_colors; // ao_ansi_colors.d - // std.conv; -mixin(import("version.txt")); -mixin CompileTimeInfo; -mixin RgxInit; -void main(string[] args) { - - mixin SiSUheader; - mixin SiSUbiblio; - mixin SiSUrgxInitFlags; - mixin SiSUmarkupRaw; - mixin SiSUdocAbstraction; - mixin SiSUoutputDebugs; - mixin ScreenTxtColors; - auto raw = MarkupRaw(); - auto abs = Abstraction(); - auto dbg = SDPoutputDebugs(); - /+ - struct DocumentParts { - string[string][] contents; - JSONValue[string] metadata_json; - JSONValue[string] make_json; - string[][string][string] bookindex_unordered_hashes; - JSONValue[] biblio; - } - +/ - string[] fns_src; - string flag_action; - string arg_unrecognized; - auto rgx = Rgx(); - scope(success) { - debug(checkdoc) { - writefln( - "%s~ run complete, ok ~ %s (sdp-%s.%s.%s, %s v%s, %s %s)", - scr_txt_color["cyan"], scr_txt_color["off"], - ver.major, ver.minor, ver.patch, - __VENDOR__, __VERSION__, - bits, os, - ); - } - // stderr.writeln("0"); - } - scope(failure) { - debug(checkdoc) { - stderr.writefln( - "%s~ run failure ~%s", - scr_txt_color["fuchsia"], scr_txt_color["off"], - ); - } - } - - bool[string] opt_action_bool = [ - "assertions" : false, - "html" : false, - "no_obj_cite_number" : false, - "verbose" : false, - ]; - auto helpInfo = getopt(args, - std.getopt.config.passThrough, - "assert", "--assert set optional assertions on", &opt_action_bool["assertions"], - "html", "--html process html output", &opt_action_bool["html"], - "no-ocn", "--no-ocn suppress object cite number output", &opt_action_bool["no_obj_cite_number"], - "verbose|v", "--verbose output to terminal", &opt_action_bool["verbose"], - ); - if (helpInfo.helpWanted) { - defaultGetoptPrinter("Some information about the program.", helpInfo.options); - } - foreach(arg; args) { - if (match(arg, rgx.flag_action)) { - flag_action ~= " " ~ arg; // flags not taken by getopt - } else if (match(arg, rgx.src_pth)) { - fns_src ~= arg; // gather input markup source file names for processing - } else { // anything remaining, unused - arg_unrecognized ~= " " ~ arg; - } - } - foreach(fn_src; fns_src) { - if (!empty(fn_src)) { - scope(success) { - debug(checkdoc) { - writefln( - "%s~ document complete, ok ~%s", - scr_txt_color["green"], scr_txt_color["off"], - ); - } - // stderr.writeln("0"); - } - scope(failure) { - debug(checkdoc) { - stderr.writefln( - "%s~ document run failure ~%s (%s v%s)\n\t%s", - scr_txt_color["red"], scr_txt_color["off"], - __VENDOR__, __VERSION__, - fn_src - ); - } - // stderr.writeln("1"); - } - enforce( - match(fn_src, rgx.src_pth), - "not a sisu markup filename" - ); - /+ ↓ read file +/ - auto sourcefile_content = - raw.sourceContent(fn_src); - /+ ↓ porcess document, return abstraction as tuple +/ - auto t = - abs.abstract_doc_source(sourcefile_content); - static assert(!isTypeTuple!(t)); - auto doc_ao_contents = t[0]; // contents ~ endnotes ~ bookindex; - // static assert(!isIterable!(doc_ao_contents)); - auto doc_ao_metadata_json = t[1]; - auto doc_ao_make_json = t[2]; - auto doc_ao_bookindex_unordered_hashes = t[3]; - auto doc_ao_biblio = t[4]; - // destroy(t); - /+ ↓ document parts +/ - debug(checkdoc) { // checkbook & dumpdoc - dbg.abstract_doc_source_debugs( - doc_ao_contents, - doc_ao_make_json, - doc_ao_metadata_json, - doc_ao_bookindex_unordered_hashes, - doc_ao_biblio, - fn_src, - opt_action_bool - ); - } - scope(exit) { - debug(checkdoc) { - writefln( - "processed file: %s", - fn_src - ); - } - destroy(sourcefile_content); - destroy(t); - destroy(doc_ao_contents); - destroy(doc_ao_make_json); - destroy(doc_ao_metadata_json); - destroy(doc_ao_bookindex_unordered_hashes); - destroy(doc_ao_biblio); - destroy(fn_src); - } - } else { - /+ no recognized filename provided +/ - writeln("no recognized filename"); - break; - // terminate, stop - } - } -} diff --git a/lib/sdp/version.txt b/lib/sdp/version.txt deleted file mode 100644 index f4dde1a..0000000 --- a/lib/sdp/version.txt +++ /dev/null @@ -1,8 +0,0 @@ -/+ obt - org generated file +/ -// [used by rdmd] -struct Version { - int major; - int minor; - int patch; -} -enum ver = Version(1, 0, 0); |