@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.mjs
CHANGED
|
@@ -2650,12 +2650,13 @@ function isTitleContentNode(node) {
|
|
|
2650
2650
|
if (!text || text.length > 140) return false;
|
|
2651
2651
|
const words = text.split(/\s+/);
|
|
2652
2652
|
if (words.length > 14) return false;
|
|
2653
|
-
const startsWithStructuredHeading = /^(section|item|part|
|
|
2653
|
+
const startsWithStructuredHeading = /^(section|item|part|endorsement|schedule|article)\b|^[A-Z]\.\s|\b[IVX]+\.\s/i.test(text);
|
|
2654
2654
|
const uppercaseLetters = [...text].filter((char) => /[A-Z]/.test(char)).length;
|
|
2655
2655
|
const lowercaseLetters = [...text].filter((char) => /[a-z]/.test(char)).length;
|
|
2656
2656
|
const mostlyUppercase = uppercaseLetters > 0 && uppercaseLetters >= lowercaseLetters * 1.6;
|
|
2657
|
+
const containsSentencePunctuation = /[.;:]\s+\S/.test(text) || /[.;:]$/.test(text);
|
|
2657
2658
|
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);
|
|
2658
|
-
return startsWithStructuredHeading || mostlyUppercase && !sentenceLike;
|
|
2659
|
+
return startsWithStructuredHeading || mostlyUppercase && !sentenceLike && !containsSentencePunctuation;
|
|
2659
2660
|
}
|
|
2660
2661
|
function nodePageEnd(node) {
|
|
2661
2662
|
return node.pageEnd ?? node.pageStart;
|
|
@@ -9227,12 +9228,28 @@ function nodePageEnd2(node) {
|
|
|
9227
9228
|
return node.pageEnd ?? node.pageStart;
|
|
9228
9229
|
}
|
|
9229
9230
|
function pageRangeForNodes(nodes) {
|
|
9230
|
-
const
|
|
9231
|
-
|
|
9232
|
-
|
|
9233
|
-
|
|
9234
|
-
|
|
9235
|
-
|
|
9231
|
+
const pages = [...new Set(nodes.flatMap((node) => {
|
|
9232
|
+
if (typeof node.pageStart !== "number") return [];
|
|
9233
|
+
const end = nodePageEnd2(node) ?? node.pageStart;
|
|
9234
|
+
const values = [];
|
|
9235
|
+
for (let page = node.pageStart; page <= end; page += 1) values.push(page);
|
|
9236
|
+
return values;
|
|
9237
|
+
}))].sort((left, right) => left - right);
|
|
9238
|
+
if (pages.length === 0) return void 0;
|
|
9239
|
+
const ranges = [];
|
|
9240
|
+
let start = pages[0];
|
|
9241
|
+
let previous = pages[0];
|
|
9242
|
+
for (const page of pages.slice(1)) {
|
|
9243
|
+
if (page === previous + 1) {
|
|
9244
|
+
previous = page;
|
|
9245
|
+
continue;
|
|
9246
|
+
}
|
|
9247
|
+
ranges.push(start === previous ? String(start) : `${start}-${previous}`);
|
|
9248
|
+
start = page;
|
|
9249
|
+
previous = page;
|
|
9250
|
+
}
|
|
9251
|
+
ranges.push(start === previous ? String(start) : `${start}-${previous}`);
|
|
9252
|
+
return ranges.length === 1 && !ranges[0].includes("-") ? `page ${ranges[0]}` : `pages ${ranges.join(", ")}`;
|
|
9236
9253
|
}
|
|
9237
9254
|
function descriptionWithPages(description, nodes) {
|
|
9238
9255
|
const range = pageRangeForNodes(nodes);
|
|
@@ -9579,6 +9596,10 @@ function normalizeContainerEvidenceFromChildren(sourceTree) {
|
|
|
9579
9596
|
pageEnd: pageEnds.length ? Math.max(...pageEnds) : currentNode.pageEnd,
|
|
9580
9597
|
bbox,
|
|
9581
9598
|
order: Math.min(currentNode.order, ...children.map((child) => child.order)),
|
|
9599
|
+
description: descriptionWithPages(
|
|
9600
|
+
currentNode.description.replace(/;\s*pages?\s+[0-9,\s-]+$/i, ""),
|
|
9601
|
+
evidenceNodes
|
|
9602
|
+
),
|
|
9582
9603
|
textExcerpt: shouldUseOwnEvidenceForContainer(currentNode) ? currentNode.textExcerpt : childText || currentNode.textExcerpt
|
|
9583
9604
|
});
|
|
9584
9605
|
}
|