\n" ;
break;
default:
delimit_ ~= "\n
\n" ;
break;
}
if (previous_part.length > 0) {
delimit ~= "\n
";
}
previous_part = part;
delimit ~= delimit_;
}
// you also need to close the last div, introduce a footer?
return delimit;
}
string special_characters(O)(
const O obj,
string _txt
){
_txt = (_txt)
.replaceAll(rgx.xhtml_ampersand, "&")
.replaceAll(rgx.xhtml_quotation, """)
.replaceAll(rgx.xhtml_less_than, "<")
.replaceAll(rgx.xhtml_greater_than, ">")
.replaceAll(rgx.nbsp_char, " ");
if (!(obj.metainfo.is_a == "code")) {
_txt = (_txt)
.replaceAll(rgx.xhtml_line_break, "
");
}
return _txt;
}
string special_characters_text(string _txt){
_txt = (_txt)
.replaceAll(rgx.xhtml_ampersand, "&")
.replaceAll(rgx.xhtml_quotation, """)
.replaceAll(rgx.xhtml_less_than, "<")
.replaceAll(rgx.xhtml_greater_than, ">")
.replaceAll(rgx.nbsp_char, " ");
return _txt;
}
string font_face(string _txt){
_txt = (_txt)
.replaceAll(rgx.inline_emphasis, ("
$1 "))
.replaceAll(rgx.inline_bold, ("
$1 "))
.replaceAll(rgx.inline_underscore, ("
$1 "))
.replaceAll(rgx.inline_italics, ("
$1 "))
.replaceAll(rgx.inline_superscript, ("
$1 "))
.replaceAll(rgx.inline_subscript, ("
$1 "))
.replaceAll(rgx.inline_strike, ("
$1"))
.replaceAll(rgx.inline_insert, ("
$1 "))
.replaceAll(rgx.inline_mono, ("
$1 "))
.replaceAll(rgx.inline_cite, ("
$1 "));
return _txt;
}
string _xhtml_anchor_tags(O)(O obj) {
const(string[]) anchor_tags = obj.tags.anchor_tags;
string tags="";
if (anchor_tags.length > 0) {
foreach (tag; anchor_tags) {
if (!(tag.empty)) {
tags ~= "
";
}
}
}
return tags;
}
auto header_metadata(M)(
M doc_matters,
) {
string _title="Title";
string _author="Author";
string _publisher="Publisher";
string _date="Date";
string _date_created="Date";
string _date_issued="Date";
string _date_available="Date";
string _date_valid="Date";
string _date_modified="Date";
string _language="en";
string _rights="Copyright: Copyright (C) year holder";
string _generator="doc_reform [DocReform 7.1.8 of 2016w08/5 (2016-02-26)] (n*x and D)";
string _generator_home="http://www.sisudoc.org";
string o;
o = format(q"¶
¶",
_title,
_author,
_publisher,
_date,
_date_created,
_date_issued,
_date_available,
_date_valid,
_date_modified,
_language,
_rights,
_generator,
_generator_home,
);
return o;
}
auto site_info_button(M)(
M doc_matters,
) {
string _locations;
if (doc_matters.conf_make_meta.make.home_button_text.length > 0) {
_locations = (doc_matters.conf_make_meta.make.home_button_text)
.replaceAll(
rgx.inline_link,
("
$1
"))
.replaceAll(
rgx.br_line, "")
.replaceAll(
rgx.br_nl, "");
} else {
_locations = "
doc-reform
\n
sources / git
\n
www.sisudoc.org
";
}
string o;
o = format(q"¶¶",
_locations,
);
return o;
}
auto inline_search_form(M)(
M doc_matters,
) {
string _action="http://www.sisudoc.org/cgi-bin/search.cgi";
string _db="DocReform.7a.manual";
string o;
string _form;
if (doc_matters.opt.action.workon) {
_form = format(q"¶
¶",
_action,
_db,
);
} else {
_form = format(q"¶%s¶",
"",
);
}
o = format(q"¶¶",
_form,
);
return o;
}
auto html_head(M)(
M doc_matters,
string type,
) {
string _manifest = "";
if (doc_matters.opt.action.workon) {
_manifest = format(q"¶
[ document manifest ]
¶",
);
}
string o;
o = format(q"¶
%s%s
%s
"),
);
return o;
}
auto epub3_seg_head(M)(
M doc_matters,
) {
string html_base = format(q"¶
¶",
);
string html_simple = format(q"¶
¶",
doc_matters.src.language,
doc_matters.src.language,
);
string html_strict = format(q"¶
¶",
doc_matters.src.language,
doc_matters.src.language,
);
string o;
o = format(q"¶%s
%s%s
¶",
html_simple,
doc_matters.conf_make_meta.meta.title_full,
(doc_matters.conf_make_meta.meta.creator_author.empty) ? ""
: ", " ~ doc_matters.conf_make_meta.meta.creator_author,
doc_matters.conf_make_meta.meta.title_full,
(doc_matters.conf_make_meta.meta.creator_author.empty) ? ""
: ", " ~ doc_matters.conf_make_meta.meta.creator_author,
doc_matters.src.language,
);
return o;
}
auto tail() {
string o;
o = format(q"¶
¶");
return o;
}
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(
rgx.inline_image,
("$1
$6"));
}
return _txt;
}
auto inline_links(M,O)(
M doc_matters,
const O obj,
string _txt,
string _suffix = ".html",
string _xml_type = "seg",
) {
string seg_lvs;
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");
}
if (_xml_type == "seg" || _xml_type == "epub") {
seg_lvs = (_xml_type == "epub") ? "seg_lv1_to_4" : "seg_lv4";
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])][seg_lvs]
) {
_txt = _txt.replaceFirst(
rgx.inline_link_hash,
"┥$1┝┤$3" ~ _suffix ~ "├"
);
} else {
_txt = _txt.replaceFirst(
rgx.inline_link_hash,
"┥$1┝┤"
~ doc_matters.xml.tag_associations[(m.captures[3])][seg_lvs]
~ _suffix
~ "#" ~ "$3"
~ "├"
);
}
} else {
if (!(doc_matters.opt.action.quiet)) {
writeln(
"WARNING on internal document links, anchor to link <<"
~ m.captures[3]
~ ">> not found in document, "
~ "anchor: " ~ m.captures[3]
~ " document: " ~ doc_matters.src.filename
);
}
}
}
}
_txt = (_txt)
.replaceAll(
rgx.inline_link_fn_suffix,
("$1" ~ _suffix))
.replaceAll(
rgx.inline_link,
("
$1 "))
.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,
("
$1 ")
);
}
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) {
_txt = font_face(_txt);
/+ 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",
"
",
"",
" ",
m.captures[1],
". ",
m.captures[2],
"
"
);
}
_txt = (_txt).replaceAll(
rgx.inline_notes_delimiter_al_regular_number_note,
("
$1 ")
);
} 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;
}
auto inline_markup_scroll(M,O)(
M doc_matters,
const O obj,
string _txt,
string _suffix = ".html",
) {
_txt = inline_images(doc_matters, obj, _txt, _suffix, "scroll");
_txt = inline_links(doc_matters, obj, _txt, _suffix, "scroll");
_txt = inline_notes_scroll(doc_matters, obj, _txt);
return _txt;
}
auto inline_markup_seg(M,O)(
M doc_matters,
const O obj,
string _txt,
string _suffix = ".html",
string _xml_type = "seg",
) {
_txt = inline_images(doc_matters, obj, _txt, _suffix, _xml_type); // TODO
_txt = inline_links(doc_matters, obj, _txt, _suffix, _xml_type); // TODO
auto t = inline_notes_seg(doc_matters, obj, _txt);
return t;
}
string lev4_heading_subtoc(M,O)(
M doc_matters,
const O obj,
) {
char[] lev4_subtoc;
lev4_subtoc ~= "
\n";
foreach (subtoc; obj.tags.lev4_subtoc) {
if (auto m = subtoc.match(rgx.inline_link_subtoc)) {
auto indent = (m.captures[1].to!int - 3).to!string; // css assumptions based on use of em for left margin & indent
auto text = m.captures[2].to!string;
text = font_face(text);
auto link = m.captures[3].to!string;
lev4_subtoc ~= subtoc.replaceFirst(rgx.inline_link_subtoc,
format(q"¶
۰ %s
¶",
indent,
indent,
link,
text,
));
}
}
lev4_subtoc ~= "
\n";
return lev4_subtoc.to!string;
}
auto nav_pre_next_svg(M,O)(
M doc_matters,
const O obj,
) {
string prev, next, toc;
if (obj.tags.segment_anchor_tag_epub == "toc") {
toc = "";
prev = "";
} else {
toc = format(q"¶
¶",
);
}
if (obj.tags.segname_prev == "") {
prev = "";
} else {
prev = format(q"¶
¶",
obj.tags.segname_prev,
);
}
if (obj.tags.segname_next == "") {
next = "";
} else {
next = format(q"¶
¶",
obj.tags.segname_next,
);
}
string _toc_pre_next = format(q"¶