aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2018-04-30 21:05:13 -0400
committerRalph Amissah <ralph@amissah.com>2019-04-10 15:14:15 -0400
commita263d67a5dfb5fad70059f63c1029f9174bf7ff0 (patch)
tree01a42457dec1121bd8ed2c18f5ca01401e476292
parentepub3, enable tables (diff)
link url matching
- smid: sisu markup identify - inline_link_markup_regular matches series of marked up urls, e.g. { link txt }http://url, { link txt }http://url
-rw-r--r--org/default_regex.org17
-rw-r--r--org/meta_abstraction.org24
-rw-r--r--org/meta_conf_make_meta.org8
-rw-r--r--org/output_xmls.org40
-rw-r--r--src/sdp/meta/conf_make_meta_structs.d8
-rw-r--r--src/sdp/meta/metadoc_from_src.d24
-rw-r--r--src/sdp/meta/rgx.d12
-rw-r--r--src/sdp/output/epub3.d8
-rw-r--r--src/sdp/output/html.d16
-rw-r--r--src/sdp/output/rgx.d2
-rw-r--r--src/sdp/output/xmls.d16
11 files changed, 88 insertions, 87 deletions
diff --git a/org/default_regex.org b/org/default_regex.org
index e824577..5b759b0 100644
--- a/org/default_regex.org
+++ b/org/default_regex.org
@@ -225,7 +225,8 @@ static table_col_separator = ctRegex!(`┊`);
static table_col_separator_nl = ctRegex!(`[┊]$`, "mg");
#+END_SRC
-** inline markup footnotes endnotes :inline:footnote:
+** inline markup :inline:footnote:
+*** footnotes & endnotes
#+name: meta_rgx
#+BEGIN_SRC d
@@ -255,12 +256,12 @@ static note_ref = ctRegex!(`^\S+?noteref_(
#+name: meta_rgx
#+BEGIN_SRC d
-static inline_url_generic = ctRegex!(`(?:^|[}(\[ ])(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_#]`, "mg");
-static inline_url = ctRegex!(`((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_]\S*)`, "mg");
-static inline_link_naked_url = ctRegex!(`(?P<before>^|[ ])(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤)\S+?)(?P<after>[.,;:?!'"]?(?:[ ]|$))`, "mg");
-static inline_link_markup_regular = ctRegex!(`(?P<before>^|[ ])\{\s*(?P<content>.+?)\s*\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P<after>(?:[,;:? ]|[!.]?(?:[ ]|$)))`, "mg");
-static inline_link_endnote_url_helper_punctuated = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P<after>[.,;:?!]?(?:[ ]|$))`, "mg");
-static inline_link_endnote_url_helper = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+)`, "mg");
+static smid_inline_url_generic = ctRegex!(`(?:^|[}(\[ ])(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_#]`, "mg");
+static smid_inline_url = ctRegex!(`((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_]\S*)`, "mg");
+static smid_inline_link_naked_url = ctRegex!(`(?P<pre>^|[ ])(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤)\S+?)(?P<post>[.,;:?!'"]?(?:[ ]|$))`, "mg"); // issue with #link #32
+static smid_inline_link_markup_regular = ctRegex!(`(?P<pre>^|[ ]|[^\S]?)\{\s*(?P<content>.+?)\s*\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P<post>[;:!,?.]?(?:[ )\]]|$))`, "mg"); // NEXT
+static smid_inline_link_endnote_url_helper_punctuated = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P<after>[.,;:?!]?(?:[ ]|$))`, "mg");
+static smid_inline_link_endnote_url_helper = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+)`, "mg");
#+END_SRC
*** images :images:
@@ -392,7 +393,7 @@ static template SiSUoutputRgxInit() {
#+name: sp_ch_xhtml_rgx
#+BEGIN_SRC d
static xhtml_ampersand = ctRegex!(`[&]`); // &amp;
-static xhtml_quotation = ctRegex!(`[&]`); // &quot;
+static xhtml_quotation = ctRegex!(`["]`); // &quot;
static xhtml_less_than = ctRegex!(`[<]`); // &lt;
static xhtml_greater_than = ctRegex!(`[>]`); // &gt;
static xhtml_line_break = ctRegex!(` [\\]{2}`); // <br />
diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org
index 5f058b7..27f83be 100644
--- a/org/meta_abstraction.org
+++ b/org/meta_abstraction.org
@@ -4759,11 +4759,11 @@ static struct ObjInlineMarkupMunge {
obj_txt_in = obj_txt_in.replaceAll(rgx.inline_mono, (mng.mono ~ "{$1}" ~ mng.mono));
/+ url matched +/
obj_txt_in = obj_txt_in.replaceAll(rgx.inline_notes_al_special, ""); // TODO reinstate when special footnotes are implemented
- if (obj_txt_in.match(rgx.inline_url_generic)) {
+ if (obj_txt_in.match(rgx.smid_inline_url_generic)) {
/+ link: naked url: http://url +/
- if (obj_txt_in.match(rgx.inline_link_naked_url)) {
+ if (obj_txt_in.match(rgx.smid_inline_link_naked_url)) {
obj_txt_in = (obj_txt_in).replaceAll(
- rgx.inline_link_naked_url,
+ rgx.smid_inline_link_naked_url,
("$1"
~ mkup.lnk_o ~ "$2" ~ mkup.lnk_c
~ mkup.url_o ~ "$2" ~ mkup.url_c
@@ -4775,10 +4775,10 @@ static struct ObjInlineMarkupMunge {
maps to:
{ link which includes url as footnote }http://url~{ { http://url }http://url }~
+/
- if (obj_txt_in.match(rgx.inline_link_endnote_url_helper)) {
+ if (obj_txt_in.match(rgx.smid_inline_link_endnote_url_helper)) {
obj_txt_in = (obj_txt_in)
.replaceAll(
- rgx.inline_link_endnote_url_helper_punctuated,
+ rgx.smid_inline_link_endnote_url_helper_punctuated,
(mkup.lnk_o ~ "$1" ~ mkup.lnk_c
~ mkup.url_o ~ "$2" ~ mkup.url_c
~ "~{ " ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c
@@ -4786,7 +4786,7 @@ static struct ObjInlineMarkupMunge {
~ " }~$3") // ("{ $1 }$2~{ { $2 }$2 }~$3")
)
.replaceAll(
- rgx.inline_link_endnote_url_helper,
+ rgx.smid_inline_link_endnote_url_helper,
(mkup.lnk_o ~ "$1" ~ mkup.lnk_c
~ mkup.url_o ~ "$2" ~ mkup.url_c
~ "~{ " ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c
@@ -4797,9 +4797,9 @@ static struct ObjInlineMarkupMunge {
/+ link with regular markup:
{ linked text or image }http://url
+/
- if (obj_txt_in.match(rgx.inline_link_markup_regular)) {
+ if (obj_txt_in.match(rgx.smid_inline_link_markup_regular)) {
obj_txt_in = (obj_txt_in).replaceAll(
- rgx.inline_link_markup_regular,
+ rgx.smid_inline_link_markup_regular,
("$1"
~ mkup.lnk_o ~ "$2" ~ mkup.lnk_c
~ mkup.url_o ~ "$3" ~ mkup.url_c
@@ -4910,7 +4910,7 @@ static struct ObjInlineMarkupMunge {
(mkup.en_a_o ~ "+" ~ " $1" ~ mkup.en_a_c)
);
/+ url matched +/
- if (obj_txt_in.match(rgx.inline_url)) {
+ if (obj_txt_in.match(rgx.smid_inline_url)) {
urls = true;
obj_txt_in = url_links(obj_txt_in);
}
@@ -5199,7 +5199,7 @@ static struct ObjInlineMarkup {
obj_txt["munge"] = obj_[obj_key_].dup;
obj_txt["munge"] = (obj_["is"].match(ctRegex!(`verse|code`)))
? obj_txt["munge"]
- : strip(obj_txt["munge"]);
+ : obj_txt["munge"].strip;
static __gshared string[] anchor_tags_ = [];
auto x = munge.init;
bool[string] obj_notes_and_links;
@@ -5217,7 +5217,7 @@ static struct ObjInlineMarkup {
} else if (obj_["lev"] == "1") {
writeln("heading anchor tag missing: ", obj_txt["munge"]);
}
- x =munge.munge_heading(obj_txt["munge"], reset_note_numbers);
+ x = munge.munge_heading(obj_txt["munge"], reset_note_numbers);
reset_note_numbers=false;
goto default;
case "para":
@@ -5778,7 +5778,7 @@ struct ObjAttributes {
} else if (auto m = obj_txt_in.matchFirst(rgx.para_indent_hang)) {
_obj_attributes =" \"bullet\": \"false\","
~ " \"indent_hang\": " ~ m.captures[1].to!string ~ ","
- ~ " \"indent_base\": " ~ m.captures[2].to!string ~ ",";
+ ~ " \"indent_base\": " ~ m.captures[2].to!string ~ ",";
} else if (auto m = obj_txt_in.matchFirst(rgx.para_indent)) {
_obj_attributes =" \"bullet\": \"false\","
~ " \"indent_hang\": " ~ m.captures[1].to!string ~ ","
diff --git a/org/meta_conf_make_meta.org b/org/meta_conf_make_meta.org
index 9438d25..7c27496 100644
--- a/org/meta_conf_make_meta.org
+++ b/org/meta_conf_make_meta.org
@@ -79,17 +79,17 @@ auto _mkup = InlineMarkup();
auto url_markup(string line) {
auto line_ = (line)
.replaceAll(
- _rgx.inline_link_markup_regular,
+ _rgx.smid_inline_link_markup_regular,
("$1"
~ _mkup.lnk_o ~ "$2" ~ _mkup.lnk_c
- ~ _mkup.url_o ~ "$3" ~ _mkup.url_c
+ ~ _mkup.url_o ~ "$3" ~ _mkup.url_c
~ "$4") // ("$1{ $2 }$3$4")
)
.replaceAll(
- _rgx.inline_link_naked_url,
+ _rgx.smid_inline_link_naked_url,
("$1"
~ _mkup.lnk_o ~ "$2" ~ _mkup.lnk_c
- ~ _mkup.url_o ~ "$2" ~ _mkup.url_c
+ ~ _mkup.url_o ~ "$2" ~ _mkup.url_c
~ "$3") // ("$1{ $2 }$2$3")
)
.replaceAll(
diff --git a/org/output_xmls.org b/org/output_xmls.org
index 6ac5c76..0cbde63 100644
--- a/org/output_xmls.org
+++ b/org/output_xmls.org
@@ -584,10 +584,10 @@ string lev4_heading_subtoc(O)(
lev4_subtoc ~= " <div class=\"nav\">\n";
foreach (subtoc; obj.lev4_subtoc) {
if (auto m = subtoc.match(rgx.inline_link_subtoc)) {
- auto indent = to!string(m.captures[1]);
- auto text = to!string(m.captures[2]);
+ auto indent = m.captures[1].to!string;
+ auto text = m.captures[2].to!string;
text = font_face(text);
- auto link = to!string(m.captures[3]);
+ auto link = m.captures[3].to!string;
lev4_subtoc ~= subtoc.replaceFirst(rgx.inline_link_subtoc,
format(q"¶ <p class="minitoc" indent="h%si%s">
<a href="%s">%s</a>
@@ -854,7 +854,7 @@ auto para_seg(O)(
string _suffix = ".html",
) {
auto t = inline_markup_seg(obj, _txt, _suffix);
- _txt = to!string(t[0]);
+ _txt = t[0].to!string;
string[] _endnotes = t[1];
string o = para(obj, _txt);
auto u = tuple(
@@ -929,7 +929,7 @@ auto quote_seg(O)(
string _suffix = ".html",
) {
auto t = inline_markup_seg(obj, _txt, _suffix);
- _txt = to!string(t[0]);
+ _txt = t[0].to!string;
string[] _endnotes = t[1];
string o = quote(obj, _txt);
auto u = tuple(
@@ -1004,7 +1004,7 @@ auto group_seg(O)(
string _suffix = ".html",
) {
auto t = inline_markup_seg(obj, _txt, _suffix);
- _txt = to!string(t[0]);
+ _txt = t[0].to!string;
string[] _endnotes = t[1];
string o = group(obj, _txt);
auto u = tuple(
@@ -1075,7 +1075,7 @@ auto block_seg(O)(
string _suffix = ".html",
) {
auto t = inline_markup_seg(obj, _txt, _suffix);
- _txt = to!string(t[0]);
+ _txt = t[0].to!string;
string[] _endnotes = t[1];
string o = block(obj, _txt);
auto u = tuple(
@@ -1146,7 +1146,7 @@ auto verse_seg(O)(
string _suffix = ".html",
) {
auto t = inline_markup_seg(obj, _txt, _suffix);
- _txt = to!string(t[0]);
+ _txt = t[0].to!string;
string[] _endnotes = t[1];
string o = verse(obj, _txt);
auto u = tuple(
@@ -1554,13 +1554,13 @@ void seg(D,I)(
doc_html[segment_filename] ~= top_level_heading;
}
auto t = xhtml_format.heading_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html[segment_filename] ~= xhtml_format.lev4_heading_subtoc(obj);
doc_html_endnotes[segment_filename] ~= t[1];
break;
case 5: .. case 7:
auto t = xhtml_format.heading_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
case 8: .. case 9:
@@ -1584,7 +1584,7 @@ void seg(D,I)(
switch (obj.is_a) {
case "toc":
auto t = xhtml_format.para_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
break;
default:
if ((doc_matters.opt.action.debug_do)) {
@@ -1606,7 +1606,7 @@ void seg(D,I)(
switch (obj.is_a) {
case "para":
auto t = xhtml_format.para_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
default:
@@ -1620,24 +1620,24 @@ void seg(D,I)(
switch (obj.is_a) {
case "quote":
auto t = xhtml_format.quote_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
case "group":
auto t = xhtml_format.group_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
case "block":
auto t = xhtml_format.block_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
case "poem":
break;
case "verse":
auto t = xhtml_format.verse_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
case "code":
@@ -2266,24 +2266,24 @@ void outputEPub3(D,I)(
switch (obj.is_a) {
case "quote":
auto t = xhtml_format.quote_seg(obj, _txt, suffix);
- doc_epub3[segment_filename] ~= to!string(t[0]);
+ doc_epub3[segment_filename] ~= t[0].to!string;
doc_epub3_endnotes[segment_filename] ~= t[1];
break;
case "group":
auto t = xhtml_format.group_seg(obj, _txt, suffix);
- doc_epub3[segment_filename] ~= to!string(t[0]);
+ doc_epub3[segment_filename] ~= t[0].to!string;
doc_epub3_endnotes[segment_filename] ~= t[1];
break;
case "block":
auto t = xhtml_format.block_seg(obj, _txt, suffix);
- doc_epub3[segment_filename] ~= to!string(t[0]);
+ doc_epub3[segment_filename] ~= t[0].to!string;
doc_epub3_endnotes[segment_filename] ~= t[1];
break;
case "poem":
break;
case "verse":
auto t = xhtml_format.verse_seg(obj, _txt, suffix);
- doc_epub3[segment_filename] ~= to!string(t[0]);
+ doc_epub3[segment_filename] ~= t[0].to!string;
doc_epub3_endnotes[segment_filename] ~= t[1];
break;
case "code":
diff --git a/src/sdp/meta/conf_make_meta_structs.d b/src/sdp/meta/conf_make_meta_structs.d
index 64e45d9..b67b9ad 100644
--- a/src/sdp/meta/conf_make_meta_structs.d
+++ b/src/sdp/meta/conf_make_meta_structs.d
@@ -19,17 +19,17 @@ auto _mkup = InlineMarkup();
auto url_markup(string line) {
auto line_ = (line)
.replaceAll(
- _rgx.inline_link_markup_regular,
+ _rgx.smid_inline_link_markup_regular,
("$1"
~ _mkup.lnk_o ~ "$2" ~ _mkup.lnk_c
- ~ _mkup.url_o ~ "$3" ~ _mkup.url_c
+ ~ _mkup.url_o ~ "$3" ~ _mkup.url_c
~ "$4") // ("$1{ $2 }$3$4")
)
.replaceAll(
- _rgx.inline_link_naked_url,
+ _rgx.smid_inline_link_naked_url,
("$1"
~ _mkup.lnk_o ~ "$2" ~ _mkup.lnk_c
- ~ _mkup.url_o ~ "$2" ~ _mkup.url_c
+ ~ _mkup.url_o ~ "$2" ~ _mkup.url_c
~ "$3") // ("$1{ $2 }$2$3")
)
.replaceAll(
diff --git a/src/sdp/meta/metadoc_from_src.d b/src/sdp/meta/metadoc_from_src.d
index 9859f7b..f4701dc 100644
--- a/src/sdp/meta/metadoc_from_src.d
+++ b/src/sdp/meta/metadoc_from_src.d
@@ -3816,11 +3816,11 @@ template SiSUdocAbstraction() {
obj_txt_in = obj_txt_in.replaceAll(rgx.inline_mono, (mng.mono ~ "{$1}" ~ mng.mono));
/+ url matched +/
obj_txt_in = obj_txt_in.replaceAll(rgx.inline_notes_al_special, ""); // TODO reinstate when special footnotes are implemented
- if (obj_txt_in.match(rgx.inline_url_generic)) {
+ if (obj_txt_in.match(rgx.smid_inline_url_generic)) {
/+ link: naked url: http://url +/
- if (obj_txt_in.match(rgx.inline_link_naked_url)) {
+ if (obj_txt_in.match(rgx.smid_inline_link_naked_url)) {
obj_txt_in = (obj_txt_in).replaceAll(
- rgx.inline_link_naked_url,
+ rgx.smid_inline_link_naked_url,
("$1"
~ mkup.lnk_o ~ "$2" ~ mkup.lnk_c
~ mkup.url_o ~ "$2" ~ mkup.url_c
@@ -3832,10 +3832,10 @@ template SiSUdocAbstraction() {
maps to:
{ link which includes url as footnote }http://url~{ { http://url }http://url }~
+/
- if (obj_txt_in.match(rgx.inline_link_endnote_url_helper)) {
+ if (obj_txt_in.match(rgx.smid_inline_link_endnote_url_helper)) {
obj_txt_in = (obj_txt_in)
.replaceAll(
- rgx.inline_link_endnote_url_helper_punctuated,
+ rgx.smid_inline_link_endnote_url_helper_punctuated,
(mkup.lnk_o ~ "$1" ~ mkup.lnk_c
~ mkup.url_o ~ "$2" ~ mkup.url_c
~ "~{ " ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c
@@ -3843,7 +3843,7 @@ template SiSUdocAbstraction() {
~ " }~$3") // ("{ $1 }$2~{ { $2 }$2 }~$3")
)
.replaceAll(
- rgx.inline_link_endnote_url_helper,
+ rgx.smid_inline_link_endnote_url_helper,
(mkup.lnk_o ~ "$1" ~ mkup.lnk_c
~ mkup.url_o ~ "$2" ~ mkup.url_c
~ "~{ " ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c
@@ -3854,9 +3854,9 @@ template SiSUdocAbstraction() {
/+ link with regular markup:
{ linked text or image }http://url
+/
- if (obj_txt_in.match(rgx.inline_link_markup_regular)) {
+ if (obj_txt_in.match(rgx.smid_inline_link_markup_regular)) {
obj_txt_in = (obj_txt_in).replaceAll(
- rgx.inline_link_markup_regular,
+ rgx.smid_inline_link_markup_regular,
("$1"
~ mkup.lnk_o ~ "$2" ~ mkup.lnk_c
~ mkup.url_o ~ "$3" ~ mkup.url_c
@@ -3955,7 +3955,7 @@ template SiSUdocAbstraction() {
(mkup.en_a_o ~ "+" ~ " $1" ~ mkup.en_a_c)
);
/+ url matched +/
- if (obj_txt_in.match(rgx.inline_url)) {
+ if (obj_txt_in.match(rgx.smid_inline_url)) {
urls = true;
obj_txt_in = url_links(obj_txt_in);
}
@@ -4134,7 +4134,7 @@ template SiSUdocAbstraction() {
obj_txt["munge"] = obj_[obj_key_].dup;
obj_txt["munge"] = (obj_["is"].match(ctRegex!(`verse|code`)))
? obj_txt["munge"]
- : strip(obj_txt["munge"]);
+ : obj_txt["munge"].strip;
static __gshared string[] anchor_tags_ = [];
auto x = munge.init;
bool[string] obj_notes_and_links;
@@ -4152,7 +4152,7 @@ template SiSUdocAbstraction() {
} else if (obj_["lev"] == "1") {
writeln("heading anchor tag missing: ", obj_txt["munge"]);
}
- x =munge.munge_heading(obj_txt["munge"], reset_note_numbers);
+ x = munge.munge_heading(obj_txt["munge"], reset_note_numbers);
reset_note_numbers=false;
goto default;
case "para":
@@ -4653,7 +4653,7 @@ template SiSUdocAbstraction() {
} else if (auto m = obj_txt_in.matchFirst(rgx.para_indent_hang)) {
_obj_attributes =" \"bullet\": \"false\","
~ " \"indent_hang\": " ~ m.captures[1].to!string ~ ","
- ~ " \"indent_base\": " ~ m.captures[2].to!string ~ ",";
+ ~ " \"indent_base\": " ~ m.captures[2].to!string ~ ",";
} else if (auto m = obj_txt_in.matchFirst(rgx.para_indent)) {
_obj_attributes =" \"bullet\": \"false\","
~ " \"indent_hang\": " ~ m.captures[1].to!string ~ ","
diff --git a/src/sdp/meta/rgx.d b/src/sdp/meta/rgx.d
index 6006122..d15f90a 100644
--- a/src/sdp/meta/rgx.d
+++ b/src/sdp/meta/rgx.d
@@ -143,12 +143,12 @@ static template SiSUrgxInit() {
static inline_curly_delimiter_close_regular = ctRegex!(`\s*\}~`, "m");
static inline_text_and_note_curly = ctRegex!(`(?P<text>.+?)(?:(?:[~])[{][*+ ]*)(?P<note>.+?)(?:[}][~])`, "mg");
static note_ref = ctRegex!(`^\S+?noteref_([0-9]+)`, "mg"); // {^{73.}^}#noteref_73
- static inline_url_generic = ctRegex!(`(?:^|[}(\[ ])(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_#]`, "mg");
- static inline_url = ctRegex!(`((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_]\S*)`, "mg");
- static inline_link_naked_url = ctRegex!(`(?P<before>^|[ ])(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤)\S+?)(?P<after>[.,;:?!'"]?(?:[ ]|$))`, "mg");
- static inline_link_markup_regular = ctRegex!(`(?P<before>^|[ ])\{\s*(?P<content>.+?)\s*\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P<after>(?:[,;:? ]|[!.]?(?:[ ]|$)))`, "mg");
- static inline_link_endnote_url_helper_punctuated = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P<after>[.,;:?!]?(?:[ ]|$))`, "mg");
- static inline_link_endnote_url_helper = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+)`, "mg");
+ static smid_inline_url_generic = ctRegex!(`(?:^|[}(\[ ])(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_#]`, "mg");
+ static smid_inline_url = ctRegex!(`((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_]\S*)`, "mg");
+ static smid_inline_link_naked_url = ctRegex!(`(?P<pre>^|[ ])(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤)\S+?)(?P<post>[.,;:?!'"]?(?:[ ]|$))`, "mg"); // issue with #link #32
+ static smid_inline_link_markup_regular = ctRegex!(`(?P<pre>^|[ ]|[^\S]?)\{\s*(?P<content>.+?)\s*\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P<post>[;:!,?.]?(?:[ )\]]|$))`, "mg"); // NEXT
+ static smid_inline_link_endnote_url_helper_punctuated = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P<after>[.,;:?!]?(?:[ ]|$))`, "mg");
+ static smid_inline_link_endnote_url_helper = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+)`, "mg");
static image = ctRegex!(`([a-zA-Z0-9._-]+?\.(?:png|gif|jpg))`, "mg");
/+ inline markup book index +/
static book_index = ctRegex!(`^=\{\s*(.+?)\}$`, "m");
diff --git a/src/sdp/output/epub3.d b/src/sdp/output/epub3.d
index 15e3d35..321ef9b 100644
--- a/src/sdp/output/epub3.d
+++ b/src/sdp/output/epub3.d
@@ -413,24 +413,24 @@ template outputEPub3() {
switch (obj.is_a) {
case "quote":
auto t = xhtml_format.quote_seg(obj, _txt, suffix);
- doc_epub3[segment_filename] ~= to!string(t[0]);
+ doc_epub3[segment_filename] ~= t[0].to!string;
doc_epub3_endnotes[segment_filename] ~= t[1];
break;
case "group":
auto t = xhtml_format.group_seg(obj, _txt, suffix);
- doc_epub3[segment_filename] ~= to!string(t[0]);
+ doc_epub3[segment_filename] ~= t[0].to!string;
doc_epub3_endnotes[segment_filename] ~= t[1];
break;
case "block":
auto t = xhtml_format.block_seg(obj, _txt, suffix);
- doc_epub3[segment_filename] ~= to!string(t[0]);
+ doc_epub3[segment_filename] ~= t[0].to!string;
doc_epub3_endnotes[segment_filename] ~= t[1];
break;
case "poem":
break;
case "verse":
auto t = xhtml_format.verse_seg(obj, _txt, suffix);
- doc_epub3[segment_filename] ~= to!string(t[0]);
+ doc_epub3[segment_filename] ~= t[0].to!string;
doc_epub3_endnotes[segment_filename] ~= t[1];
break;
case "code":
diff --git a/src/sdp/output/html.d b/src/sdp/output/html.d
index 10539a5..35e3027 100644
--- a/src/sdp/output/html.d
+++ b/src/sdp/output/html.d
@@ -241,13 +241,13 @@ template outputHTML() {
doc_html[segment_filename] ~= top_level_heading;
}
auto t = xhtml_format.heading_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html[segment_filename] ~= xhtml_format.lev4_heading_subtoc(obj);
doc_html_endnotes[segment_filename] ~= t[1];
break;
case 5: .. case 7:
auto t = xhtml_format.heading_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
case 8: .. case 9:
@@ -271,7 +271,7 @@ template outputHTML() {
switch (obj.is_a) {
case "toc":
auto t = xhtml_format.para_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
break;
default:
if ((doc_matters.opt.action.debug_do)) {
@@ -293,7 +293,7 @@ template outputHTML() {
switch (obj.is_a) {
case "para":
auto t = xhtml_format.para_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
default:
@@ -307,24 +307,24 @@ template outputHTML() {
switch (obj.is_a) {
case "quote":
auto t = xhtml_format.quote_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
case "group":
auto t = xhtml_format.group_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
case "block":
auto t = xhtml_format.block_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
case "poem":
break;
case "verse":
auto t = xhtml_format.verse_seg(obj, _txt, suffix);
- doc_html[segment_filename] ~= to!string(t[0]);
+ doc_html[segment_filename] ~= t[0].to!string;
doc_html_endnotes[segment_filename] ~= t[1];
break;
case "code":
diff --git a/src/sdp/output/rgx.d b/src/sdp/output/rgx.d
index 4bfa72a..0227902 100644
--- a/src/sdp/output/rgx.d
+++ b/src/sdp/output/rgx.d
@@ -96,7 +96,7 @@ static template SiSUoutputRgxInit() {
static table_delimiter_col = ctRegex!("[ ]*[┊][ ]*", "mg");
static table_delimiter_row = ctRegex!("[ ]*\n", "mg");
static xhtml_ampersand = ctRegex!(`[&]`); // &amp;
- static xhtml_quotation = ctRegex!(`[&]`); // &quot;
+ static xhtml_quotation = ctRegex!(`["]`); // &quot;
static xhtml_less_than = ctRegex!(`[<]`); // &lt;
static xhtml_greater_than = ctRegex!(`[>]`); // &gt;
static xhtml_line_break = ctRegex!(` [\\]{2}`); // <br />
diff --git a/src/sdp/output/xmls.d b/src/sdp/output/xmls.d
index 58ae237..7dd6a60 100644
--- a/src/sdp/output/xmls.d
+++ b/src/sdp/output/xmls.d
@@ -444,10 +444,10 @@ template outputXHTMLs() {
lev4_subtoc ~= " <div class=\"nav\">\n";
foreach (subtoc; obj.lev4_subtoc) {
if (auto m = subtoc.match(rgx.inline_link_subtoc)) {
- auto indent = to!string(m.captures[1]);
- auto text = to!string(m.captures[2]);
+ auto indent = m.captures[1].to!string;
+ auto text = m.captures[2].to!string;
text = font_face(text);
- auto link = to!string(m.captures[3]);
+ auto link = m.captures[3].to!string;
lev4_subtoc ~= subtoc.replaceFirst(rgx.inline_link_subtoc,
format(q"¶ <p class="minitoc" indent="h%si%s">
<a href="%s">%s</a>
@@ -670,7 +670,7 @@ template outputXHTMLs() {
string _suffix = ".html",
) {
auto t = inline_markup_seg(obj, _txt, _suffix);
- _txt = to!string(t[0]);
+ _txt = t[0].to!string;
string[] _endnotes = t[1];
string o = para(obj, _txt);
auto u = tuple(
@@ -726,7 +726,7 @@ template outputXHTMLs() {
string _suffix = ".html",
) {
auto t = inline_markup_seg(obj, _txt, _suffix);
- _txt = to!string(t[0]);
+ _txt = t[0].to!string;
string[] _endnotes = t[1];
string o = quote(obj, _txt);
auto u = tuple(
@@ -782,7 +782,7 @@ template outputXHTMLs() {
string _suffix = ".html",
) {
auto t = inline_markup_seg(obj, _txt, _suffix);
- _txt = to!string(t[0]);
+ _txt = t[0].to!string;
string[] _endnotes = t[1];
string o = group(obj, _txt);
auto u = tuple(
@@ -834,7 +834,7 @@ template outputXHTMLs() {
string _suffix = ".html",
) {
auto t = inline_markup_seg(obj, _txt, _suffix);
- _txt = to!string(t[0]);
+ _txt = t[0].to!string;
string[] _endnotes = t[1];
string o = block(obj, _txt);
auto u = tuple(
@@ -886,7 +886,7 @@ template outputXHTMLs() {
string _suffix = ".html",
) {
auto t = inline_markup_seg(obj, _txt, _suffix);
- _txt = to!string(t[0]);
+ _txt = t[0].to!string;
string[] _endnotes = t[1];
string o = verse(obj, _txt);
auto u = tuple(