diff options
Diffstat (limited to 'src/sdp/output')
-rw-r--r-- | src/sdp/output/epub3.d | 134 | ||||
-rw-r--r-- | src/sdp/output/html.d | 80 | ||||
-rw-r--r-- | src/sdp/output/sqlite.d | 90 | ||||
-rw-r--r-- | src/sdp/output/xmls.d | 178 |
4 files changed, 241 insertions, 241 deletions
diff --git a/src/sdp/output/epub3.d b/src/sdp/output/epub3.d index 3209fae..18b9986 100644 --- a/src/sdp/output/epub3.d +++ b/src/sdp/output/epub3.d @@ -104,20 +104,20 @@ template outputEPub3() { debug(epubmanifest) { foreach (s; doc_matters.xml.keys_seq.seg) { foreach (obj; doc_abstraction[s]) { - if (obj.is_a == "heading") { - if (obj.heading_lev_markup == 4) { + if (obj.typeinfo.is_a == "heading") { + if (obj.node.heading_lev_markup == 4) { writefln( "%s~ [%s.xhtml] %s", obj.marked_up_level, - obj.segment_anchor_tag, + obj.tags.segment_anchor_tag, obj.text ); - } else if (obj.heading_lev_markup > 4) { + } else if (obj.node.heading_lev_markup > 4) { writefln( "%s~ [%s.xhtml#%s] %s", obj.marked_up_level, - obj.segment_anchor_tag, - obj.obj_cite_number, + obj.tags.segment_anchor_tag, + obj.node.obj_cite_number, obj.text ); } @@ -146,49 +146,49 @@ template outputEPub3() { ); foreach (sect; doc_matters.xml.keys_seq.seg) { foreach (obj; doc_abstraction[sect]) { - if (obj.is_a == "heading") { + if (obj.typeinfo.is_a == "heading") { string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip; foreach_reverse (n; 0 .. 7) { string k = n.to!string; - switch (obj.dom_collapsed[n]) { + switch (obj.node.dom_collapsed[n]) { case DomTags.close : toc ~= markup.indent_by_spaces_provided((n + 1), " ") ~ "</li>" ~ "\n"; toc ~= markup.indent_by_spaces_provided(n, " ") ~ "</ol>" ~ "\n"; break; case DomTags.close_and_open : toc ~= markup.indent_by_spaces_provided((n + 1), " ") ~ "</li>" ~ "\n"; - if (obj.heading_lev_markup < 4) { + if (obj.node.heading_lev_markup < 4) { toc ~= markup.indent_by_spaces_provided((n + 1), " ") ~ "<li>" ~ "\n" ~ markup.indent_by_spaces_provided((n + 2), " ") - ~ "<a href=\"" ~ obj.segment_anchor_tag ~ ".xhtml" ~ "\">" + ~ "<a href=\"" ~ obj.tags.segment_anchor_tag ~ ".xhtml" ~ "\">" ~ _txt ~ "</a>" ~ "\n"; } else { - string hashtag =(obj.heading_lev_markup == 4) + string hashtag =(obj.node.heading_lev_markup == 4) ? "" - : ("#" ~ obj.ocn.to!string); + : ("#" ~ obj.node.ocn.to!string); toc ~= markup.indent_by_spaces_provided((n + 1), " ") ~ "<li>" ~ "\n" ~ markup.indent_by_spaces_provided((n + 2), " ") - ~ "<a href=\"" ~ obj.segment_anchor_tag ~ ".xhtml" ~ hashtag ~ "\">" + ~ "<a href=\"" ~ obj.tags.segment_anchor_tag ~ ".xhtml" ~ hashtag ~ "\">" ~ _txt ~ "</a>" ~ "\n"; } break; case DomTags.open : toc ~= markup.indent_by_spaces_provided(n, " ") ~ "<ol>" ~ "\n"; - if (obj.heading_lev_markup < 4) { + if (obj.node.heading_lev_markup < 4) { toc ~= markup.indent_by_spaces_provided((n + 1), " ") ~ "<li>" ~ "\n" ~ markup.indent_by_spaces_provided((n + 2), " ") - ~ "<a href=\"" ~ obj.segment_anchor_tag ~ ".xhtml" ~ "\">" + ~ "<a href=\"" ~ obj.tags.segment_anchor_tag ~ ".xhtml" ~ "\">" ~ _txt ~ "</a>" ~ "\n"; } else { - string hashtag =(obj.heading_lev_markup == 4) + string hashtag =(obj.node.heading_lev_markup == 4) ? "" - : ("#" ~ obj.ocn.to!string); + : ("#" ~ obj.node.ocn.to!string); toc ~= markup.indent_by_spaces_provided((n + 1), " ") ~ "<li>" ~ "\n" ~ markup.indent_by_spaces_provided((n + 2), " ") - ~ "<a href=\"" ~ obj.segment_anchor_tag ~ ".xhtml" ~ hashtag ~ "\">" + ~ "<a href=\"" ~ obj.tags.segment_anchor_tag ~ ".xhtml" ~ hashtag ~ "\">" ~ _txt ~ "</a>" ~ "\n"; } @@ -243,11 +243,11 @@ template outputEPub3() { ); foreach (sect; doc_matters.xml.keys_seq.seg) { foreach (obj; doc_abstraction[sect]) { - if (obj.is_a == "heading") { + if (obj.typeinfo.is_a == "heading") { string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip; - string hashtag =(obj.heading_lev_markup <= 4) ? "" : ("#" ~ obj.ocn.to!string); + string hashtag =(obj.node.heading_lev_markup <= 4) ? "" : ("#" ~ obj.node.ocn.to!string); foreach_reverse (k; 0 .. 7) { - switch (obj.dom_markedup[k]) { + switch (obj.node.dom_markedup[k]) { case DomTags.close : toc ~= "\n </navPoint>"; break; @@ -262,7 +262,7 @@ template outputEPub3() { <content src="%s.xhtml%s" />¶", counter, _txt, - obj.segment_anchor_tag, + obj.tags.segment_anchor_tag, hashtag, ); break; @@ -276,7 +276,7 @@ template outputEPub3() { <content src="%s.xhtml%s" />¶", counter, _txt, - obj.segment_anchor_tag, + obj.tags.segment_anchor_tag, hashtag, ); break; @@ -310,12 +310,12 @@ template outputEPub3() { foreach (part; doc_matters.xml.keys_seq.seg) { foreach (obj; doc_abstraction[part]) { string _txt = xhtml_format.special_characters(obj, obj.text); - if (obj.is_a == "heading") { + if (obj.typeinfo.is_a == "heading") { assert(part == "head" || "toc_seg" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); - switch (obj.heading_lev_markup) { + switch (obj.node.heading_lev_markup) { case 0: .. case 3: /+ fill buffer, and replace with new levels from 1 to 3 +/ - switch (obj.heading_lev_markup) { + switch (obj.node.heading_lev_markup) { case 0: top_level_headings[0] = ""; top_level_headings[1] = ""; @@ -335,16 +335,16 @@ template outputEPub3() { top_level_headings[3] = ""; goto default; default: - doc_parts_ ~= obj.segment_anchor_tag; - doc_epub3[obj.segment_anchor_tag] ~= xhtml_format.epub3_seg_head(doc_matters); + doc_parts_ ~= obj.tags.segment_anchor_tag; + doc_epub3[obj.tags.segment_anchor_tag] ~= xhtml_format.epub3_seg_head(doc_matters); auto t = xhtml_format.heading_seg(obj, _txt, suffix, "epub"); - doc_epub3[obj.segment_anchor_tag] ~= t[0]; - doc_epub3_endnotes[obj.segment_anchor_tag] ~= t[1]; + doc_epub3[obj.tags.segment_anchor_tag] ~= t[0]; + doc_epub3_endnotes[obj.tags.segment_anchor_tag] ~= t[1]; break; } break; case 4: - segment_filename = obj.segment_anchor_tag; + segment_filename = obj.tags.segment_anchor_tag; doc_epub3[segment_filename] ~= xhtml_format.epub3_seg_head(doc_matters); auto t = xhtml_format.heading_seg(obj, _txt, suffix, "epub"); doc_epub3[segment_filename] ~= t[0]; @@ -357,23 +357,23 @@ template outputEPub3() { break; case 8: .. case 9: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a, ": ", obj.heading_lev_markup); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a, ": ", obj.node.heading_lev_markup); writeln(__FILE__, ":", __LINE__, ": ", obj.text); } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a, ": ", obj.heading_lev_markup); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a, ": ", obj.node.heading_lev_markup); } break; } } else { assert(part == "head" || "toc_seg" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); - switch (obj.of_part) { + switch (obj.typeinfo.of_part) { case "frontmatter": assert(part == "head" || "toc_seg"); - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "toc": auto t = xhtml_format.para_seg(obj, _txt, suffix, "epub"); doc_epub3[segment_filename] ~= t[0]; @@ -381,22 +381,22 @@ template outputEPub3() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } break; case "body": assert(part == "body"); - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "para": auto t = xhtml_format.para_seg(obj, _txt, suffix, "epub"); doc_epub3[segment_filename] ~= t[0]; @@ -404,13 +404,13 @@ template outputEPub3() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; case "block": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "quote": auto t = xhtml_format.quote_seg(obj, _txt, suffix, "epub"); doc_epub3[segment_filename] ~= t[0].to!string; @@ -442,23 +442,23 @@ template outputEPub3() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } break; case "backmatter": assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "endnote": assert(part == "endnotes"); auto t = xhtml_format.para_seg(obj, _txt, suffix, "epub"); doc_epub3[segment_filename] ~= t[0]; @@ -485,14 +485,14 @@ template outputEPub3() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } @@ -501,53 +501,53 @@ template outputEPub3() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.of_part); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.of_part); } break; } } - if (obj.is_a == "heading") { + if (obj.typeinfo.is_a == "heading") { assert(obj.text.length > 0); - if (obj.heading_lev_markup <= 4) { + if (obj.node.heading_lev_markup <= 4) { oepbs_content_parts["manifest_documents"] ~= format(q"¶ <item id="%s.xhtml" href="%s.xhtml" media-type="application/xhtml+xml" /> ¶", - obj.segment_anchor_tag, - obj.segment_anchor_tag, + obj.tags.segment_anchor_tag, + obj.tags.segment_anchor_tag, ); oepbs_content_parts["spine"] ~= format(q"¶ <itemref idref="%s.xhtml" linear="yes" /> ¶", - obj.segment_anchor_tag, + obj.tags.segment_anchor_tag, ); oepbs_content_parts["guide"] ~= format(q"¶ <reference type="%s" href="%s" /> ¶", - obj.segment_anchor_tag, - obj.segment_anchor_tag, + obj.tags.segment_anchor_tag, + obj.tags.segment_anchor_tag, ); - } else if (obj.heading_lev_markup > 4) { + } else if (obj.node.heading_lev_markup > 4) { oepbs_content_parts["manifest_documents"] ~= format(q"¶ <item id="%s.xhtml#%s" href="%s.xhtml#%s" media-type="application/xhtml+xml" /> ¶", - obj.segment_anchor_tag, - obj.obj_cite_number, - obj.segment_anchor_tag, - obj.obj_cite_number, + obj.tags.segment_anchor_tag, + obj.node.obj_cite_number, + obj.tags.segment_anchor_tag, + obj.node.obj_cite_number, ); oepbs_content_parts["spine"] ~= format(q"¶ <itemref idref="%s.xhtml#%s" linear="yes" /> ¶", - obj.segment_anchor_tag, - obj.obj_cite_number, + obj.tags.segment_anchor_tag, + obj.node.obj_cite_number, ); oepbs_content_parts["guide"] ~= format(q"¶ <reference type="%s#%s" href="%s#%s" /> ¶", - obj.segment_anchor_tag, - obj.obj_cite_number, - obj.segment_anchor_tag, - obj.obj_cite_number, + obj.tags.segment_anchor_tag, + obj.node.obj_cite_number, + obj.tags.segment_anchor_tag, + obj.node.obj_cite_number, ); } } diff --git a/src/sdp/output/html.d b/src/sdp/output/html.d index ddd3c9f..6078c00 100644 --- a/src/sdp/output/html.d +++ b/src/sdp/output/html.d @@ -28,11 +28,11 @@ template outputHTML() { foreach (obj; doc_abstraction[part]) { delimit = xhtml_format.div_delimit(part, previous_part); string _txt = xhtml_format.special_characters(obj, obj.text); - switch (obj.of_part) { + switch (obj.typeinfo.of_part) { case "frontmatter": assert(part == "head" || "toc_scroll"); - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "heading": doc_html ~= delimit ~ xhtml_format.heading_scroll(obj, _txt, suffix); break; @@ -41,22 +41,22 @@ template outputHTML() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } break; case "body": assert(part == "body" || "head"); // surprise - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "heading": doc_html ~= delimit ~ xhtml_format.heading_scroll(obj, _txt, suffix); break; @@ -65,13 +65,13 @@ template outputHTML() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; case "block": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "quote": doc_html ~= xhtml_format.quote_scroll(obj, _txt); break; @@ -94,23 +94,23 @@ template outputHTML() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } break; case "backmatter": assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex_scroll" || "blurb" || "tail"); - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "heading": doc_html ~= delimit ~ xhtml_format.heading_scroll(obj, _txt, suffix); break; @@ -131,14 +131,14 @@ template outputHTML() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } @@ -147,8 +147,8 @@ template outputHTML() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.of_part); - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.of_part); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); writeln(__FILE__, ":", __LINE__, ": ", obj.text); } break; @@ -200,12 +200,12 @@ template outputHTML() { foreach (obj; doc_abstraction[part]) { delimit = xhtml_format.div_delimit(part, previous_part); string _txt = xhtml_format.special_characters(obj, obj.text); - if (obj.is_a == "heading") { + if (obj.typeinfo.is_a == "heading") { assert(part == "head" || "toc_seg" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); - switch (obj.heading_lev_markup) { + switch (obj.node.heading_lev_markup) { case 0: .. case 3: /+ fill buffer, and replace with new levels from 1 to 3 +/ - switch (obj.heading_lev_markup) { + switch (obj.node.heading_lev_markup) { case 0: top_level_headings[0] = ""; top_level_headings[1] = ""; @@ -226,12 +226,12 @@ template outputHTML() { goto default; default: auto t = xhtml_format.heading_seg(obj, _txt, suffix, "seg"); - top_level_headings[obj.heading_lev_markup] = t[0]; + top_level_headings[obj.node.heading_lev_markup] = t[0]; break; } break; case 4: - segment_filename = obj.segment_anchor_tag; + segment_filename = obj.tags.segment_anchor_tag; doc_html[segment_filename] ~= xhtml_format.html_head(doc_matters, "seg"); auto navigation_bar = xhtml_format.nav_pre_next_svg(obj); doc_html[segment_filename] ~= navigation_bar.toc_pre_next; // navigation bar @@ -252,45 +252,45 @@ template outputHTML() { break; case 8: .. case 9: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a, ": ", obj.heading_lev_markup); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a, ": ", obj.node.heading_lev_markup); writeln(__FILE__, ":", __LINE__, ": ", obj.text); } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a, ": ", obj.heading_lev_markup); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a, ": ", obj.node.heading_lev_markup); } break; } } else { assert(part == "head" || "toc_seg" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); - switch (obj.of_part) { + switch (obj.typeinfo.of_part) { case "frontmatter": assert(part == "head" || "toc_seg"); - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "toc": auto t = xhtml_format.para_seg(obj, _txt, suffix, "seg"); doc_html[segment_filename] ~= t[0].to!string; break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; case "body": assert(part == "body"); - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "para": auto t = xhtml_format.para_seg(obj, _txt, suffix, "seg"); doc_html[segment_filename] ~= t[0].to!string; @@ -298,13 +298,13 @@ template outputHTML() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; case "block": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "quote": auto t = xhtml_format.quote_seg(obj, _txt, suffix, "seg"); doc_html[segment_filename] ~= t[0].to!string; @@ -336,23 +336,23 @@ template outputHTML() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } break; case "backmatter": assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "endnote": assert(part == "endnotes"); auto t = xhtml_format.para_seg(obj, _txt, suffix, "seg"); doc_html[segment_filename] ~= t[0]; @@ -379,14 +379,14 @@ template outputHTML() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } @@ -395,7 +395,7 @@ template outputHTML() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.of_part); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.of_part); } break; } diff --git a/src/sdp/output/sqlite.d b/src/sdp/output/sqlite.d index e9667ae..f45eec6 100644 --- a/src/sdp/output/sqlite.d +++ b/src/sdp/output/sqlite.d @@ -246,7 +246,7 @@ template SQLiteFormatAndLoadObject() { string o = format(q"¶<p class="%s"><b> %s </b></p>¶", - obj.is_a, + obj.typeinfo.is_a, _txt, ); return o; @@ -255,13 +255,13 @@ template SQLiteFormatAndLoadObject() { auto return ref const O obj, ) { string _txt = munge_html(obj); - _txt = (obj.bullet) ? ("●  " ~ _txt) : _txt; + _txt = (obj.attrib.bullet) ? ("●  " ~ _txt) : _txt; string o = format(q"¶<p class="%s" indent="h%si%s"> %s </p>¶", - obj.is_a, - obj.indent_hang, - obj.indent_base, + obj.typeinfo.is_a, + obj.attrib.indent_hang, + obj.attrib.indent_base, _txt ); return o; @@ -273,7 +273,7 @@ template SQLiteFormatAndLoadObject() { string o = format(q"¶<p class="%s"> %s </p>¶", - obj.is_a, + obj.typeinfo.is_a, _txt ); return o; @@ -285,7 +285,7 @@ template SQLiteFormatAndLoadObject() { string o = format(q"¶<p class="%s"> %s </p>¶", - obj.is_a, + obj.typeinfo.is_a, _txt ); return o; @@ -296,7 +296,7 @@ template SQLiteFormatAndLoadObject() { string _txt = munge_html(obj); string o = format(q"¶ <p class="%s">%s</p>¶", - obj.is_a, + obj.typeinfo.is_a, _txt.stripRight ); return o; @@ -306,7 +306,7 @@ template SQLiteFormatAndLoadObject() { ) { string _txt = munge_html(obj); string o = format(q"¶<p class="%s">%s</p>¶", - obj.is_a, + obj.typeinfo.is_a, _txt ); return o; @@ -316,7 +316,7 @@ template SQLiteFormatAndLoadObject() { ) { string _txt = html_special_characters_code(obj.text); string o = format(q"¶<p class="%s">%s</p>¶", - obj.is_a, + obj.typeinfo.is_a, _txt ); return o; @@ -340,14 +340,14 @@ template SQLiteFormatAndLoadObject() { && (_table_rows.length <= row_idx+2)) { // check row_idx+2 (rather than == ++row_idx) _tablenote ~= cell; } else { - string _col_is = (row_idx == 0 && obj.table_heading) ? "th" : "td"; + string _col_is = (row_idx == 0 && obj.table.heading) ? "th" : "td"; string _align = ("style=\"text-align:" - ~ ((obj.table_column_aligns[col_idx] == "l") + ~ ((obj.table.column_aligns[col_idx] == "l") ? "left\"" : "right\"")); _table ~= "<" ~ _col_is ~ " width=\"" - ~ obj.table_column_widths[col_idx].to!string + ~ obj.table.column_widths[col_idx].to!string ~ "%\" " ~ _align ~ ">"; @@ -375,7 +375,7 @@ template SQLiteFormatAndLoadObject() { </table> %s </p>¶", - obj.is_a, + obj.typeinfo.is_a, _txt, _note ); @@ -888,12 +888,12 @@ template SQLiteInsertDocObjectsLoop() { ); ¶", _metadata_tid, - obj.ocn, + obj.node.ocn, SQLinsertDelimiter!()(obj_txt["text"]), SQLinsertDelimiter!()(obj_txt["html"]), - obj.heading_lev_markup, - obj.is_of, - obj.is_a, + obj.node.heading_lev_markup, + obj.typeinfo.is_of, + obj.typeinfo.is_a, ); return _insert_doc_objects_row; } @@ -903,32 +903,32 @@ template SQLiteInsertDocObjectsLoop() { string[] _insert_doc_objects; foreach (part; doc_matters.xml.keys_seq.sql) { foreach (obj; doc_abstraction[part]) { - switch (obj.of_part) { + switch (obj.typeinfo.of_part) { case "frontmatter": assert(part == "head", part); - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "heading": obj_txt = format_and_sqlite_load.heading(obj); break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } break; case "body": // assert(part == "body", part); // TODO broken - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "heading": debug (asserts) { // TODO consider and fix or remove if (part != "body") { @@ -942,13 +942,13 @@ template SQLiteInsertDocObjectsLoop() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; case "block": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "quote": obj_txt = format_and_sqlite_load.quote(obj); break; @@ -971,23 +971,23 @@ template SQLiteInsertDocObjectsLoop() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } break; case "backmatter": assert(part == "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail", part); - switch (obj.is_of) { + switch (obj.typeinfo.is_of) { case "para": - switch (obj.is_a) { + switch (obj.typeinfo.is_a) { case "heading": obj_txt = format_and_sqlite_load.heading(obj); break; @@ -1005,14 +1005,14 @@ template SQLiteInsertDocObjectsLoop() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); } break; } break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of); } break; } @@ -1021,28 +1021,28 @@ template SQLiteInsertDocObjectsLoop() { break; default: if ((doc_matters.opt.action.debug_do)) { - writeln(__FILE__, ":", __LINE__, ": ", obj.of_part); // check where empty value could come from - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.of_part); // check where empty value could come from + writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); writeln(__FILE__, ":", __LINE__, ": ", obj.text); // check where empty value could come from } break; } - if (obj.is_a == "heading") { + if (obj.typeinfo.is_a == "heading") { if ((doc_matters.opt.action.verbose)) { writeln( - "markup: ", obj.heading_lev_markup, - "> ", obj.dom_markedup, - "; collapsed: ", obj.heading_lev_collapsed, - "> ", obj.dom_collapsed, - "; ocn: ", obj.ocn, - " node: ", obj.node, - "; parent: ", obj.parent_lev_markup, - "; ocn: ", obj.parent_ocn, + "markup: ", obj.node.heading_lev_markup, + "> ", obj.node.dom_markedup, + "; collapsed: ", obj.node.heading_lev_collapsed, + "> ", obj.node.dom_collapsed, + "; ocn: ", obj.node.ocn, + " node: ", obj.node.node, + "; parent: ", obj.node.parent_lev_markup, + "; ocn: ", obj.node.parent_ocn, "; ", ); } } - if (!(obj.is_a == "comment")) { + if (!(obj.typeinfo.is_a == "comment")) { _insert_doc_objects ~= insertDocObjectsRow(obj); } } // loop closes diff --git a/src/sdp/output/xmls.d b/src/sdp/output/xmls.d index 785d87e..cc08bfe 100644 --- a/src/sdp/output/xmls.d +++ b/src/sdp/output/xmls.d @@ -60,7 +60,7 @@ template outputXHTMLs() { .replaceAll(rgx.xhtml_less_than, "<") .replaceAll(rgx.xhtml_greater_than, ">") .replaceAll(rgx.nbsp_char, " "); - if (!(obj.is_a == "code")) { + if (!(obj.typeinfo.is_a == "code")) { _txt = (_txt) .replaceAll(rgx.xhtml_line_break, "<br />"); } @@ -340,7 +340,7 @@ template outputXHTMLs() { string _suffix = ".html", string _xml_type = "seg", ) { - if (obj.inline_links) { + if (obj.has.inline_links) { if ((_txt.match(rgx.mark_internal_site_lnk)) && (_xml_type == "scroll")) { // conditions reversed to avoid: gdc compiled program run segfault _txt = (_txt).replaceAll( @@ -362,8 +362,8 @@ template outputXHTMLs() { if (_txt.match(rgx.inline_link)) { writeln(__LINE__, " (missed) markup link identified (", - obj.inline_links, - "): ", obj.is_a, ": ", + obj.has.inline_links, + "): ", obj.typeinfo.is_a, ": ", obj.text ); } @@ -372,8 +372,8 @@ template outputXHTMLs() { if (_txt.match(rgx.inline_link)) { writeln(__LINE__, " (missed) markup link identified (", - obj.inline_links, - "): ", obj.is_a, ": ", + obj.has.inline_links, + "): ", obj.typeinfo.is_a, ": ", obj.text ); } @@ -384,7 +384,7 @@ template outputXHTMLs() { auto return ref const O obj, string _txt, ) { - if (obj.inline_notes_reg) { + if (obj.has.inline_notes_reg) { _txt = font_face(_txt); _txt = (_txt).replaceAll( rgx.inline_notes_delimiter_al_regular_number_note, @@ -393,12 +393,12 @@ template outputXHTMLs() { } debug(markup_endnotes) { if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { - writeln(__LINE__, " (missed) markup endnote: ", obj.is_a, ": ", obj.text); + writeln(__LINE__, " (missed) markup endnote: ", obj.typeinfo.is_a, ": ", obj.text); } } debug(markup) { if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { - writeln(__LINE__, " (missed) markup endnote: ", obj.is_a, ": ", obj.text); + writeln(__LINE__, " (missed) markup endnote: ", obj.typeinfo.is_a, ": ", obj.text); } } return _txt; @@ -408,7 +408,7 @@ template outputXHTMLs() { string _txt, ) { string[] _endnotes; - if (obj.inline_notes_reg) { + if (obj.has.inline_notes_reg) { _txt = font_face(_txt); /+ need markup for text, and separated footnote +/ foreach(m; _txt.matchAll(rgx.inline_notes_delimiter_al_regular_number_note)) { @@ -433,7 +433,7 @@ template outputXHTMLs() { ); } else if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { debug(markup) { - writeln(__LINE__, " endnote: ", obj.is_a, ": ", obj.text); + writeln(__LINE__, " endnote: ", obj.typeinfo.is_a, ": ", obj.text); } } auto t = tuple( @@ -468,7 +468,7 @@ template outputXHTMLs() { ) { char[] lev4_subtoc; lev4_subtoc ~= " <div class=\"nav\">\n"; - foreach (subtoc; obj.lev4_subtoc) { + foreach (subtoc; obj.tags.lev4_subtoc) { if (auto m = subtoc.match(rgx.inline_link_subtoc)) { auto indent = m.captures[1].to!string; auto text = m.captures[2].to!string; @@ -493,7 +493,7 @@ template outputXHTMLs() { auto return ref const O obj, ) { string prev, next, toc; - if (obj.segment_anchor_tag == "toc") { + if (obj.tags.segment_anchor_tag == "toc") { toc = ""; prev = ""; } else { @@ -506,7 +506,7 @@ template outputXHTMLs() { </a>¶", ); } - if (obj.segname_prev == "") { + if (obj.tags.segname_prev == "") { prev = ""; } else { prev = format(q"¶<a href="%s.html" target="_top"> @@ -516,10 +516,10 @@ template outputXHTMLs() { </svg> </div> </a>¶", - obj.segname_prev, + obj.tags.segname_prev, ); } - if (obj.segname_next == "") { + if (obj.tags.segname_next == "") { next = ""; } else { next = format(q"¶<a href="%s.html" target="_top"> @@ -529,7 +529,7 @@ template outputXHTMLs() { </svg> </div> </a>¶", - obj.segname_next, + obj.tags.segname_next, ); } string _toc_pre_next = format(q"¶ <div class="flex-menu-option"> @@ -571,15 +571,15 @@ template outputXHTMLs() { string _txt, string _xml_type = "html", ) { - auto tags = _xhtml_anchor_tags(obj.anchor_tags); + auto tags = _xhtml_anchor_tags(obj.tags.anchor_tags); string _horizontal_rule = "<hr />"; if ((_xml_type != "html") - || (obj.heading_lev_markup == 0 || obj.heading_lev_markup > 4)) { + || (obj.node.heading_lev_markup == 0 || obj.node.heading_lev_markup > 4)) { _horizontal_rule = ""; } _txt = font_face(_txt); string o; - if (obj.obj_cite_number.empty) { + if (obj.node.obj_cite_number.empty) { o = format(q"¶%s <div class="substance"> <h%s class="%s">%s @@ -587,11 +587,11 @@ template outputXHTMLs() { </h%s> </div>¶", _horizontal_rule, - obj.heading_lev_markup, - obj.is_a, + obj.node.heading_lev_markup, + obj.typeinfo.is_a, tags, _txt, - obj.heading_lev_markup, + obj.node.heading_lev_markup, ); } else { o = format(q"¶%s @@ -602,15 +602,15 @@ template outputXHTMLs() { </h%s> </div>¶", _horizontal_rule, - obj.obj_cite_number, - obj.obj_cite_number, - obj.heading_lev_markup, - obj.is_a, - obj.obj_cite_number, - obj.obj_cite_number, + obj.node.obj_cite_number, + obj.node.obj_cite_number, + obj.node.heading_lev_markup, + obj.typeinfo.is_a, + obj.node.obj_cite_number, + obj.node.obj_cite_number, tags, _txt, - obj.heading_lev_markup, + obj.node.heading_lev_markup, ); } return o; @@ -620,7 +620,7 @@ template outputXHTMLs() { string _txt, string _suffix = ".html", ) { - auto tags = _xhtml_anchor_tags(obj.anchor_tags); + auto tags = _xhtml_anchor_tags(obj.tags.anchor_tags); _txt = inline_markup_scroll(obj, _txt, _suffix); string o = heading(obj, _txt); return o; @@ -645,19 +645,19 @@ template outputXHTMLs() { auto return ref const O obj, string _txt, ) { - auto tags = _xhtml_anchor_tags(obj.anchor_tags); + auto tags = _xhtml_anchor_tags(obj.tags.anchor_tags); _txt = font_face(_txt); string o; - _txt = (obj.bullet) ? ("●  " ~ _txt) : _txt; - if (obj.obj_cite_number.empty) { + _txt = (obj.attrib.bullet) ? ("●  " ~ _txt) : _txt; + if (obj.node.obj_cite_number.empty) { o = format(q"¶ <div class="substance"> <p class="%s" indent="h%si%s">%s %s </p> </div>¶", - obj.is_a, - obj.indent_hang, - obj.indent_base, + obj.typeinfo.is_a, + obj.attrib.indent_hang, + obj.attrib.indent_base, tags, _txt ); @@ -668,12 +668,12 @@ template outputXHTMLs() { %s </p> </div>¶", - obj.obj_cite_number, - obj.obj_cite_number, - obj.is_a, - obj.indent_hang, - obj.indent_base, - obj.obj_cite_number, + obj.node.obj_cite_number, + obj.node.obj_cite_number, + obj.typeinfo.is_a, + obj.attrib.indent_hang, + obj.attrib.indent_base, + obj.node.obj_cite_number, tags, _txt ); @@ -685,7 +685,7 @@ template outputXHTMLs() { string _txt, string _suffix = ".html", ) { - auto tags = _xhtml_anchor_tags(obj.anchor_tags); + auto tags = _xhtml_anchor_tags(obj.tags.anchor_tags); _txt = inline_markup_scroll(obj, _txt, _suffix); string o = para(obj, _txt); return o; @@ -712,13 +712,13 @@ template outputXHTMLs() { ) { _txt = font_face(_txt); string o; - if (obj.obj_cite_number.empty) { + if (obj.node.obj_cite_number.empty) { o = format(q"¶ <div class="substance"> <p class="%s"> %s </p> </div>¶", - obj.is_a, + obj.typeinfo.is_a, _txt ); } else { @@ -728,10 +728,10 @@ template outputXHTMLs() { %s </p> </div>¶", - obj.obj_cite_number, - obj.obj_cite_number, - obj.is_a, - obj.obj_cite_number, + obj.node.obj_cite_number, + obj.node.obj_cite_number, + obj.typeinfo.is_a, + obj.node.obj_cite_number, _txt ); } @@ -742,7 +742,7 @@ template outputXHTMLs() { string _txt, string _suffix = ".html", ) { - auto tags = _xhtml_anchor_tags(obj.anchor_tags); + auto tags = _xhtml_anchor_tags(obj.tags.anchor_tags); _txt = inline_markup_scroll(obj, _txt, _suffix); string o = quote(obj, _txt); return o; @@ -769,13 +769,13 @@ template outputXHTMLs() { ) { _txt = font_face(_txt); string o; - if (obj.obj_cite_number.empty) { + if (obj.node.obj_cite_number.empty) { o = format(q"¶ <div class="substance"> <p class="%s"> %s </p> </div>¶", - obj.is_a, + obj.typeinfo.is_a, _txt ); } else { @@ -785,10 +785,10 @@ template outputXHTMLs() { %s </p> </div>¶", - obj.obj_cite_number, - obj.obj_cite_number, - obj.is_a, - obj.obj_cite_number, + obj.node.obj_cite_number, + obj.node.obj_cite_number, + obj.typeinfo.is_a, + obj.node.obj_cite_number, _txt ); } @@ -800,7 +800,7 @@ template outputXHTMLs() { string _suffix = ".html", string _xml_type = "html", ) { - auto tags = _xhtml_anchor_tags(obj.anchor_tags); + auto tags = _xhtml_anchor_tags(obj.tags.anchor_tags); _txt = inline_markup_scroll(obj, _txt, _suffix); string o = group(obj, _txt); return o; @@ -827,11 +827,11 @@ template outputXHTMLs() { ) { _txt = font_face(_txt); string o; - if (obj.obj_cite_number.empty) { + if (obj.node.obj_cite_number.empty) { o = format(q"¶ <div class="substance"> <p class="%s">%s</p> </div>¶", - obj.is_a, + obj.typeinfo.is_a, _txt.stripRight ); } else { @@ -839,10 +839,10 @@ template outputXHTMLs() { <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> <p class="%s" id="%s">%s</p> </div>¶", - obj.obj_cite_number, - obj.obj_cite_number, - obj.is_a, - obj.obj_cite_number, + obj.node.obj_cite_number, + obj.node.obj_cite_number, + obj.typeinfo.is_a, + obj.node.obj_cite_number, _txt.stripRight ); } @@ -854,7 +854,7 @@ template outputXHTMLs() { string _suffix = ".html", string _xml_type = "html", ) { - auto tags = _xhtml_anchor_tags(obj.anchor_tags); + auto tags = _xhtml_anchor_tags(obj.tags.anchor_tags); _txt = inline_markup_scroll(obj, _txt, _suffix); string o = block(obj, _txt); return o; @@ -881,11 +881,11 @@ template outputXHTMLs() { ) { _txt = font_face(_txt); string o; - if (obj.obj_cite_number.empty) { + if (obj.node.obj_cite_number.empty) { o = format(q"¶ <div class="substance"> <p class="%s">%s</p> </div>¶", - obj.is_a, + obj.typeinfo.is_a, _txt ); } else { @@ -893,10 +893,10 @@ template outputXHTMLs() { <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> <p class="%s" id="%s">%s</p> </div>¶", - obj.obj_cite_number, - obj.obj_cite_number, - obj.is_a, - obj.obj_cite_number, + obj.node.obj_cite_number, + obj.node.obj_cite_number, + obj.typeinfo.is_a, + obj.node.obj_cite_number, _txt ); } @@ -908,7 +908,7 @@ template outputXHTMLs() { string _suffix = ".html", string _xml_type = "html", ) { - auto tags = _xhtml_anchor_tags(obj.anchor_tags); + auto tags = _xhtml_anchor_tags(obj.tags.anchor_tags); _txt = inline_markup_scroll(obj, _txt, _suffix); string o = verse(obj, _txt); return o; @@ -945,11 +945,11 @@ template outputXHTMLs() { && (_table_rows.length <= row_idx+2)) { _tablenote ~= cell; } else { - string _col_is = (row_idx == 0 && obj.table_heading) ? "th" : "td"; + string _col_is = (row_idx == 0 && obj.table.heading) ? "th" : "td"; string _align = ("style=\"text-align:" - ~ ((obj.table_column_aligns[col_idx] == "l") + ~ ((obj.table.column_aligns[col_idx] == "l") ? "left\"" : "right\"")); - _table ~= "<" ~ _col_is ~ " width=\"" ~ obj.table_column_widths[col_idx].to!string ~ "%\" " ~ _align ~ ">"; + _table ~= "<" ~ _col_is ~ " width=\"" ~ obj.table.column_widths[col_idx].to!string ~ "%\" " ~ _align ~ ">"; _table ~= cell; _table ~= "</" ~ _col_is ~ ">"; } @@ -966,7 +966,7 @@ template outputXHTMLs() { auto return ref const O obj, string _txt, ) { - auto tags = _xhtml_anchor_tags(obj.anchor_tags); + auto tags = _xhtml_anchor_tags(obj.tags.anchor_tags); _txt = font_face(_txt); auto t = tablarize(obj, _txt); _txt = t[0]; @@ -981,10 +981,10 @@ template outputXHTMLs() { %s </p> </div>¶", - obj.obj_cite_number, - obj.obj_cite_number, - obj.is_a, - obj.obj_cite_number, + obj.node.obj_cite_number, + obj.node.obj_cite_number, + obj.typeinfo.is_a, + obj.node.obj_cite_number, tags, _txt, _note @@ -999,9 +999,9 @@ template outputXHTMLs() { o = format(q"¶ <p class="%s" indent="h%si%s"> %s </p>¶", - obj.is_a, - obj.indent_hang, - obj.indent_base, + obj.typeinfo.is_a, + obj.attrib.indent_hang, + obj.attrib.indent_base, _txt ); return o; @@ -1011,11 +1011,11 @@ template outputXHTMLs() { string _txt, ) { string o; - if (obj.obj_cite_number.empty) { + if (obj.node.obj_cite_number.empty) { o = format(q"¶ <div class="substance"> <p class="%s">%s</p> </div>¶", - obj.is_a, + obj.typeinfo.is_a, _txt ); } else { @@ -1023,10 +1023,10 @@ template outputXHTMLs() { <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> <p class="%s" id="%s">%s</p> </div>¶", - obj.obj_cite_number, - obj.obj_cite_number, - obj.is_a, - obj.obj_cite_number, + obj.node.obj_cite_number, + obj.node.obj_cite_number, + obj.typeinfo.is_a, + obj.node.obj_cite_number, _txt ); } |