aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/doc_reform/output/sqlite.d
diff options
context:
space:
mode:
Diffstat (limited to 'src/doc_reform/output/sqlite.d')
-rw-r--r--src/doc_reform/output/sqlite.d197
1 files changed, 192 insertions, 5 deletions
diff --git a/src/doc_reform/output/sqlite.d b/src/doc_reform/output/sqlite.d
index b317dc0..0d31e2f 100644
--- a/src/doc_reform/output/sqlite.d
+++ b/src/doc_reform/output/sqlite.d
@@ -203,11 +203,6 @@ template SQLiteFormatAndLoadObject() {
}
_txt = _txt.replaceAll(rgx.inline_notes_al_gen_ref, "<sup>$1</sup> ");
}
- if (_txt.matchFirst(rgx.inline_link)) {
- foreach (m; _txt.matchAll(rgx.inline_link)) {
- }
- _txt = _txt.replaceAll(rgx.inline_link_clean, "");
- }
if (_notes.length > 0) {
_txt ~= _notes;
}
@@ -249,11 +244,202 @@ template SQLiteFormatAndLoadObject() {
.replaceAll(rgx.inline_cite, "<cite>$1</cite>");
return _txt;
}
+ auto inline_images(M,O)(
+ M doc_matters,
+ const O obj,
+ string _txt,
+ string _suffix = ".html",
+ string _xml_type = "seg",
+ ) {
+ string _img_pth;
+ if (_xml_type == "epub") {
+ _img_pth = "image/";
+ } else if (_xml_type == "scroll") {
+ _img_pth = "../../image/";
+ } else if (_xml_type == "seg") {
+ _img_pth = "../../../image/";
+ }
+ if (_txt.match(rgx.inline_image)) {
+ _txt = _txt.replaceAll( // TODO bug where image dimensions (w or h) not given & consequently set to 0; should not be used (calculate earlier, abstraction)
+ rgx.inline_image,
+ ("$1<img src=\""
+ ~ _img_pth
+ ~ "$3\" width=\"$4\" height=\"$5\" naturalsizeflag=\"0\" align=\"bottom\" border=\"0\" /> $6"));
+ }
+ return _txt;
+ }
+ auto inline_links(M,O)(
+ M doc_matters,
+ const O obj,
+ string _txt,
+ string _xml_type = "seg",
+ ) {
+ 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(
+ rgx.inline_seg_link,
+ "$1");
+ }
+ auto pth_html = DocReformPathsHTML!()(doc_matters.output_path, doc_matters.src.language);
+ if (_xml_type == "seg") {
+ foreach (m; _txt.match(rgx.inline_link_hash)) {
+ if (m.captures[3] in doc_matters.xml.tag_associations) {
+ if (m.captures[3] == doc_matters.xml.tag_associations[(m.captures[3])][0]) {
+ _txt = _txt.replaceFirst(
+ rgx.inline_link_hash,
+ "┥$1┝┤"
+ ~ doc_matters.conf_make_meta.conf.webserv_url_doc_root
+ ~ "/"
+ ~ pth_html.tail_fn_seg(doc_matters.src.filename, "$3.html")
+ ~ "├"
+ );
+ } else {
+ _txt = _txt.replaceFirst(
+ rgx.inline_link_hash,
+ "┥$1┝┤"
+ ~ doc_matters.conf_make_meta.conf.webserv_url_doc_root
+ ~ "/"
+ ~ doc_matters.xml.tag_associations[(m.captures[3])][0]
+ ~ ".html"
+ ~ "#" ~ "$3"
+ ~ "├"
+ );
+ }
+ } else {
+ writeln(
+ "WARNING on internal document links, anchor to link not found in document, "
+ ~ "anchor: " ~ m.captures[3]
+ ~ " document: " ~ doc_matters.src.filename
+ );
+ }
+ }
+ } else {
+ if (auto m = _txt.match(rgx.inline_link_hash)) {
+ _txt = _txt.replaceFirst(
+ rgx.inline_link_hash,
+ "┥$1┝┤"
+ ~ doc_matters.conf_make_meta.conf.webserv_url_doc_root
+ ~ "/"
+ ~ pth_html.tail_fn_scroll(doc_matters.src.filename)
+ ~ "#" ~ "$3"
+ ~ "├"
+ );
+ }
+ }
+ _txt = (_txt)
+ .replaceAll(
+ rgx.inline_link_fn_suffix,
+ ("$1.html"))
+ .replaceAll(
+ rgx.inline_link,
+ ("<a href=\"$2\">$1</a>"))
+ .replaceAll(
+ rgx.mark_internal_site_lnk,
+ "");
+ }
+ debug(markup_links) {
+ if (_txt.match(rgx.inline_link)) {
+ writeln(__LINE__,
+ " (missed) markup link identified (",
+ obj.has.inline_links,
+ "): ", obj.metainfo.is_a, ": ",
+ obj.text
+ );
+ }
+ }
+ debug(markup) {
+ if (_txt.match(rgx.inline_link)) {
+ writeln(__LINE__,
+ " (missed) markup link identified (",
+ obj.has.inline_links,
+ "): ", obj.metainfo.is_a, ": ",
+ obj.text
+ );
+ }
+ }
+ return _txt;
+ }
+ auto inline_notes_scroll(M,O)(
+ M doc_matters,
+ const O obj,
+ string _txt,
+ ) {
+ if (obj.has.inline_notes_reg) {
+ // _txt = font_face(_txt);
+ _txt = (_txt).replaceAll(
+ rgx.inline_notes_delimiter_al_regular_number_note,
+ ("<a href=\"#note_$1\"><note id=\"noteref_$1\">&#160;<sup>$1</sup> </note></a>")
+ );
+ }
+ debug(markup_endnotes) {
+ if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) {
+ writeln(__LINE__, " (missed) markup endnote: ", obj.metainfo.is_a, ": ", obj.text);
+ }
+ }
+ debug(markup) {
+ if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) {
+ writeln(__LINE__, " (missed) markup endnote: ", obj.metainfo.is_a, ": ", obj.text);
+ }
+ }
+ return _txt;
+ }
+ auto inline_notes_seg(M,O)(
+ M doc_matters,
+ const O obj,
+ string _txt,
+ ) {
+ string[] _endnotes;
+ if (obj.has.inline_notes_reg) {
+ /+ need markup for text, and separated footnote +/
+ foreach(m; _txt.matchAll(rgx.inline_notes_delimiter_al_regular_number_note)) {
+ _endnotes ~= format(
+ "%s%s%s%s\n %s%s%s%s%s\n %s\n%s",
+ "<p class=\"endnote\">",
+ "<a href=\"#noteref_",
+ m.captures[1],
+ "\">",
+ "<note id=\"note_",
+ m.captures[1],
+ "\">&#160;<sup>",
+ m.captures[1],
+ ".</sup></note></a>",
+ m.captures[2],
+ "</p>"
+ );
+ }
+ _txt = (_txt).replaceAll(
+ rgx.inline_notes_delimiter_al_regular_number_note,
+ ("<a href=\"#note_$1\"><note id=\"noteref_$1\">&#160;<sup>$1</sup> </note></a>")
+ );
+ } else if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) {
+ debug(markup) {
+ writeln(__LINE__, " endnote: ", obj.metainfo.is_a, ": ", obj.text);
+ }
+ }
+ auto t = tuple(
+ _txt,
+ _endnotes,
+ );
+ return t;
+ }
+ string xml_type="seg"; /+ set html document type to be linked to here (seg|scroll) +/
+ auto inline_markup(M,O)(
+ M doc_matters,
+ const O obj,
+ string _txt,
+ ) {
+ _txt = inline_images(doc_matters, obj, _txt, xml_type);
+ _txt = inline_links(doc_matters, obj, _txt, xml_type);
+ _txt = inline_notes_scroll(doc_matters, obj, _txt);
+ return _txt;
+ }
auto html_heading(M,O)(
M doc_matters,
auto ref const O obj,
) {
string _txt = munge_html(doc_matters, obj);
+ _txt = inline_markup(doc_matters, obj, _txt);
string o = format(q"¶<p class="%s"><b>
%s
</b></p>¶",
@@ -268,6 +454,7 @@ template SQLiteFormatAndLoadObject() {
) {
string _txt = munge_html(doc_matters, obj);
_txt = (obj.attrib.bullet) ? ("●&#160;&#160;" ~ _txt) : _txt;
+ _txt = inline_markup(doc_matters, obj, _txt);
string o = format(q"¶<p class="%s" indent="h%si%s">
%s
</p>¶",