From ed302d1be74d2b4e69ee4b6e3834637ed531eaea Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sun, 24 Apr 2016 22:08:24 -0400 Subject: step1 --- lib/sdp/ao_abstract_doc_source.d | 367 +++++++++++++++++++++------------------ lib/sdp/ao_assertions.d | 6 +- lib/sdp/ao_defaults.d | 76 +++++++- lib/sdp/ao_emitter.d | 274 ++++++++++++++++++++++------- lib/sdp/ao_interface.d | 144 --------------- lib/sdp/ao_object_setter.d | 96 +++++++++- lib/sdp/ao_output_debugs.d | 173 ++++++++++++------ lib/sdp/ao_read_markup_source.d | 8 +- lib/sdp/ao_rgx.d | 42 ++--- lib/sdp/ao_scan_inserts.d | 124 +++++-------- lib/sdp/ao_structs.d | 43 +++++ lib/sdp/ao_utils.d | 4 +- lib/sdp/compile_time_info.d | 38 ++++ lib/sdp/version.txt | 8 + 14 files changed, 860 insertions(+), 543 deletions(-) delete mode 100644 lib/sdp/ao_interface.d create mode 100644 lib/sdp/ao_structs.d create mode 100644 lib/sdp/compile_time_info.d create mode 100644 lib/sdp/version.txt (limited to 'lib/sdp') diff --git a/lib/sdp/ao_abstract_doc_source.d b/lib/sdp/ao_abstract_doc_source.d index 941c3f0..34e4072 100644 --- a/lib/sdp/ao_abstract_doc_source.d +++ b/lib/sdp/ao_abstract_doc_source.d @@ -1,29 +1,31 @@ -/* +/+ document abstraction ao_abstract_doc_source.d -*/ ++/ mixin template SiSUdocAbstraction() { - class Abstraction { - /* abstract marked up document */ + private: + struct Abstraction { + /+ ↓ abstract marked up document +/ auto abstract_doc_source(char[][] markup_sourcefile_content) { /+ initialize +/ mixin ObjectSetters; mixin AssertionsOnMarkupDocumentStructure; mixin AssertionsOnBlocks; mixin ScreenTxtColors; - auto rgx = new Rgx(); - auto set_oa = new ObjectAbstractSet(); - auto set_header = new HeaderDocMetadataMakeJson(); - auto notesection = new NotesSection(); - string[string][131072] contents_arbitrary_max_length_set; // 2000 pg * 50 lines == 100000 - string[1024] notes; + auto rgx = Rgx(); + auto set_oa = ObjectAbstractSet(); + auto set_header = HeaderDocMetadataMakeJson(); + auto notesection = NotesSection(); + string[string][] contents; + mixin Structs; string notes_str; string[string] object, processing, head; string biblio_tag_name, biblio_tag_entry, book_idx_tmp, st; - string[1024] biblio_arr_json = biblio_entry_tags_jsonstr; - JSONValue[1024] bib_arr_json; + string[] biblio_arr_json; + JSONValue[] bib_arr_json; uint[string] line_occur; - uint counter, previous_count, count_biblio_entry, ocn, ocn_, verse_line, bib_entry, heading_pointer, notepoint; + uint counter, ocn, ocn_, verse_line, bib_entry, heading_pointer, notepoint, count_biblio_entry; + ulong previous_count; string indent_first, indent_second; string[][string][string] bookindex_unordered_hashes; bool bullet = true; @@ -67,18 +69,18 @@ mixin template SiSUdocAbstraction() { auto str_h_4 = "^(none)"; string content_non_header = "8"; string node; - auto obj_im = new ObjInlineMarkup(); - auto obj_att = new ObjAttrib(); - auto object_citation_number = new OCNemitter(); + auto obj_im = ObjInlineMarkup(); + auto obj_att = ObjAttrib(); + auto object_citation_number = OCNemitter(); auto ft = flag_type.dup; int ocn_emit(int ocn_status_flag) { return object_citation_number.ocn_emitter(ocn_status_flag); } - auto bookindex_extract_hash = new BookIndexNuggetHash(); + auto bookindex_extract_hash = BookIndexNuggetHash(); string[][string][string] bkidx_hash(string bookindex, int ocn) { return bookindex_extract_hash.bookindex_nugget_hash(bookindex, ocn); } - auto node_construct = new NodeStructureMetadata(); + auto node_construct = NodeStructureMetadata(); string node_jstr( string lvn, int ocn_, @@ -116,11 +118,20 @@ mixin template SiSUdocAbstraction() { "end" : "" ]; int tell_lo(string color, int ocn, in char[] line) { - writeln(scr_txt_marker[color], to!string(ocn), " ", to!string(line)); + writefln( + "%s%s %s", + scr_txt_marker[color], + to!string(ocn), + to!string(line) + ); return 0; } int tell_l(string color, in char[] line) { - writeln(scr_txt_marker[color], line); + writefln( + "%s%s", + scr_txt_marker[color], + line + ); return 0; } scope(success) { @@ -128,23 +139,26 @@ mixin template SiSUdocAbstraction() { scope(failure) { } scope(exit) { - destroy(contents_arbitrary_max_length_set); + destroy(contents); destroy(object); destroy(processing); destroy(biblio_arr_json); } auto dochead_make = parseJSON(header_make_jsonstr).object; auto dochead_metadata = parseJSON(header_metadata_jsonstr).object; + /+ ↓ loop markup document/text line by line +/ foreach (line; markup_sourcefile_content) { - /* loop markup document/text line by line */ - /* scope */ + /+ ↓ markup document/text line by line +/ + /+ scope +/ scope(exit) { } scope(failure) { - writeln(__FILE__, ":", __LINE__, " failed here:"); - writeln(" line: ", line); - writeln(" is : ", object["is"]); - writeln(" node: ", node); + writefln( + "%s:%s failed here: \n line: %s", + __FILE__, + __LINE__, + line, + ); } line = replaceAll(line, rgx.true_dollar, "$$$$"); // dollar represented as $$ needed to stop submatching on $ @@ -155,13 +169,17 @@ mixin template SiSUdocAbstraction() { } debug(srclines) { if (!line.empty) { // source lines, not empty - writeln(scr_txt_marker["green"], line); + writefln( + "%s%s", + scr_txt_marker["green"], + line + ); } } if ((!line.empty) && (ft["ocn_status_multi_obj"] == 0)) { - /* not multi-line object, check whether ocn is on or turned off */ + /+ not multi-line object, check whether ocn is on or turned off +/ if (match(line, rgx.ocn_block_marks)) { - /* switch off ocn */ + /+ switch off ocn +/ if (match(line, rgx.ocn_off_block)) { ft["ocn_status_multi_obj"] = 1; debug(ocnoff) { @@ -198,7 +216,7 @@ mixin template SiSUdocAbstraction() { } } if (ft["code"] == 1) { - /* block object: code */ + /+ block object: code +/ if (ft["curly_code"] == 1) { if (auto m = match(line, rgx.block_curly_code_close)) { debug(code) { // code (curly) close @@ -229,26 +247,25 @@ mixin template SiSUdocAbstraction() { } } } else if (!match(line, rgx.regular_parse_skip)) { - /* object other than code block object (includes regular text paragraph) */ + /+ object other than code block object (includes regular text paragraph) +/ if (((match(line, rgx.heading_biblio) || (ft["heading_biblio"] == 1))) && (!match(line, rgx.heading)) && (!match(line, rgx.comment))) { - /* within block object: biblio */ + /+ within block object: biblio +/ if (match(line, rgx.heading_biblio)) { ft["heading_biblio"] = 1; } if (empty(line) && (bib_entry == 0)) { - count_biblio_entry++; + ++count_biblio_entry; + biblio_arr_json ~= biblio_entry_tags_jsonstr; bib_entry = 1; } debug(biblio) { - writeln( + writefln( + "%s * %s %s", scr_txt_color["yellow"], - "* ", scr_txt_color["off"], - to!string(count_biblio_entry), - " ", line ); } @@ -257,7 +274,7 @@ mixin template SiSUdocAbstraction() { bib_entry = 0; st=to!string(bt.captures[1]); biblio_tag_entry=to!string(bt.captures[2]); - JSONValue j = parseJSON(biblio_arr_json[count_biblio_entry]); + JSONValue j = parseJSON(biblio_arr_json[count_biblio_entry-1]); // core.exception.RangeError@lib/sdp/ao_abstract_doc_source.d(288): Range violation (LDC) [: same for 343], fix to subtract 1 done! if (match(st, rgx.biblio_abbreviations)) { biblio_tag_name=biblio_tag_map[st]; } else { @@ -300,29 +317,28 @@ mixin template SiSUdocAbstraction() { auto s = to!string(j); s = j.toString(); debug(biblio) { - writeln( + writefln( + "%s* %s%s: %s\n%s", scr_txt_color["red"], - "* ", scr_txt_color["off"], biblio_tag_name, - ": ", - biblio_tag_entry + biblio_tag_entry, + j[biblio_tag_name] ); - writeln(biblio_arr_json[count_biblio_entry]); writeln(j[biblio_tag_name], ":", j[biblio_tag_name]); } - biblio_arr_json[count_biblio_entry] = s; + biblio_arr_json[count_biblio_entry-1] = s; biblio_tag_entry=""; } } else if (ft["poem"] == 1) { - /* within block object: poem */ + /+ within block object: poem +/ if (ft["curly_poem"] == 1) { if (auto m = match(line, rgx.block_curly_poem_close)) { object["obj"]="verse"; // check that this is as you please debug(poem) { // poem (curly) close - writeln( + writefln( + "%s* [poem curly] %s%s", scr_txt_color["red"], - "* [poem curly] ", scr_txt_color["off"], line ); @@ -332,10 +348,10 @@ mixin template SiSUdocAbstraction() { } debug(poem) { // poem (curly) close writeln(__LINE__); - writeln( + writefln( + "%s%s %s", scr_txt_marker["fuchsia"], ocn, - " ", line ); } @@ -354,7 +370,7 @@ mixin template SiSUdocAbstraction() { obj_im.obj_inline_markup(object["is"], object["obj"]); object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_block( object["is"], object["markup"], @@ -386,10 +402,12 @@ mixin template SiSUdocAbstraction() { verse_line=1; object["obj"] = processing["verse"]; debug(poem) { // poem verse - writeln(scr_txt_marker["green"], - ocn, - " curly\n", - object["obj"]); + writefln( + "%s%s curly\n%s", + scr_txt_marker["green"], + ocn, + object["obj"] + ); } processing.remove("verse"); object["is"] = "verse"; @@ -402,7 +420,7 @@ mixin template SiSUdocAbstraction() { ); object["markup"] = obj_im.obj_inline_markup(object["is"], object["obj"]); object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_block( object["is"], object["markup"], @@ -422,9 +440,9 @@ mixin template SiSUdocAbstraction() { if (auto m = match(line, rgx.block_tic_close)) { // tic_poem_close object["obj"]="verse"; // check that this is as you please debug(poem) { // poem (curly) close - writeln( + writefln( + "%s* [poem tic] %s%s", scr_txt_color["red"], - "* [poem tic] ", scr_txt_color["off"], line ); @@ -443,7 +461,7 @@ mixin template SiSUdocAbstraction() { obj_im.obj_inline_markup(object["is"], object["obj"]); object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_block( object["is"], object["markup"], @@ -475,10 +493,12 @@ mixin template SiSUdocAbstraction() { verse_line=1; object["obj"] = processing["verse"]; debug(poem) { // poem (tic) close - writeln(scr_txt_marker["green"], - ocn, - " tic\n", - object["obj"]); + writefln( + "%s%s tic\n%s", + scr_txt_marker["green"], + ocn, + object["obj"] + ); } processing.remove("verse"); object["is"] = "verse"; @@ -494,7 +514,7 @@ mixin template SiSUdocAbstraction() { obj_im.obj_inline_markup(object["is"], object["obj"]); object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_block( object["is"], object["markup"], @@ -511,7 +531,7 @@ mixin template SiSUdocAbstraction() { } } } - /* within block object: group */ + /+ within block object: group +/ } else if (ft["group"] == 1) { if (ft["curly_group"] == 1) { if (auto m = match(line, rgx.block_curly_group_close)) { @@ -543,7 +563,7 @@ mixin template SiSUdocAbstraction() { } } } else if (ft["block"] == 1) { - /* within block object: block */ + /+ within block object: block +/ if (ft["curly_block"] == 1) { if (auto m = match(line, rgx.block_curly_block_close)) { debug(block) { // block (curly) close @@ -574,7 +594,7 @@ mixin template SiSUdocAbstraction() { } } } else if (ft["quote"] == 1) { - /* within block object: quote */ + /+ within block object: quote +/ if (ft["curly_quote"] == 1) { if (auto m = match(line, rgx.block_curly_quote_close)) { debug(quote) { // quote (curly) close @@ -605,7 +625,7 @@ mixin template SiSUdocAbstraction() { } } } else if (ft["table"] == 1) { - /* within block object: table */ + /+ within block object: table +/ if (ft["curly_table"] == 1) { if (auto m = match(line, rgx.block_curly_table_close)) { debug(table) { // table (curly) close @@ -636,7 +656,7 @@ mixin template SiSUdocAbstraction() { } } } else { - /* not within a block group */ + /+ not within a block group +/ assert( (ft["blocks"] == 0) || (ft["blocks"] == 2), @@ -644,11 +664,11 @@ mixin template SiSUdocAbstraction() { ); assertions_flag_types_block_status_none_or_closed(ft); if (auto m = match(line, rgx.block_curly_code_open)) { - /* curly code open */ + /+ curly code open +/ debug(code) { // code (curly) open - writeln( + writefln( + "%s* [code curly] %s%s", scr_txt_color["blue"], - "* [code curly] ", scr_txt_color["off"], line ); @@ -657,7 +677,7 @@ mixin template SiSUdocAbstraction() { ft["code"] = 1; ft["curly_code"] = 1; } else if (auto m = match(line, rgx.block_curly_poem_open)) { - /* curly poem open */ + /+ curly poem open +/ object.remove("obj"); object.remove("markup"); object.remove("is"); @@ -665,9 +685,9 @@ mixin template SiSUdocAbstraction() { object.remove("bookindex"); processing.remove("verse"); debug(poem) { // poem (curly) open - writeln( + writefln( + "%s* [poem curly] %s%s", scr_txt_color["red"], - "* [poem curly] ", scr_txt_color["off"], line ); @@ -678,11 +698,11 @@ mixin template SiSUdocAbstraction() { ft["poem"] = 1; ft["curly_poem"] = 1; } else if (auto m = match(line, rgx.block_curly_group_open)) { - /* curly group open */ + /+ curly group open +/ debug(group) { // group (curly) open - writeln( + writefln( + "%s* [group curly] %s%s", scr_txt_color["blue"], - "* [group curly] ", scr_txt_color["off"], line ); @@ -691,11 +711,11 @@ mixin template SiSUdocAbstraction() { ft["group"] = 1; ft["curly_group"] = 1; } else if (auto m = match(line, rgx.block_curly_block_open)) { - /* curly block open */ + /+ curly block open +/ debug(block) { // block (curly) open - writeln( + writefln( + "%s* [block curly] %s%s", scr_txt_color["blue"], - "* [block curly] ", scr_txt_color["off"], line ); @@ -704,11 +724,11 @@ mixin template SiSUdocAbstraction() { ft["block"] = 1; ft["curly_block"] = 1; } else if (auto m = match(line, rgx.block_curly_quote_open)) { - /* curly quote open */ + /+ curly quote open +/ debug(quote) { // quote (curly) open - writeln( + writefln( + "%s* [quote curly] %s%s", scr_txt_color["blue"], - "* [quote curly] ", scr_txt_color["off"], line ); @@ -717,11 +737,11 @@ mixin template SiSUdocAbstraction() { ft["quote"] = 1; ft["curly_quote"] = 1; } else if (auto m = match(line, rgx.block_curly_table_open)) { - /* curly table open */ + /+ curly table open +/ debug(table) { // table (curly) open - writeln( + writefln( + "%s* [table curly] %s%s", scr_txt_color["blue"], - "* [table curly] ", scr_txt_color["off"], line ); @@ -730,11 +750,11 @@ mixin template SiSUdocAbstraction() { ft["table"] = 1; ft["curly_table"] = 1; } else if (auto m = match(line, rgx.block_tic_code_open)) { - /* tic code open */ + /+ tic code open +/ debug(code) { // code (tic) open - writeln( + writefln( + "%s* [code tic] %s%s", scr_txt_color["blue"], - "* [code tic] ", scr_txt_color["off"], line ); @@ -743,7 +763,7 @@ mixin template SiSUdocAbstraction() { ft["code"] = 1; ft["tic_code"] = 1; } else if (auto m = match(line, rgx.block_tic_poem_open)) { - /* tic poem open */ + /+ tic poem open +/ object.remove("obj"); object.remove("markup"); object.remove("is"); @@ -751,9 +771,9 @@ mixin template SiSUdocAbstraction() { object.remove("bookindex"); processing.remove("verse"); debug(poem) { // poem (tic) open - writeln( + writefln( + "%s* [poem tic] %s%s", scr_txt_color["red"], - "* [poem tic] ", scr_txt_color["off"], line ); @@ -764,11 +784,11 @@ mixin template SiSUdocAbstraction() { ft["poem"] = 1; ft["tic_poem"] = 1; } else if (auto m = match(line, rgx.block_tic_group_open)) { - /* tic group open */ + /+ tic group open +/ debug(group) { // group (tic) open - writeln( + writefln( + "%s* [group tic] %s%s", scr_txt_color["blue"], - "* [group tic] ", scr_txt_color["off"], line ); @@ -777,11 +797,11 @@ mixin template SiSUdocAbstraction() { ft["group"] = 1; ft["tic_group"] = 1; } else if (auto m = match(line, rgx.block_tic_block_open)) { - /* tic block open */ + /+ tic block open +/ debug(block) { // block (tic) open - writeln( + writefln( + "%s* [block tic] %s%s", scr_txt_color["blue"], - "* [block tic] ", scr_txt_color["off"], line ); @@ -790,11 +810,11 @@ mixin template SiSUdocAbstraction() { ft["block"] = 1; ft["tic_block"] = 1; } else if (auto m = match(line, rgx.block_tic_quote_open)) { - /* tic quote open */ + /+ tic quote open +/ debug(quote) { // quote (tic) open - writeln( + writefln( + "%s* [quote tic] %s%s", scr_txt_color["blue"], - "* [quote tic] ", scr_txt_color["off"], line ); @@ -803,11 +823,11 @@ mixin template SiSUdocAbstraction() { ft["quote"] = 1; ft["tic_quote"] = 1; } else if (auto m = match(line, rgx.block_tic_table_open)) { - /* tic table open */ + /+ tic table open +/ debug(table) { // table (tic) open - writeln( + writefln( + "%s* [table tic] %s%s", scr_txt_color["blue"], - "* [table tic] ", scr_txt_color["off"], line ); @@ -816,8 +836,8 @@ mixin template SiSUdocAbstraction() { ft["table"] = 1; ft["tic_table"] = 1; } else if (!line.empty) { - /* line not empty */ - /* non blocks (headers, paragraphs) & closed blocks */ + /+ line not empty +/ + /+ non blocks (headers, paragraphs) & closed blocks +/ assert( !line.empty, "line tested, line not empty surely" @@ -840,11 +860,13 @@ mixin template SiSUdocAbstraction() { ); } if (auto m = match(line, rgx.book_index)) { - /* match book_index */ + /+ match book_index +/ debug(bookindexmatch) { // book index - writeln( - scr_txt_color["blue"], "* [bookindex] ", scr_txt_color["off"], - to!string(m.captures[1]), "\n" + 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"); } @@ -854,24 +876,24 @@ mixin template SiSUdocAbstraction() { ft["book_index"] = 1; book_idx_tmp = to!string(m.captures[1]); debug(bookindexmatch) { // book index - writeln( + writefln( + "%s* [bookindex] %s%s\n", scr_txt_color["blue"], - "* [bookindex] ", scr_txt_color["off"], - book_idx_tmp, "\n" + book_idx_tmp, ); } } else if (ft["book_index"] == 1 ) { - /* book_index flag set */ + /+ book_index flag set +/ if (auto m = match(line, rgx.book_index_close)) { ft["book_index"] = 0; object["bookindex"] = book_idx_tmp ~ to!string(m.captures[1]); debug(bookindexmatch) { // book index - writeln( + writefln( + "%s* [bookindex] %s%s\n", scr_txt_color["blue"], - "* [bookindex] ", scr_txt_color["off"], - book_idx_tmp, "\n" + book_idx_tmp, ); } book_idx_tmp = ""; @@ -879,14 +901,14 @@ mixin template SiSUdocAbstraction() { book_idx_tmp ~= line; } } else { - /* not book_index */ + /+ not book_index +/ if (auto m = match(line, rgx.comment)) { - /* matched comment */ + /+ matched comment +/ debug(comment) { tell_l("blue", line); } object["obj"] ~= line ~= "\n"; - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_comment(strip(object["obj"])); object.remove("obj"); object.remove("markup"); @@ -905,7 +927,7 @@ mixin template SiSUdocAbstraction() { ft["para"] = 0; counter++; } else if (auto m = match(line, rgx.header_make)) { - /* matched header_make */ + /+ matched header_make +/ debug(header1) { // header tell_l("yellow", line); } @@ -917,7 +939,7 @@ mixin template SiSUdocAbstraction() { line_occur["header_make"]++; object["obj"] ~= line ~= "\n"; } else if (auto m = match(line, rgx.header_metadata)) { - /* matched header_metadata */ + /+ matched header_metadata +/ debug(header1) { // header tell_l("yellow", line); } @@ -930,9 +952,9 @@ mixin template SiSUdocAbstraction() { object["obj"] ~= line ~= "\n"; } else if (ft["header_make"] == 1 && (line_occur["header_make"] > 0)) { - /* header_make flag set */ + /+ header_make flag set +/ if (auto m = match(line, rgx.header_sub)) { - /* sub-header */ + /+ sub-header +/ debug(header1) { tell_l("yellow", line); } @@ -941,9 +963,9 @@ mixin template SiSUdocAbstraction() { } } else if (ft["header_metadata"] == 1 && (line_occur["header_metadata"] > 0)) { - /* header_metadata flag set */ + /+ header_metadata flag set +/ if (auto m = match(line, rgx.header_sub)) { - /* sub-header */ + /+ sub-header +/ debug(header1) { tell_l("yellow", line); } @@ -954,10 +976,10 @@ mixin template SiSUdocAbstraction() { && (line_occur["heading"] == 0)) && ((ft["para"] == 0) && (ft["heading"] == 0))) { - /* heading or para but neither flag nor line exists */ + /+ heading or para but neither flag nor line exists +/ if ((to!string(dochead_make["make"]["headings"]).length > 2) && (ft["make_headings"] == 0)) { - /* headings found */ + /+ headings found +/ debug(headingsfound) { writeln(dochead_make["make"]["headings"]); } @@ -1026,7 +1048,7 @@ mixin template SiSUdocAbstraction() { && (line_occur["heading"] == 0)) && ((ft["para"] == 0) && (ft["heading"] == 0))) { - /* heading make set */ + /+ heading make set +/ if (match(line, rgx_h_B)) { line = "B~ " ~ line; debug(headingsfound) { @@ -1071,7 +1093,7 @@ mixin template SiSUdocAbstraction() { } } if (auto m = match(line, rgx.heading)) { - /* heading match */ + /+ heading match +/ ft["heading"] = 1; ft["header"] = 0; ft["header_make"] = 0; @@ -1194,7 +1216,7 @@ mixin template SiSUdocAbstraction() { tell_l("yellow", strip(line)); } } else if (line_occur["para"] == 0) { - /* para matches */ + /+ para matches +/ if (auto m = match(line, rgx.para_indent)) { debug(paraindent) { // para indent tell_l("blue", line); @@ -1241,7 +1263,7 @@ mixin template SiSUdocAbstraction() { line_occur["para"]++; } } else if (line_occur["header_make"] > 0) { - /* header_make */ + /+ header_make +/ // should be caught by sub-header debug(header) { tell_l("red", line); @@ -1249,7 +1271,7 @@ mixin template SiSUdocAbstraction() { object["obj"] ~= line ~= "\n"; line_occur["header_make"]++; } else if (line_occur["header_metadata"] > 0) { - /* header_metadata */ + /+ header_metadata +/ // should be caught by sub-header debug(header) { // para tell_l("red", line); @@ -1257,14 +1279,14 @@ mixin template SiSUdocAbstraction() { object["obj"] ~= line ~= "\n"; line_occur["header_metadata"]++; } else if (line_occur["heading"] > 0) { - /* heading */ + /+ heading +/ debug(heading) { // heading tell_l("blue", line); } object["obj"] ~= line ~= "\n"; line_occur["heading"]++; } else if (line_occur["para"] > 0) { - /* paragraph */ + /+ paragraph +/ debug(para) { tell_l("blue", line); } @@ -1273,7 +1295,7 @@ mixin template SiSUdocAbstraction() { } } } else if (ft["blocks"] == 2) { - /* line empty, with blocks flag */ + /+ line empty, with blocks flag +/ assert( line.empty, "line should be empty" @@ -1302,7 +1324,7 @@ mixin template SiSUdocAbstraction() { obj_im.obj_inline_markup(object["is"], object["obj"]); object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_block( object["is"], object["markup"], @@ -1332,7 +1354,7 @@ mixin template SiSUdocAbstraction() { heading_pointer-1, object["is"] ); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_block_ocn_string( "poem", "", @@ -1366,7 +1388,7 @@ mixin template SiSUdocAbstraction() { obj_im.obj_inline_markup(object["is"], object["obj"]); object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_block( object["is"], object["markup"], @@ -1399,7 +1421,7 @@ mixin template SiSUdocAbstraction() { obj_im.obj_inline_markup(object["is"], object["obj"]); object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_block( object["is"], object["markup"], @@ -1432,7 +1454,7 @@ mixin template SiSUdocAbstraction() { obj_im.obj_inline_markup(object["is"], object["obj"]); object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_block( object["is"], object["markup"], @@ -1466,7 +1488,7 @@ mixin template SiSUdocAbstraction() { obj_im.obj_inline_markup(object["is"], object["obj"]); object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_block( object["is"], object["markup"], @@ -1484,8 +1506,8 @@ mixin template SiSUdocAbstraction() { ft["quote"] = 0; } } else { - /* line empty */ - /* line.empty, post contents, empty variables: */ + /+ line empty +/ + /+ line.empty, post contents, empty variables: +/ assert( line.empty, "line should be empty" @@ -1496,7 +1518,7 @@ mixin template SiSUdocAbstraction() { ); if ((ft["header_make"] == 1) && (line_occur["header_make"] > 0)) { - /* header_make instructions (current line empty) */ + /+ header_make instructions (current line empty) +/ auto dochead_metadata_and_make = set_header.header_metadata_and_make_jsonstr(strip(object["obj"]), dochead_metadata, dochead_make); static assert(!isTypeTuple!(dochead_metadata_and_make)); @@ -1517,7 +1539,7 @@ mixin template SiSUdocAbstraction() { processing.remove("verse"); } else if ((ft["header_metadata"] == 1) && (line_occur["header_metadata"] > 0)) { - /* header_metadata (current line empty) */ + /+ header_metadata (current line empty) +/ auto dochead_metadata_and_make = set_header.header_metadata_and_make_jsonstr(strip(object["obj"]), dochead_metadata, dochead_make); static assert(!isTypeTuple!(dochead_metadata_and_make)); @@ -1540,7 +1562,7 @@ mixin template SiSUdocAbstraction() { processing.remove("verse"); } else if ((ft["heading"] == 1) && (line_occur["heading"] > 0)) { - /* heading object (current line empty) */ + /+ heading object (current line empty) +/ ocn = ocn_emit(ft["ocn_status"]); object["bookindex"] = ("bookindex" in object) ? object["bookindex"] : ""; @@ -1561,7 +1583,7 @@ mixin template SiSUdocAbstraction() { object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); heading_pointer++; - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_heading( ft["ocn_status"], object["markup"], @@ -1593,7 +1615,7 @@ mixin template SiSUdocAbstraction() { processing.remove("verse"); counter++; } else if ((ft["para"] == 1) && (line_occur["para"] > 0)) { - /* paragraph object (current line empty) */ + /+ paragraph object (current line empty) +/ ocn = ocn_emit(ft["ocn_status"]); object["bookindex"] = ("bookindex" in object) ? object["bookindex"] : ""; @@ -1612,7 +1634,7 @@ mixin template SiSUdocAbstraction() { obj_im.obj_inline_markup(object["is"], object["obj"]); object["attrib"] = obj_att.obj_attributes(object["is"], object["obj"], node); - contents_arbitrary_max_length_set[counter] = + contents ~= set_oa.contents_para( object["is"], object["markup"], @@ -1651,47 +1673,52 @@ mixin template SiSUdocAbstraction() { } // close else for line empty } // close else for not the above } // close after non code, other blocks or regular text - if (((contents_arbitrary_max_length_set[counter-1]["is"] == "para") - || (contents_arbitrary_max_length_set[counter-1]["is"] == "heading")) + if (((contents[$-1]["is"] == "para") + || (contents[$-1]["is"] == "heading")) && (counter-1 > previous_count)) { - if (match(contents_arbitrary_max_length_set[counter-1]["obj"], + if (match(contents[$-1]["obj"], rgx.inline_notes_delimiter_al_regular_number_note)) { // endnotes/ footnotes for // doc objects other than paragraphs & headings // various forms of grouped text - previous_count=counter-1; - notesection.gather_notes_for_endnote_section(contents_arbitrary_max_length_set, counter-1); + previous_count=contents.length -1; + notesection.gather_notes_for_endnote_section( + contents, + contents.length -1 + ); } } - } // closed: loop markup document/text line by line - /* post loop markup document/text */ + } /+ ← closed: loop markup document/text line by line +/ + /+ ↓ post loop markup document/text +/ debug(objectrelated2) { // check tell_l("blue", line); } - /* + /+ Backmatter: * endnotes * glossary * references / bibliography * book index - */ + +/ obj_im.obj_inline_markup("doc_end_reset", ""); auto en_tuple = notesection.endnote_objects(ocn); static assert(!isTypeTuple!(en_tuple)); auto endnotes = en_tuple[0]; ocn = en_tuple[1]; debug(endnotes) { - writeln(__LINE__, " ", endnotes.length); + writefln( + "%s %s", + __LINE__, + endnotes.length + ); foreach (n; endnotes) { writeln(n); } } - auto contents = contents_arbitrary_max_length_set[0..counter].dup; - auto biblio_unsorted_incomplete = biblio_arr_json[0..count_biblio_entry].dup; - // destroy(biblio_arr_json); - auto biblio = new Bibliography(); - auto biblio_ordered = biblio.bibliography(biblio_unsorted_incomplete); - auto bi = new BookIndexReportSection(); + auto biblio_unsorted_incomplete = biblio_arr_json.dup; + 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, ocn); static assert(!isTypeTuple!(bi_tuple)); @@ -1739,10 +1766,10 @@ mixin template SiSUdocAbstraction() { spc=""; break; } - writeln( - spc, "* ", " ", + writefln( + "%s* $s\n %s", + spc, strip(o["obj"]), - "\n ", o["attrib"] ); // tell_l("yellow", spc, strip(o["obj"])); diff --git a/lib/sdp/ao_assertions.d b/lib/sdp/ao_assertions.d index 8cdbc87..2aa2c1d 100644 --- a/lib/sdp/ao_assertions.d +++ b/lib/sdp/ao_assertions.d @@ -1,7 +1,7 @@ -/* +/+ assertions ao_assertions.d -*/ ++/ mixin template AssertionsOnMarkupDocumentStructure() { auto assertions_doc_structure(string[string] object, uint[string] lv) { if (lv["h3"] > 0) { @@ -107,7 +107,7 @@ mixin template AssertionsOnMarkupDocumentStructure() { assert(lv["h5"] == 0); assert(lv["h6"] == 0); assert(lv["h7"] == 0); - } else { + } else { // (lv["h0"] >0) assert(lv["h0"] == 0,"error should not enter level A a second time"); } break; diff --git a/lib/sdp/ao_defaults.d b/lib/sdp/ao_defaults.d index 50c1b09..166871b 100644 --- a/lib/sdp/ao_defaults.d +++ b/lib/sdp/ao_defaults.d @@ -1,7 +1,7 @@ -/* +/+ defaults ao_defaults.d -*/ ++/ template SiSUheader() { auto header_make_jsonstr = `{ "make": { @@ -165,7 +165,7 @@ template SiSUheader() { auto config_jsonstr = `{ }`; } -/* regex flags */ +/+ regex flags +/ template SiSUrgxInitFlags() { int[string] flag_type = [ "make_headings" : 0, @@ -247,8 +247,76 @@ template SiSUbiblio() { ]; // is: book, article, magazine, newspaper, blog, other } template InternalMarkup() { - class InternalMarkup { + struct InternalMarkup { 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 ocn_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 index c9b1a7e..7ed9fa8 100644 --- a/lib/sdp/ao_emitter.d +++ b/lib/sdp/ao_emitter.d @@ -1,10 +1,10 @@ -/* +/+ emitters ao_emitters.d -*/ ++/ mixin template Emitters() { mixin InternalMarkup; - class CLI { + struct CLI { string[string] extract_actions(string cmdlnins, string[string] actions) in { } body { @@ -18,7 +18,8 @@ mixin template Emitters() { return actions; } } - class OCNemitter : AssertOCN { + struct OCNemitter { + // class OCNemitter : AssertOCN { int ocn, ocn_; int ocn_emitter(int ocn_status_flag) in { assert(ocn_status_flag <= 2); } @@ -28,17 +29,19 @@ mixin template Emitters() { } else { ocn=0; } + assert(ocn >= 0); return ocn; } invariant() { } } - class ObjAttributes { + struct ObjAttributes { + // class ObjAttributes : AssertObjAttributes { string[string] obj_txt; string para_and_blocks(string obj_txt_in) in { } body { - auto rgx = new Rgx(); + auto rgx = Rgx(); obj_txt["munge"]=obj_txt_in; if (match(obj_txt_in, rgx.para_bullet)) { obj_txt["attrib"] =" \"bullet\": \"true\"," @@ -81,6 +84,7 @@ mixin template Emitters() { obj_txt["attrib"] = " \"use\": \"content\"," ~ " \"of\": \"para\"," ~ " \"is\": \"heading\""; + // obj_txt["struct"]=; return obj_txt["attrib"]; } invariant() { @@ -185,7 +189,8 @@ mixin template Emitters() { invariant() { } } - class ObjInlineMarkupMunge { + 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; @@ -198,8 +203,8 @@ mixin template Emitters() { private auto object_notes_(string obj_txt_in) in { } body { - auto rgx = new Rgx(); - auto mkup = new InternalMarkup(); + auto rgx = Rgx(); + auto mkup = InternalMarkup(); obj_txt_out = ""; tail = ""; obj_txt_in = replaceAll( @@ -237,6 +242,11 @@ mixin template Emitters() { (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; @@ -257,7 +267,7 @@ mixin template Emitters() { string para(string obj_txt_in) in { } body { - auto rgx = new Rgx(); + 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, ""); @@ -273,7 +283,7 @@ mixin template Emitters() { string heading(string obj_txt_in) in { } body { - auto rgx = new Rgx(); + 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, ""); @@ -364,8 +374,9 @@ mixin template Emitters() { invariant() { } } - class ObjInlineMarkup : AssertObjInlineMarkup { - auto munge = new ObjInlineMarkupMunge(); + struct ObjInlineMarkup { + // struct ObjInlineMarkup : AssertObjInlineMarkup { + auto munge = ObjInlineMarkupMunge(); string[string] obj_txt; string obj_inline_markup(string obj_is_, string obj_raw) in { } @@ -419,13 +430,17 @@ mixin template Emitters() { invariant() { } } - class ObjAttrib : AssertObjAttrib { - auto attrib = new ObjAttributes(); + 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); } @@ -493,20 +508,24 @@ mixin template Emitters() { 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() { } } - class HeaderDocMetadataMakeJson { - auto rgx = new Rgx(); + struct HeaderDocMetadataMakeJson { + // class HeaderMetadataMakeHash : AssertHeaderMetadataMakeJson { + auto rgx = Rgx(); string hm, hs; auto header_metadata_and_make_jsonstr( string header, @@ -678,6 +697,15 @@ mixin template Emitters() { 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; @@ -694,9 +722,12 @@ mixin template Emitters() { static assert(!isTypeTuple!(t)); return t; } + // invariant() { + // } } class HeaderMetadataMakeHash { - auto rgx = new Rgx(); + // class HeaderMetadataMakeHash : AssertHeaderMetadataMakeHash { + auto rgx = Rgx(); string header_main; string[string] head; string[string] header_topic_hash(string header) @@ -743,7 +774,8 @@ mixin template Emitters() { invariant() { } } - class BookIndexNuggetHash : AssertBookIndexNuggetHash { + struct BookIndexNuggetHash { + // class BookIndexNuggetHash : AssertBookIndexNuggetHash { string main_term, sub_term, sub_term_bits; uint ocn_offset, ocn_endpoint; string[] ocns; @@ -751,9 +783,19 @@ mixin template Emitters() { string[][string][string] hash_nugget; string[] bi_main_terms_split_arr; string[][string][string] bookindex_nugget_hash(string bookindex, int ocn) - in { } + 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 = new Rgx(); + auto rgx = Rgx(); if (!bookindex.empty) { auto bi_main_terms_split_arr = split(bookindex, rgx.bi_main_terms_split); @@ -796,15 +838,18 @@ mixin template Emitters() { 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() { } } - class BookIndexReport { + struct BookIndexReport { + // class BookIndexReport : AssertBookIndexReport { int mkn, skn; auto bookindex_report_sorted( string[][string][string] bookindex_unordered_hashes @@ -822,13 +867,15 @@ mixin template Emitters() { to!string(bookindex_unordered_hashes[mainkey][subkey]) ); } + // bookindex_the[mkn][mainkey][skn][subkey] ~= (bookindex_unordered_hashes[mainkey][subkey]); skn++; } mkn++; } + // return bookindex_the; } } - class BookIndexReportIndent { + struct BookIndexReportIndent { int mkn, skn; auto bookindex_report_indented( string[][string][string] bookindex_unordered_hashes @@ -848,16 +895,17 @@ mixin template Emitters() { bookindex_unordered_hashes[mainkey][subkey] )); } + // bookindex_the[mkn][mainkey][skn][subkey] ~= (bookindex_unordered_hashes[mainkey][subkey]); skn++; } mkn++; } } } - class BookIndexReportSection { + struct BookIndexReportSection { mixin ObjectSetters; int mkn, skn; - auto rgx = new Rgx(); + auto rgx = Rgx(); auto bookindex_write_section( string[][string][string] bookindex_unordered_hashes ) { @@ -894,19 +942,20 @@ mixin template Emitters() { string attrib; string indent_first; string indent_second; - auto set_oa = new ObjectAbstractSet(); + auto set_oa = ObjectAbstractSet(); auto mainkeys = bookindex_unordered_hashes.byKey.array.sort().release; string bi_tmp; - string[string][1024] bookindex_arbitrary_max_length_set; + string[string][] bookindex; writeln(mainkeys.length); + // B~ Book Index type_heading=1; bi_tmp = "Book Index"; attrib=""; lev="B"; lvn="1"; lcn="1"; - bookindex_arbitrary_max_length_set[mkn] = + bookindex ~= set_oa.contents_heading( type_heading, bi_tmp, @@ -918,13 +967,14 @@ mixin template Emitters() { ); ocn++; mkn++; + // 1~ Index type_heading=1; bi_tmp = "Index"; attrib=""; lev="1"; lvn="4"; lcn="2"; - bookindex_arbitrary_max_length_set[mkn] = + bookindex ~= set_oa.contents_heading( type_heading, bi_tmp, @@ -938,6 +988,7 @@ mixin template Emitters() { 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 ~ ", "; @@ -961,7 +1012,7 @@ mixin template Emitters() { indent_first = "0"; indent_second = "1"; attrib=""; - bookindex_arbitrary_max_length_set[mkn] = + bookindex ~= set_oa.contents_para( type, bi_tmp, @@ -974,8 +1025,6 @@ mixin template Emitters() { ocn++; mkn++; } - auto bookindex = - bookindex_arbitrary_max_length_set[0..mkn].dup; auto t = tuple(bookindex, ocn); return t; } @@ -985,7 +1034,8 @@ mixin template Emitters() { auto mainkeys = bookindex_unordered_hashes.byKey.array.sort().release; string bi_tmp; - string[1024] bookindex_arbitrary_max_length_set; + string[] bookindex; + // int bi_num; writeln(mainkeys.length); foreach (mainkey; mainkeys) { bi_tmp = "_0_1 !{" ~ mainkey ~ "}! "; @@ -999,6 +1049,7 @@ mixin template Emitters() { 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 ~ ", "; @@ -1007,23 +1058,21 @@ mixin template Emitters() { skn++; } bi_tmp = replaceFirst(bi_tmp, rgx.trailing_linebreak, ""); - bookindex_arbitrary_max_length_set[mkn] = bi_tmp; + bookindex ~= bi_tmp; mkn++; } - auto bookindex = - bookindex_arbitrary_max_length_set[0..mkn].dup; return bookindex; } } - class NotesSection { + struct NotesSection { mixin ObjectSetters; string object_notes; - int previous_count; + ulong previous_count; int mkn; - auto rgx = new Rgx(); + auto rgx = Rgx(); private auto gather_notes_for_endnote_section( - string[string][131072] contents_arbitrary_max_length_set, - int counter + string[string][] contents_arbitrary_max_length_set, + ulong counter ) in { // endnotes/ footnotes for @@ -1046,6 +1095,7 @@ mixin template Emitters() { 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_" ~ @@ -1067,21 +1117,23 @@ mixin template Emitters() { in { } body { - auto set_oa = new ObjectAbstractSet(); - string[string][1024] endnotes_arbitrary_max_length_set; + 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_arbitrary_max_length_set[mkn] = + endnotes ~= set_oa.contents_heading( type_heading, "Endnotes", @@ -1093,12 +1145,13 @@ mixin template Emitters() { ); ocn++; mkn++; + // 1~ Endnotes type_heading=1; attrib=""; lev="1"; lvn="4"; lcn="2"; - endnotes_arbitrary_max_length_set[mkn] = + endnotes ~= set_oa.contents_heading( type_heading, "Endnotes", @@ -1116,7 +1169,7 @@ mixin template Emitters() { indent_first = "0"; indent_second = "0"; attrib=""; - endnotes_arbitrary_max_length_set[mkn] = + endnotes ~= set_oa.contents_para( type, endnote, @@ -1129,28 +1182,27 @@ mixin template Emitters() { ocn++; mkn++; } - auto endnotes = - endnotes_arbitrary_max_length_set[0..mkn].dup; auto t = tuple(endnotes, ocn); return t; } } - class Bibliography { - public JSONValue[] bibliography(string[] biblio_unsorted_incomplete) + 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); + 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 + string[] biblio_unordered, + ref JSONValue[] bib_arr_json ) { - JSONValue[1024] bib_arr_json; - int count_biblio_entry; - count_biblio_entry=0; + // 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 @@ -1169,12 +1221,15 @@ mixin template Emitters() { "; " ~ j["fulltitle"].str ); + // bib[count_biblio_entry] = j.toString(); } - bib_arr_json[count_biblio_entry] = j; - count_biblio_entry++; + 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[0..(count_biblio_entry)].dup; + bib_arr_json.dup; return biblio_unsorted_array_of_json_objects; } final private JSONValue[] biblio_sort(JSONValue[] biblio_unordered) { @@ -1187,6 +1242,7 @@ mixin template Emitters() { foreach (j; biblio_sorted) { if (!empty(j["fulltitle"].str)) { writeln(j["sortby_deemed_author_year_title"]); + // writeln(j["deemed_author"], " (", j["author"], ") ", j["fulltitle"]); } } } @@ -1202,7 +1258,8 @@ mixin template Emitters() { } } } - class NodeStructureMetadata : AssertNodeJSON { + struct NodeStructureMetadata { + // class NodeStructureMetadata : AssertNodeJSON { int lv, lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7; uint ocn; uint[string] p_; // p_ parent_ @@ -1215,9 +1272,16 @@ mixin template Emitters() { string is_ ) in { - auto rgx = new Rgx(); + 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_); @@ -1239,6 +1303,18 @@ mixin template Emitters() { ", \"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() { @@ -1252,9 +1328,28 @@ mixin template Emitters() { string is_ ) in { - auto rgx = new Rgx(); + 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": @@ -1306,6 +1401,15 @@ mixin template Emitters() { 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=("{ " ~ @@ -1319,6 +1423,54 @@ mixin template Emitters() { ", \"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_interface.d b/lib/sdp/ao_interface.d deleted file mode 100644 index b50bee7..0000000 --- a/lib/sdp/ao_interface.d +++ /dev/null @@ -1,144 +0,0 @@ -/* - interface - ao_interface.d -*/ -mixin template Interfaces() { - interface AssertOCN { - int ocn_emitter(int ocn_status_flag) - in { assert(ocn_status_flag <= 2); } - out(ocn) { assert(ocn >= 0); } - } - interface AssertObjInlineMarkup { - string obj_inline_markup(string obj_raw, string obj_type_) - in { - } - out(inline_markup) { - } - } - interface AssertObjAttrib { - string obj_attributes(string obj_raw, string node, string obj_type_) - in { - } - out(obj_attrib_json) { - } - } - interface AssertBookIndexNuggetHash { - 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 - ); - } - } - } - out(hash_nugget) { - } - } - interface AssertBookIndexReport { - string[][string][][string][] bookindex_nugget_hash(string[][string][string] bookindex_unordered_hashes) - in { - } - } - interface AssertNodeJSON { - string node_emitter( - string lvn, - int ocn_, - int counter_, - int pointer_, - string is_ - ) - in { - auto rgx = new Rgx(); - assert(is_ != "heading"); - assert(to!int(ocn_) >= 0); - } - out(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 >= 4); - assert(j["parent_lvn"].integer <= 7); - assert(j["parent_ocn"].integer >= 0); - } - string node_emitter_heading( - string lvn, - string lcn, - int ocn_, - int counter_, - int pointer_, - string is_ - ) - in { - auto rgx = new 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_)) - ); - if (match(lvn, rgx.levels_numbered)) { - if (to!uint(lvn) == 0) { - assert(to!uint(ocn_) == 1); - } - } - } - out(node) { - auto rgx = new Rgx(); - 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) { - } - } - } - } -} diff --git a/lib/sdp/ao_object_setter.d b/lib/sdp/ao_object_setter.d index ff76143..ce4611d 100644 --- a/lib/sdp/ao_object_setter.d +++ b/lib/sdp/ao_object_setter.d @@ -1,10 +1,21 @@ -/* +/+ object setter ao_object_setter.d -*/ ++/ mixin template ObjectSetters() { - class ObjectAbstractSet { + struct ObjectAbstractSet { import std.conv : to; + mixin Structs; + ObjComposite contents_comment_new(in string object) { + ObjComposite object_set; + object_set.use = "comment"; + object_set.of = "comment"; + object_set.is_a = "comment"; + object_set.object = object; + // does not have .attrib; + // does not have .ocn + return object_set; + } string[string] contents_comment(in string object) { string[string] object_set; object_set["use"] = "comment"; @@ -13,6 +24,28 @@ mixin template ObjectSetters() { object_set["obj"] = object; return object_set; } + ObjComposite contents_heading_new( + in int type, + in string object, + in string attrib, + in int ocn, + in string lev, + in string lvn, + in string lcn, + ) { + ObjComposite object_set; + object_set.use = "content"; + object_set.of = "para"; + object_set.is_a = "heading"; + object_set.object = object; + object_set.ocn = (ocn==0) ? "" : to!string(ocn); + object_set.attrib = attrib; + object_set.heading.type = to!string(type); + object_set.heading.lev = to!string(lev); + object_set.heading.lvn = to!string(lvn); + object_set.heading.lcn = to!string(lcn); + return object_set; + } string[string] contents_heading( in int type, in string object, @@ -35,8 +68,29 @@ mixin template ObjectSetters() { object_set["attrib"] = attrib; return object_set; } + ObjComposite contents_para_new( + in string is_a, + in string object, + in string attrib, + in int ocn, + in string indent_first, + in string indent_second, + in bool bullet + ) { + ObjComposite object_set; + object_set.use = "content"; + object_set.of = "para"; + object_set.is_a = "heading"; + object_set.object = object; + object_set.ocn = (ocn==0) ? "" : to!string(ocn); + object_set.attrib = attrib; + object_set.para.indent_first = indent_first; + object_set.para.indent_second = indent_second; + object_set.para.bullet = to!string(bullet); + return object_set; + } string[string] contents_para( - in string type, + in string is_a, in string object, in string attrib, in int ocn, @@ -47,7 +101,7 @@ mixin template ObjectSetters() { string[string] object_set; object_set["use"] = "content"; object_set["of"] = "para"; - object_set["is"] = type; + object_set["is"] = is_a; object_set["obj"] = object; object_set["ocn"] = (ocn==0) ? "" : to!string(ocn); object_set["indent_first"] = indent_first; @@ -56,6 +110,22 @@ mixin template ObjectSetters() { object_set["attrib"] = attrib; return object_set; } + ObjComposite contents_block_new( + in string type, + in string object, + in string attrib, + in int ocn + ) { + ObjComposite object_set; + // does not have .attrib; + object_set.use = "content"; + object_set.of = "block"; + object_set.is_a = type; + object_set.object = object; + object_set.ocn = (ocn==0) ? "" : to!string(ocn); + object_set.attrib = attrib; + return object_set; + } string[string] contents_block( in string type, in string object, @@ -71,6 +141,22 @@ mixin template ObjectSetters() { object_set["attrib"] = attrib; return object_set; } + ObjComposite contents_block_ocn_string_new( + in string type, + in string object, + in string ocn, + 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.ocn = ocn; + object_set.block_ocn_string.node = node; + // object_set.attrib = attrib; + return object_set; + } string[string] contents_block_ocn_string( in string type, in string object, diff --git a/lib/sdp/ao_output_debugs.d b/lib/sdp/ao_output_debugs.d index c6bdfe1..d2c2c73 100644 --- a/lib/sdp/ao_output_debugs.d +++ b/lib/sdp/ao_output_debugs.d @@ -1,9 +1,9 @@ -/* +/+ output debugs ao_output_debugs.d -*/ ++/ template SiSUoutputDebugs() { - class SDPoutputDebugs { + struct SDPoutputDebugs { auto abstract_doc_source_debugs( string[string][] contents, JSONValue[string] docmake, @@ -15,13 +15,19 @@ template SiSUoutputDebugs() { ) { mixin RgxInit; mixin ScreenTxtColors; - auto rgx = new Rgx(); + auto rgx = Rgx(); debug(parent) { - writeln(__FILE__, ":", __LINE__); + writefln( + "%s:%s", + __FILE__, + __LINE__, + ); foreach (obj; contents) { if (obj["use"] == "content") { if (obj["is"] == "heading") { - writeln(scr_txt_marker["cyan"], + writefln( + "%s%s node: %s heading: %s %s", + scr_txt_marker["cyan"], obj["ocn"], " node: ", obj["node"], " heading: ", obj["lvn"], @@ -32,15 +38,38 @@ template SiSUoutputDebugs() { } } } + debug(dumpdoc) { + writefln( + "%s\n%s:%s", + "-------------------------------", + __FILE__, + __LINE__, + ); + foreach (obj; contents) { + if (obj["use"] == "content") { + writefln( + "[%s][%s]\n%s", + obj["ocn"], + obj["is"], + obj["obj"] + ); + } + } + } debug(objects) { - writeln("-------------------------------"); - writeln(__FILE__, ":", __LINE__); + writefln( + "%s\n%s:%s", + "-------------------------------", + __FILE__, + __LINE__, + ); foreach (obj; contents) { if (obj["use"] == "content") { - writeln( + writefln( + "%s* [%s][%s] %s%s", scr_txt_color["green"], - "* [", obj["ocn"], "]", - "[", obj["is"], "] ", + obj["ocn"], + obj["is"], scr_txt_color["off"], obj["obj"] ); @@ -48,17 +77,21 @@ template SiSUoutputDebugs() { } } debug(headermakejson) { - writeln("document header, metadata & make instructions:"); - writeln(dochead); - writeln(pointer_head_main); + 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) { - writeln( - main_header, ":", - sub_header, ": ", + writefln( + "%s:%s: %s", + main_header, + sub_header, dochead[main_header][sub_header] ); } @@ -70,16 +103,21 @@ template SiSUoutputDebugs() { } } debug(headermetadatajson) { - writeln("document header, metadata & make instructions:"); - writeln(dochead); - writeln(pointer_head_main); + 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) { - writeln(main_header, ":", - sub_header, ": ", + writefln( + "%s:%s: %s", + main_header, + sub_header, dochead[main_header][sub_header] ); } @@ -88,8 +126,10 @@ template SiSUoutputDebugs() { case "title": foreach (sub_header; pointer_head_sub_title) { if (to!string(dochead[main_header][sub_header]).length > 2) { - writeln(main_header, ":", - sub_header, ": ", + writefln( + "%s:%s: %s", + main_header, + sub_header, dochead[main_header][sub_header] ); } @@ -98,8 +138,10 @@ template SiSUoutputDebugs() { case "rights": foreach (sub_header; pointer_head_sub_rights) { if (to!string(dochead[main_header][sub_header]).length > 2) { - writeln(main_header, ":", - sub_header, ": ", + writefln( + "%s:%s: %s", + main_header, + sub_header, dochead[main_header][sub_header] ); } @@ -108,8 +150,10 @@ template SiSUoutputDebugs() { case "date": foreach (sub_header; pointer_head_sub_date) { if (to!string(dochead[main_header][sub_header]).length > 2) { - writeln(main_header, ":", - sub_header, ": ", + writefln( + "%s:%s: %s", + main_header, + sub_header, dochead[main_header][sub_header] ); } @@ -118,8 +162,10 @@ template SiSUoutputDebugs() { case "original": foreach (sub_header; pointer_head_sub_original) { if (to!string(dochead[main_header][sub_header]).length > 2) { - writeln(main_header, ":", - sub_header, ": ", + writefln( + "%s:%s: %s", + main_header, + sub_header, dochead[main_header][sub_header] ); } @@ -128,8 +174,10 @@ template SiSUoutputDebugs() { case "classify": foreach (sub_header; pointer_head_sub_classify) { if (to!string(dochead[main_header][sub_header]).length > 2) { - writeln(main_header, ":", - sub_header, ": ", + writefln( + "%s:%s: %s", + main_header, + sub_header, dochead[main_header][sub_header] ); } @@ -138,8 +186,10 @@ template SiSUoutputDebugs() { case "identifier": foreach (sub_header; pointer_head_sub_identifier) { if (to!string(dochead[main_header][sub_header]).length > 2) { - writeln(main_header, ":", - sub_header, ": ", + writefln( + "%s:%s: %s", + main_header, + sub_header, dochead[main_header][sub_header] ); } @@ -148,8 +198,10 @@ template SiSUoutputDebugs() { case "notes": foreach (sub_header; pointer_head_sub_notes) { if (to!string(dochead[main_header][sub_header]).length > 2) { - writeln(main_header, ":", - sub_header, ": ", + writefln( + "%s:%s: %s", + main_header, + sub_header, dochead[main_header][sub_header] ); } @@ -158,8 +210,10 @@ template SiSUoutputDebugs() { case "publisher": foreach (sub_header; pointer_head_sub_publisher) { if (to!string(dochead[main_header][sub_header]).length > 2) { - writeln(main_header, ":", - sub_header, ": ", + writefln( + "%s:%s: %s", + main_header, + sub_header, dochead[main_header][sub_header] ); } @@ -171,9 +225,13 @@ template SiSUoutputDebugs() { } } debug(bookindex) { - writeln("-------------------------------"); - writeln(__FILE__, ":", __LINE__); - auto bookindex = new BookIndexReport(); + writefln( + "%s\n%s:%s", + "-------------------------------", + __FILE__, + __LINE__, + ); + auto bookindex = BookIndexReport(); bookindex.bookindex_report_sorted(bookindex_unordered_hashes); } debug(summary) { @@ -190,28 +248,39 @@ template SiSUoutputDebugs() { } } debug(headings) { - writeln("-------------------------------"); - writeln(__FILE__, ":", __LINE__); + writefln( + "%s\n%s:%s", + "-------------------------------", + __FILE__, + __LINE__, + ); foreach (obj; contents) { if (obj["is"] == "heading") { - writeln( + writefln( + "%s%s~ [%s] %s", scr_txt_marker["yellow"], - obj["lev"], "~ ", - "[", obj["ocn"], "] ", + obj["lev"], + obj["ocn"], + // "[", obj["is"], "] ", obj["obj"] ); } } } - writeln( + 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"], - "\n", fn_src, - "\nlength contents array: ", contents.length, - "\nlast ocn: ", check["last_ocn"], - "\nlength bookindex: ", bookindex_unordered_hashes.length, - "\n", __FILE__, ":", __LINE__, + fn_src, + "length contents array: ", + contents.length, + "last ocn: ", + check["last_ocn"], + "length bookindex: ", + bookindex_unordered_hashes.length, + __FILE__, + __LINE__, ); debug(checkdoc) { if (auto mfn=match(fn_src, rgx.src_fn)) { diff --git a/lib/sdp/ao_read_markup_source.d b/lib/sdp/ao_read_markup_source.d index 1c574ea..6eaecbe 100644 --- a/lib/sdp/ao_read_markup_source.d +++ b/lib/sdp/ao_read_markup_source.d @@ -1,10 +1,10 @@ -/* +/+ read markup source ao_read_markup_source.d -*/ ++/ mixin template SiSUmarkupRaw() { - class MarkupRaw { - auto rgx = new Rgx(); + struct MarkupRaw { + auto rgx = Rgx(); final private string markupSourceString(in char[] fn_src) { enforce( exists(fn_src)!=0, diff --git a/lib/sdp/ao_rgx.d b/lib/sdp/ao_rgx.d index 7050d25..4c36ff9 100644 --- a/lib/sdp/ao_rgx.d +++ b/lib/sdp/ao_rgx.d @@ -1,10 +1,10 @@ -/* +/+ regex ao_rgx.d -*/ ++/ mixin template RgxInit() { - class Rgx { - /* misc */ + 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])$`); @@ -25,19 +25,19 @@ mixin template RgxInit() { static levels_markup = ctRegex!(`^[A-D1-4]$`); static levels_numbered = ctRegex!(`^[0-9]$`); static levels_numbered_headings = ctRegex!(`^[0-7]$`); - /* insert markup file */ + /+ insert markup file +/ static insert_src_fn_ssi_or_sst = ctRegex!(`^<<\s*(?P[a-zA-Z0-9._-]+/)*(?P[a-zA-Z0-9._-]+[.]ss[ti])$`); // static insert_ssi_or_sst_fn = ctRegex!(`^<<\s*[a-zA-Z0-9._-]+[.]ss[ti]`); - /* comments */ + /+ comments +/ static comment = ctRegex!(`^%+ `); - /* header */ + /+ 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 */ + /+ 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+(.+?)$`); @@ -49,7 +49,7 @@ mixin template RgxInit() { 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 tics */ + /+ blocked markup tics +/ static block_tic_code_open = ctRegex!("^`{3} (code)"); static block_tic_poem_open = ctRegex!("^`{3} (poem)"); static block_tic_group_open = ctRegex!("^`{3} (group)"); @@ -57,7 +57,7 @@ mixin template RgxInit() { 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 */ + /+ blocked markup curly +/ static block_curly_code_open = ctRegex!(`^(code[{].*?$)`); static block_curly_code_close = ctRegex!(`^([}]code)`); static block_curly_poem_open = ctRegex!(`^(poem[{].*?$)`); @@ -70,7 +70,7 @@ mixin template RgxInit() { 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 */ + /+ inline markup font face mod +/ static inline_emphasis = ctRegex!(`\*\{(?P.+?)\}\*`); static inline_bold = ctRegex!(`!\{(?P.+?)\}!`); static inline_italics = ctRegex!(`/\{(?P.+?)\}/`); @@ -79,7 +79,7 @@ mixin template RgxInit() { static inline_strike = ctRegex!(`-\{(?P.+?)\}-`); static inline_insert = ctRegex!(`\+\{(?P.+?)\}\+`); static inline_mono = ctRegex!(`#\{(?P.+?)\}#`); - /* inline markup footnotes */ + /+ inline markup footnotes +/ static true_dollar = ctRegex!(`\$`, "gm"); static inline_notes_al = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg"); static inline_notes_al_gen = ctRegex!(`【.+?】`, "m"); @@ -106,23 +106,23 @@ mixin template RgxInit() { 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 */ + /+ inline markup book index +/ static book_index = ctRegex!(`^=\{\s*(.+?)\}$`, "m"); static book_index_open = ctRegex!(`^=\{\s*([^}]+?)$`); static book_index_close = ctRegex!(`^(.*?)\}$`, "m"); // strip - /* no ocn object */ + /+ no ocn object +/ static ocn_off = ctRegex!(`~#$`, "m"); static ocn_off_dh = ctRegex!(`-#$`, "m"); static ocn_off_all = ctRegex!(`[~-]#$`, "m"); - /* no ocn block */ + /+ no ocn block +/ static ocn_off_block = ctRegex!(`^--~#$`); static ocn_off_block_dh = ctRegex!(`^---#$`); static ocn_off_block_close = ctRegex!(`^--\+#$`); // static auto_ocn_ignore = ctRegex!(`^[+~*$-]{3,}$`); // reminder static ocn_block_marks = ctRegex!(`^--[+~-]#$`); - /* ignore outside code blocks */ + /+ ignore outside code blocks +/ static regular_parse_skip = ctRegex!(`^(--[+~-]#|-[\\]{2}-|=[.\\]{2}=)$`); // not structural info - /* line & page breaks */ + /+ line & page breaks +/ static break_line_within_object = ctRegex!(`[\\]{2}( |$)`); // static break_line_break_within_object = ctRegex!(`( |^)[\\]{2}( |$)`); static break_page = ctRegex!(`^-[\\]{2}-$`); @@ -131,9 +131,9 @@ mixin template RgxInit() { static break_string = ctRegex!(`』`); // ancestry, parent static parent = ctRegex!(`([0-7]):([0-9]+)`); - /* json */ + /+ json +/ static tailing_comma = ctRegex!(`,$`, "m"); - /* head */ + /+ 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"); @@ -145,10 +145,10 @@ mixin template RgxInit() { 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 */ + /+ 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)$`); - /* bookindex split */ + /+ 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_ocn_offset_split = ctRegex!(`\s*\|\s*`); diff --git a/lib/sdp/ao_scan_inserts.d b/lib/sdp/ao_scan_inserts.d index 54abb8f..f70b2e7 100644 --- a/lib/sdp/ao_scan_inserts.d +++ b/lib/sdp/ao_scan_inserts.d @@ -3,20 +3,16 @@ ao_inserts.d +/ mixin template SiSUdocInserts() { - class Inserts { + private: + struct Inserts { auto scan_subdoc_source( - char[][] markup_sourcefile_insert_content, string fn_src, int add + char[][] markup_sourcefile_insert_content, + string fn_src ) { - char[][100000] cont_arbitrary_max_length_set_; - auto ft0 = flag_type.dup; + char[][] contents_insert; auto ft1 = flag_type.dup; - string[string] processing; - uint[string] line_occur; - auto obj_im = new ObjInlineMarkup(); - auto obj_att = new ObjAttrib(); - int[string] counter; counter["add"]=0; mixin ScreenTxtColors; - auto rgx = new Rgx(); + auto rgx = Rgx(); int tell_l(string color, in char[] line) { writeln(scr_txt_marker[color], line); return 0; @@ -30,44 +26,36 @@ mixin template SiSUdocInserts() { if (auto m = match(line, rgx.block_curly_code_close)) { ft1["curly_code"] = 0; } - cont_arbitrary_max_length_set_[counter["add"]] = line; - ++counter["add"]; ++add; + contents_insert ~= line; } else if (auto m = match(line, rgx.block_curly_code_open)) { ft1["curly_code"] = 1; ft1["header_make"] = 0; ft1["header_metadata"] = 0; - cont_arbitrary_max_length_set_[counter["add"]] = line; - ++counter["add"]; ++add; + contents_insert ~= line; } else if (ft1["tic_code"] == 1) { ft1["header_make"] = 0; ft1["header_metadata"] = 0; if (auto m = match(line, rgx.block_tic_close)) { ft1["tic_code"] = 0; } - cont_arbitrary_max_length_set_[counter["add"]] = line; - ++counter["add"]; ++add; + contents_insert ~= line; } else if (auto m = match(line, rgx.block_tic_code_open)) { ft1["tic_code"] = 1; ft1["header_make"] = 0; ft1["header_metadata"] = 0; - cont_arbitrary_max_length_set_[counter["add"]] = line; - ++counter["add"]; ++add; + contents_insert ~= line; } else if ( - (ft1["header_make"] == 1) && (line_occur["header_make"] > 0) + (ft1["header_make"] == 1) && match(line, rgx.header_sub) ) { ft1["header_make"] = 1; ft1["header_metadata"] = 0; - ++line_occur["header_make"]; - ++counter["add"]; } else if ( - (ft1["header_metadata"] == 1) && (line_occur["header_metadata"] > 0) + (ft1["header_metadata"] == 1) && match(line, rgx.header_sub) ) { ft1["header_metadata"] = 1; ft1["header_make"] = 0; - ++line_occur["header_metadata"]; - ++counter["add"]; } else if (auto m = match(line, rgx.insert_src_fn_ssi_or_sst)) { ft1["header_make"] = 0; ft1["header_metadata"] = 0; @@ -75,7 +63,7 @@ mixin template SiSUdocInserts() { auto insert_sub_pth = m.captures[1]; auto fn_src_insert = (markup_src_file_path ~ insert_sub_pth ~ insert_fn); - auto raw = new MarkupRaw(); + auto raw = MarkupRaw(); auto markup_sourcesubfile_insert_content = raw.markupInsertSourceContentRawLineArray(fn_src_insert); debug(insert) { // insert file @@ -87,7 +75,7 @@ mixin template SiSUdocInserts() { markup_sourcesubfile_insert_content.length ); } - auto ins = new Inserts(); + auto ins = Inserts(); /+ 1. load file, 2. read lines; @@ -100,24 +88,19 @@ mixin template SiSUdocInserts() { } else { ft1["header_make"] = 0; ft1["header_metadata"] = 0; - cont_arbitrary_max_length_set_[counter["add"]] = line; - ++counter["add"]; ++add; + contents_insert ~= line; } } // end src subdoc (inserts) loop - auto contents_ = cont_arbitrary_max_length_set_[0 .. counter["add"]].dup; - auto t = tuple(contents_, add); - return t; + return contents_insert; } - auto scan_doc_source(char[][] markup_sourcefile_content, string fn_src) { - char[][100000] cont_arbitrary_max_length_set; // 2000 pg * 50 lines - string[string] processing; - uint[string] line_occur; - auto obj_im = new ObjInlineMarkup(); - auto obj_att = new ObjAttrib(); + auto scan_doc_source( + char[][] markup_sourcefile_content, + string fn_src + ) { + char[][] contents; auto ft = flag_type.dup; - int add; mixin ScreenTxtColors; - auto rgx = new Rgx(); + auto rgx = Rgx(); int tell_l(string color, in char[] line) { writeln(scr_txt_marker[color], line); return 0; @@ -131,49 +114,42 @@ mixin template SiSUdocInserts() { if (auto m = match(line, rgx.block_curly_code_close)) { ft["curly_code"] = 0; } - cont_arbitrary_max_length_set[add] = line; - ++add; + contents ~= line; } else if (auto m = match(line, rgx.block_curly_code_open)) { ft["curly_code"] = 1; ft["header_make"] = 0; ft["header_metadata"] = 0; - cont_arbitrary_max_length_set[add] = line; - ++add; + contents ~= line; } else if (ft["tic_code"] == 1) { ft["header_make"] = 0; ft["header_metadata"] = 0; if (auto m = match(line, rgx.block_tic_close)) { ft["tic_code"] = 0; } - cont_arbitrary_max_length_set[add] = line; - ++add; + contents ~= line; } else if (auto m = match(line, rgx.block_tic_code_open)) { ft["tic_code"] = 1; ft["header_make"] = 0; ft["header_metadata"] = 0; - cont_arbitrary_max_length_set[add] = line; - } else if ((ft["header_make"] == 1) - && (line_occur["header_make"] > 0) - && match(line, rgx.header_sub)) { - ++line_occur["header_make"]; - cont_arbitrary_max_length_set[add] = line; - ++add; - } else if ((ft["header_metadata"] == 1) - && (line_occur["header_metadata"] > 0) - && match(line, rgx.header_sub)) { - ++line_occur["header_metadata"]; - cont_arbitrary_max_length_set[add] = line; - ++add; + contents ~= line; + } else if ( + (ft["header_make"] == 1) + && match(line, rgx.header_sub) + ) { + contents ~= line; + } else if ( + (ft["header_metadata"] == 1) + && match(line, rgx.header_sub) + ) { + contents ~= line; } else if (auto m = match(line, rgx.header_make)) { ft["header_make"] = 1; - ++line_occur["header_make"]; - cont_arbitrary_max_length_set[add] = line; - ++add; + ft["header_metadata"] = 0; + contents ~= line; } else if (auto m = match(line, rgx.header_metadata)) { + ft["header_make"] = 0; ft["header_metadata"] = 1; - ++line_occur["header_metadata"]; - cont_arbitrary_max_length_set[add] = line; - ++add; + contents ~= line; } else if (auto m = match(line, rgx.insert_src_fn_ssi_or_sst)) { ft["header_make"] = 0; ft["header_metadata"] = 0; @@ -181,7 +157,7 @@ mixin template SiSUdocInserts() { auto insert_sub_pth = m.captures[1]; auto fn_src_insert = (markup_src_file_path ~ insert_sub_pth ~ insert_fn); - auto raw = new MarkupRaw(); + auto raw = MarkupRaw(); auto markup_sourcefile_insert_content = raw.markupInsertSourceContentRawLineArray(fn_src_insert); debug(insert) { // insert file @@ -192,15 +168,12 @@ mixin template SiSUdocInserts() { markup_sourcefile_insert_content.length ); } - auto ins = new Inserts(); - auto t = ins.scan_subdoc_source( - markup_sourcefile_insert_content, to!string(fn_src_insert), add + auto ins = Inserts(); + auto contents_insert = ins.scan_subdoc_source( + markup_sourcefile_insert_content, + to!string(fn_src_insert) ); - static assert(!isTypeTuple!(t)); - auto tmparr = t[0]; - auto addsub = t[1]; - cont_arbitrary_max_length_set[add .. addsub-1] = tmparr[0 .. $-1]; - add=addsub; + contents ~= contents_insert; /+ 1. load file, 2. read lines; @@ -213,15 +186,12 @@ mixin template SiSUdocInserts() { } else { ft["header_make"] = 0; ft["header_metadata"] = 0; - cont_arbitrary_max_length_set[add] = line; - ++add; + contents ~= line; } } // end src doc loop - auto contents = cont_arbitrary_max_length_set[0..add].dup; debug(insert) { // insert file writeln(__LINE__); writeln(contents.length); - writeln(add); } return contents; } diff --git a/lib/sdp/ao_structs.d b/lib/sdp/ao_structs.d new file mode 100644 index 0000000..0aeb235 --- /dev/null +++ b/lib/sdp/ao_structs.d @@ -0,0 +1,43 @@ +/+ + structs + ao_structs.d ++/ +/+ structs +/ + +mixin template Structs() { + struct ObjHeading { + string type; + string lev; + string lvn; + string lcn; + } + struct ObjPara { + string indent_first; + string indent_second; + string bullet; + } + struct ObjComment { + // does not have .attrib; + // does not have .ocn + } + struct ObjBlock { + } + struct ObjBlockOcnString { + // does not have .attrib; + string node; + } + struct ObjComposite { + // size_t id; + string use; + string of; + string is_a; + string object; + string ocn; + string attrib; + // int ocn; + ObjHeading heading; + ObjPara para; + ObjBlock block; + ObjBlockOcnString block_ocn_string; + } +} diff --git a/lib/sdp/ao_utils.d b/lib/sdp/ao_utils.d index 20e8988..e5245dd 100644 --- a/lib/sdp/ao_utils.d +++ b/lib/sdp/ao_utils.d @@ -1,7 +1,7 @@ -/* +/+ utils ao_util.d -*/ ++/ mixin template ScreenTxtColors() { string[string] scr_txt_color = [ "off" : "\033[0m", diff --git a/lib/sdp/compile_time_info.d b/lib/sdp/compile_time_info.d new file mode 100644 index 0000000..e541113 --- /dev/null +++ b/lib/sdp/compile_time_info.d @@ -0,0 +1,38 @@ +/+ + compile_time_info + compile_time_info.d ++/ +mixin 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/version.txt b/lib/sdp/version.txt new file mode 100644 index 0000000..f4dde1a --- /dev/null +++ b/lib/sdp/version.txt @@ -0,0 +1,8 @@ +/+ obt - org generated file +/ +// [used by rdmd] +struct Version { + int major; + int minor; + int patch; +} +enum ver = Version(1, 0, 0); -- cgit v1.2.3