aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2016-10-05 15:23:01 -0400
committerRalph Amissah <ralph@amissah.com>2019-04-10 15:14:13 -0400
commitd8d34b0eaca6f847f6ac7b09d729ad1c38e5484f (patch)
tree2a99c9798363e1510eaf122184ddc3cbea5a9741
parent0.7.0 using dub remote dependencies (local src related to sdlang removed) (diff)
segment auto naming (where no name provided) placed in function
-rw-r--r--org/ao_abstract_doc_source.org48
-rw-r--r--org/ao_defaults.org6
-rw-r--r--src/sdp/ao_abstract_doc_source.d36
-rw-r--r--src/sdp/ao_rgx.d6
4 files changed, 58 insertions, 38 deletions
diff --git a/org/ao_abstract_doc_source.org b/org/ao_abstract_doc_source.org
index 5c78771..5677baa 100644
--- a/org/ao_abstract_doc_source.org
+++ b/org/ao_abstract_doc_source.org
@@ -2690,7 +2690,32 @@ struct ObjInlineMarkupMunge {
struct ObjInlineMarkup {
// struct ObjInlineMarkup : AssertObjInlineMarkup {
auto munge = ObjInlineMarkupMunge();
+#+END_SRC
+
+***** make segment anchor tags if not provided :markup:inline:segment:anchor:tags:
+
+#+name: ao_emitters
+#+BEGIN_SRC d
string[string] obj_txt;
+ string make_segment_anchor_tags_if_none_provided(string munge_, string lev_) {
+ if (!(match(munge_, rgx.heading_anchor_tag))) { // if (anchor_tags_.length == 0) {
+ if (match(munge_, rgx.heading_identify_anchor_tag)) {
+ if (auto m = match(munge_, rgx.heading_extract_named_anchor_tag)) {
+ munge_=replaceFirst(munge_, rgx.heading_marker_missing_tag,
+ "$1~" ~ toLower(m.captures[1]) ~ "_" ~ m.captures[2] ~ " ");
+ } else if (auto m = match(munge_, rgx.heading_extract_unnamed_anchor_tag)) {
+ munge_=replaceFirst(munge_, rgx.heading_marker_missing_tag,
+ "$1~" ~ "s" ~ m.captures[1] ~ " ");
+ }
+ } else if (lev_ == "1") { // (if not successful) manufacture a unique anchor tag for lev=="1"
+ static __gshared uint heading_num_lev1 = 0;
+ heading_num_lev1 ++;
+ munge_=replaceFirst(munge_, rgx.heading_marker_missing_tag,
+ "$1~" ~ "x" ~ to!string(heading_num_lev1) ~ " ");
+ }
+ }
+ return munge_;
+ }
#+END_SRC
***** object inline markup and anchor tags :markup:inline:
@@ -2818,22 +2843,7 @@ struct ObjInlineMarkup {
}
}
// WORK ON, you still need to ensure that level 1 anchor_tags are unique
- if (!(match(obj_txt["munge"], rgx.heading_anchor_tag))) { // if (anchor_tags_.length == 0) {
- if (match(obj_txt["munge"], rgx.heading_identify_anchor_tag)) {
- if (auto m = match(obj_txt["munge"], rgx.heading_extract_named_anchor_tag)) {
- obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading_marker_missing_tag,
- "$1~" ~ toLower(m.captures[1]) ~ "_" ~ m.captures[2] ~ " ");
- } else if (auto m = match(obj_txt["munge"], rgx.heading_extract_unnamed_anchor_tag)) {
- obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading_marker_missing_tag,
- "$1~" ~ "s" ~ m.captures[1] ~ " ");
- }
- } else if (obj_["lev"] == "1") { // (if not successful) manufacture a unique anchor tag for lev=="1"
- static __gshared uint heading_num_lev1 = 0;
- heading_num_lev1 ++;
- obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading_marker_missing_tag,
- "$1~" ~ "x" ~ to!string(heading_num_lev1) ~ " ");
- }
- }
+ obj_txt["munge"]=make_segment_anchor_tags_if_none_provided(obj_txt["munge"], obj_["lev"]);
if (auto m = match(obj_txt["munge"], rgx.heading_anchor_tag)) {
anchor_tag = m.captures[1];
anchor_tags_ ~=anchor_tag;
@@ -2881,6 +2891,12 @@ struct ObjInlineMarkup {
}
invariant() {
}
+#+END_SRC
+
+***** close
+
+#+name: ao_emitters
+#+BEGIN_SRC d
}
#+END_SRC
diff --git a/org/ao_defaults.org b/org/ao_defaults.org
index c01ea41..1ba90fe 100644
--- a/org/ao_defaults.org
+++ b/org/ao_defaults.org
@@ -610,9 +610,9 @@ static heading_a = ctRegex!(`^:?[A][~] `, "m");
static heading = ctRegex!(`^:?([A-D1-4])[~]([a-z0-9_.-]*[?]?) `);
static heading_marker = ctRegex!(`^:?([A-D1-4])[~]`);
static heading_anchor_tag = ctRegex!(`^:?[A-D1-4][~]([a-z0-9_.-]+) `,"i");
-static heading_identify_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+(?:(?:(?:chapter|article|section|clause)\s+[0-9.]+)|(?:[0-9.]+))`,"i"); // unless dob.obj =~/^:?[A-D1-4]~\s+(?:|(?:chapter|article|section|clause)\s+)([0-9.]+)/i
-static heading_extract_named_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+(chapter|article|section|clause)\s+([0-9.]+)`,"i");
-static heading_extract_unnamed_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+([0-9.]+)`);
+static heading_identify_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+(?:(?:(?:chapter|article|section|clause)\s+[0-9.]+)|(?:[0-9]+))`,"i"); // unless dob.obj =~/^:?[A-D1-4]~\s+(?:|(?:chapter|article|section|clause)\s+)([0-9.]+)/i
+static heading_extract_named_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+(chapter|article|section|clause)\s+((?:[0-9]+.)*[0-9]+)(?:[.:;, ]|$)`,"i");
+static heading_extract_unnamed_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+((?:[0-9]+.)*[0-9]+)(?:[.:;, ]|$)`);
static heading_marker_missing_tag = ctRegex!(`^:?([A-D1-4])[~] `);
static heading_title = ctRegex!(`^:?[A-D1-4][~][a-z0-9_.-]*[?]?\s+(.+?)$`);
static heading_all = ctRegex!(`^:?([A-D1-4])[~]([a-z0-9_.-]*[?]?)\s+(.+?)$`); // test, particularly [2] name/hashtag which may or may not be, does this affect title [3]
diff --git a/src/sdp/ao_abstract_doc_source.d b/src/sdp/ao_abstract_doc_source.d
index c7e5a13..595241a 100644
--- a/src/sdp/ao_abstract_doc_source.d
+++ b/src/sdp/ao_abstract_doc_source.d
@@ -2221,6 +2221,25 @@ template SiSUdocAbstraction() {
// struct ObjInlineMarkup : AssertObjInlineMarkup {
auto munge = ObjInlineMarkupMunge();
string[string] obj_txt;
+ string make_segment_anchor_tags_if_none_provided(string munge_, string lev_) {
+ if (!(match(munge_, rgx.heading_anchor_tag))) { // if (anchor_tags_.length == 0) {
+ if (match(munge_, rgx.heading_identify_anchor_tag)) {
+ if (auto m = match(munge_, rgx.heading_extract_named_anchor_tag)) {
+ munge_=replaceFirst(munge_, rgx.heading_marker_missing_tag,
+ "$1~" ~ toLower(m.captures[1]) ~ "_" ~ m.captures[2] ~ " ");
+ } else if (auto m = match(munge_, rgx.heading_extract_unnamed_anchor_tag)) {
+ munge_=replaceFirst(munge_, rgx.heading_marker_missing_tag,
+ "$1~" ~ "s" ~ m.captures[1] ~ " ");
+ }
+ } else if (lev_ == "1") { // (if not successful) manufacture a unique anchor tag for lev=="1"
+ static __gshared uint heading_num_lev1 = 0;
+ heading_num_lev1 ++;
+ munge_=replaceFirst(munge_, rgx.heading_marker_missing_tag,
+ "$1~" ~ "x" ~ to!string(heading_num_lev1) ~ " ");
+ }
+ }
+ return munge_;
+ }
auto obj_inline_markup_and_anchor_tags(string[string] obj_, string[string][string] dochead_make_aa)
in { }
body {
@@ -2342,22 +2361,7 @@ template SiSUdocAbstraction() {
}
}
// WORK ON, you still need to ensure that level 1 anchor_tags are unique
- if (!(match(obj_txt["munge"], rgx.heading_anchor_tag))) { // if (anchor_tags_.length == 0) {
- if (match(obj_txt["munge"], rgx.heading_identify_anchor_tag)) {
- if (auto m = match(obj_txt["munge"], rgx.heading_extract_named_anchor_tag)) {
- obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading_marker_missing_tag,
- "$1~" ~ toLower(m.captures[1]) ~ "_" ~ m.captures[2] ~ " ");
- } else if (auto m = match(obj_txt["munge"], rgx.heading_extract_unnamed_anchor_tag)) {
- obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading_marker_missing_tag,
- "$1~" ~ "s" ~ m.captures[1] ~ " ");
- }
- } else if (obj_["lev"] == "1") { // (if not successful) manufacture a unique anchor tag for lev=="1"
- static __gshared uint heading_num_lev1 = 0;
- heading_num_lev1 ++;
- obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading_marker_missing_tag,
- "$1~" ~ "x" ~ to!string(heading_num_lev1) ~ " ");
- }
- }
+ obj_txt["munge"]=make_segment_anchor_tags_if_none_provided(obj_txt["munge"], obj_["lev"]);
if (auto m = match(obj_txt["munge"], rgx.heading_anchor_tag)) {
anchor_tag = m.captures[1];
anchor_tags_ ~=anchor_tag;
diff --git a/src/sdp/ao_rgx.d b/src/sdp/ao_rgx.d
index 2a10d53..f65abb5 100644
--- a/src/sdp/ao_rgx.d
+++ b/src/sdp/ao_rgx.d
@@ -66,9 +66,9 @@ template RgxInit() {
static heading = ctRegex!(`^:?([A-D1-4])[~]([a-z0-9_.-]*[?]?) `);
static heading_marker = ctRegex!(`^:?([A-D1-4])[~]`);
static heading_anchor_tag = ctRegex!(`^:?[A-D1-4][~]([a-z0-9_.-]+) `,"i");
- static heading_identify_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+(?:(?:(?:chapter|article|section|clause)\s+[0-9.]+)|(?:[0-9.]+))`,"i"); // unless dob.obj =~/^:?[A-D1-4]~\s+(?:|(?:chapter|article|section|clause)\s+)([0-9.]+)/i
- static heading_extract_named_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+(chapter|article|section|clause)\s+([0-9.]+)`,"i");
- static heading_extract_unnamed_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+([0-9.]+)`);
+ static heading_identify_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+(?:(?:(?:chapter|article|section|clause)\s+[0-9.]+)|(?:[0-9]+))`,"i"); // unless dob.obj =~/^:?[A-D1-4]~\s+(?:|(?:chapter|article|section|clause)\s+)([0-9.]+)/i
+ static heading_extract_named_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+(chapter|article|section|clause)\s+((?:[0-9]+.)*[0-9]+)(?:[.:;, ]|$)`,"i");
+ static heading_extract_unnamed_anchor_tag = ctRegex!(`^:?[A-D1-4][~]\s+((?:[0-9]+.)*[0-9]+)(?:[.:;, ]|$)`);
static heading_marker_missing_tag = ctRegex!(`^:?([A-D1-4])[~] `);
static heading_title = ctRegex!(`^:?[A-D1-4][~][a-z0-9_.-]*[?]?\s+(.+?)$`);
static heading_all = ctRegex!(`^:?([A-D1-4])[~]([a-z0-9_.-]*[?]?)\s+(.+?)$`); // test, particularly [2] name/hashtag which may or may not be, does this affect title [3]