diff --git a/scripts/check-anchors.mjs b/scripts/check-anchors.mjs index 90578e8..1d003be 100755 --- a/scripts/check-anchors.mjs +++ b/scripts/check-anchors.mjs @@ -29,14 +29,29 @@ async function walk(dir) { return out; } -// Contrat : .reading p[id^="p-"] +// Contrat : +// - paragraphes citables : .reading p[id^="p-"] +// - alias web-natifs : .reading span.para-alias[id^="p-"] function extractIds(html) { if (!html.includes('class="reading"')) return []; - const ids = []; - const re = /]*\sid="(p-[^"]+)"/g; - let m; - while ((m = re.exec(html))) ids.push(m[1]); + const ids = []; + let m; + + // 1) IDs principaux (paragraphes) + const reP = /]*\sid="(p-[^"]+)"/g; + while ((m = reP.exec(html))) ids.push(m[1]); + + // 2) IDs alias (spans injectés) + // cas A : id="..." avant class="...para-alias..." + const reA1 = /]*\bid="(p-[^"]+)"[^>]*\bclass="[^"]*\bpara-alias\b[^"]*"/g; + while ((m = reA1.exec(html))) ids.push(m[1]); + + // cas B : class="...para-alias..." avant id="..." + const reA2 = /]*\bclass="[^"]*\bpara-alias\b[^"]*"[^>]*\bid="(p-[^"]+)"/g; + while ((m = reA2.exec(html))) ids.push(m[1]); + + // Dé-doublonnage (on garde un ordre stable) const seen = new Set(); const uniq = []; for (const id of ids) { diff --git a/tests/anchors-baseline.json b/tests/anchors-baseline.json index 257abf6..1d848d4 100644 --- a/tests/anchors-baseline.json +++ b/tests/anchors-baseline.json @@ -141,7 +141,8 @@ "p-134-358f5875", "p-135-c19330ce", "p-136-17f1cf51", - "p-137-d8f1539e" + "p-137-d8f1539e", + "p-8-e7075fe3" ], "atlas/00-demarrage/index.html": [ "p-0-97681330"