aboutsummaryrefslogtreecommitdiffhomepage
path: root/org/ao_abstract_doc_source.org
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2016-09-17 16:45:36 -0400
committerRalph Amissah <ralph@amissah.com>2019-04-10 15:14:13 -0400
commitaae005b24ce816d89bcda6e72de2cdeadcf7ded0 (patch)
tree22c25de69d355cfd659026bfa3df21f21a196efe /org/ao_abstract_doc_source.org
parentmake header_make available in creating abstract objects (diff)
heading anchor_tags and cleaning
Diffstat (limited to 'org/ao_abstract_doc_source.org')
-rw-r--r--org/ao_abstract_doc_source.org285
1 files changed, 227 insertions, 58 deletions
diff --git a/org/ao_abstract_doc_source.org b/org/ao_abstract_doc_source.org
index 020d9ed..f82c480 100644
--- a/org/ao_abstract_doc_source.org
+++ b/org/ao_abstract_doc_source.org
@@ -50,6 +50,7 @@ mixin InternalMarkup;
auto rgx = Rgx();
ObjComposite[] contents_the_objects;
string[string] an_object, processing;
+string[] anchor_tags;
auto set_abstract_object = ObjectAbstractSet();
auto note_section = NotesSection();
/+ enum +/
@@ -153,13 +154,12 @@ line_occur = [
];
auto type = flags_type_init;
mixin ScreenTxtColors;
-int tell_lo(int obj_cite_number, in char[] line) {
+void tell_lo(int obj_cite_number, in char[] line) {
writefln(
"* %s %s",
to!string(obj_cite_number),
to!string(line)
);
- return 0;
}
string[string] obj_cite_number_poem = [
"start" : "",
@@ -254,7 +254,7 @@ if (!line.empty) {
*** [#A] separate regular markup text from code blocks [+5]
**** code blocks :block:code:
-#+name: abs_in_loop_body_00
+#+name: abs_in_loop_body_00_code_block
#+BEGIN_SRC d
if (type["code"] == TriState.on) {
/+ block object: code +/
@@ -264,9 +264,9 @@ if (type["code"] == TriState.on) {
**** non code objects (other blocks or regular text) [+4] :non_code:
-#+name: abs_in_loop_body_00
+#+name: abs_in_loop_body_00_non_code_block
#+BEGIN_SRC d
-} else if (!matchFirst(line, rgx.skip_code_block_from_regular_parse)) {
+} else if (!matchFirst(line, rgx.skip_from_regular_parse)) {
/+ object other than "code block" object
(includes regular text paragraph, headings & blocks other than code) +/
#+END_SRC
@@ -562,8 +562,10 @@ if ((type["heading"] == State.on)
heading_pointer,
an_object["is"]
); // heading
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); // tuple this with anchor tags?
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
++heading_pointer;
@@ -572,8 +574,10 @@ if ((type["heading"] == State.on)
an_object["substantive"],
an_object["attrib"],
obj_cite_number,
+ anchor_tags,
+ to!string(an_object["lev"]),
to!int(an_object["lev_markup_number"]),
- to!int(an_object["lev_collapsed_number"])
+ to!int(an_object["lev_collapsed_number"]),
);
// track previous heading and make assertions
debug(objectrelated1) { // check
@@ -610,8 +614,10 @@ if ((type["heading"] == State.on)
heading_pointer-1,
an_object["is"]
);
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa);
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
contents_the_objects ~=
@@ -700,7 +706,8 @@ debug(objectrelated2) { // check
* references / bibliography
* book index
+/
-obj_im.obj_inline_markup("doc_end_reset", "", dochead_make_aa);
+// TODO FIGURE OUT, you need this possibility
+// obj_im.obj_inline_markup_and_anchor_tags("doc_end_reset", "", dochead_make_aa);
#+END_SRC
*** [#B] endnotes :endnotes:
@@ -833,7 +840,7 @@ auto header_set_common(
#+name: abs_functions
#+BEGIN_SRC d
-auto check_obj_cite_number_status(char[] line, ref int[string] type) {
+void check_obj_cite_number_status(char[] line, ref int[string] type) {
if ((!line.empty) && (type["obj_cite_number_status_multi_obj"] == TriState.off)) {
/+ not multi-line object, check whether obj_cite_number is on or turned off +/
if (matchFirst(line, rgx.obj_cite_number_block_marks)) {
@@ -874,7 +881,6 @@ auto check_obj_cite_number_status(char[] line, ref int[string] type) {
}
}
}
- return 0;
}
#+END_SRC
@@ -884,14 +890,14 @@ auto check_obj_cite_number_status(char[] line, ref int[string] type) {
#+name: abs_functions
#+BEGIN_SRC d
-auto start_block(
+void start_block(
char[] line,
ref int[string] type,
string[string] obj_cite_number_poem
) {
#+END_SRC
-**** block curly open :curly:
+**** block (various) curly open :curly:
#+name: abs_functions
#+BEGIN_SRC d
@@ -966,7 +972,7 @@ auto start_block(
type["curly_table"] = TriState.on;
#+END_SRC
-**** block tic open :tic:
+**** block (various) tic open :tic:
#+name: abs_functions
#+BEGIN_SRC d
@@ -1045,7 +1051,6 @@ auto start_block(
#+name: abs_functions
#+BEGIN_SRC d
- return 0;
}
#+END_SRC
@@ -1054,7 +1059,7 @@ auto start_block(
#+name: abs_functions
#+BEGIN_SRC d
-auto code_block(
+void code_block(
char[] line,
ref string[string] an_object,
ref int[string] type
@@ -1088,7 +1093,6 @@ auto code_block(
an_object["obj"] ~= line ~= "\n"; // code (tic) line
}
}
- return 0;
}
#+END_SRC
@@ -1308,7 +1312,7 @@ why extra object stuff only in poem/verse?
#+name: abs_functions
#+BEGIN_SRC d
-auto poem_block(
+void poem_block(
char[] line,
ref string[string] an_object,
ref int[string] type,
@@ -1340,14 +1344,16 @@ auto poem_block(
}
if (an_object.length > 0) {
debug(poem) { // poem (curly) close
- tell_lo(
+ writeln(
obj_cite_number,
an_object["obj"]
);
}
an_object["is"] = "verse";
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa);
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
contents_the_objects ~=
@@ -1395,8 +1401,10 @@ auto poem_block(
heading_pointer-1,
an_object["is"]
);
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa);
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
contents_the_objects ~=
@@ -1426,12 +1434,14 @@ auto poem_block(
if (an_object.length > 0) {
debug(poem) { // poem (tic) close
writeln(__LINE__);
- tell_lo(obj_cite_number, line);
+ writeln(obj_cite_number, line);
}
processing.remove("verse");
an_object["is"] = "verse";
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa);
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
contents_the_objects ~=
@@ -1479,8 +1489,10 @@ auto poem_block(
heading_pointer-1,
an_object["is"]
);
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa);
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
contents_the_objects ~=
@@ -1496,7 +1508,6 @@ auto poem_block(
}
}
}
- return 0;
}
#+END_SRC
@@ -1504,7 +1515,7 @@ auto poem_block(
#+name: abs_functions
#+BEGIN_SRC d
-auto group_block(
+void group_block(
char[] line,
ref string[string] an_object,
ref int[string] type
@@ -1538,7 +1549,6 @@ auto group_block(
an_object["obj"] ~= line ~= "\n"; // build group array (or string)
}
}
- return 0;
}
#+END_SRC
@@ -1546,7 +1556,7 @@ auto group_block(
#+name: abs_functions
#+BEGIN_SRC d
-auto block_block(
+void block_block(
char[] line,
ref string[string] an_object,
ref int[string] type
@@ -1580,7 +1590,6 @@ auto block_block(
an_object["obj"] ~= line ~= "\n"; // build block array (or string)
}
}
- return 0;
}
#+END_SRC
@@ -1588,7 +1597,7 @@ auto block_block(
#+name: abs_functions
#+BEGIN_SRC d
-auto quote_block(char[] line, ref string[string] an_object, ref int[string] type) {
+void quote_block(char[] line, ref string[string] an_object, ref int[string] type) {
if (type["curly_quote"] == TriState.on) {
if (matchFirst(line, rgx.block_curly_quote_close)) {
debug(quote) { // quote (curly) close
@@ -1618,7 +1627,6 @@ auto quote_block(char[] line, ref string[string] an_object, ref int[string] type
an_object["obj"] ~= line ~= "\n"; // build quote array (or string)
}
}
- return 0;
}
#+END_SRC
@@ -1626,7 +1634,7 @@ auto quote_block(char[] line, ref string[string] an_object, ref int[string] type
#+name: abs_functions
#+BEGIN_SRC d
-auto table_block(char[] line, ref string[string] an_object, ref int[string] type) {
+void table_block(char[] line, ref string[string] an_object, ref int[string] type) {
if (type["curly_table"] == TriState.on) {
if (matchFirst(line, rgx.block_curly_table_close)) {
debug(table) { // table (curly) close
@@ -1656,7 +1664,6 @@ auto table_block(char[] line, ref string[string] an_object, ref int[string] type
an_object["obj"] ~= line ~= "\n"; // build table array (or string)
}
}
- return 0;
}
#+END_SRC
@@ -1664,7 +1671,7 @@ auto table_block(char[] line, ref string[string] an_object, ref int[string] type
#+name: abs_functions
#+BEGIN_SRC d
-auto block_flag_line_empty(
+void block_flag_line_empty(
char[] line,
ref string[string] an_object,
ref ObjComposite[] contents_the_objects,
@@ -1702,8 +1709,10 @@ auto block_flag_line_empty(
heading_pointer-1,
an_object["is"]
);
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa);
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
contents_the_objects ~=
@@ -1762,8 +1771,10 @@ auto block_flag_line_empty(
heading_pointer-1,
an_object["is"]
);
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa);
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
contents_the_objects ~=
@@ -1794,8 +1805,10 @@ auto block_flag_line_empty(
heading_pointer-1,
an_object["is"]
);
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa);
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
contents_the_objects ~=
@@ -1825,8 +1838,10 @@ auto block_flag_line_empty(
heading_pointer-1,
an_object["is"]
);
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa);
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
contents_the_objects ~=
@@ -1857,8 +1872,10 @@ auto block_flag_line_empty(
heading_pointer-1,
an_object["is"]
);
- an_object["substantive"] =
- obj_im.obj_inline_markup(an_object["is"], an_object["obj"], dochead_make_aa);
+ auto substantive_object_and_anchor_tags_tuple =
+ obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa);
+ an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];
+ anchor_tags = substantive_object_and_anchor_tags_tuple[1];
an_object["attrib"] =
obj_att.obj_attributes(an_object["is"], an_object["obj"], node);
contents_the_objects ~=
@@ -1874,7 +1891,6 @@ auto block_flag_line_empty(
type["blocks"] = TriState.off;
type["quote"] = TriState.off;
}
- return 0;
}
#+END_SRC
@@ -2678,15 +2694,149 @@ struct ObjInlineMarkup {
// struct ObjInlineMarkup : AssertObjInlineMarkup {
auto munge = ObjInlineMarkupMunge();
string[string] obj_txt;
- string obj_inline_markup(string obj_is_, string obj_raw, string[string][string] dochead_make_aa)
+ auto obj_inline_markup_and_anchor_tags(string[string] obj_, string[string][string] dochead_make_aa)
in { }
body {
- obj_txt["munge"]=obj_raw.dup;
- obj_txt["munge"]=(match(obj_is_, ctRegex!(`verse|code`)))
+ obj_txt["munge"]=obj_["obj"].dup;
+ obj_txt["munge"]=(match(obj_["is"], ctRegex!(`verse|code`)))
? obj_txt["munge"]
: strip(obj_txt["munge"]);
- switch (obj_is_) {
+ static __gshared string[] anchor_tags_ = [];
+ switch (obj_["is"]) {
case "heading":
+ static __gshared string anchor_tag = "";
+ if (dochead_make_aa["make"]["num_top"].length > 0) {
+ if (!(match(obj_txt["munge"], rgx.heading_anchor_tag))) {
+ static __gshared uint heading_num_top_level=9;
+ static __gshared uint heading_num_depth=2;
+ static __gshared uint heading_num_0 = 0;
+ static __gshared uint heading_num_1 = 0;
+ static __gshared uint heading_num_2 = 0;
+ static __gshared uint heading_num_3 = 0;
+ static __gshared string heading_number_auto_composite = "";
+ if (heading_num_top_level==9) {
+ if (dochead_make_aa["make"]["num_depth"].length > 0) {
+ heading_num_depth = to!uint(dochead_make_aa["make"]["num_depth"]);
+ }
+ switch (dochead_make_aa["make"]["num_top"]) {
+ case "A":
+ break;
+ case "B":
+ heading_num_top_level=1;
+ break;
+ case "C":
+ heading_num_top_level=2;
+ break;
+ case "D":
+ heading_num_top_level=3;
+ break;
+ case "1":
+ heading_num_top_level=4;
+ break;
+ case "2":
+ heading_num_top_level=5;
+ break;
+ case "3":
+ heading_num_top_level=6;
+ break;
+ case "4":
+ heading_num_top_level=7;
+ break;
+ default:
+ break;
+ }
+ }
+ /+ num_depth minimum 0 (1.) default 2 (1.1.1) max 3 (1.1.1.1) implement +/
+ if (heading_num_top_level > to!uint(obj_["lev_markup_number"])) {
+ heading_num_0 = 0;
+ heading_num_1 = 0;
+ heading_num_2 = 0;
+ heading_num_3 = 0;
+ } else if (heading_num_top_level == to!uint(obj_["lev_markup_number"])) {
+ heading_num_0 ++;
+ heading_num_1 = 0;
+ heading_num_2 = 0;
+ heading_num_3 = 0;
+ } else if (heading_num_top_level == (to!uint(obj_["lev_markup_number"]) - 1)) {
+ heading_num_1 ++;
+ heading_num_2 = 0;
+ heading_num_3 = 0;
+ } else if (heading_num_top_level == (to!uint(obj_["lev_markup_number"]) - 2)) {
+ heading_num_2 ++;
+ heading_num_3 = 0;
+ } else if (heading_num_top_level == (to!uint(obj_["lev_markup_number"]) - 3)) {
+ heading_num_3 ++;
+ } else {
+ }
+ if (heading_num_3 > 0) {
+ heading_number_auto_composite =
+ (heading_num_depth == 3)
+ ? ( to!string(heading_num_0) ~ "." ~
+ to!string(heading_num_1) ~ "." ~
+ to!string(heading_num_2) ~ "." ~
+ to!string(heading_num_3)
+ )
+ : "";
+ } else if (heading_num_2 > 0) {
+ heading_number_auto_composite =
+ ((heading_num_depth >= 2)
+ && (heading_num_depth <= 3))
+ ? ( to!string(heading_num_0) ~ "." ~
+ to!string(heading_num_1) ~ "." ~
+ to!string(heading_num_2)
+ )
+ : "";
+ } else if (heading_num_1 > 0) {
+ heading_number_auto_composite =
+ ((heading_num_depth >= 1)
+ && (heading_num_depth <= 3))
+ ? ( to!string(heading_num_0) ~ "." ~
+ to!string(heading_num_1)
+ )
+ : "";
+ } else if (heading_num_0 > 0) {
+ heading_number_auto_composite =
+ ((heading_num_depth >= 0)
+ && (heading_num_depth <= 3))
+ ? (to!string(heading_num_0))
+ : "";
+ } else {
+ heading_number_auto_composite = "";
+ }
+ debug(heading_number_auto) {
+ writeln(heading_number_auto_composite);
+ }
+ if (!empty(heading_number_auto_composite)) {
+ obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading,
+ "$1~$2 " ~ heading_number_auto_composite ~ ". ");
+ obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading_marker_missing_tag,
+ "$1~" ~ heading_number_auto_composite ~ " ");
+ }
+ }
+ }
+ // 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) ~ " ");
+ }
+ }
+ if (auto m = match(obj_txt["munge"], rgx.heading_anchor_tag)) {
+ anchor_tag = m.captures[1];
+ anchor_tags_ ~=anchor_tag;
+ } else if (obj_["lev"] == "1") {
+ writeln("heading anchor tag missing: ", obj_txt["munge"]);
+ }
obj_txt["munge"]=munge.heading(obj_txt["munge"]);
break;
case "para":
@@ -2719,7 +2869,12 @@ struct ObjInlineMarkup {
default:
break;
}
- return obj_txt["munge"];
+ auto t = tuple(
+ obj_txt["munge"],
+ anchor_tags_,
+ );
+ anchor_tags_=[];
+ return t;
}
invariant() {
}
@@ -2994,6 +3149,8 @@ struct BookIndexReportSection {
"Book Index",
attrib,
obj_cite_number,
+ [],
+ to!string(lev),
to!int(lev_markup_number),
to!int(lev_collapsed_number)
);
@@ -3009,6 +3166,8 @@ struct BookIndexReportSection {
"Index",
attrib,
obj_cite_number,
+ ["book_index"],
+ to!string(lev),
to!int(lev_markup_number),
to!int(lev_collapsed_number)
);
@@ -3180,6 +3339,8 @@ struct NotesSection {
"Endnotes",
attrib,
obj_cite_number,
+ [],
+ to!string(lev),
to!int(lev_markup_number),
to!int(lev_collapsed_number)
);
@@ -3195,6 +3356,8 @@ struct NotesSection {
"Endnotes",
attrib,
obj_cite_number,
+ ["endnotes"],
+ to!string(lev),
to!int(lev_markup_number),
to!int(lev_collapsed_number)
);
@@ -3785,7 +3948,7 @@ set abstracted objects for downstream processing
#+name: ao_structs
#+BEGIN_SRC d
struct HeadingAttrib {
- int lev = 9; // use of enum should make this redundant, remove
+ string lev = "9";
int lev_markup_number = 9;
int lev_collapsed_number = 9;
}
@@ -3813,6 +3976,7 @@ struct ObjComposite {
string is_a = "";
string object = "";
string obj_cite_number = ""; // not used for calculations? output only? else int
+ string[] anchor_tags = [];
HeadingAttrib heading_attrib;
ParaAttrib para_attrib;
BlockAttrib block_attrib;
@@ -3824,7 +3988,6 @@ struct ObjCompositeArr {
#+END_SRC
** object setter :set:
-
*** comment :comment:
#+name: ao_object_setter
@@ -3847,6 +4010,8 @@ auto contents_heading(
in string object,
in string attrib,
in int obj_cite_number,
+ in string[] tags,
+ in string lev,
in int lev_markup_number,
in int lev_collapsed_number,
) {
@@ -3856,6 +4021,8 @@ auto contents_heading(
object_set.is_a = "heading";
object_set.object = object;
object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number);
+ object_set.anchor_tags ~= tags;
+ object_set.heading_attrib.lev = lev;
object_set.heading_attrib.lev_markup_number = lev_markup_number;
object_set.heading_attrib.lev_collapsed_number = lev_collapsed_number;
// object_set.node_structure.node = node;
@@ -4007,6 +4174,8 @@ template SiSUdocAbstraction() {
foreach (line; markup_sourcefile_content) {
/+ ↓ markup document/text line by line +/
<<abs_in_loop_body_00>>
+ <<abs_in_loop_body_00_code_block>>
+ <<abs_in_loop_body_00_non_code_block>>
<<abs_in_loop_body_non_code_obj>>
<<abs_in_loop_body_open_block_obj>>
<<abs_in_loop_body_not_block_obj>>