aboutsummaryrefslogtreecommitdiffhomepage
path: root/org
diff options
context:
space:
mode:
authorRalph Amissah <ralph.amissah@gmail.com>2026-09-07 21:48:12 -0400
committerRalph Amissah <ralph.amissah@gmail.com>2026-09-09 17:33:08 -0400
commit4c8bf098bdbcf8d348519fa36b91cd0312f479a3 (patch)
tree53779344b440dc6c7e197f5f793d35a2b695e8c9 /org
parentocda: a reader for .ssp, and a round trip check (diff)
ocda: the eight slot arrays are fixed length
markedup_ancestors, collapsed_ancestors, the two dom status arrays and heading_ancestors_text were declared as int[] / string[] with a literal default: int[] markedup_ancestors = [ 0, 0, 0, 0, 0, 0, 0, 0, ]; which is one array, shared by every default constructed object: write into one by index and you write into all of them. They are now int[8] / string[8], where that is impossible. Output neutral confirmed by reference test. Provides a fix: Previously the parser always assigned these whole and with .dup so it never went through the shared array. This left a trap in previous code which caught the new .ssp reader, whose first version wrote by index and gave every object in a document the last one's ancestors. (assisted by Claude-Code)
Diffstat (limited to 'org')
-rw-r--r--org/ocda_obj_setter.org10
1 files changed, 5 insertions, 5 deletions
diff --git a/org/ocda_obj_setter.org b/org/ocda_obj_setter.org
index d410960..7d74a6e 100644
--- a/org/ocda_obj_setter.org
+++ b/org/ocda_obj_setter.org
@@ -126,10 +126,10 @@ struct DocObj_MetaInfo_ {
int heading_lev_markup = 9;
int heading_lev_collapsed = 9;
bool dummy_heading = false;
- int[] markedup_ancestors = [ 0, 0, 0, 0, 0, 0, 0, 0,];
- int[] collapsed_ancestors = [ 0, 0, 0, 0, 0, 0, 0, 0,];
- int[] dom_structure_markedup_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0,];
- int[] dom_structure_collapsed_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0,];
+ int[8] markedup_ancestors; // fixed length: one slot per heading level
+ int[8] collapsed_ancestors;
+ int[8] dom_structure_markedup_tags_status;
+ int[8] dom_structure_collapsed_tags_status;
int parent_lev_markup = 0;
int parent_ocn = 0;
int last_descendant_ocn = 0;
@@ -175,7 +175,7 @@ struct DocObj_Pointer_ {
int heading = 0;
}
struct DocObj_Tags_ {
- string[] heading_ancestors_text = [ "", "", "", "", "", "", "", "", ];
+ string[8] heading_ancestors_text; // fixed: a dynamic array with a literal default is shared by every default constructed object
string anchor_tag_html = "";
string in_segment_html = "";
string segment_anchor_tag_epub = "";