From 993a3f655359f98dc26d3d3222e07792e2ccddf7 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Wed, 30 Sep 2026 16:18:59 -0400 Subject: abstraction 2.1: a poem states its object range - A poem is a container of verse, and stores its range of verse ocn, - its verse are the citable units with ocn. - A note in the last verse of a poem previously was not gathered into the endnotes section, this now is fixed Format 2.0 -> 2.1: the property is an addition, the poem is not a citable object (but contans a range of objects), its verse are (individual citable objects), and every reader checks the major version. A 2.0 database reads as having no ranges. (assisted by Claude-Code) --- src/sisudoc/ocda/abstraction/ssp_in.d | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/sisudoc/ocda/abstraction/ssp_in.d') diff --git a/src/sisudoc/ocda/abstraction/ssp_in.d b/src/sisudoc/ocda/abstraction/ssp_in.d index 0e461ad..0c67ab2 100644 --- a/src/sisudoc/ocda/abstraction/ssp_in.d +++ b/src/sisudoc/ocda/abstraction/ssp_in.d @@ -76,7 +76,7 @@ template spineAbstractionRead() { object sections in the order the file gives them +/ struct SSPdocument { - string format; // "% SiSU Document Abstraction v2.0" + string format; // "% SiSU Document Abstraction v2.1" string source; // "% Source: ..." string[string] source_info; // the @source block string[] source_info_order; @@ -230,6 +230,14 @@ template spineAbstractionRead() { case "section": obj.metainfo.is_of_section = _val; break; case "parent": obj.metainfo.parent_ocn = _val.to!int; break; case "last_descendant": obj.metainfo.last_descendant_ocn = _val.to!int; break; + case "ocn_range": { + auto _r = _ints(_val); + if (_r.length == 2) { + obj.metainfo.ocn_range_first = _r[0]; + obj.metainfo.ocn_range_last = _r[1]; + } + break; + } case "children": obj.metainfo.children_headings = _ints(_val); break; case "ancestors": obj.metainfo.markedup_ancestors = _eight(_val); -- cgit v1.2.3