@claritylabs/cl-sdk 3.0.15 → 3.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +29 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +29 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3005,12 +3005,13 @@ function isTitleContentNode(node) {
|
|
|
3005
3005
|
if (!text || text.length > 140) return false;
|
|
3006
3006
|
const words = text.split(/\s+/);
|
|
3007
3007
|
if (words.length > 14) return false;
|
|
3008
|
-
const startsWithStructuredHeading = /^(section|item|part|
|
|
3008
|
+
const startsWithStructuredHeading = /^(section|item|part|endorsement|schedule|article)\b|^[A-Z]\.\s|\b[IVX]+\.\s/i.test(text);
|
|
3009
3009
|
const uppercaseLetters = [...text].filter((char) => /[A-Z]/.test(char)).length;
|
|
3010
3010
|
const lowercaseLetters = [...text].filter((char) => /[a-z]/.test(char)).length;
|
|
3011
3011
|
const mostlyUppercase = uppercaseLetters > 0 && uppercaseLetters >= lowercaseLetters * 1.6;
|
|
3012
|
+
const containsSentencePunctuation = /[.;:]\s+\S/.test(text) || /[.;:]$/.test(text);
|
|
3012
3013
|
const sentenceLike = /\b(is|are|was|were|will|shall|may|must|means|includes|provided|subject|available|attached|remain|constitutes)\b/i.test(text) && /[a-z]/.test(text);
|
|
3013
|
-
return startsWithStructuredHeading || mostlyUppercase && !sentenceLike;
|
|
3014
|
+
return startsWithStructuredHeading || mostlyUppercase && !sentenceLike && !containsSentencePunctuation;
|
|
3014
3015
|
}
|
|
3015
3016
|
function nodePageEnd(node) {
|
|
3016
3017
|
return node.pageEnd ?? node.pageStart;
|
|
@@ -9574,12 +9575,28 @@ function nodePageEnd2(node) {
|
|
|
9574
9575
|
return node.pageEnd ?? node.pageStart;
|
|
9575
9576
|
}
|
|
9576
9577
|
function pageRangeForNodes(nodes) {
|
|
9577
|
-
const
|
|
9578
|
-
|
|
9579
|
-
|
|
9580
|
-
|
|
9581
|
-
|
|
9582
|
-
|
|
9578
|
+
const pages = [...new Set(nodes.flatMap((node) => {
|
|
9579
|
+
if (typeof node.pageStart !== "number") return [];
|
|
9580
|
+
const end = nodePageEnd2(node) ?? node.pageStart;
|
|
9581
|
+
const values = [];
|
|
9582
|
+
for (let page = node.pageStart; page <= end; page += 1) values.push(page);
|
|
9583
|
+
return values;
|
|
9584
|
+
}))].sort((left, right) => left - right);
|
|
9585
|
+
if (pages.length === 0) return void 0;
|
|
9586
|
+
const ranges = [];
|
|
9587
|
+
let start = pages[0];
|
|
9588
|
+
let previous = pages[0];
|
|
9589
|
+
for (const page of pages.slice(1)) {
|
|
9590
|
+
if (page === previous + 1) {
|
|
9591
|
+
previous = page;
|
|
9592
|
+
continue;
|
|
9593
|
+
}
|
|
9594
|
+
ranges.push(start === previous ? String(start) : `${start}-${previous}`);
|
|
9595
|
+
start = page;
|
|
9596
|
+
previous = page;
|
|
9597
|
+
}
|
|
9598
|
+
ranges.push(start === previous ? String(start) : `${start}-${previous}`);
|
|
9599
|
+
return ranges.length === 1 && !ranges[0].includes("-") ? `page ${ranges[0]}` : `pages ${ranges.join(", ")}`;
|
|
9583
9600
|
}
|
|
9584
9601
|
function descriptionWithPages(description, nodes) {
|
|
9585
9602
|
const range = pageRangeForNodes(nodes);
|
|
@@ -9926,6 +9943,10 @@ function normalizeContainerEvidenceFromChildren(sourceTree) {
|
|
|
9926
9943
|
pageEnd: pageEnds.length ? Math.max(...pageEnds) : currentNode.pageEnd,
|
|
9927
9944
|
bbox,
|
|
9928
9945
|
order: Math.min(currentNode.order, ...children.map((child) => child.order)),
|
|
9946
|
+
description: descriptionWithPages(
|
|
9947
|
+
currentNode.description.replace(/;\s*pages?\s+[0-9,\s-]+$/i, ""),
|
|
9948
|
+
evidenceNodes
|
|
9949
|
+
),
|
|
9929
9950
|
textExcerpt: shouldUseOwnEvidenceForContainer(currentNode) ? currentNode.textExcerpt : childText || currentNode.textExcerpt
|
|
9930
9951
|
});
|
|
9931
9952
|
}
|