@tricoteuses/tisseuse 0.19.3 → 0.21.0
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/README.md +79 -0
- package/dist/{html-EuDDYMr2.js → html-jaUHsXKQ.js} +6449 -5951
- package/dist/index.js +115 -115
- package/dist/{resolver-tBQRf8TL.js → resolver-CzmDH4S3.js} +125 -97
- package/dist/server-f-legi.js +73 -92
- package/dist/server.js +892 -722
- package/dist/src/lib/extractors/action_directives_cpu.test.d.ts +1 -0
- package/dist/src/lib/extractors/links.citation_scope.test.d.ts +1 -0
- package/dist/src/lib/extractors/links.d.ts +2 -1
- package/dist/src/lib/extractors/portion_references_cpu.test.d.ts +1 -0
- package/dist/src/lib/extractors/qualified_versions.d.ts +6 -0
- package/dist/src/lib/extractors/references.d.ts +8 -8
- package/dist/src/lib/f_legi/resolver.d.ts +0 -2
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/legi/canutes_article_preload.test.d.ts +1 -0
- package/dist/src/lib/legi/canutes_candidates.test.d.ts +1 -0
- package/dist/src/lib/legi/canutes_resolver.d.ts +5 -4
- package/dist/src/lib/legi/canutes_resolver_cache.test.d.ts +1 -0
- package/dist/src/lib/legi/canutes_section_roots.test.d.ts +1 -0
- package/dist/src/lib/legi/canutes_sql.d.ts +4 -0
- package/dist/src/lib/legi/canutes_text_titles_cache.d.ts +24 -0
- package/dist/src/lib/legi/canutes_text_titles_cache.integration.test.d.ts +1 -0
- package/dist/src/lib/legi/canutes_titles_metrics.d.ts +13 -0
- package/dist/src/lib/legi/text_titles_infos.d.ts +1 -0
- package/dist/src/lib/linkers/html.d.ts +6 -4
- package/dist/src/lib/linkers/markdown.d.ts +2 -2
- package/dist/src/lib/server/akn_rendering.test.d.ts +1 -0
- package/dist/src/lib/server/bill_action_resolver_invariance.test.d.ts +1 -0
- package/dist/src/lib/server/bill_action_target_fixtures.d.ts +7 -0
- package/dist/src/lib/server/bill_citation_anaphora.test.d.ts +1 -0
- package/dist/src/lib/server/bill_comparison.d.ts +42 -0
- package/dist/src/lib/server/bill_comparison.test.d.ts +1 -0
- package/dist/src/lib/server/bill_target_scope.test.d.ts +1 -0
- package/dist/src/lib/server/canutes_legacy_candidates.d.ts +19 -0
- package/dist/src/lib/server/canutes_only_compatibility.test.d.ts +1 -0
- package/dist/src/lib/server/databases/canutes_text_titles_cache.d.ts +8 -0
- package/dist/src/lib/server/flegi_profiling.d.ts +14 -0
- package/dist/src/lib/server/flegi_profiling.test.d.ts +1 -0
- package/dist/src/lib/server/masquage-typesense.test.d.ts +1 -0
- package/dist/src/lib/server/masquage_typesense.d.ts +36 -0
- package/dist/src/lib/server/parsed_bills.d.ts +4 -0
- package/dist/src/lib/server/sql_profiling.d.ts +30 -0
- package/dist/src/lib/server/sql_profiling.test.d.ts +1 -0
- package/dist/src/lib/text_parsers/action_words.d.ts +2 -0
- package/dist/src/lib/text_parsers/action_words.test.d.ts +1 -0
- package/dist/src/lib/text_parsers/qualified_versions.d.ts +2 -0
- package/dist/src/lib/text_parsers/texts.d.ts +1 -0
- package/dist/src/lib/text_parsers/transformers.d.ts +2 -0
- package/dist/src/scripts/compare_legi_bills.d.ts +1 -0
- package/dist/src/scripts/configure_postgres_legi_resolver.d.ts +1 -0
- package/dist/src/scripts/profile_canutes_bill.d.ts +1 -0
- package/dist/src/scripts/test_canutes_titles_cache.d.ts +1 -0
- package/dist/src/scripts/warm_canutes_text_titles_cache.d.ts +1 -0
- package/package.json +7 -1
package/dist/server.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { A as
|
|
3
|
-
import * as
|
|
4
|
-
import { createHash as
|
|
5
|
-
import
|
|
6
|
-
import
|
|
1
|
+
import { At as e, C as t, D as n, E as r, Ft as i, Ht as a, K as o, L as s, M as c, Mt as l, N as u, O as d, Q as f, S as p, Tt as m, U as h, Ut as g, W as _, b as v, c as y, ft as b, g as x, h as ee, j as S, jt as C, k as te, kt as ne, m as re, n as ie, nt as ae, ot as oe, p as se, s as ce, t as le, tt as ue, u as de, ut as fe, v as pe, w as me, x as he } from "./html-jaUHsXKQ.js";
|
|
2
|
+
import { A as ge, At as w, F as _e, Ft as T, Lt as E, R as ve, St as D, d as ye, ft as be, it as xe, j as O, jt as k, kt as A, n as Se, r as Ce, t as we, yt as Te, z as Ee } from "./resolver-CzmDH4S3.js";
|
|
3
|
+
import * as De from "node:crypto";
|
|
4
|
+
import { createHash as Oe } from "node:crypto";
|
|
5
|
+
import j from "fs-extra";
|
|
6
|
+
import ke from "node:path";
|
|
7
7
|
//#region src/lib/server/assemblee_amendment_search.ts
|
|
8
|
-
function
|
|
8
|
+
function Ae(e, t) {
|
|
9
9
|
let n = e;
|
|
10
10
|
for (let e of t) {
|
|
11
11
|
if (typeof n != "object" || !n) return null;
|
|
@@ -13,34 +13,34 @@ function Oe(e, t) {
|
|
|
13
13
|
}
|
|
14
14
|
return typeof n == "string" && n.trim() ? n.trim() : null;
|
|
15
15
|
}
|
|
16
|
-
function
|
|
16
|
+
function je(e) {
|
|
17
17
|
return e.replace(/\u00a0/gu, " ").replace(/\s+/gu, " ").trim();
|
|
18
18
|
}
|
|
19
|
-
function
|
|
20
|
-
return
|
|
19
|
+
function Me(e) {
|
|
20
|
+
return je(b(e).text());
|
|
21
21
|
}
|
|
22
|
-
function
|
|
23
|
-
let t =
|
|
24
|
-
|
|
22
|
+
function Ne(e) {
|
|
23
|
+
let t = je([
|
|
24
|
+
Ae(e, [
|
|
25
25
|
"corps",
|
|
26
26
|
"contenuAuteur",
|
|
27
27
|
"dispositif"
|
|
28
28
|
]),
|
|
29
|
-
|
|
29
|
+
Ae(e, [
|
|
30
30
|
"corps",
|
|
31
31
|
"contenuAuteur",
|
|
32
32
|
"dispositifAmdtCreditPLF"
|
|
33
33
|
]),
|
|
34
|
-
|
|
34
|
+
Ae(e, [
|
|
35
35
|
"corps",
|
|
36
36
|
"contenuAuteur",
|
|
37
37
|
"dispositifAmdtCreditPLFR"
|
|
38
38
|
])
|
|
39
|
-
].filter((e) => e !== null).map((e) =>
|
|
39
|
+
].filter((e) => e !== null).map((e) => Me(e)).join("\n")), n = Ae(e, [
|
|
40
40
|
"corps",
|
|
41
41
|
"contenuAuteur",
|
|
42
42
|
"exposeSommaire"
|
|
43
|
-
]), r = n === null ? "" :
|
|
43
|
+
]), r = n === null ? "" : Me(n);
|
|
44
44
|
return [...t ? [{
|
|
45
45
|
content: t,
|
|
46
46
|
itemKind: "dispositif",
|
|
@@ -51,24 +51,24 @@ function je(e) {
|
|
|
51
51
|
label: "Exposé sommaire"
|
|
52
52
|
}] : []];
|
|
53
53
|
}
|
|
54
|
-
function
|
|
55
|
-
return
|
|
54
|
+
function Pe(e, t) {
|
|
55
|
+
return Oe("sha256").update(JSON.stringify({
|
|
56
56
|
item: e,
|
|
57
57
|
metadata: t
|
|
58
58
|
})).digest("hex");
|
|
59
59
|
}
|
|
60
60
|
//#endregion
|
|
61
61
|
//#region src/lib/extractors/article_action_targets.ts
|
|
62
|
-
function
|
|
62
|
+
function M(e) {
|
|
63
63
|
switch (e.type) {
|
|
64
|
-
case "reference_et_action": return
|
|
65
|
-
case "enumeration": return [...
|
|
64
|
+
case "reference_et_action": return M(e.reference);
|
|
65
|
+
case "enumeration": return [...M(e.left), ...M(e.right)];
|
|
66
66
|
case "parent-enfant": {
|
|
67
|
-
let t = [...
|
|
67
|
+
let t = [...a(e.parent)].filter((e) => e.type === "article");
|
|
68
68
|
return t.length === 1 ? [{
|
|
69
69
|
article: t[0],
|
|
70
70
|
reference: e
|
|
71
|
-
}] : t.length > 1 ? [] :
|
|
71
|
+
}] : t.length > 1 ? [] : M(e.child).map((t) => ({
|
|
72
72
|
article: t.article,
|
|
73
73
|
reference: {
|
|
74
74
|
...e,
|
|
@@ -89,11 +89,11 @@ function P(e) {
|
|
|
89
89
|
}
|
|
90
90
|
//#endregion
|
|
91
91
|
//#region src/lib/extractors/article_action_effects.ts
|
|
92
|
-
function
|
|
92
|
+
function Fe(e, t) {
|
|
93
93
|
if (t < 2) return null;
|
|
94
|
-
let n =
|
|
94
|
+
let n = O(e), r = x(e);
|
|
95
95
|
if (r.length !== t) return null;
|
|
96
|
-
let i =
|
|
96
|
+
let i = s(new A(n.output)), a = (e) => Ee(n, [e])[0].position;
|
|
97
97
|
return r.map((t, n) => ({
|
|
98
98
|
sourceText: e,
|
|
99
99
|
referencePosition: a({
|
|
@@ -103,24 +103,24 @@ function Ne(e, t) {
|
|
|
103
103
|
actionPosition: a(t.position)
|
|
104
104
|
}));
|
|
105
105
|
}
|
|
106
|
-
function
|
|
106
|
+
function Ie(e, t, n) {
|
|
107
107
|
if (t.length < 2) return null;
|
|
108
|
-
let r =
|
|
109
|
-
if (
|
|
110
|
-
let
|
|
111
|
-
if (
|
|
112
|
-
let n =
|
|
113
|
-
return n.article.num !== e.article.num || n.article.position.start !== e.article.position.start || n.article.position.stop !== e.article.position.stop || !
|
|
114
|
-
}) ? null :
|
|
108
|
+
let r = O(e), i = r.output, a = (e) => Ee(r, [e])[0].position, o = s(new A(i)), c = o.flatMap(M);
|
|
109
|
+
if (c.length !== t.length || c.length < 2) return null;
|
|
110
|
+
let l = he(i);
|
|
111
|
+
if (l.length > 0) return n?.kind !== "replace_portion" || l.length !== c.length || l.some((e, t) => {
|
|
112
|
+
let n = c[t];
|
|
113
|
+
return n.article.num !== e.article.num || n.article.position.start !== e.article.position.start || n.article.position.stop !== e.article.position.stop || !oe(n.reference).some((t) => t.kind === "single" && t.steps.some((t) => t.type === "alinéa" && t.index === e.alineaIndex));
|
|
114
|
+
}) ? null : c.map((r, i) => ({
|
|
115
115
|
targetId: t[i],
|
|
116
116
|
directive: {
|
|
117
117
|
...n,
|
|
118
118
|
reference: r.reference,
|
|
119
|
-
portionSelectors:
|
|
119
|
+
portionSelectors: oe(r.reference),
|
|
120
120
|
tableTarget: {
|
|
121
121
|
type: "table",
|
|
122
|
-
rowIndex:
|
|
123
|
-
rowEndIndex:
|
|
122
|
+
rowIndex: l[i].rowIndex,
|
|
123
|
+
rowEndIndex: l[i].rowEndIndex
|
|
124
124
|
}
|
|
125
125
|
},
|
|
126
126
|
sourceAnnotation: {
|
|
@@ -132,12 +132,12 @@ function Pe(e, t, n) {
|
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
}));
|
|
135
|
-
let
|
|
136
|
-
if (
|
|
137
|
-
let n =
|
|
135
|
+
let u = c.filter(({ reference: e }) => e.type === "parent-enfant" && e.parent.type === "texte" && e.parent.nature !== "CODE");
|
|
136
|
+
if (u.length > 0 && u.length < c.length) {
|
|
137
|
+
let n = c.filter((e) => !u.includes(e));
|
|
138
138
|
if (n.length !== 1) return null;
|
|
139
|
-
let r = n[0], o = t[
|
|
140
|
-
return !o ||
|
|
139
|
+
let r = n[0], o = t[c.indexOf(r)], s = v(i);
|
|
140
|
+
return !o || s.length !== 1 || s[0].kind === "compound" ? null : [{
|
|
141
141
|
targetId: o,
|
|
142
142
|
sourceAnnotation: {
|
|
143
143
|
sourceText: e,
|
|
@@ -148,7 +148,7 @@ function Pe(e, t, n) {
|
|
|
148
148
|
}
|
|
149
149
|
},
|
|
150
150
|
directive: {
|
|
151
|
-
...
|
|
151
|
+
...s[0],
|
|
152
152
|
reference: r.reference,
|
|
153
153
|
sourcePosition: {
|
|
154
154
|
start: 0,
|
|
@@ -161,17 +161,17 @@ function Pe(e, t, n) {
|
|
|
161
161
|
let d = [], f = 0;
|
|
162
162
|
for (let e = 1; e < o.length; e += 1) {
|
|
163
163
|
let t = o[e];
|
|
164
|
-
t.type !== "reference_et_action" ||
|
|
164
|
+
t.type !== "reference_et_action" || M(t).length === 0 || o.slice(f, e).flatMap(M).length === 0 || v(i.slice(f === 0 ? 0 : o[f].position.start, t.position.start)).length === 1 && v(i.slice(t.position.start)).length === 1 && (d.push(e - 1), f = e);
|
|
165
165
|
}
|
|
166
166
|
d.push(o.length - 1);
|
|
167
167
|
let p = [], m = 0, h = 0;
|
|
168
168
|
for (let n of d) {
|
|
169
|
-
let r = o.slice(m, n + 1).flatMap(
|
|
169
|
+
let r = o.slice(m, n + 1).flatMap(M);
|
|
170
170
|
if (r.length === 0) {
|
|
171
171
|
m = n + 1;
|
|
172
172
|
continue;
|
|
173
173
|
}
|
|
174
|
-
let s = m === 0 ? 0 : o[m].position.start, c = o[n + 1]?.position.start ?? i.length, l =
|
|
174
|
+
let s = m === 0 ? 0 : o[m].position.start, c = o[n + 1]?.position.start ?? i.length, l = v(i.slice(s, c));
|
|
175
175
|
if (l.length !== 1 || l[0].kind === "compound") return null;
|
|
176
176
|
let u = l[0];
|
|
177
177
|
for (let n of r) {
|
|
@@ -195,7 +195,7 @@ function Pe(e, t, n) {
|
|
|
195
195
|
stop: i.length
|
|
196
196
|
},
|
|
197
197
|
reference: n.reference,
|
|
198
|
-
portionSelectors:
|
|
198
|
+
portionSelectors: oe(n.reference)
|
|
199
199
|
}
|
|
200
200
|
});
|
|
201
201
|
}
|
|
@@ -203,41 +203,26 @@ function Pe(e, t, n) {
|
|
|
203
203
|
}
|
|
204
204
|
return h === t.length ? p : null;
|
|
205
205
|
}
|
|
206
|
-
var Fe = _e("dans sa rédaction", M([M([O("dans sa rédaction ", { flags: "i" }), A(O("issue ", { flags: "i" }), O("résultante ", { flags: "i" }), O("résultant ", { flags: "i" }))], { value: "qualified-version-redaction" }), A(M([O("de l'", { flags: "i" }), l], { value: (e) => e[1] }), n)], { value: (e) => e[1] }));
|
|
207
|
-
//#endregion
|
|
208
|
-
//#region src/lib/extractors/qualified_versions.ts
|
|
209
|
-
function Ie(e) {
|
|
210
|
-
let t = fe(e), n = [];
|
|
211
|
-
for (let e of Fe.extract(new D(t.output), { jumpExact: !0 })) for (let i of _(e)) {
|
|
212
|
-
if (i.type !== "parent-enfant" || i.parent.type !== "texte" || i.parent.nature !== "LOI") continue;
|
|
213
|
-
let e = [...r(i.child)].filter((e) => e.type === "article" && e.position.start < i.parent.position.start);
|
|
214
|
-
if (e.length === 1) {
|
|
215
|
-
n.push(me(t, [e[0].position])[0].position);
|
|
216
|
-
break;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
return n;
|
|
220
|
-
}
|
|
221
206
|
//#endregion
|
|
222
207
|
//#region src/lib/server/parsed_bills.ts
|
|
223
208
|
var Le = /^expos[ée]\s+des\s+motifs\b/iu;
|
|
224
|
-
function
|
|
209
|
+
function N(e) {
|
|
225
210
|
return (e ?? "").replace(/\u00a0/g, " ").replace(/\s+/g, " ").trim();
|
|
226
211
|
}
|
|
227
|
-
function
|
|
228
|
-
return
|
|
212
|
+
function P(e) {
|
|
213
|
+
return N(e).toLowerCase().normalize("NFD").replace(/\p{Diacritic}/gu, "");
|
|
229
214
|
}
|
|
230
215
|
function Re(e) {
|
|
231
|
-
return
|
|
216
|
+
return ne(N(e));
|
|
232
217
|
}
|
|
233
|
-
function
|
|
218
|
+
function F(e) {
|
|
234
219
|
return `_TocArt${Re(e).replace(/\s+/gu, "")}`;
|
|
235
220
|
}
|
|
236
221
|
function ze(e, t) {
|
|
237
222
|
return e(t).closest(".assnatTOC6,.assnatTOC5,.assnatTOC4").length > 0;
|
|
238
223
|
}
|
|
239
224
|
function Be(e) {
|
|
240
|
-
return
|
|
225
|
+
return P(e).replace(/[‐‑‒–—]/gu, "-").replace(/\s*\.\s*/gu, ".");
|
|
241
226
|
}
|
|
242
227
|
function Ve(e) {
|
|
243
228
|
return Be(e).replace(/[^a-z0-9]+/gu, "-").replace(/^-|-$/gu, "");
|
|
@@ -260,12 +245,12 @@ function He(e) {
|
|
|
260
245
|
default: return;
|
|
261
246
|
}
|
|
262
247
|
}
|
|
263
|
-
function Ue(
|
|
264
|
-
let
|
|
265
|
-
if (
|
|
248
|
+
function Ue(t) {
|
|
249
|
+
let n = N(t.sourceText), r = /\b(?:ins[ée]r[ée]s?|cr[ée][ée]s?|ajout[ée]s?|compl[ée]t[ée]s?\s+par)\b[\s\S]{0,160}?\barticle\s+(.+?)\s+ainsi\s+r[ée]dig[ée]s?\b/iu.exec(n);
|
|
250
|
+
if (r?.[1] !== void 0) return e(r[1]);
|
|
266
251
|
}
|
|
267
252
|
function We(e) {
|
|
268
|
-
let t = He(e), n =
|
|
253
|
+
let t = He(e), n = m(t ?? "");
|
|
269
254
|
if (n.length > 0 && t !== void 0) return n.map((e, r) => {
|
|
270
255
|
let i = e.start, a = n[r + 1]?.start ?? t.length, o = t.slice(i, a).trim();
|
|
271
256
|
return {
|
|
@@ -292,39 +277,45 @@ function Ge(e, t = /* @__PURE__ */ new Set()) {
|
|
|
292
277
|
return t;
|
|
293
278
|
}
|
|
294
279
|
function Ke(e) {
|
|
295
|
-
|
|
296
|
-
|
|
280
|
+
if (typeof e != "object" || !e) return !1;
|
|
281
|
+
if (Array.isArray(e)) return e.some(Ke);
|
|
282
|
+
let t = e;
|
|
283
|
+
return t.type === "bounded-interval" || Object.values(t).some(Ke);
|
|
297
284
|
}
|
|
298
285
|
function qe(e) {
|
|
299
|
-
|
|
286
|
+
let t = P(e.sourceText);
|
|
287
|
+
return /\b(?:cree|cree[e]?s?|resultant|issu|prevu|mentionne)\b[\s\S]{0,80}\b(?:present|presente|pjl|projet\s+de\s+loi)\b/u.test(t);
|
|
300
288
|
}
|
|
301
|
-
function Je(e
|
|
302
|
-
|
|
289
|
+
function Je(e) {
|
|
290
|
+
return N(e).replace(/[’']/gu, "'").replace(/[‐‑‒–—]/gu, "-");
|
|
291
|
+
}
|
|
292
|
+
function Ye(e, t) {
|
|
293
|
+
let n = new A(e, t), r = xe(n);
|
|
303
294
|
return typeof r != "string" || n.offset <= t ? null : {
|
|
304
295
|
date: r,
|
|
305
296
|
start: t,
|
|
306
297
|
stop: n.offset
|
|
307
298
|
};
|
|
308
299
|
}
|
|
309
|
-
function
|
|
300
|
+
function Xe(e, t) {
|
|
310
301
|
let n = /\d/u.exec(e.slice(t));
|
|
311
302
|
if (!n) return null;
|
|
312
303
|
let r = t + n.index;
|
|
313
|
-
return e.slice(t, r).trim().length > 0 ? null :
|
|
304
|
+
return e.slice(t, r).trim().length > 0 ? null : Ye(e, r);
|
|
314
305
|
}
|
|
315
|
-
function
|
|
306
|
+
function Ze(e) {
|
|
316
307
|
let t = /^la présente loi (?:s['’]appli(?:que|quent)|entr(?:e|ent) en vigueur) (?:[aà] compter (?:du|de|d['’])|au|le)\s*/u, n = /^la présente loi s['’]appli(?:que|quent)\s*:\s*/u, r = /\b[aà] compter (?:du|de|d['’])\s*/gu, i = [], a = "la présente loi", o = e.indexOf(a);
|
|
317
308
|
for (; o !== -1;) {
|
|
318
309
|
let s = e.indexOf(a, o + 15), c = e.slice(o, o + 1400), l = t.exec(c);
|
|
319
310
|
if (l) {
|
|
320
|
-
let e =
|
|
311
|
+
let e = Xe(c, l[0].length);
|
|
321
312
|
e && i.push(e.date);
|
|
322
313
|
}
|
|
323
314
|
let u = n.exec(c);
|
|
324
315
|
if (u) {
|
|
325
316
|
let e = /\barticle\s+\w/iu.exec(c), t = e === null ? c.slice(u[0].length) : c.slice(u[0].length, e.index);
|
|
326
317
|
for (r.lastIndex = 0; r.exec(t) !== null;) {
|
|
327
|
-
let e =
|
|
318
|
+
let e = Xe(t, r.lastIndex);
|
|
328
319
|
e && /^\s+pour\s+les\s+autres\s+dispositions\s+fiscales\b/iu.test(t.slice(e.stop)) && i.push(e.date);
|
|
329
320
|
}
|
|
330
321
|
}
|
|
@@ -332,20 +323,20 @@ function Xe(e) {
|
|
|
332
323
|
}
|
|
333
324
|
return i;
|
|
334
325
|
}
|
|
335
|
-
function
|
|
336
|
-
let t =
|
|
326
|
+
function Qe(e) {
|
|
327
|
+
let t = Ze(Je(e).toLowerCase()), n = Array.from(new Set(t));
|
|
337
328
|
return n.length === 1 ? n[0] : void 0;
|
|
338
329
|
}
|
|
339
|
-
function
|
|
340
|
-
return
|
|
330
|
+
function $e(e) {
|
|
331
|
+
return P(e).replace(/[’]/gu, "'").replace(/[‐‑‒–—]/gu, "-").replace(/^(?:(?:article\s+[^:]+|[a-z][.)]|[ivxlcdm]+\.|\d+°)\s*(?:-\s*)?)+/iu, "");
|
|
341
332
|
}
|
|
342
|
-
function
|
|
333
|
+
function I(e) {
|
|
343
334
|
return e?.type === "tag";
|
|
344
335
|
}
|
|
345
|
-
function
|
|
336
|
+
function et(e, t) {
|
|
346
337
|
return e.html(t) ?? "";
|
|
347
338
|
}
|
|
348
|
-
function
|
|
339
|
+
function tt(e, t) {
|
|
349
340
|
let n = [], r = /* @__PURE__ */ new Set();
|
|
350
341
|
for (let i of e(t).find("a").get()) {
|
|
351
342
|
let a = e(i).attr("href") ?? "", o = /\/legifrance\/(articles|sections|textes)\/([^?#"]+)/u.exec(a);
|
|
@@ -353,65 +344,83 @@ function et(e, t) {
|
|
|
353
344
|
let s = o[1] === "articles" ? "article" : o[1] === "sections" ? "division" : "text", c = o[2].replace(/\.md$/u, ""), l = `${s}\0${c}`;
|
|
354
345
|
if (r.has(l)) continue;
|
|
355
346
|
r.add(l);
|
|
356
|
-
let u =
|
|
347
|
+
let u = N(e(i).text());
|
|
357
348
|
n.push({
|
|
358
349
|
id: c,
|
|
359
|
-
...
|
|
350
|
+
...nt(e, t, i) ? { insideFrenchQuotes: !0 } : {},
|
|
360
351
|
...u ? { text: u } : {},
|
|
361
352
|
type: s
|
|
362
353
|
});
|
|
363
354
|
}
|
|
364
355
|
return n;
|
|
365
356
|
}
|
|
366
|
-
function
|
|
367
|
-
let r =
|
|
357
|
+
function nt(e, t, n) {
|
|
358
|
+
let r = rt(e, t, n);
|
|
368
359
|
return (r.match(/«/gu) ?? []).length > (r.match(/»/gu) ?? []).length;
|
|
369
360
|
}
|
|
370
|
-
function
|
|
361
|
+
function rt(e, t, n) {
|
|
371
362
|
if (t === n) return "";
|
|
372
363
|
if (t.type === "text") return t.data ?? "";
|
|
373
|
-
if (!
|
|
364
|
+
if (!I(t)) return "";
|
|
374
365
|
let r = "";
|
|
375
366
|
for (let i of e(t).contents().get()) {
|
|
376
367
|
if (i === n) return r;
|
|
377
|
-
if (
|
|
368
|
+
if (I(i) && e.contains(i, n)) return r + rt(e, i, n);
|
|
378
369
|
r += e(i).text();
|
|
379
370
|
}
|
|
380
371
|
return r;
|
|
381
372
|
}
|
|
382
|
-
function
|
|
383
|
-
return t.map((t) =>
|
|
373
|
+
function it(e, t) {
|
|
374
|
+
return t.map((t) => N(e(t).text())).filter(Boolean).join("\n");
|
|
375
|
+
}
|
|
376
|
+
function at(e) {
|
|
377
|
+
let t = P(e);
|
|
378
|
+
return !t || Le.test(t) ? "noise" : d.test(e) ? "directive_candidate" : "context";
|
|
384
379
|
}
|
|
385
|
-
function
|
|
386
|
-
|
|
387
|
-
return !t || Le.test(t) ? "noise" : m.test(e) ? "directive_candidate" : "context";
|
|
380
|
+
function ot(e, t) {
|
|
381
|
+
return t.tagName === "p" && (/pastille/iu.test(e(t).attr("class") ?? "") || e(t).is("[data-pastille]")) && /^\(\d+\)$/u.test(N(e(t).text()));
|
|
388
382
|
}
|
|
389
|
-
|
|
383
|
+
function st(e) {
|
|
384
|
+
let t = b(e, { xml: {
|
|
385
|
+
xmlMode: !1,
|
|
386
|
+
withStartIndices: !0,
|
|
387
|
+
withEndIndices: !0
|
|
388
|
+
} });
|
|
389
|
+
return t("p").get().filter((e) => ot(t, e)).map((e) => {
|
|
390
|
+
if (e.startIndex === null || e.endIndex === null) throw Error("Missing source positions for an Assembly pastille");
|
|
391
|
+
return {
|
|
392
|
+
start: e.startIndex,
|
|
393
|
+
stop: e.endIndex + 1
|
|
394
|
+
};
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
async function ct(e, t, n, r) {
|
|
390
398
|
if (n === void 0) throw Error("A document date is required to add links to legal references.");
|
|
391
399
|
if (t.legiResolver === void 0 && t.canutesDb === void 0) throw Error("A Canutes database or an explicit legal resolver is required to add links to legal references.");
|
|
392
|
-
let
|
|
400
|
+
let i = t.legiResolver ?? new se(t.canutesDb), { output: a } = await ie({
|
|
393
401
|
date: n,
|
|
402
|
+
excludedHtmlRanges: r,
|
|
394
403
|
html: e,
|
|
395
404
|
includeInternalArticleLinks: t.includeInternalArticleLinks,
|
|
396
|
-
legiResolver:
|
|
405
|
+
legiResolver: i,
|
|
397
406
|
linkBaseUrl: t.linkBaseUrl,
|
|
398
407
|
linkType: t.linkType,
|
|
399
408
|
logIgnoredReferencesTypes: t.logIgnoredReferencesTypes,
|
|
400
409
|
logPartialReferences: t.logPartialReferences,
|
|
401
410
|
logReferences: t.logReferences
|
|
402
411
|
});
|
|
403
|
-
return
|
|
412
|
+
return a ?? e;
|
|
404
413
|
}
|
|
405
|
-
function
|
|
414
|
+
function lt(e, t) {
|
|
406
415
|
let n = e(t).closest("h1,h2,h3,h4,h5,h6,p,td,th").get(0), r = e(t).closest("table").get(0);
|
|
407
|
-
return
|
|
416
|
+
return I(r) && I(n) && e(n).parents("table").get(0) === r ? r : I(n) ? n : t;
|
|
408
417
|
}
|
|
409
|
-
function
|
|
418
|
+
function ut(e, t, n, r, i) {
|
|
410
419
|
if (n.has(i.container)) return;
|
|
411
|
-
let a = i.id ??
|
|
420
|
+
let a = i.id ?? F(i.num ?? i.label);
|
|
412
421
|
if (r.has(a)) return;
|
|
413
422
|
r.add(a), n.add(i.container);
|
|
414
|
-
let o = i.title ? e(i.element).closest("h1,h2,h3,h4,h5,h6,p.assnat9ArticleNum").get(0) : void 0, s =
|
|
423
|
+
let o = i.title ? e(i.element).closest("h1,h2,h3,h4,h5,h6,p.assnat9ArticleNum").get(0) : void 0, s = I(o) ? dt(e, o) : null, c = s ? e(o).text() : "", l = I(o) && s?.label === i.label && s.title === i.title && [`${s.label}${s.title}`, `${s.label} ${s.title}`].some((e) => P(e) === P(c)) ? {
|
|
415
424
|
element: o,
|
|
416
425
|
text: `${s.label}\n${s.title}`
|
|
417
426
|
} : void 0;
|
|
@@ -425,37 +434,37 @@ function st(e, t, n, r, i) {
|
|
|
425
434
|
splitAtBreak: l
|
|
426
435
|
});
|
|
427
436
|
}
|
|
428
|
-
function
|
|
437
|
+
function L(e) {
|
|
429
438
|
let t = /* @__PURE__ */ new Map();
|
|
430
439
|
return e("body *").each((e, n) => {
|
|
431
440
|
t.set(n, e);
|
|
432
441
|
}), t;
|
|
433
442
|
}
|
|
434
|
-
function
|
|
443
|
+
function R(e, t) {
|
|
435
444
|
return e.get(t) ?? 2 ** 53 - 1;
|
|
436
445
|
}
|
|
437
|
-
function
|
|
438
|
-
if (!e(t).hasClass("assnat9ArticleNum") && !
|
|
446
|
+
function dt(e, t) {
|
|
447
|
+
if (!e(t).hasClass("assnat9ArticleNum") && !pt(e, t) || e(t).find("br").length !== 1) return null;
|
|
439
448
|
let n = "", r = "", i = !1, a = (e) => {
|
|
440
449
|
if (e.type === "text") i ? r += e.data : n += e.data;
|
|
441
|
-
else if (
|
|
450
|
+
else if (I(e)) if (e.tagName.toLowerCase() === "br") i = !0;
|
|
442
451
|
else for (let t of e.children) a(t);
|
|
443
452
|
};
|
|
444
453
|
a(t);
|
|
445
|
-
let o =
|
|
454
|
+
let o = C(N(n)), s = N(r);
|
|
446
455
|
return o && !o.title && s ? {
|
|
447
456
|
...o,
|
|
448
457
|
title: s
|
|
449
458
|
} : null;
|
|
450
459
|
}
|
|
451
|
-
function
|
|
460
|
+
function ft(e) {
|
|
452
461
|
let t = [], n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set();
|
|
453
462
|
e("a[id], span[id], h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]").each((i, a) => {
|
|
454
463
|
if (ze(e, a)) return;
|
|
455
|
-
let o =
|
|
464
|
+
let o = N(e(a).text()), s = e(a).attr("id");
|
|
456
465
|
if (!s || r.has(s)) return;
|
|
457
|
-
let c =
|
|
458
|
-
u &&
|
|
466
|
+
let c = lt(e, a), l = e(a).closest("h1,h2,h3,h4,h5,h6,p.assnat9ArticleNum").get(0), u = C(o) ?? (I(l) && (a === l || e(a).find("br").length === 1) ? dt(e, l) : null);
|
|
467
|
+
u && ut(e, t, n, r, {
|
|
459
468
|
id: s,
|
|
460
469
|
...u,
|
|
461
470
|
element: a,
|
|
@@ -463,36 +472,36 @@ function ut(e) {
|
|
|
463
472
|
});
|
|
464
473
|
}), e("h1:not([id]), h2:not([id]), h3:not([id]), h4:not([id]), h5:not([id]), h6:not([id])").each((i, a) => {
|
|
465
474
|
if (n.has(a)) return;
|
|
466
|
-
let o =
|
|
467
|
-
o &&
|
|
475
|
+
let o = C(N(e(a).text())) ?? dt(e, a);
|
|
476
|
+
o && ut(e, t, n, r, {
|
|
468
477
|
...o,
|
|
469
478
|
element: a,
|
|
470
479
|
container: a
|
|
471
480
|
});
|
|
472
481
|
});
|
|
473
|
-
let i =
|
|
474
|
-
return t.sort((e, t) =>
|
|
482
|
+
let i = L(e);
|
|
483
|
+
return t.sort((e, t) => R(i, e.container) - R(i, t.container)), t;
|
|
475
484
|
}
|
|
476
|
-
function
|
|
485
|
+
function pt(e, t) {
|
|
477
486
|
if (ze(e, t)) return !1;
|
|
478
487
|
let n = t.tagName?.toLowerCase();
|
|
479
488
|
if (n !== "p") return /^h[1-6]$/u.test(n ?? "");
|
|
480
489
|
let r = e(t).attr("style") ?? "", i = e(t).html() ?? "";
|
|
481
490
|
return /text-align\s*:\s*center/iu.test(r) && (/font-weight\s*:\s*bold/iu.test(r) || /font-weight\s*:\s*bold/iu.test(i) || /<(?:strong|b)(?:\s|>)/iu.test(i));
|
|
482
491
|
}
|
|
483
|
-
function
|
|
492
|
+
function mt(e) {
|
|
484
493
|
let t = [], n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set();
|
|
485
494
|
return e("p.assnat9ArticleNum,h1,h2,h3,h4,h5,h6,p").each((i, a) => {
|
|
486
|
-
if (ze(e, a) || !e(a).hasClass("assnat9ArticleNum") && !
|
|
487
|
-
let o =
|
|
488
|
-
o &&
|
|
495
|
+
if (ze(e, a) || !e(a).hasClass("assnat9ArticleNum") && !pt(e, a)) return;
|
|
496
|
+
let o = C(e(a).text()) ?? dt(e, a);
|
|
497
|
+
o && ut(e, t, n, r, {
|
|
489
498
|
...o,
|
|
490
499
|
element: a,
|
|
491
500
|
container: a
|
|
492
501
|
});
|
|
493
502
|
}), t;
|
|
494
503
|
}
|
|
495
|
-
function
|
|
504
|
+
function ht(e) {
|
|
496
505
|
let t = Re(e ?? "").replace(/[()]/gu, "").trim();
|
|
497
506
|
if (!t || t.toLowerCase() === "liminaire") return;
|
|
498
507
|
if (t.toLowerCase() === "unique") return {
|
|
@@ -502,7 +511,7 @@ function pt(e) {
|
|
|
502
511
|
};
|
|
503
512
|
let n = /^(\d+|premier)(?:\s+([a-z]+))?(?:\s+([A-Z]+))?$/u.exec(t);
|
|
504
513
|
if (!n) return;
|
|
505
|
-
let r = n[1] === "premier" ? 1 : Number.parseInt(n[1], 10), i = n[2], a = i === void 0 ? 0 :
|
|
514
|
+
let r = n[1] === "premier" ? 1 : Number.parseInt(n[1], 10), i = n[2], a = i === void 0 ? 0 : _t(i);
|
|
506
515
|
if (a !== void 0) return {
|
|
507
516
|
base: r,
|
|
508
517
|
suffixOrder: a,
|
|
@@ -510,7 +519,7 @@ function pt(e) {
|
|
|
510
519
|
text: t
|
|
511
520
|
};
|
|
512
521
|
}
|
|
513
|
-
function
|
|
522
|
+
function gt(e, t) {
|
|
514
523
|
if (t.base !== e.base) return t.base - e.base;
|
|
515
524
|
if (t.suffixOrder !== e.suffixOrder) return t.suffixOrder - e.suffixOrder;
|
|
516
525
|
for (let n = 0; n <= Math.max(e.letters?.length ?? 0, t.letters?.length ?? 0); n++) {
|
|
@@ -519,14 +528,14 @@ function mt(e, t) {
|
|
|
519
528
|
}
|
|
520
529
|
return 0;
|
|
521
530
|
}
|
|
522
|
-
function
|
|
523
|
-
let t = new
|
|
531
|
+
function _t(e) {
|
|
532
|
+
let t = new A(e), n = be(t);
|
|
524
533
|
if (!(n === void 0 || t.offset !== e.length) && !(typeof n != "object" || !n || !("value" in n) || typeof n.value != "number")) return n.value - 1;
|
|
525
534
|
}
|
|
526
|
-
function
|
|
535
|
+
function vt(e) {
|
|
527
536
|
let t = [], n = e.map((e) => ({
|
|
528
537
|
heading: e,
|
|
529
|
-
token:
|
|
538
|
+
token: ht(e.num)
|
|
530
539
|
}));
|
|
531
540
|
n.filter(({ token: e }) => e?.text === "unique").length > 0 && e.length > 1 && t.push({
|
|
532
541
|
code: "article_toc_out_of_order",
|
|
@@ -535,7 +544,7 @@ function gt(e) {
|
|
|
535
544
|
let r;
|
|
536
545
|
for (let { heading: e, token: i } of n) if (!(i === void 0 || i.text === "unique")) {
|
|
537
546
|
if (r !== void 0) {
|
|
538
|
-
let n =
|
|
547
|
+
let n = gt(r, i);
|
|
539
548
|
n === 0 ? t.push({
|
|
540
549
|
code: "article_toc_duplicate_number",
|
|
541
550
|
message: `Article ${e.num ?? e.label} is repeated`,
|
|
@@ -564,158 +573,196 @@ function gt(e) {
|
|
|
564
573
|
}
|
|
565
574
|
return t;
|
|
566
575
|
}
|
|
567
|
-
function
|
|
568
|
-
let t =
|
|
576
|
+
function yt(e) {
|
|
577
|
+
let t = vt(e);
|
|
569
578
|
t.length > 0 && process.env.TISSEUSE_WARN_ASSEMBLEE_HEADING_SEQUENCE === "1" && console.warn("Incoherent Assemblée article heading sequence", { issues: t.map((e) => e.message) });
|
|
570
579
|
}
|
|
571
|
-
function
|
|
572
|
-
let n =
|
|
573
|
-
if (n.length === 0) return t &&
|
|
574
|
-
let i =
|
|
575
|
-
let n = new Set(e.map((e) => e.container)), r = new Set(e.map((e) =>
|
|
580
|
+
function bt(e, { warn: t = !0 } = {}) {
|
|
581
|
+
let n = ft(e), r = mt(e);
|
|
582
|
+
if (n.length === 0) return t && yt(r), r;
|
|
583
|
+
let i = L(e), a = (e, t) => {
|
|
584
|
+
let n = new Set(e.map((e) => e.container)), r = new Set(e.map((e) => F(e.num ?? e.label)));
|
|
576
585
|
for (let i of t) {
|
|
577
|
-
let t =
|
|
586
|
+
let t = F(i.num ?? i.label);
|
|
578
587
|
n.has(i.container) || r.has(t) || (n.add(i.container), r.add(t), e.push(i));
|
|
579
588
|
}
|
|
580
|
-
return e.sort((e, t) =>
|
|
581
|
-
}, o = r.filter((t) => e(t.element).is("p.assnat9ArticleNum,h1,h2,h3,h4,h5,h6")), s = a([...n], o), c = a([...s], r.filter((e) => !o.includes(e))), l = s.length >= 2 &&
|
|
582
|
-
return t &&
|
|
589
|
+
return e.sort((e, t) => R(i, e.container) - R(i, t.container)), e;
|
|
590
|
+
}, o = r.filter((t) => e(t.element).is("p.assnat9ArticleNum,h1,h2,h3,h4,h5,h6")), s = a([...n], o), c = a([...s], r.filter((e) => !o.includes(e))), l = s.length >= 2 && vt(c).length > vt(s).length ? s : c;
|
|
591
|
+
return t && yt(l), l;
|
|
583
592
|
}
|
|
584
|
-
function
|
|
593
|
+
function xt(e) {
|
|
585
594
|
let t = e.next;
|
|
586
595
|
for (; t !== null;) {
|
|
587
|
-
if (
|
|
596
|
+
if (I(t)) return t;
|
|
588
597
|
t = t.next;
|
|
589
598
|
}
|
|
590
599
|
return null;
|
|
591
600
|
}
|
|
592
|
-
function
|
|
601
|
+
function St(e, t, n) {
|
|
593
602
|
let r = e(t.container);
|
|
594
603
|
if (!r.is("p.assnat9ArticleNum")) return;
|
|
595
604
|
let i = r.parent(), a = i.parent();
|
|
596
605
|
if (!i.is("div") || i.children().length !== 1 || !a.is("div")) return;
|
|
597
606
|
let o = a.children().get();
|
|
598
|
-
if (o.length !== 3 && o.length !== 4 || o[0] !== i.get(0) || o[1]?.tagName !== "span" ||
|
|
607
|
+
if (o.length !== 3 && o.length !== 4 || o[0] !== i.get(0) || o[1]?.tagName !== "span" || N(e(o[1]).text()) !== "") return;
|
|
599
608
|
let s = o.length === 4 ? o[2] : void 0;
|
|
600
|
-
if (s !== void 0 && (s.tagName !== "p" || !e(s).hasClass("assnat9ArticleNum") || !/^\(non modifié\)$/iu.test(
|
|
609
|
+
if (s !== void 0 && (s.tagName !== "p" || !e(s).hasClass("assnat9ArticleNum") || !/^\(non modifié\)$/iu.test(N(e(s).text())))) return;
|
|
601
610
|
let c = o.at(-1);
|
|
602
|
-
if (!(c.tagName !== "div" || n !== void 0 && e.contains(c, n.container) || e(c).find("p.assnat9ArticleNum,h1,h2,h3,h4,h5,h6").toArray().some((t) =>
|
|
611
|
+
if (!(c.tagName !== "div" || n !== void 0 && e.contains(c, n.container) || e(c).find("p.assnat9ArticleNum,h1,h2,h3,h4,h5,h6").toArray().some((t) => C(e(t).text()) !== null))) return [
|
|
603
612
|
t.container,
|
|
604
613
|
...s === void 0 ? [] : [s],
|
|
605
614
|
c
|
|
606
615
|
];
|
|
607
616
|
}
|
|
608
|
-
function
|
|
617
|
+
function Ct(e, t, n, r = L(e)) {
|
|
609
618
|
let i = [t.container], a = n?.container;
|
|
610
|
-
for (let e =
|
|
619
|
+
for (let e = xt(t.container); e !== null && e !== a; e = xt(e)) i.push(e);
|
|
611
620
|
if (i.length > 1) return i;
|
|
612
|
-
let o =
|
|
621
|
+
let o = St(e, t, n);
|
|
613
622
|
if (o !== void 0) return o;
|
|
614
|
-
let s =
|
|
623
|
+
let s = R(r, t.container), c = a ? R(r, a) : -1;
|
|
615
624
|
return e("body > *").get().filter((e) => {
|
|
616
|
-
let t =
|
|
625
|
+
let t = R(r, e);
|
|
617
626
|
return t >= s && (c === -1 || t < c);
|
|
618
627
|
});
|
|
619
628
|
}
|
|
620
|
-
function
|
|
629
|
+
function wt(e, t) {
|
|
621
630
|
let n = [], r = /* @__PURE__ */ new Set();
|
|
622
631
|
for (let i of t) {
|
|
623
632
|
let t = "p,li,table", a = e(i).is(t) ? [i] : e(i).find(t).get();
|
|
624
|
-
for (let t of a) e(t).is("table.akn-pastille-table,p.pastille") ||
|
|
633
|
+
for (let t of a) e(t).is("table.akn-pastille-table,p.pastille") || ot(e, t) || e(t).is("p,li") && e(t).closest("table.akn-quoted-table").length > 0 || r.has(t) || (r.add(t), n.push(t));
|
|
625
634
|
}
|
|
626
635
|
return n;
|
|
627
636
|
}
|
|
628
|
-
function
|
|
637
|
+
function Tt(e, t, n, r) {
|
|
629
638
|
let i = [], a = !1;
|
|
630
|
-
for (let o of
|
|
631
|
-
let n = e(o).is("table.akn-quoted-table") ?
|
|
639
|
+
for (let o of wt(e, n)) {
|
|
640
|
+
let n = e(o).is("table.akn-quoted-table") ? yn(e, o) : N(e(o).text());
|
|
632
641
|
if (o === r?.splitAtBreak?.element && (n = r.splitAtBreak.text), !n) continue;
|
|
633
642
|
Le.test(n) && (a = !0);
|
|
634
|
-
let s = a ? "noise" :
|
|
643
|
+
let s = a ? "noise" : at(n), c = `${t}-b${i.length + 1}`;
|
|
635
644
|
e(o).attr("data-pjl-parsed-article-id", t), e(o).attr("data-pjl-parsed-block-id", c), i.push({
|
|
636
645
|
id: c,
|
|
637
646
|
articleId: t,
|
|
638
647
|
kind: s,
|
|
639
|
-
links:
|
|
648
|
+
links: tt(e, o),
|
|
640
649
|
text: n,
|
|
641
|
-
html:
|
|
650
|
+
html: et(e, o)
|
|
642
651
|
});
|
|
643
652
|
}
|
|
644
653
|
return i;
|
|
645
654
|
}
|
|
646
|
-
function
|
|
655
|
+
function Et(e, t) {
|
|
647
656
|
if (t.length === 0) return e;
|
|
648
657
|
let n = `<div style="display: none;">\n${t.map((e) => `<p class="assnatTOC6"><a href="#${e.id}"><span class="assnatHyperlink" style="font-weight:bold; text-decoration:none; color:#000000">${e.label.toUpperCase()}</span></a></p>`).join("\n")}\n</div>`;
|
|
649
658
|
return e.includes("class=\"assnatSection3\"") ? e.replace(/(<div class="assnatSection3">)/u, `${n}$1`) : e.includes("id=\"formCorrection:panel:1:table\"") ? e.replace(/(<div id="formCorrection:panel:1:table">)/u, `${n}$1`) : `${n}\n${e}`;
|
|
650
659
|
}
|
|
651
|
-
function
|
|
652
|
-
let t =
|
|
653
|
-
for (let e of
|
|
654
|
-
let r =
|
|
660
|
+
function Dt(e) {
|
|
661
|
+
let t = b(e), n = Ot(t);
|
|
662
|
+
for (let e of bt(t, { warn: !1 })) {
|
|
663
|
+
let r = F(e.num ?? e.label.replace(/^Article\s+/iu, "")), i = t(e.element), a = i.attr("id");
|
|
655
664
|
if (a !== r) {
|
|
656
|
-
if (a?.startsWith("_Toc") && !
|
|
665
|
+
if (a?.startsWith("_Toc") && !At(n, a, e.element)) {
|
|
657
666
|
let e = t("<span></span>").attr("id", a);
|
|
658
667
|
i.before(e);
|
|
659
668
|
let r = e.get(0);
|
|
660
|
-
|
|
669
|
+
I(r) && z(n, a, r);
|
|
661
670
|
}
|
|
662
|
-
a &&
|
|
671
|
+
a && kt(n, a, e.element), i.attr("id", r), z(n, r, e.element);
|
|
663
672
|
}
|
|
664
673
|
}
|
|
665
|
-
let r =
|
|
674
|
+
let r = bt(t), i = L(t);
|
|
666
675
|
for (let [e, a] of r.entries()) {
|
|
667
|
-
let o =
|
|
676
|
+
let o = Ct(t, a, r[e + 1], i).flatMap((e) => t(e).is("span.alinea[data-alinea]") ? [e] : t(e).find("span.alinea[data-alinea]").get());
|
|
668
677
|
for (let e of o) {
|
|
669
678
|
let r = t(e).attr("data-alinea")?.trim();
|
|
670
679
|
if (!r) continue;
|
|
671
680
|
let i = `${a.id}-alinea-${r.replace(/\s+/gu, "")}`;
|
|
672
|
-
if (
|
|
681
|
+
if (At(n, i, e)) continue;
|
|
673
682
|
let o = t(e).attr("id");
|
|
674
683
|
if (o && o !== i) {
|
|
675
684
|
let r = t("<span></span>").attr("id", i);
|
|
676
685
|
t(e).before(r);
|
|
677
686
|
let a = r.get(0);
|
|
678
|
-
|
|
679
|
-
} else o &&
|
|
687
|
+
I(a) && z(n, i, a);
|
|
688
|
+
} else o && kt(n, o, e), t(e).attr("id", i), z(n, i, e);
|
|
680
689
|
}
|
|
681
690
|
}
|
|
682
691
|
return t.html();
|
|
683
692
|
}
|
|
684
|
-
function
|
|
693
|
+
function Ot(e) {
|
|
685
694
|
let t = /* @__PURE__ */ new Map();
|
|
686
695
|
for (let n of e("[id]").get()) {
|
|
687
696
|
let r = e(n).attr("id");
|
|
688
|
-
r &&
|
|
697
|
+
r && z(t, r, n);
|
|
689
698
|
}
|
|
690
699
|
return t;
|
|
691
700
|
}
|
|
692
|
-
function
|
|
701
|
+
function z(e, t, n) {
|
|
693
702
|
let r = e.get(t);
|
|
694
703
|
r === void 0 && (r = /* @__PURE__ */ new Set(), e.set(t, r)), r.add(n);
|
|
695
704
|
}
|
|
696
|
-
function
|
|
705
|
+
function kt(e, t, n) {
|
|
697
706
|
let r = e.get(t);
|
|
698
707
|
r !== void 0 && (r.delete(n), r.size === 0 && e.delete(t));
|
|
699
708
|
}
|
|
700
|
-
function
|
|
709
|
+
function At(e, t, n) {
|
|
701
710
|
for (let r of e.get(t) ?? []) if (r !== n) return !0;
|
|
702
711
|
return !1;
|
|
703
712
|
}
|
|
704
|
-
function
|
|
705
|
-
let n =
|
|
713
|
+
function jt(e, t) {
|
|
714
|
+
let n = $e("sourceText" in t ? t.sourceText : "");
|
|
706
715
|
if (n) return e.filter((e) => e.kind === "directive_candidate").find((e) => {
|
|
707
|
-
let t =
|
|
716
|
+
let t = $e(e.text);
|
|
708
717
|
return t.length > 0 && (n.includes(t) || t.includes(n));
|
|
709
718
|
});
|
|
710
719
|
}
|
|
711
|
-
function
|
|
720
|
+
function Mt(e, t) {
|
|
712
721
|
if (t) return t.blockIds.map((t) => e.get(t)).find((e) => e?.kind === "directive_candidate");
|
|
713
722
|
}
|
|
714
|
-
function
|
|
723
|
+
function Nt(e) {
|
|
715
724
|
return e?.links.filter((t) => !t.insideFrenchQuotes && (t.type === "article" || t.type === "division") && t.id !== e.qualifiedVersion?.modifyingArticleId).map((e) => e.id) ?? [];
|
|
716
725
|
}
|
|
717
|
-
function
|
|
718
|
-
|
|
726
|
+
function Pt(e) {
|
|
727
|
+
if (e.kind === "noise") return !1;
|
|
728
|
+
let t = P(e.text.split("«", 1)[0]).replace(/[’]/gu, "'").replace(/[‐‑‒–—]/gu, "-"), n = /^(?:(?:\d+°|[ivxlcdm]+[.)]|[a-z][.)])\s*)?(?:est|sont)\s+(?:ainsi\s+)?(?:abroge|modifie|complete|supprime|remplace|retabli)\w*\b/u.test(t) ? t : t.split(/\b(?:est|sont|il|elle|ils|elles)\b/iu, 1)[0];
|
|
729
|
+
return /(?:\b(?:articles?|livres?|titres?|sous[- ]?titres?|chapitres?|sections?|sous[- ]?sections?|parties?|paragraphes?|sous[- ]?paragraphes?|annexes?|etats?)\s+(?:[lrda]\s*\.?\s*-?\s*\d|\d|[ivxlcdm]+(?:er|re)?(?=\s|$|[.,;:])|(?:premier|premiere|deuxieme|troisieme|quatrieme|cinquieme|sixieme|septieme|huitieme|neuvieme|dixieme)\b)|\b(?:premier|premiere|deuxieme|troisieme|quatrieme|cinquieme|sixieme|septieme|huitieme|neuvieme|dixieme)\s+(?:article|livre|titre|chapitre|section|sous[- ]?section|partie|paragraphe)\b|\b(?:annexes?|etats?)\s+[a-z](?:\s|$))/iu.test(n);
|
|
730
|
+
}
|
|
731
|
+
function Ft(t, n) {
|
|
732
|
+
if (!n || n.articleId !== t.articleId || !/\br[ée]sultent\s+du\s+\d+°/iu.test(t.text)) return;
|
|
733
|
+
let r = (e) => P(e).replace(/[’]/gu, "'").replace(/[‐‑‒–—]/gu, "-"), i = r(t.text).replace(/«[^»]*»/gu, "");
|
|
734
|
+
if (/[«»]/u.test(i)) return;
|
|
735
|
+
let o = /\btels? qu['’]ils resultent du (\d+)°/u.exec(i);
|
|
736
|
+
if (!o || s(new A(i)).some((e) => [...a(e)].some((e) => e.type === "texte" && e.relative === void 0))) return;
|
|
737
|
+
let c = r(n.text);
|
|
738
|
+
if (/^\s*(\d+)°/u.exec(P(n.text))?.[1] !== o[1]) return;
|
|
739
|
+
let l = /\bles articles (.+?) deviennent respectivement les articles ([^;]+);?\s*$/u.exec(c);
|
|
740
|
+
if (!l) return;
|
|
741
|
+
let u = (t) => e(t.trim().replace(/^[lrda](?=[.\s\d])/u, (e) => e.toUpperCase())), d = (e) => {
|
|
742
|
+
let t = e.trim().split(/,\s*|\s+et\s+/u);
|
|
743
|
+
if (t.length === 0 || t.length > 64) return;
|
|
744
|
+
let n = t.map(u);
|
|
745
|
+
if (n.some((e) => e === void 0)) return;
|
|
746
|
+
let r = n;
|
|
747
|
+
return new Set(r).size === r.length ? r : void 0;
|
|
748
|
+
}, f = d(l[1]), p = d(l[2].replace(/;\s*$/u, ""));
|
|
749
|
+
if (!f || !p || f.length !== p.length) return;
|
|
750
|
+
let m = /* @__PURE__ */ new Map();
|
|
751
|
+
for (let e = 0; e < f.length; e++) {
|
|
752
|
+
let t = n.links.filter((t) => t.type === "article" && !t.insideFrenchQuotes && u(r(t.text ?? "")) === f[e]), i = [...new Set(t.map((e) => e.id))];
|
|
753
|
+
if (i.length !== 1 || !i[0]) return;
|
|
754
|
+
m.set(p[e], i[0]);
|
|
755
|
+
}
|
|
756
|
+
let h = [];
|
|
757
|
+
for (let e of i.matchAll(/\baux articles (.+?)(?=,?\s+tels? qu|,\s*la reference|;|$)/gu)) {
|
|
758
|
+
let t = d(e[1]);
|
|
759
|
+
if (!t) return;
|
|
760
|
+
h.push(...t);
|
|
761
|
+
}
|
|
762
|
+
if (!(h.length === 0 || h.some((e) => !m.has(e)))) return [...new Set(h.map((e) => m.get(e)))];
|
|
763
|
+
}
|
|
764
|
+
function It(e) {
|
|
765
|
+
let t = h(e.text);
|
|
719
766
|
if (t.length !== 1) return;
|
|
720
767
|
let n = e.links.filter((e) => e.type === "article" && !e.insideFrenchQuotes), r = n.filter((n) => {
|
|
721
768
|
let r = n.text ?? "", i = e.text.indexOf(r);
|
|
@@ -729,13 +776,13 @@ function Mt(e) {
|
|
|
729
776
|
modifyingArticleLabel: i.text ?? ""
|
|
730
777
|
};
|
|
731
778
|
}
|
|
732
|
-
function
|
|
733
|
-
let n =
|
|
779
|
+
function Lt(e, t) {
|
|
780
|
+
let n = N(e);
|
|
734
781
|
if (!n) return;
|
|
735
|
-
let r =
|
|
782
|
+
let r = fe(n);
|
|
736
783
|
return r ? r.level : n.endsWith(":") ? (t ?? -1) + 1 : void 0;
|
|
737
784
|
}
|
|
738
|
-
function
|
|
785
|
+
function Rt(e) {
|
|
739
786
|
let t = /* @__PURE__ */ new Map(), n = [], r = re(e.map((e) => e.text)), i = -1;
|
|
740
787
|
for (let [a, o] of e.entries()) {
|
|
741
788
|
let e = r.get(a);
|
|
@@ -743,7 +790,7 @@ function Pt(e) {
|
|
|
743
790
|
t.set(o.id, [...n.map((e) => e.block), o]);
|
|
744
791
|
continue;
|
|
745
792
|
}
|
|
746
|
-
let s =
|
|
793
|
+
let s = Lt(o.text, n.at(-1)?.level);
|
|
747
794
|
if (s === void 0) {
|
|
748
795
|
t.set(o.id, [...n.map((e) => e.block), o]);
|
|
749
796
|
continue;
|
|
@@ -756,14 +803,14 @@ function Pt(e) {
|
|
|
756
803
|
}
|
|
757
804
|
return t;
|
|
758
805
|
}
|
|
759
|
-
function
|
|
806
|
+
function zt(e, t) {
|
|
760
807
|
let n = [], r = /* @__PURE__ */ new Set();
|
|
761
808
|
for (let i of [...e ?? [], ...t]) i !== void 0 && (r.has(i.id) || (r.add(i.id), n.push(i)));
|
|
762
809
|
return n;
|
|
763
810
|
}
|
|
764
|
-
function
|
|
811
|
+
function Bt(e, t, n) {
|
|
765
812
|
if (!t) return;
|
|
766
|
-
let r =
|
|
813
|
+
let r = zt(e, t.blockIds.map((e) => n.get(e)).filter((e) => e !== void 0));
|
|
767
814
|
if (r.length === 0) return;
|
|
768
815
|
let i = r.map((e) => e.id);
|
|
769
816
|
if (i.length === t.blockIds.length && i.every((e, n) => e === t.blockIds[n])) return;
|
|
@@ -778,7 +825,7 @@ function It(e, t, n) {
|
|
|
778
825
|
}
|
|
779
826
|
};
|
|
780
827
|
}
|
|
781
|
-
function
|
|
828
|
+
function Vt(e) {
|
|
782
829
|
let t = [], n = 0;
|
|
783
830
|
for (let r of e.blocks) {
|
|
784
831
|
let i = e.directiveText.indexOf(r.text, n);
|
|
@@ -792,7 +839,7 @@ function Lt(e) {
|
|
|
792
839
|
}
|
|
793
840
|
return t;
|
|
794
841
|
}
|
|
795
|
-
function
|
|
842
|
+
function Ht(e, t, n) {
|
|
796
843
|
let { start: r, stop: i } = n.sourcePosition, a = t.filter((e) => e.stop > r && e.start < i);
|
|
797
844
|
if (a.length === 0) return;
|
|
798
845
|
let o = a[0], s = a[a.length - 1], c = o.start, l = s.stop;
|
|
@@ -806,7 +853,7 @@ function Rt(e, t, n) {
|
|
|
806
853
|
}
|
|
807
854
|
};
|
|
808
855
|
}
|
|
809
|
-
function
|
|
856
|
+
function Ut(e, t, n) {
|
|
810
857
|
if (!t) return;
|
|
811
858
|
let r = e.directiveText.indexOf(t.text);
|
|
812
859
|
if (r === -1) return;
|
|
@@ -819,17 +866,92 @@ function zt(e, t, n) {
|
|
|
819
866
|
stop: a
|
|
820
867
|
};
|
|
821
868
|
}
|
|
822
|
-
function
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
869
|
+
function Wt(e, t, n) {
|
|
870
|
+
for (let r of [...t.get(e.id) ?? [e]].reverse()) {
|
|
871
|
+
let e = n.get(r.id);
|
|
872
|
+
if (!n.has(r.id)) {
|
|
873
|
+
let t = r.links.filter((e) => e.type === "text" && !e.insideFrenchQuotes), i = t.length > 0 ? _(r.text) : [], a = [], o = !1;
|
|
874
|
+
for (let e of t) {
|
|
875
|
+
let t = e.text, n = t ? r.text.indexOf(t) : -1;
|
|
876
|
+
if (n < 0 || r.text.indexOf(t, n + 1) !== -1) {
|
|
877
|
+
o = !0;
|
|
878
|
+
break;
|
|
879
|
+
}
|
|
880
|
+
i.some((e) => n <= e.start && e.stop <= n + t.length) || a.push(e.id);
|
|
881
|
+
}
|
|
882
|
+
e = o ? void 0 : [...new Set(a)], n.set(r.id, e);
|
|
883
|
+
}
|
|
884
|
+
if (e === void 0 || e.length > 1) return;
|
|
885
|
+
if (e.length === 1) return e[0];
|
|
828
886
|
}
|
|
829
|
-
|
|
830
|
-
|
|
887
|
+
}
|
|
888
|
+
function B(e, t) {
|
|
889
|
+
return `${e}\0${Be(t)}`;
|
|
890
|
+
}
|
|
891
|
+
function Gt(e) {
|
|
892
|
+
let t = new Map(e.map((e) => [e.id, e])), n = /* @__PURE__ */ new Map();
|
|
893
|
+
return (e, r) => {
|
|
894
|
+
if (r === void 0) return;
|
|
895
|
+
let i = n.get(e);
|
|
896
|
+
if (i === void 0) {
|
|
897
|
+
let r = t.get(e);
|
|
898
|
+
if (r === void 0) return;
|
|
899
|
+
i = {
|
|
900
|
+
blockById: new Map(r.blocks.map((e) => [e.id, e])),
|
|
901
|
+
contextByBlockId: Rt(r.blocks),
|
|
902
|
+
textIdsByBlockId: /* @__PURE__ */ new Map()
|
|
903
|
+
}, n.set(e, i);
|
|
904
|
+
}
|
|
905
|
+
let a = i.blockById.get(r);
|
|
906
|
+
return a === void 0 ? void 0 : Wt(a, i.contextByBlockId, i.textIdsByBlockId);
|
|
907
|
+
};
|
|
908
|
+
}
|
|
909
|
+
function Kt(e, t, n, r, i) {
|
|
910
|
+
let o = /* @__PURE__ */ new Map(), c = new Set(e.blocks.flatMap((e) => {
|
|
911
|
+
if (!e.text.includes("Art.")) return [];
|
|
912
|
+
let t = Wt(e, i, o);
|
|
913
|
+
return t === void 0 ? [] : m(O(e.text).output).map(({ num: e }) => B(t, e));
|
|
914
|
+
}));
|
|
915
|
+
if (c.size === 0) return /* @__PURE__ */ new Map();
|
|
916
|
+
let l = new Set([...c].map((e) => e.slice(e.indexOf("\0") + 1))), u = t.flatMap((t) => {
|
|
917
|
+
if (Ke(t.reference)) return [];
|
|
918
|
+
let s = new Set([...a(t.reference)].filter((e) => e.type === "article" && e.num).map((e) => e.num));
|
|
919
|
+
if (![...s].some((e) => l.has(Be(e)))) return [];
|
|
920
|
+
let c = Mt(n, Ht(e, r, t)) ?? jt(e.blocks, t);
|
|
921
|
+
if (!c) return [];
|
|
922
|
+
let u = Wt(c, i, o);
|
|
923
|
+
return u === void 0 ? [] : [{
|
|
924
|
+
block: c,
|
|
925
|
+
directive: t,
|
|
926
|
+
nums: s,
|
|
927
|
+
textId: u
|
|
928
|
+
}];
|
|
929
|
+
});
|
|
930
|
+
if (u.length === 0) return /* @__PURE__ */ new Map();
|
|
931
|
+
let d = new Set(u.flatMap(({ nums: e, textId: t }) => [...e].map((e) => B(t, e))));
|
|
932
|
+
if (![...d].some((e) => c.has(e))) return /* @__PURE__ */ new Map();
|
|
933
|
+
let f = new Set(t.flatMap((t) => {
|
|
934
|
+
let a = We(t);
|
|
935
|
+
if (a.length === 0) return [];
|
|
936
|
+
let s = Mt(n, Ht(e, r, t)) ?? jt(e.blocks, t);
|
|
937
|
+
if (!s) return [];
|
|
938
|
+
let c = Wt(s, i, o);
|
|
939
|
+
return c === void 0 ? [] : a.map(({ num: e }) => B(c, e)).filter((e) => d.has(e));
|
|
940
|
+
})), p = /* @__PURE__ */ new Map();
|
|
941
|
+
for (let { block: e, directive: t, nums: n, textId: r } of u) {
|
|
942
|
+
if (![...n].some((e) => c.has(B(r, e)))) continue;
|
|
943
|
+
let i = new Set(s(new A(O(t.sourceText).output)).flatMap((e) => [...a(e)].filter((e) => e.type === "article" && e.num).map((e) => e.num))), o = [...n].filter((e) => c.has(B(r, e)) && !f.has(B(r, e)) && [...i].some((t) => Be(t) === Be(e)));
|
|
944
|
+
o.length > 0 && p.set(e.id, [...new Set([...p.get(e.id) ?? [], ...o])]);
|
|
945
|
+
}
|
|
946
|
+
return p;
|
|
947
|
+
}
|
|
948
|
+
function qt(e, t) {
|
|
949
|
+
let n = performance.now(), r = performance.now(), i = Vt(e), a = performance.now() - r, o = performance.now(), s = new Map(e.blocks.map((e) => [e.id, e])), c = Rt(e.blocks);
|
|
950
|
+
for (let t of e.blocks) t.qualifiedVersion = It(t);
|
|
951
|
+
let l = performance.now() - o, u = performance.now(), d = ee(), f = e.blocks[0], p = e.title !== void 0 && f?.text.startsWith(`${e.label}\n`) && (e.directiveText === f.text || e.directiveText.startsWith(`${f.text}\n`)), m = p && e.text.startsWith(`${e.label} ${e.title}`) ? " " : "", h = pe(p ? `${e.label}${m}${e.title}${e.directiveText.slice(f.text.length)}` : e.directiveText, t === void 0 ? void 0 : d);
|
|
952
|
+
if (p && !m) {
|
|
831
953
|
let t = e.label.length;
|
|
832
|
-
|
|
954
|
+
h = h.map((e) => ({
|
|
833
955
|
...e,
|
|
834
956
|
sourcePosition: {
|
|
835
957
|
start: e.sourcePosition.start > t ? e.sourcePosition.start + 1 : e.sourcePosition.start,
|
|
@@ -837,39 +959,46 @@ function Bt(e, t) {
|
|
|
837
959
|
}
|
|
838
960
|
}));
|
|
839
961
|
}
|
|
840
|
-
let
|
|
841
|
-
|
|
962
|
+
let g = performance.now() - u, _ = performance.now(), v = Kt(e, h, s, i, c), y = /* @__PURE__ */ new Map(), b = /* @__PURE__ */ new Map(), x = [], S, C;
|
|
963
|
+
for (let t of e.blocks) {
|
|
964
|
+
let e = Nt(t), n = e.length === 0 ? Ft(t, C) : void 0;
|
|
965
|
+
(e.length > 0 || n !== void 0 || t.qualifiedVersion || v.has(t.id) || Pt(t)) && (x = v.has(t.id) ? [] : n ?? e, S = t.qualifiedVersion), y.set(t.id, x), b.set(t.id, S), C = t;
|
|
966
|
+
}
|
|
967
|
+
l += performance.now() - _;
|
|
968
|
+
let te = performance.now(), ne = h.map((t) => {
|
|
969
|
+
let n = Ht(e, i, t), r = Mt(s, n) ?? jt(e.blocks, t), a = Nt(r), o = r?.id !== void 0 && v.has(r.id) ? [] : a.length > 0 ? a : r?.id === void 0 ? [] : y.get(r.id) ?? [], l = Ut(e, r, t), u = Bt(r?.id === void 0 ? void 0 : c.get(r.id), n, s);
|
|
842
970
|
return {
|
|
843
971
|
articleId: e.id,
|
|
844
972
|
blockId: r?.id,
|
|
845
|
-
...
|
|
973
|
+
...l === void 0 ? {} : { sourceBlockPosition: l },
|
|
846
974
|
...n === void 0 ? {} : {
|
|
847
975
|
sourceBlockIds: n.blockIds,
|
|
848
976
|
sourceBlockText: n.text,
|
|
849
977
|
sourceBlockHtml: n.html,
|
|
850
978
|
sourceBlockPosition: n.position
|
|
851
979
|
},
|
|
852
|
-
...
|
|
853
|
-
sourceContextBlockIds:
|
|
854
|
-
sourceContextPosition:
|
|
980
|
+
...u === void 0 ? {} : {
|
|
981
|
+
sourceContextBlockIds: u.blockIds,
|
|
982
|
+
sourceContextPosition: u.position
|
|
855
983
|
},
|
|
856
984
|
directive: t,
|
|
857
|
-
...
|
|
858
|
-
...r?.id !== void 0 &&
|
|
985
|
+
...r?.id !== void 0 && v.has(r.id) ? { internallyCreatedTargetNums: v.get(r.id) } : {},
|
|
986
|
+
...o.length > 0 || r?.id !== void 0 && v.has(r.id) ? { targetIds: o } : {},
|
|
987
|
+
...r?.id !== void 0 && b.get(r.id) ? { qualifiedVersion: b.get(r.id) } : {}
|
|
859
988
|
};
|
|
860
|
-
}),
|
|
989
|
+
}), re = /* @__PURE__ */ new Set(), ie = /* @__PURE__ */ new Map(), ae = ne.flatMap((e) => {
|
|
861
990
|
let t = e.blockId ? s.get(e.blockId) : void 0;
|
|
862
|
-
if (!t) return [e];
|
|
863
|
-
if (
|
|
864
|
-
let n =
|
|
865
|
-
if (n === void 0 && (n =
|
|
866
|
-
let n = e.directive, r = e.targetIds?.length === 1 && n.kind === "compound" ?
|
|
991
|
+
if (!t || e.internallyCreatedTargetNums?.length) return [e];
|
|
992
|
+
if (re.has(t.id)) return [];
|
|
993
|
+
let n = ie.get(t.id);
|
|
994
|
+
if (n === void 0 && (n = Ie(t.text, Nt(t), e.directive), ie.set(t.id, n)), !n) {
|
|
995
|
+
let n = e.directive, r = e.targetIds?.length === 1 && n.kind === "compound" ? Fe(t.text, n.operations.length) : null;
|
|
867
996
|
return [r ? {
|
|
868
997
|
...e,
|
|
869
998
|
sourceAnnotations: r
|
|
870
999
|
} : e];
|
|
871
1000
|
}
|
|
872
|
-
return
|
|
1001
|
+
return re.add(t.id), [{
|
|
873
1002
|
...e,
|
|
874
1003
|
effects: n.map((t) => ({
|
|
875
1004
|
...t,
|
|
@@ -880,69 +1009,84 @@ function Bt(e, t) {
|
|
|
880
1009
|
}
|
|
881
1010
|
}))
|
|
882
1011
|
}];
|
|
883
|
-
}),
|
|
1012
|
+
}), oe = performance.now() - te;
|
|
884
1013
|
return t?.push({
|
|
885
|
-
actionDirectiveExtraction:
|
|
1014
|
+
actionDirectiveExtraction: d,
|
|
886
1015
|
articleId: e.id,
|
|
887
1016
|
blockCount: e.blocks.length,
|
|
888
1017
|
buildRangesMs: Math.round(a * 10) / 10,
|
|
889
|
-
directiveCount:
|
|
1018
|
+
directiveCount: ae.length,
|
|
890
1019
|
directiveTextSize: e.directiveText.length,
|
|
891
|
-
extractActionDirectivesMs: Math.round(
|
|
892
|
-
mapDirectivesMs: Math.round(
|
|
893
|
-
prepareBlockIndexesMs: Math.round(
|
|
1020
|
+
extractActionDirectivesMs: Math.round(g * 10) / 10,
|
|
1021
|
+
mapDirectivesMs: Math.round(oe * 10) / 10,
|
|
1022
|
+
prepareBlockIndexesMs: Math.round(l * 10) / 10,
|
|
894
1023
|
totalMs: Math.round((performance.now() - n) * 10) / 10
|
|
895
|
-
}),
|
|
1024
|
+
}), ae;
|
|
896
1025
|
}
|
|
897
|
-
function
|
|
898
|
-
let
|
|
899
|
-
for (let
|
|
900
|
-
let e = We(
|
|
1026
|
+
function Jt(e, t) {
|
|
1027
|
+
let n = /* @__PURE__ */ new Map(), r = [], i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Map();
|
|
1028
|
+
for (let o of e) {
|
|
1029
|
+
let e = We(o.directive);
|
|
901
1030
|
if (e.length === 0) continue;
|
|
902
|
-
let
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
1031
|
+
let s = t(o.articleId, o.blockId), c = e.map(({ num: e }) => {
|
|
1032
|
+
let t = s === void 0 ? void 0 : `${o.articleId}\0${B(s, e)}`, n = t === void 0 ? void 0 : a.get(t);
|
|
1033
|
+
if (n !== void 0) return n;
|
|
1034
|
+
let r = `${o.articleId}:article:${Ve(e)}`, c = r;
|
|
1035
|
+
if (i.has(c)) {
|
|
1036
|
+
let e = s ?? o.blockId ?? "unknown";
|
|
1037
|
+
c = `${r}:text:${e}`;
|
|
1038
|
+
for (let t = 2; i.has(c); t++) c = `${r}:text:${e}:${t}`;
|
|
1039
|
+
}
|
|
1040
|
+
let l = {
|
|
1041
|
+
definitionId: c,
|
|
1042
|
+
num: e
|
|
1043
|
+
};
|
|
1044
|
+
return t !== void 0 && a.set(t, l), l;
|
|
1045
|
+
});
|
|
1046
|
+
n.set(o, c);
|
|
1047
|
+
for (let [t, n] of e.entries()) {
|
|
1048
|
+
let e = c[t];
|
|
1049
|
+
e === void 0 || i.has(e.definitionId) || (i.add(e.definitionId), r.push({
|
|
910
1050
|
...e,
|
|
911
|
-
articleId:
|
|
912
|
-
blockId:
|
|
913
|
-
html:
|
|
914
|
-
...
|
|
915
|
-
...
|
|
916
|
-
...
|
|
917
|
-
text:
|
|
1051
|
+
articleId: o.articleId,
|
|
1052
|
+
blockId: o.blockId,
|
|
1053
|
+
html: n.text,
|
|
1054
|
+
...o.targetIds === void 0 ? {} : { parentTargetIds: o.targetIds },
|
|
1055
|
+
...o.sourceBlockHtml === void 0 ? {} : { sourceBlockHtml: o.sourceBlockHtml },
|
|
1056
|
+
...o.sourceBlockText === void 0 ? {} : { sourceBlockText: o.sourceBlockText },
|
|
1057
|
+
text: n.text
|
|
918
1058
|
}));
|
|
919
1059
|
}
|
|
920
1060
|
}
|
|
921
1061
|
return {
|
|
922
|
-
createdArticlesByDirective:
|
|
923
|
-
definitions:
|
|
1062
|
+
createdArticlesByDirective: n,
|
|
1063
|
+
definitions: r
|
|
924
1064
|
};
|
|
925
1065
|
}
|
|
926
|
-
function
|
|
927
|
-
|
|
1066
|
+
function Yt(e, t, n, r) {
|
|
1067
|
+
if (t.length === 0) return e;
|
|
1068
|
+
let i = new Map(t.flatMap((e) => {
|
|
1069
|
+
let t = r(e.articleId, e.blockId);
|
|
1070
|
+
return t === void 0 ? [] : [[B(t, e.num), e]];
|
|
1071
|
+
}));
|
|
928
1072
|
return e.map((e) => {
|
|
929
|
-
let t = n.get(e),
|
|
930
|
-
definitionId:
|
|
931
|
-
num:
|
|
932
|
-
},
|
|
1073
|
+
let t = n.get(e), a = t?.[0], o = r(e.articleId, e.blockId), s = (o === void 0 ? [] : [...Ge(e.directive.reference)].map((e) => i.get(B(o, e))).filter((e) => e !== void 0 && e.definitionId !== a?.definitionId))[0], c = s === void 0 ? void 0 : {
|
|
1074
|
+
definitionId: s.definitionId,
|
|
1075
|
+
num: s.num
|
|
1076
|
+
}, l = qe(e.directive), u = (e.targetIds?.length ?? 0) > 0;
|
|
933
1077
|
return {
|
|
934
1078
|
...e,
|
|
935
|
-
...
|
|
1079
|
+
...a === void 0 ? {} : { createdArticle: a },
|
|
936
1080
|
...t !== void 0 && t.length > 0 ? { createdArticles: t } : {},
|
|
937
|
-
...
|
|
938
|
-
...
|
|
939
|
-
resolution:
|
|
1081
|
+
...c !== void 0 && (l || !u) ? { internalTarget: {
|
|
1082
|
+
...c,
|
|
1083
|
+
resolution: l ? "explicit" : "fallback"
|
|
940
1084
|
} } : {},
|
|
941
|
-
...
|
|
1085
|
+
...c !== void 0 && u && !l ? { internalTargetAmbiguity: c } : {}
|
|
942
1086
|
};
|
|
943
1087
|
});
|
|
944
1088
|
}
|
|
945
|
-
function
|
|
1089
|
+
function Xt(e) {
|
|
946
1090
|
switch (e.kind) {
|
|
947
1091
|
case "insert_after":
|
|
948
1092
|
case "insert_before": return [e.insertText];
|
|
@@ -960,8 +1104,8 @@ function Ut(e) {
|
|
|
960
1104
|
default: return [];
|
|
961
1105
|
}
|
|
962
1106
|
}
|
|
963
|
-
function
|
|
964
|
-
return e.flatMap((e) =>
|
|
1107
|
+
function Zt(e) {
|
|
1108
|
+
return e.flatMap((e) => Xt(e.directive).filter((e) => /[«»]/u.test(e)).map((t) => ({
|
|
965
1109
|
code: "nested_french_quote_in_redaction",
|
|
966
1110
|
message: "Écart à la règle légistique détecté : une citation imbriquée dans une rédaction devrait utiliser des guillemets anglais et non des guillemets français.",
|
|
967
1111
|
details: {
|
|
@@ -973,18 +1117,18 @@ function Wt(e) {
|
|
|
973
1117
|
}
|
|
974
1118
|
})));
|
|
975
1119
|
}
|
|
976
|
-
function
|
|
977
|
-
return
|
|
1120
|
+
function Qt(e) {
|
|
1121
|
+
return Xt(e).map((t) => ({
|
|
978
1122
|
directiveKind: e.kind,
|
|
979
1123
|
text: t
|
|
980
1124
|
}));
|
|
981
1125
|
}
|
|
982
|
-
function
|
|
1126
|
+
function $t(e) {
|
|
983
1127
|
let t = /* @__PURE__ */ new Set();
|
|
984
1128
|
for (let n of e.matchAll(/«[^«»\n]+»/gu)) t.add(n[0]);
|
|
985
1129
|
return Array.from(t);
|
|
986
1130
|
}
|
|
987
|
-
function
|
|
1131
|
+
function en(e, t) {
|
|
988
1132
|
let n = new Map(e.blocks.map((e) => [e.id, e])), r = t.sourceBlockIds ?? e.blocks.map((e) => e.id), i = [], a = 0;
|
|
989
1133
|
for (let e of r) {
|
|
990
1134
|
let t = n.get(e);
|
|
@@ -996,11 +1140,11 @@ function qt(e, t) {
|
|
|
996
1140
|
}
|
|
997
1141
|
return i;
|
|
998
1142
|
}
|
|
999
|
-
function
|
|
1143
|
+
function tn(e, t, n) {
|
|
1000
1144
|
return e.find((e) => t >= e.start && n <= e.stop);
|
|
1001
1145
|
}
|
|
1002
|
-
function
|
|
1003
|
-
let r =
|
|
1146
|
+
function nn(e, t, n) {
|
|
1147
|
+
let r = $t(n), i = r.flatMap((t) => {
|
|
1004
1148
|
for (let n of e.blocks) {
|
|
1005
1149
|
let e = n.text.indexOf(t);
|
|
1006
1150
|
if (e !== -1) return [{
|
|
@@ -1019,7 +1163,7 @@ function Yt(e, t, n) {
|
|
|
1019
1163
|
e.directiveText
|
|
1020
1164
|
].filter((e) => e !== void 0 && e.length > 0), o = a.find((e) => r.some((t) => e.includes(t))) ?? a[0];
|
|
1021
1165
|
if (!o) return [];
|
|
1022
|
-
let s =
|
|
1166
|
+
let s = en(e, t);
|
|
1023
1167
|
if (s.length === 0) return [];
|
|
1024
1168
|
let c = [], l = 0;
|
|
1025
1169
|
for (let e of r) {
|
|
@@ -1027,7 +1171,7 @@ function Yt(e, t, n) {
|
|
|
1027
1171
|
if (t === -1) continue;
|
|
1028
1172
|
let n = t + e.length;
|
|
1029
1173
|
l = n;
|
|
1030
|
-
let r =
|
|
1174
|
+
let r = tn(s, t, n);
|
|
1031
1175
|
r && c.push({
|
|
1032
1176
|
blockId: r.block.id,
|
|
1033
1177
|
start: t - r.start,
|
|
@@ -1037,15 +1181,15 @@ function Yt(e, t, n) {
|
|
|
1037
1181
|
}
|
|
1038
1182
|
return c;
|
|
1039
1183
|
}
|
|
1040
|
-
function
|
|
1184
|
+
function rn(e, t) {
|
|
1041
1185
|
let n = new Map(e.map((e) => [e.id, e]));
|
|
1042
1186
|
return t.flatMap((e) => {
|
|
1043
1187
|
let t = n.get(e.articleId);
|
|
1044
|
-
return t ?
|
|
1188
|
+
return t ? Qt(e.directive).filter(({ text: e }) => /[«»]/u.test(e)).map(({ directiveKind: n, text: r }) => ({
|
|
1045
1189
|
articleId: e.articleId,
|
|
1046
1190
|
code: "nested_french_quote_in_redaction",
|
|
1047
1191
|
message: "Écart à la règle légistique détecté : une citation imbriquée dans une rédaction devrait utiliser des guillemets anglais et non des guillemets français.",
|
|
1048
|
-
ranges:
|
|
1192
|
+
ranges: nn(t, e, r),
|
|
1049
1193
|
severity: "warning",
|
|
1050
1194
|
details: {
|
|
1051
1195
|
blockId: e.blockId,
|
|
@@ -1056,7 +1200,7 @@ function Xt(e, t) {
|
|
|
1056
1200
|
})) : [];
|
|
1057
1201
|
});
|
|
1058
1202
|
}
|
|
1059
|
-
function
|
|
1203
|
+
function an(e, t) {
|
|
1060
1204
|
let n = new Map(e.flatMap((e) => [...re(e.blocks.map((e) => e.text))].map(([t, n]) => [e.blocks[t].id, {
|
|
1061
1205
|
articleId: e.id,
|
|
1062
1206
|
blockIds: e.blocks.slice(t - 1, n.endIndex + 1).map((e) => e.id),
|
|
@@ -1079,13 +1223,35 @@ function Zt(e, t) {
|
|
|
1079
1223
|
}];
|
|
1080
1224
|
});
|
|
1081
1225
|
}
|
|
1082
|
-
function
|
|
1083
|
-
let
|
|
1226
|
+
function on(e, t) {
|
|
1227
|
+
let n = new Map(e.flatMap((e) => e.blocks.map((e) => [e.id, e]))), r = /* @__PURE__ */ new Set();
|
|
1228
|
+
return t.flatMap((e) => {
|
|
1229
|
+
let t = e.blockId, i = e.internallyCreatedTargetNums;
|
|
1230
|
+
if (!t || !i?.length || r.has(t)) return [];
|
|
1231
|
+
r.add(t);
|
|
1232
|
+
let a = n.get(t);
|
|
1233
|
+
return a?.text ? [{
|
|
1234
|
+
articleId: e.articleId,
|
|
1235
|
+
code: "bill_created_article_target_unprojectable",
|
|
1236
|
+
details: { articleNums: i },
|
|
1237
|
+
message: "La directive vise un article créé par ce texte ; sa projection n'est pas encore disponible.",
|
|
1238
|
+
ranges: [{
|
|
1239
|
+
blockId: t,
|
|
1240
|
+
start: 0,
|
|
1241
|
+
stop: a.text.length,
|
|
1242
|
+
text: a.text
|
|
1243
|
+
}],
|
|
1244
|
+
severity: "warning"
|
|
1245
|
+
}] : [];
|
|
1246
|
+
});
|
|
1247
|
+
}
|
|
1248
|
+
function sn(e, t, n, r, i, a, o = !0, s) {
|
|
1249
|
+
let c = new ye("parsedBill.buildParsedDocument"), l = i.reduce((e, t) => e + t.blocks.length, 0), u = c.timeSync("buildDirectiveText", () => i.map((e) => e.directiveText).filter(Boolean).join("\n")), d = {
|
|
1084
1250
|
sourceFormat: e,
|
|
1085
1251
|
documentDate: r,
|
|
1086
1252
|
html: t,
|
|
1087
1253
|
htmlWithLinks: n,
|
|
1088
|
-
tableOfContents: a ?? c.timeSync("extractTableOfContents", () =>
|
|
1254
|
+
tableOfContents: a ?? c.timeSync("extractTableOfContents", () => y(u), { inputSize: u.length }),
|
|
1089
1255
|
articles: i
|
|
1090
1256
|
};
|
|
1091
1257
|
if (!o) {
|
|
@@ -1101,29 +1267,33 @@ function Qt(e, t, n, r, i, a, o = !0, s) {
|
|
|
1101
1267
|
directiveTextSize: u.length
|
|
1102
1268
|
}), e;
|
|
1103
1269
|
}
|
|
1104
|
-
let f = c.timeSync("extractGlobalApplicabilityDate", () =>
|
|
1270
|
+
let f = c.timeSync("extractGlobalApplicabilityDate", () => Qe(i.map((e) => e.text).join("\n"))), p = [], m = c.timeSync("extractDirectivesFromArticles", () => {
|
|
1105
1271
|
let e = [];
|
|
1106
1272
|
for (let t of i) {
|
|
1107
|
-
let n =
|
|
1273
|
+
let n = qt(t, c.enabled ? p : void 0);
|
|
1108
1274
|
e.push(...n);
|
|
1109
1275
|
}
|
|
1110
1276
|
return e;
|
|
1111
|
-
}, { count: i.length }), { createdArticlesByDirective:
|
|
1277
|
+
}, { count: i.length }), h = Gt(i), { createdArticlesByDirective: g, definitions: _ } = c.timeSync("buildInternalArticleDefinitions", () => Jt(m, h), { count: m.length }), v = c.timeSync("attachInternalArticleMetadata", () => Yt(m, _, g, h), { count: m.length }), b = c.timeSync("collectNestedFrenchQuoteDiagnostics", () => Zt(v), { count: v.length }), x = [...s ?? [], ...b], ee = c.timeSync("collectNestedFrenchQuoteAnnotations", () => [
|
|
1278
|
+
...rn(i, v),
|
|
1279
|
+
...an(i, v),
|
|
1280
|
+
...on(i, v)
|
|
1281
|
+
], { count: v.length }), S = {
|
|
1112
1282
|
...d,
|
|
1113
1283
|
...f ? { globalApplicabilityDate: f } : {},
|
|
1114
|
-
...
|
|
1115
|
-
directives:
|
|
1116
|
-
...
|
|
1117
|
-
...
|
|
1284
|
+
..._.length > 0 ? { internalArticleDefinitions: _ } : {},
|
|
1285
|
+
directives: v,
|
|
1286
|
+
...ee.length > 0 ? { annotations: ee } : {},
|
|
1287
|
+
...x.length > 0 ? { diagnostics: x } : {}
|
|
1118
1288
|
};
|
|
1119
1289
|
return c.log({
|
|
1120
|
-
annotationCount:
|
|
1290
|
+
annotationCount: ee.length,
|
|
1121
1291
|
articleCount: i.length,
|
|
1122
1292
|
blockCount: l,
|
|
1123
|
-
definitionCount:
|
|
1124
|
-
diagnosticCount:
|
|
1293
|
+
definitionCount: _.length,
|
|
1294
|
+
diagnosticCount: x.length,
|
|
1125
1295
|
directiveAnalysisIncluded: !0,
|
|
1126
|
-
directiveCount:
|
|
1296
|
+
directiveCount: v.length,
|
|
1127
1297
|
actionDirectiveExtractionTotals: p.reduce((e, t) => ({
|
|
1128
1298
|
applyApplicabilityDatesMs: e.applyApplicabilityDatesMs + t.actionDirectiveExtraction.applyApplicabilityDatesMs,
|
|
1129
1299
|
buildListItemTreeMs: e.buildListItemTreeMs + t.actionDirectiveExtraction.buildListItemTreeMs,
|
|
@@ -1200,20 +1370,20 @@ function Qt(e, t, n, r, i, a, o = !0, s) {
|
|
|
1200
1370
|
}),
|
|
1201
1371
|
directiveTextSize: u.length,
|
|
1202
1372
|
slowDirectiveArticles: p.toSorted((e, t) => t.totalMs - e.totalMs).slice(0, 10)
|
|
1203
|
-
}),
|
|
1373
|
+
}), S;
|
|
1204
1374
|
}
|
|
1205
|
-
function
|
|
1375
|
+
function cn(e) {
|
|
1206
1376
|
return { items: e.map((e) => ({
|
|
1207
1377
|
id: e.id,
|
|
1208
1378
|
line: e.title ? `${e.label} : ${e.title}` : e.label,
|
|
1209
1379
|
type: "article"
|
|
1210
1380
|
})) };
|
|
1211
1381
|
}
|
|
1212
|
-
function
|
|
1213
|
-
return Array.from(
|
|
1382
|
+
function ln(e) {
|
|
1383
|
+
return Array.from(de(e)).filter((e) => e.type === "article").map((e) => P(e.line.split(/[::]/u)[0]));
|
|
1214
1384
|
}
|
|
1215
|
-
function
|
|
1216
|
-
let i =
|
|
1385
|
+
function un(e, t, n, r) {
|
|
1386
|
+
let i = vt(e), a = new Set(Array.from(n.matchAll(/\s+id=(?:"([^"]+)"|'([^']+)')/gu), (e) => e[1] ?? e[2])), o = Array.from(de(t)).filter((e) => e.type === "article"), s = e.map((e) => r === "akoma-ntoso" ? e.num ? F(e.num) : b(e.html)("p.TCNumArticle").first().attr("id") ?? F(e.label) : e.id), c = o.map((e) => e.id);
|
|
1217
1387
|
(c.length !== s.length || c.some((e, t) => e !== s[t])) && i.push({
|
|
1218
1388
|
code: "article_toc_source_heading_mismatch",
|
|
1219
1389
|
message: "The table of contents differs from the parsed article headings",
|
|
@@ -1229,8 +1399,8 @@ function tn(e, t, n, r) {
|
|
|
1229
1399
|
});
|
|
1230
1400
|
return i;
|
|
1231
1401
|
}
|
|
1232
|
-
function
|
|
1233
|
-
let r =
|
|
1402
|
+
function dn(e, t, n) {
|
|
1403
|
+
let r = ln(y(e.map((e) => e.directiveText).filter(Boolean).join("\n"))), i = e.map((e) => P(e.label)), a = cn(e), o = [...n, ...un(e, a, t, "assemblee-html")];
|
|
1234
1404
|
if (r.length > 0 && (r.length !== i.length || r.some((e, t) => e !== i[t]))) {
|
|
1235
1405
|
let t = r.findIndex((e, t) => e !== i[t]);
|
|
1236
1406
|
o.push({
|
|
@@ -1254,24 +1424,24 @@ function nn(e, t, n) {
|
|
|
1254
1424
|
tableOfContents: a
|
|
1255
1425
|
};
|
|
1256
1426
|
}
|
|
1257
|
-
async function
|
|
1258
|
-
let n = new
|
|
1427
|
+
async function fn(e, t) {
|
|
1428
|
+
let n = new ye("parseAssembleeBillRaw"), r = t.linkedHtml === void 0 ? await n.time("linkAssembleeBillRaw", () => pn(e, t)) : void 0, i = n.timeSync("applyArticleAnchorIds", () => Dt(t.linkedHtml ?? r.linkedHtml), { inputSize: e.length }), a = n.timeSync("cheerioLoadLinkedHtml", () => b(i)), o = n.timeSync("extractArticleHeadings", () => bt(a)), s = new Set(o.map((e) => e.id)), c = mt(a).filter((e) => !s.has(F(e.num ?? e.label))).map((e) => e.label), l = c.length > 0 ? [{
|
|
1259
1429
|
code: "article_toc_source_heading_mismatch",
|
|
1260
1430
|
message: "Some structural article headings were not retained",
|
|
1261
1431
|
details: { discardedCandidates: c }
|
|
1262
|
-
}] : [], u =
|
|
1263
|
-
let n =
|
|
1432
|
+
}] : [], u = L(a), d = n.timeSync("extractArticlesAndBlocks", () => o.map((e, t) => {
|
|
1433
|
+
let n = Ct(a, e, o[t + 1], u), r = Tt(a, e.id, n, e), i = r.filter((e) => e.kind !== "noise").map((e) => e.text).join("\n");
|
|
1264
1434
|
return {
|
|
1265
1435
|
id: e.id,
|
|
1266
1436
|
label: e.label,
|
|
1267
1437
|
num: e.num,
|
|
1268
1438
|
title: e.title,
|
|
1269
|
-
text:
|
|
1270
|
-
html: n.map((e) =>
|
|
1439
|
+
text: it(a, n),
|
|
1440
|
+
html: n.map((e) => et(a, e)).join("\n"),
|
|
1271
1441
|
directiveText: i,
|
|
1272
1442
|
blocks: r
|
|
1273
1443
|
};
|
|
1274
|
-
}), { count: o.length }), f = n.timeSync("injectHiddenArticleSummary", () =>
|
|
1444
|
+
}), { count: o.length }), f = n.timeSync("injectHiddenArticleSummary", () => Et(a.html(), d)), { diagnostics: p, tableOfContents: m } = n.timeSync("buildAssembleeTableOfContents", () => dn(d, f, l), { count: d.length }), h = n.timeSync("buildParsedDocument", () => sn("assemblee-html", e, f, t.date, d, m, t.includeDirectiveAnalysis, p));
|
|
1275
1445
|
return h.diagnostics?.length && process.env.TISSEUSE_WARN_PARSED_BILL_DIAGNOSTICS === "1" && console.warn("Assemblée bill parsing diagnostics", h.diagnostics), n.log({
|
|
1276
1446
|
articleCount: h.articles.length,
|
|
1277
1447
|
blockCount: h.articles.reduce((e, t) => e + t.blocks.length, 0),
|
|
@@ -1279,18 +1449,18 @@ async function rn(e, t) {
|
|
|
1279
1449
|
targetDirectiveCount: h.directives.filter((e) => e.targetIds !== void 0).length
|
|
1280
1450
|
}), h;
|
|
1281
1451
|
}
|
|
1282
|
-
async function
|
|
1452
|
+
async function pn(e, t) {
|
|
1283
1453
|
return {
|
|
1284
1454
|
sourceFormat: "assemblee-html",
|
|
1285
1455
|
documentDate: t.date,
|
|
1286
1456
|
html: e,
|
|
1287
|
-
linkedHtml: await
|
|
1457
|
+
linkedHtml: await ct(e, t, t.date, st(e))
|
|
1288
1458
|
};
|
|
1289
1459
|
}
|
|
1290
1460
|
function V(e) {
|
|
1291
1461
|
return e.replace(/&/gu, "&").replace(/</gu, "<").replace(/>/gu, ">").replace(/"/gu, """);
|
|
1292
1462
|
}
|
|
1293
|
-
function
|
|
1463
|
+
function mn(e) {
|
|
1294
1464
|
let t = e;
|
|
1295
1465
|
for (let e = 0; e < 3; e++) {
|
|
1296
1466
|
let e = t;
|
|
@@ -1298,33 +1468,33 @@ function on(e) {
|
|
|
1298
1468
|
}
|
|
1299
1469
|
return t;
|
|
1300
1470
|
}
|
|
1301
|
-
function
|
|
1471
|
+
function hn(e) {
|
|
1302
1472
|
return /(?:<|&lt;)\/?(?:p|br|span|b|i|u|sup|sub|table|thead|tbody|tr|th|td|ul|ol|li)\b/iu.test(e);
|
|
1303
1473
|
}
|
|
1304
1474
|
function H(e) {
|
|
1305
1475
|
return e.name.replace(/^.*:/u, "");
|
|
1306
1476
|
}
|
|
1307
|
-
function
|
|
1477
|
+
function gn(e, t) {
|
|
1308
1478
|
return t.children.map((t) => U(e, t)).filter(Boolean).join("");
|
|
1309
1479
|
}
|
|
1310
|
-
function
|
|
1311
|
-
return t.children.map((t) => t.type === "text" &&
|
|
1480
|
+
function _n(e, t) {
|
|
1481
|
+
return t.children.map((t) => t.type === "text" && hn(t.data) ? mn(t.data) : U(e, t)).filter(Boolean).join("");
|
|
1312
1482
|
}
|
|
1313
1483
|
function U(e, t) {
|
|
1314
1484
|
if (t.type === "text") {
|
|
1315
1485
|
let e = t.data.replace(/\s+\./gu, ".");
|
|
1316
|
-
return
|
|
1486
|
+
return hn(e) ? mn(e) : V(e);
|
|
1317
1487
|
}
|
|
1318
|
-
if (!
|
|
1319
|
-
let n = H(t), r =
|
|
1488
|
+
if (!I(t)) return "";
|
|
1489
|
+
let n = H(t), r = () => gn(e, t);
|
|
1320
1490
|
switch (n) {
|
|
1321
|
-
case "p": return `<p${
|
|
1491
|
+
case "p": return `<p${bn(e, t, [
|
|
1322
1492
|
"id",
|
|
1323
1493
|
"class",
|
|
1324
1494
|
"align",
|
|
1325
1495
|
"valign",
|
|
1326
1496
|
"style"
|
|
1327
|
-
])}>${r}</p>`;
|
|
1497
|
+
])}>${r()}</p>`;
|
|
1328
1498
|
case "br": return "<br>";
|
|
1329
1499
|
case "span":
|
|
1330
1500
|
case "b":
|
|
@@ -1332,42 +1502,42 @@ function U(e, t) {
|
|
|
1332
1502
|
case "u":
|
|
1333
1503
|
case "sup":
|
|
1334
1504
|
case "sub":
|
|
1335
|
-
case "abbr": return `<${n}${
|
|
1505
|
+
case "abbr": return `<${n}${bn(e, t, [
|
|
1336
1506
|
"id",
|
|
1337
1507
|
"class",
|
|
1338
1508
|
"title",
|
|
1339
1509
|
"style"
|
|
1340
|
-
])}>${r}</${n}>`;
|
|
1341
|
-
case "a": return `<a href="${V(e(t).attr("href") ?? e(t).attr("target") ?? "#")}"${
|
|
1510
|
+
])}>${r()}</${n}>`;
|
|
1511
|
+
case "a": return `<a href="${V(e(t).attr("href") ?? e(t).attr("target") ?? "#")}"${bn(e, t, [
|
|
1342
1512
|
"id",
|
|
1343
1513
|
"class",
|
|
1344
1514
|
"title",
|
|
1345
1515
|
"style"
|
|
1346
|
-
])}>${r}</a>`;
|
|
1516
|
+
])}>${r()}</a>`;
|
|
1347
1517
|
case "table":
|
|
1348
1518
|
case "thead":
|
|
1349
1519
|
case "tbody":
|
|
1350
1520
|
case "tr":
|
|
1351
1521
|
case "th":
|
|
1352
|
-
case "td": return
|
|
1353
|
-
case "caption": return `<caption${
|
|
1522
|
+
case "td": return xn(e, t, n, r());
|
|
1523
|
+
case "caption": return `<caption${bn(e, t, [
|
|
1354
1524
|
"id",
|
|
1355
1525
|
"class",
|
|
1356
1526
|
"align",
|
|
1357
1527
|
"style"
|
|
1358
|
-
])}>${r}</caption>`;
|
|
1359
|
-
case "num": return `<span class="akn-num">${r}</span> `;
|
|
1360
|
-
case "heading": return `<p class="akn-heading">${r}</p>`;
|
|
1361
|
-
case "content": return
|
|
1362
|
-
case "alinea": return
|
|
1363
|
-
case "article": return
|
|
1528
|
+
])}>${r()}</caption>`;
|
|
1529
|
+
case "num": return `<span class="akn-num">${r()}</span> `;
|
|
1530
|
+
case "heading": return `<p class="akn-heading">${r()}</p>`;
|
|
1531
|
+
case "content": return _n(e, t);
|
|
1532
|
+
case "alinea": return In(e, t, "div", "akn-alinea");
|
|
1533
|
+
case "article": return In(e, t, "article", "akn-article");
|
|
1364
1534
|
case "blockList":
|
|
1365
|
-
case "list": return `<div class="akn-list">${r}</div>`;
|
|
1366
|
-
case "item": return
|
|
1535
|
+
case "list": return `<div class="akn-list">${r()}</div>`;
|
|
1536
|
+
case "item": return In(e, t, "div", "akn-item");
|
|
1367
1537
|
case "listIntroduction":
|
|
1368
1538
|
case "listWrapUp":
|
|
1369
1539
|
case "intro":
|
|
1370
|
-
case "wrapUp": return `<div class="akn-${n}">${r}</div>`;
|
|
1540
|
+
case "wrapUp": return `<div class="akn-${n}">${r()}</div>`;
|
|
1371
1541
|
case "part":
|
|
1372
1542
|
case "title":
|
|
1373
1543
|
case "chapter":
|
|
@@ -1379,12 +1549,12 @@ function U(e, t) {
|
|
|
1379
1549
|
case "book":
|
|
1380
1550
|
case "tome":
|
|
1381
1551
|
case "subchapter":
|
|
1382
|
-
case "subsection": return
|
|
1383
|
-
case "crossHeading": return `<p class="akn-cross-heading">${r}</p>`;
|
|
1384
|
-
default: return r;
|
|
1552
|
+
case "subsection": return In(e, t, "section", `akn-${n}`);
|
|
1553
|
+
case "crossHeading": return `<p class="akn-cross-heading">${r()}</p>`;
|
|
1554
|
+
default: return r();
|
|
1385
1555
|
}
|
|
1386
1556
|
}
|
|
1387
|
-
function
|
|
1557
|
+
function vn(e, t) {
|
|
1388
1558
|
let n = e(t).text();
|
|
1389
1559
|
if (!n.includes("«") || !n.includes("»") || e(t).find("table").length > 0) return;
|
|
1390
1560
|
let r = e(t).find("tr").get().filter((n) => e(n).closest("table").get(0) === t);
|
|
@@ -1395,28 +1565,28 @@ function un(e, t) {
|
|
|
1395
1565
|
let l = s ? o[0] : void 0, u = c ? o.at(-1) : void 0;
|
|
1396
1566
|
if (l) {
|
|
1397
1567
|
let t = Number(e(l).attr("rowspan") ?? "1");
|
|
1398
|
-
if (!Number.isInteger(t) || t < 1 || t > r.length - n || t > 1 &&
|
|
1568
|
+
if (!Number.isInteger(t) || t < 1 || t > r.length - n || t > 1 && N(e(l).text()) !== "«") return [];
|
|
1399
1569
|
i = t - 1;
|
|
1400
1570
|
}
|
|
1401
1571
|
if (u) {
|
|
1402
1572
|
let t = Number(e(u).attr("rowspan") ?? "1");
|
|
1403
|
-
if (!Number.isInteger(t) || t < 1 || t > r.length - n || t > 1 && !/^»\s*;?$/u.test(
|
|
1573
|
+
if (!Number.isInteger(t) || t < 1 || t > r.length - n || t > 1 && !/^»\s*;?$/u.test(N(e(u).text()))) return [];
|
|
1404
1574
|
a = t - 1;
|
|
1405
1575
|
}
|
|
1406
1576
|
return [l, u];
|
|
1407
1577
|
});
|
|
1408
1578
|
if (o.some((e) => e.length !== 2)) return;
|
|
1409
|
-
let s = o.map(([t]) => t ?
|
|
1579
|
+
let s = o.map(([t]) => t ? N(e(t).text()) : ""), c = o.map(([, t]) => t ? N(e(t).text()) : "");
|
|
1410
1580
|
if (!(s.filter((e) => e === "«").length !== 1 || c.filter((e) => /^»\s*;?$/u.test(e)).length !== 1 || s.some((e) => e !== "" && e !== "«") || c.some((e) => e !== "" && !/^»\s*;?$/u.test(e)) || o.some(([t, n]) => [t, n].some((t) => t && e(t).attr("colspan") !== void 0))) && !(s.indexOf("«") > c.findIndex((e) => e.startsWith("»")))) {
|
|
1411
1581
|
e(t).addClass("akn-quoted-table");
|
|
1412
1582
|
for (let [t, n] of o) t && e(t).addClass("akn-quote-column"), n && e(n).addClass("akn-quote-column");
|
|
1413
1583
|
}
|
|
1414
1584
|
}
|
|
1415
|
-
function
|
|
1416
|
-
let n = e(t).find("td,th").get(), r = e(n.find((t) => e(t).hasClass("akn-quote-column") && /^»\s*;?$/u.test(
|
|
1417
|
-
return `« ${n.filter((t) => !e(t).hasClass("akn-quote-column")).map((t) =>
|
|
1585
|
+
function yn(e, t) {
|
|
1586
|
+
let n = e(t).find("td,th").get(), r = e(n.find((t) => e(t).hasClass("akn-quote-column") && /^»\s*;?$/u.test(N(e(t).text())))).text();
|
|
1587
|
+
return `« ${n.filter((t) => !e(t).hasClass("akn-quote-column")).map((t) => N(e(t).text())).filter(Boolean).join(" ")} »${r.includes(";") ? " ;" : ""}`;
|
|
1418
1588
|
}
|
|
1419
|
-
function
|
|
1589
|
+
function bn(e, t, n, r = {}) {
|
|
1420
1590
|
let i = [];
|
|
1421
1591
|
for (let r of n) {
|
|
1422
1592
|
if (r === "style") continue;
|
|
@@ -1426,8 +1596,8 @@ function fn(e, t, n, r = {}) {
|
|
|
1426
1596
|
let a = r.style ?? e(t).attr("style");
|
|
1427
1597
|
return a && i.push(`style="${V(a)}"`), i.length > 0 ? ` ${i.join(" ")}` : "";
|
|
1428
1598
|
}
|
|
1429
|
-
function
|
|
1430
|
-
return `<${n}${
|
|
1599
|
+
function xn(e, t, n, r) {
|
|
1600
|
+
return `<${n}${bn(e, t, [
|
|
1431
1601
|
"id",
|
|
1432
1602
|
"class",
|
|
1433
1603
|
"colspan",
|
|
@@ -1440,105 +1610,105 @@ function pn(e, t, n, r) {
|
|
|
1440
1610
|
"cellspacing",
|
|
1441
1611
|
"cellpadding",
|
|
1442
1612
|
"style"
|
|
1443
|
-
], { style:
|
|
1613
|
+
], { style: Sn(e, t, n) })}>${r}</${n}>`;
|
|
1444
1614
|
}
|
|
1445
|
-
function
|
|
1615
|
+
function Sn(e, t, n) {
|
|
1446
1616
|
let r = e(t).attr("style") ?? "";
|
|
1447
|
-
return (n === "td" || n === "th") && /font-weight\s*:\s*bold/iu.test(r) && !/text-align\s*:/iu.test(r) && (r =
|
|
1617
|
+
return (n === "td" || n === "th") && /font-weight\s*:\s*bold/iu.test(r) && !/text-align\s*:/iu.test(r) && (r = Cn(r, "text-align", "center")), r || void 0;
|
|
1448
1618
|
}
|
|
1449
|
-
function
|
|
1619
|
+
function Cn(e, t, n) {
|
|
1450
1620
|
let r = e.trim();
|
|
1451
1621
|
return `${r}${r && !r.endsWith(";") ? ";" : ""} ${t}: ${n};`.trim();
|
|
1452
1622
|
}
|
|
1453
|
-
function
|
|
1454
|
-
let n = [
|
|
1623
|
+
function wn(e, t) {
|
|
1624
|
+
let n = [N(e(t).children("num").first().text()), N(e(t).children("heading").first().text())].filter(Boolean);
|
|
1455
1625
|
return n.length === 0 ? "" : `<p class="akn-heading">${V(n.join(" "))}</p>`;
|
|
1456
1626
|
}
|
|
1457
|
-
function
|
|
1627
|
+
function Tn(e, t) {
|
|
1458
1628
|
if (!t) return !1;
|
|
1459
|
-
let n = (e) =>
|
|
1460
|
-
return n(
|
|
1629
|
+
let n = (e) => N(e).replace(/\s+/gu, " ").replace(/\s*[..]\s*(?=[–—-])/gu, " ").trim();
|
|
1630
|
+
return n(N(e.replace(/<[^>]*>/gu, " ").replace(/ /gu, " ").replace(/ /giu, " ").replace(/–/giu, "–"))).startsWith(n(t));
|
|
1461
1631
|
}
|
|
1462
|
-
function
|
|
1632
|
+
function En(e) {
|
|
1463
1633
|
let t = V(e);
|
|
1464
1634
|
return `<p data-pastille="${t}" class="pastille"><span aria-label="pastille ${t}" data-pastille="${t}"></span></p>`;
|
|
1465
1635
|
}
|
|
1466
|
-
function
|
|
1467
|
-
return
|
|
1636
|
+
function Dn(e, t) {
|
|
1637
|
+
return On([kn({
|
|
1468
1638
|
content: e,
|
|
1469
1639
|
pastille: t
|
|
1470
1640
|
})]);
|
|
1471
1641
|
}
|
|
1472
|
-
function
|
|
1642
|
+
function On(e) {
|
|
1473
1643
|
return `<table class="fixed-size large akn-pastille-table"><colgroup><col style="width: 5.0%;" class="texte-col-0 texte-col-pastille"><col style="width: 95.0%;" class="texte-col-1"></colgroup><tbody>${e.join("\n")}</tbody></table>`;
|
|
1474
1644
|
}
|
|
1475
|
-
function
|
|
1645
|
+
function kn({ content: e, pastille: t, style: n, contextClass: r }) {
|
|
1476
1646
|
let i = n ? ` style="${V(n)}"` : "", a = r ? ` ${V(r)}` : "";
|
|
1477
|
-
return `<tr${r ? ` class="${V(r)} hideable"` : ""}><td style="overflow: hidden; width: 5.0%;" class="texte-col-0 texte-col-pastille no-right-border"><div class="tableauComparatifCell${a}">${
|
|
1647
|
+
return `<tr${r ? ` class="${V(r)} hideable"` : ""}><td style="overflow: hidden; width: 5.0%;" class="texte-col-0 texte-col-pastille no-right-border"><div class="tableauComparatifCell${a}">${En(t)}</div></td><td style="overflow: hidden; width: 95.0%;" class="texte-col-1 no-right-border"><div class="tableauComparatifCell${a}"${i}>${e}</div></td></tr>`;
|
|
1478
1648
|
}
|
|
1479
|
-
function
|
|
1649
|
+
function An({ content: e, style: t, contextClass: n }) {
|
|
1480
1650
|
let r = t ? ` style="${V(t)}"` : "", i = n ? ` ${V(n)}` : "";
|
|
1481
1651
|
return `<tr${n ? ` class="${V(n)} hideable"` : ""}><td style="overflow: hidden; width: 5.0%;" class="texte-col-0 no-right-border"><div class="tableauComparatifCell${i}"><p class="pastille"><br></p></div></td><td style="overflow: hidden; width: 95.0%;" class="texte-col-1 no-right-border"><div class="tableauComparatifCell${i}"${r}>${e}</div></td></tr>`;
|
|
1482
1652
|
}
|
|
1483
|
-
function
|
|
1653
|
+
function jn(e, t) {
|
|
1484
1654
|
return e(t).attr("data:pastille") ?? e(t).attr("pastille");
|
|
1485
1655
|
}
|
|
1486
|
-
function
|
|
1656
|
+
function Mn(e, t) {
|
|
1487
1657
|
return e(t).find("alinea[data\\:pastille],alinea[pastille]").length > 0;
|
|
1488
1658
|
}
|
|
1489
|
-
function
|
|
1490
|
-
return e(t).children().get().filter((e) =>
|
|
1659
|
+
function Nn(e, t) {
|
|
1660
|
+
return e(t).children().get().filter((e) => I(e) ? H(e) === "content" : !1).map((t) => U(e, t)).filter(Boolean).join("\n");
|
|
1491
1661
|
}
|
|
1492
|
-
function
|
|
1662
|
+
function Pn(e, t) {
|
|
1493
1663
|
let n = [];
|
|
1494
1664
|
return e(t).children().each((t, r) => {
|
|
1495
|
-
if (!
|
|
1665
|
+
if (!I(r)) return;
|
|
1496
1666
|
let i = H(r);
|
|
1497
1667
|
i === "num" || i === "heading" || i === "content" || n.push(U(e, r));
|
|
1498
1668
|
}), n.filter(Boolean);
|
|
1499
1669
|
}
|
|
1500
|
-
function
|
|
1501
|
-
let n = [], r = H(t), i = r === "alinea" ?
|
|
1670
|
+
function Fn(e, t) {
|
|
1671
|
+
let n = [], r = H(t), i = r === "alinea" ? jn(e, t) : void 0, a = Nn(e, t), o = Ln(e, t, r, i), s = Un(e, t);
|
|
1502
1672
|
if (i) {
|
|
1503
|
-
let r = [
|
|
1504
|
-
|
|
1673
|
+
let r = [Tn(a, N(e(t).children("num").first().text())) ? "" : wn(e, t), a].filter(Boolean).join("\n");
|
|
1674
|
+
N(r) && n.push(kn({
|
|
1505
1675
|
content: r,
|
|
1506
1676
|
pastille: i,
|
|
1507
1677
|
style: o,
|
|
1508
1678
|
contextClass: s
|
|
1509
1679
|
}));
|
|
1510
|
-
} else a && n.push(
|
|
1680
|
+
} else a && n.push(An({
|
|
1511
1681
|
content: a,
|
|
1512
1682
|
style: o,
|
|
1513
1683
|
contextClass: s
|
|
1514
1684
|
}));
|
|
1515
1685
|
for (let r of e(t).children().get()) {
|
|
1516
|
-
if (!
|
|
1686
|
+
if (!I(r)) continue;
|
|
1517
1687
|
let t = H(r);
|
|
1518
|
-
t === "num" || t === "heading" || t === "content" || (t === "alinea" ||
|
|
1688
|
+
t === "num" || t === "heading" || t === "content" || (t === "alinea" || Mn(e, r)) && n.push(...Fn(e, r));
|
|
1519
1689
|
}
|
|
1520
1690
|
return n;
|
|
1521
1691
|
}
|
|
1522
|
-
function
|
|
1523
|
-
let i = H(t), a = e(t).attr("eId") ?? e(t).attr("GUID"), o =
|
|
1692
|
+
function In(e, t, n, r) {
|
|
1693
|
+
let i = H(t), a = e(t).attr("eId") ?? e(t).attr("GUID"), o = jn(e, t), s = Ln(e, t, i, o), c = [`<${n} ${[
|
|
1524
1694
|
a ? `id="${V(a)}"` : void 0,
|
|
1525
1695
|
`class="${r}"`,
|
|
1526
1696
|
o ? `data-pastille="${V(o)}"` : void 0,
|
|
1527
1697
|
s ? `style="${V(s)}"` : void 0
|
|
1528
1698
|
].filter((e) => e !== void 0).join(" ")}>`];
|
|
1529
1699
|
if (i === "part" || i === "title") {
|
|
1530
|
-
let r =
|
|
1700
|
+
let r = Bn(e, t, i), a = Hn(e, t), o = r ? [An({
|
|
1531
1701
|
content: r,
|
|
1532
1702
|
contextClass: a
|
|
1533
1703
|
})] : [], s = () => {
|
|
1534
|
-
o.length !== 0 && (c.push(
|
|
1704
|
+
o.length !== 0 && (c.push(zn(o)), o = []);
|
|
1535
1705
|
};
|
|
1536
1706
|
return e(t).children().each((t, n) => {
|
|
1537
|
-
if (!
|
|
1707
|
+
if (!I(n)) return;
|
|
1538
1708
|
let r = H(n);
|
|
1539
1709
|
if (!(r === "num" || r === "heading" || r === "content")) {
|
|
1540
1710
|
if (r === "alinea") {
|
|
1541
|
-
o.push(...
|
|
1711
|
+
o.push(...Fn(e, n));
|
|
1542
1712
|
return;
|
|
1543
1713
|
}
|
|
1544
1714
|
s(), c.push(U(e, n));
|
|
@@ -1546,49 +1716,49 @@ function On(e, t, n, r) {
|
|
|
1546
1716
|
}), s(), c.push(`</${n}>`), c.join("\n");
|
|
1547
1717
|
}
|
|
1548
1718
|
if (i === "article") {
|
|
1549
|
-
let r =
|
|
1719
|
+
let r = N(e(t).children("num").first().text()), i = N(e(t).children("heading").first().text()), a = C(r) ?? {
|
|
1550
1720
|
label: r,
|
|
1551
1721
|
num: r
|
|
1552
1722
|
}, o = `<p class="TCNumArticle as-text toc-article dispositif" id="${V(`_TocArt${(a.num ?? r).replace(/\s+/gu, "")}`)}">${V(a.label)}${i ? ` : ${V(i)}` : ""}</p>`;
|
|
1553
|
-
if (
|
|
1554
|
-
let r = [
|
|
1723
|
+
if (Mn(e, t)) {
|
|
1724
|
+
let r = [An({
|
|
1555
1725
|
content: o,
|
|
1556
|
-
contextClass:
|
|
1557
|
-
}), ...
|
|
1558
|
-
c.push(
|
|
1559
|
-
for (let n of
|
|
1726
|
+
contextClass: Gn(a.label)
|
|
1727
|
+
}), ...Fn(e, t)];
|
|
1728
|
+
c.push(On(r));
|
|
1729
|
+
for (let n of Pn(e, t)) n.includes("akn-pastille-table") || c.push(n);
|
|
1560
1730
|
return c.push(`</${n}>`), c.join("\n");
|
|
1561
1731
|
}
|
|
1562
1732
|
c.push(o);
|
|
1563
1733
|
}
|
|
1564
1734
|
let l = [];
|
|
1565
1735
|
for (let n of ["content", "children"]) e(t).children().each((t, r) => {
|
|
1566
|
-
if (!
|
|
1736
|
+
if (!I(r)) return;
|
|
1567
1737
|
let i = H(r);
|
|
1568
1738
|
i === "num" || i === "heading" || n === "content" && i !== "content" || n === "children" && i === "content" || l.push(U(e, r));
|
|
1569
1739
|
});
|
|
1570
1740
|
let u = l.join("\n");
|
|
1571
1741
|
if (i !== "article") {
|
|
1572
|
-
let n =
|
|
1742
|
+
let n = Tn(u, N(e(t).children("num").first().text())) ? "" : wn(e, t);
|
|
1573
1743
|
n && c.push(n);
|
|
1574
1744
|
}
|
|
1575
|
-
return c.push(o ?
|
|
1745
|
+
return c.push(o ? Dn(u, o) : u), c.push(`</${n}>`), c.join("\n");
|
|
1576
1746
|
}
|
|
1577
|
-
function
|
|
1578
|
-
let i =
|
|
1579
|
-
return !r && n !== "article" && /font-weight\s*:\s*bold/iu.test(i) && !/text-align\s*:/iu.test(i) && (i =
|
|
1747
|
+
function Ln(e, t, n, r) {
|
|
1748
|
+
let i = Rn(e(t).attr("style") ?? "", "font-family");
|
|
1749
|
+
return !r && n !== "article" && /font-weight\s*:\s*bold/iu.test(i) && !/text-align\s*:/iu.test(i) && (i = Cn(i, "text-align", "center")), i || void 0;
|
|
1580
1750
|
}
|
|
1581
|
-
function
|
|
1751
|
+
function Rn(e, t) {
|
|
1582
1752
|
return e.split(";").map((e) => e.trim()).filter(Boolean).filter((e) => !e.toLowerCase().startsWith(`${t.toLowerCase()}:`)).join(";");
|
|
1583
1753
|
}
|
|
1584
|
-
function
|
|
1754
|
+
function zn(e) {
|
|
1585
1755
|
return `<table class="fixed-size large akn-section-table"><colgroup><col style="width: 5.0%;" class="texte-col-0 texte-col-pastille"><col style="width: 95.0%;" class="texte-col-1"></colgroup><tbody>${e.join("\n")}</tbody></table>`;
|
|
1586
1756
|
}
|
|
1587
|
-
function
|
|
1588
|
-
let r =
|
|
1757
|
+
function Bn(e, t, n) {
|
|
1758
|
+
let r = N(e(t).children("num").first().text()), i = N(e(t).children("heading").first().text()), a = Vn(n), o = [];
|
|
1589
1759
|
return r && o.push(`<p class="${a.num} as-text dispositif"><span aria-label="">${V(r)}</span></p>`), i && o.push(`<p class="${a.heading} as-text dispositif"><span aria-label="">${V(i)}</span></p>`), o.join("\n");
|
|
1590
1760
|
}
|
|
1591
|
-
function
|
|
1761
|
+
function Vn(e) {
|
|
1592
1762
|
switch (e) {
|
|
1593
1763
|
case "part": return {
|
|
1594
1764
|
num: "TCNumPartie",
|
|
@@ -1612,22 +1782,22 @@ function Nn(e) {
|
|
|
1612
1782
|
};
|
|
1613
1783
|
}
|
|
1614
1784
|
}
|
|
1615
|
-
function
|
|
1616
|
-
let n =
|
|
1785
|
+
function Hn(e, t) {
|
|
1786
|
+
let n = Wn(N(e(t).children("num").first().text()));
|
|
1617
1787
|
if (n) return n;
|
|
1618
1788
|
for (let n of e(t).parents().get()) {
|
|
1619
|
-
if (!
|
|
1789
|
+
if (!I(n)) continue;
|
|
1620
1790
|
let t = H(n);
|
|
1621
1791
|
if (t !== "title" && t !== "part") continue;
|
|
1622
|
-
let r =
|
|
1792
|
+
let r = Wn(N(e(n).children("num").first().text()));
|
|
1623
1793
|
if (r) return r;
|
|
1624
1794
|
}
|
|
1625
1795
|
}
|
|
1626
|
-
function
|
|
1627
|
-
return
|
|
1796
|
+
function Un(e, t) {
|
|
1797
|
+
return Hn(e, t);
|
|
1628
1798
|
}
|
|
1629
|
-
function
|
|
1630
|
-
let [t, ...n] =
|
|
1799
|
+
function Wn(e) {
|
|
1800
|
+
let [t, ...n] = N(e).split(/\s+/u);
|
|
1631
1801
|
if (!t || n.length === 0) return;
|
|
1632
1802
|
let r = t.toLocaleLowerCase("fr-FR");
|
|
1633
1803
|
if ([
|
|
@@ -1637,10 +1807,10 @@ function In(e) {
|
|
|
1637
1807
|
"section"
|
|
1638
1808
|
].includes(r)) return `${r}-${n.join("_")}`;
|
|
1639
1809
|
}
|
|
1640
|
-
function
|
|
1641
|
-
return `article-${
|
|
1810
|
+
function Gn(e) {
|
|
1811
|
+
return `article-${N(e).replace(/^Article\s+/iu, "").replace(/\s+/gu, "_")} article`;
|
|
1642
1812
|
}
|
|
1643
|
-
function
|
|
1813
|
+
function Kn(e) {
|
|
1644
1814
|
switch (e) {
|
|
1645
1815
|
case "part": return "partie";
|
|
1646
1816
|
case "book": return "livre";
|
|
@@ -1652,11 +1822,11 @@ function Rn(e) {
|
|
|
1652
1822
|
default: return;
|
|
1653
1823
|
}
|
|
1654
1824
|
}
|
|
1655
|
-
function
|
|
1656
|
-
return [
|
|
1825
|
+
function qn(e, t) {
|
|
1826
|
+
return [N(e(t).children("num").first().text()), N(e(t).children("heading").first().text())].filter(Boolean).join(" ");
|
|
1657
1827
|
}
|
|
1658
|
-
function
|
|
1659
|
-
let n =
|
|
1828
|
+
function Jn(e, t) {
|
|
1829
|
+
let n = N(e(t).children("num").first().text()), r = N(e(t).children("heading").first().text()), i = C(n) ?? {
|
|
1660
1830
|
label: n,
|
|
1661
1831
|
num: n
|
|
1662
1832
|
};
|
|
@@ -1666,24 +1836,24 @@ function Bn(e, t) {
|
|
|
1666
1836
|
type: "article"
|
|
1667
1837
|
};
|
|
1668
1838
|
}
|
|
1669
|
-
function
|
|
1839
|
+
function Yn(e, t) {
|
|
1670
1840
|
e.items.push(...t.items);
|
|
1671
1841
|
}
|
|
1672
|
-
function
|
|
1842
|
+
function Xn(e, t) {
|
|
1673
1843
|
let n = { items: [] };
|
|
1674
1844
|
return e(t).children().each((t, r) => {
|
|
1675
|
-
if (!
|
|
1845
|
+
if (!I(r)) return;
|
|
1676
1846
|
let i = H(r);
|
|
1677
1847
|
if (i === "article") {
|
|
1678
|
-
n.items.push(
|
|
1848
|
+
n.items.push(Jn(e, r));
|
|
1679
1849
|
return;
|
|
1680
1850
|
}
|
|
1681
|
-
let a =
|
|
1851
|
+
let a = Kn(i);
|
|
1682
1852
|
if (!a) {
|
|
1683
|
-
|
|
1853
|
+
Yn(n, Xn(e, r));
|
|
1684
1854
|
return;
|
|
1685
1855
|
}
|
|
1686
|
-
let o =
|
|
1856
|
+
let o = qn(e, r), s = Xn(e, r);
|
|
1687
1857
|
!o && s.items.length === 0 || n.items.push({
|
|
1688
1858
|
...s,
|
|
1689
1859
|
id: e(r).attr("eId") ?? e(r).attr("GUID"),
|
|
@@ -1692,27 +1862,27 @@ function Hn(e, t) {
|
|
|
1692
1862
|
});
|
|
1693
1863
|
}), n;
|
|
1694
1864
|
}
|
|
1695
|
-
function
|
|
1865
|
+
function Zn(e) {
|
|
1696
1866
|
let t = e("body").first().get(0);
|
|
1697
|
-
return t === void 0 ? { items: [] } :
|
|
1867
|
+
return t === void 0 ? { items: [] } : Xn(e, t);
|
|
1698
1868
|
}
|
|
1699
|
-
function
|
|
1869
|
+
function Qn(e) {
|
|
1700
1870
|
return e("FRBRExpression FRBRdate[name=\"#depot\"]").attr("date") ?? e("FRBRWork FRBRdate[name=\"#presentation\"]").attr("date");
|
|
1701
1871
|
}
|
|
1702
|
-
function
|
|
1703
|
-
e("table").each((t, n) =>
|
|
1872
|
+
function $n(e) {
|
|
1873
|
+
e("table").each((t, n) => vn(e, n));
|
|
1704
1874
|
let t = e("preamble").first(), n = e("body").first(), r = ["<div class=\"akn-bill\">", "<style>.akn-bill p.pastille span:empty::before{content:attr(data-pastille)}</style>"];
|
|
1705
|
-
return t.length > 0 && (r.push("<section class=\"akn-preamble\">"), r.push(
|
|
1706
|
-
|
|
1875
|
+
return t.length > 0 && (r.push("<section class=\"akn-preamble\">"), r.push(gn(e, t.get(0))), r.push("</section>")), r.push("<section class=\"akn-body\">"), n.children().each((t, n) => {
|
|
1876
|
+
I(n) && r.push(H(n) === "article" ? In(e, n, "article", "akn-article") : U(e, n));
|
|
1707
1877
|
}), r.push("</section></div>"), r.join("\n");
|
|
1708
1878
|
}
|
|
1709
|
-
function
|
|
1710
|
-
let t =
|
|
1879
|
+
function er(e) {
|
|
1880
|
+
let t = b(e, { xml: {
|
|
1711
1881
|
decodeEntities: !1,
|
|
1712
1882
|
lowerCaseTags: !1,
|
|
1713
1883
|
lowerCaseAttributeNames: !1,
|
|
1714
1884
|
xmlMode: !0
|
|
1715
|
-
} }), n =
|
|
1885
|
+
} }), n = Qn(t), r = $n(t);
|
|
1716
1886
|
return {
|
|
1717
1887
|
sourceFormat: "akoma-ntoso",
|
|
1718
1888
|
documentDate: n,
|
|
@@ -1720,42 +1890,42 @@ function Kn(e) {
|
|
|
1720
1890
|
linkedHtml: r
|
|
1721
1891
|
};
|
|
1722
1892
|
}
|
|
1723
|
-
function
|
|
1724
|
-
return
|
|
1893
|
+
function tr(e) {
|
|
1894
|
+
return nr(b(e));
|
|
1725
1895
|
}
|
|
1726
|
-
function
|
|
1896
|
+
function nr(e) {
|
|
1727
1897
|
let t = [];
|
|
1728
1898
|
return e("article.akn-article").each((n, r) => {
|
|
1729
|
-
let i = e(r).find("p.TCNumArticle").first().get(0), a =
|
|
1899
|
+
let i = e(r).find("p.TCNumArticle").first().get(0), a = N(i ? e(i).text() : ""), o = C(a) ?? { label: a || `Article ${n + 1}` }, s = e(r).attr("id") ?? `akn-article-${String(n + 1).padStart(3, "0")}`, c = [r], l = Tt(e, s, c), u = l.filter((e) => e.kind !== "noise").map((e) => e.text).join("\n");
|
|
1730
1900
|
t.push({
|
|
1731
1901
|
id: s,
|
|
1732
1902
|
label: o.label,
|
|
1733
1903
|
num: o.num,
|
|
1734
1904
|
title: o.title,
|
|
1735
|
-
text:
|
|
1736
|
-
html:
|
|
1905
|
+
text: it(e, c),
|
|
1906
|
+
html: et(e, r),
|
|
1737
1907
|
directiveText: u,
|
|
1738
1908
|
blocks: l
|
|
1739
1909
|
});
|
|
1740
1910
|
}), t;
|
|
1741
1911
|
}
|
|
1742
|
-
function
|
|
1743
|
-
let t =
|
|
1912
|
+
function rr(e) {
|
|
1913
|
+
let t = b(e);
|
|
1744
1914
|
return {
|
|
1745
|
-
articles:
|
|
1915
|
+
articles: nr(t),
|
|
1746
1916
|
htmlWithLinks: t.html()
|
|
1747
1917
|
};
|
|
1748
1918
|
}
|
|
1749
|
-
async function
|
|
1750
|
-
let n = new
|
|
1919
|
+
async function ir(e, t) {
|
|
1920
|
+
let n = new ye("parseAkomaNtosoBillRaw"), r = n.timeSync("cheerioLoadXml", () => b(e, { xml: {
|
|
1751
1921
|
decodeEntities: !1,
|
|
1752
1922
|
lowerCaseTags: !1,
|
|
1753
1923
|
lowerCaseAttributeNames: !1,
|
|
1754
1924
|
xmlMode: !0
|
|
1755
|
-
} })), i = t.date ??
|
|
1925
|
+
} })), i = t.date ?? Qn(r), a = n.timeSync("renderAknHtml", () => $n(r), { inputSize: e.length }), o = t.linkedHtml ?? await n.time("addLinksToRenderedAknHtml", () => ct(a, {
|
|
1756
1926
|
...t,
|
|
1757
1927
|
date: i
|
|
1758
|
-
}, i)), s = n.timeSync("extractRenderedAknArticles", () =>
|
|
1928
|
+
}, i)), s = n.timeSync("extractRenderedAknArticles", () => tr(a)), c = n.timeSync("injectHiddenArticleSummary", () => Et(o, s)), { articles: l, htmlWithLinks: u } = n.timeSync("extractLinkedAknArticlesAndTaggedHtml", () => rr(c)), d = l.length > 0 ? l : s, f = n.timeSync("extractAknTableOfContents", () => Zn(r)), p = n.timeSync("buildParsedDocument", () => sn("akoma-ntoso", a, l.length > 0 ? u : c, i, d, f, t.includeDirectiveAnalysis, un(d, f, l.length > 0 ? u : c, "akoma-ntoso")));
|
|
1759
1929
|
return n.log({
|
|
1760
1930
|
articleCount: p.articles.length,
|
|
1761
1931
|
blockCount: p.articles.reduce((e, t) => e + t.blocks.length, 0),
|
|
@@ -1763,25 +1933,25 @@ async function Xn(e, t) {
|
|
|
1763
1933
|
targetDirectiveCount: p.directives.filter((e) => e.targetIds !== void 0).length
|
|
1764
1934
|
}), p;
|
|
1765
1935
|
}
|
|
1766
|
-
async function
|
|
1767
|
-
let n =
|
|
1936
|
+
async function ar(e, t) {
|
|
1937
|
+
let n = er(e), r = t.date ?? n.documentDate;
|
|
1768
1938
|
return {
|
|
1769
1939
|
sourceFormat: "akoma-ntoso",
|
|
1770
1940
|
documentDate: r,
|
|
1771
1941
|
html: n.html,
|
|
1772
|
-
linkedHtml: await
|
|
1942
|
+
linkedHtml: await ct(n.html, t, r)
|
|
1773
1943
|
};
|
|
1774
1944
|
}
|
|
1775
1945
|
//#endregion
|
|
1776
1946
|
//#region src/lib/server/assemblee_document_search.ts
|
|
1777
|
-
var
|
|
1778
|
-
function
|
|
1947
|
+
var or = /\bexpos[ée]\s+des\s+motifs\b/giu, sr = /\barticle\s+(?:premier|1er|\d+)/iu;
|
|
1948
|
+
function cr(e) {
|
|
1779
1949
|
return e.replace(/\u00a0/gu, " ").replace(/\s+/gu, " ").trim();
|
|
1780
1950
|
}
|
|
1781
|
-
function
|
|
1782
|
-
let t =
|
|
1951
|
+
function lr(e) {
|
|
1952
|
+
let t = cr(b(e).text()), n = [...t.matchAll(or)], r = /* @__PURE__ */ new Set(), i = [];
|
|
1783
1953
|
for (let [e, a] of n.entries()) {
|
|
1784
|
-
let o = (a.index ?? 0) + a[0].length, s = t.slice(o), c =
|
|
1954
|
+
let o = (a.index ?? 0) + a[0].length, s = t.slice(o), c = sr.exec(s), l = cr(s.slice(0, c?.index ?? s.length));
|
|
1785
1955
|
if (l.length < 20 || r.has(l)) continue;
|
|
1786
1956
|
r.add(l);
|
|
1787
1957
|
let u = `expose-des-motifs-${e + 1}`;
|
|
@@ -1797,8 +1967,8 @@ function tr(e) {
|
|
|
1797
1967
|
}
|
|
1798
1968
|
return i;
|
|
1799
1969
|
}
|
|
1800
|
-
async function
|
|
1801
|
-
let i = await
|
|
1970
|
+
async function ur({ date: e, html: t, linkBaseUrl: n, linkType: r }) {
|
|
1971
|
+
let i = await fn(t, {
|
|
1802
1972
|
date: e,
|
|
1803
1973
|
includeDirectiveAnalysis: !1,
|
|
1804
1974
|
linkBaseUrl: n,
|
|
@@ -1807,7 +1977,7 @@ async function nr({ date: e, html: t, linkBaseUrl: n, linkType: r }) {
|
|
|
1807
1977
|
});
|
|
1808
1978
|
return {
|
|
1809
1979
|
items: [...i.articles.map((e) => {
|
|
1810
|
-
let t =
|
|
1980
|
+
let t = cr(e.directiveText || e.text);
|
|
1811
1981
|
if (t) return {
|
|
1812
1982
|
anchor: e.id,
|
|
1813
1983
|
articleNumber: e.num ?? null,
|
|
@@ -1817,17 +1987,17 @@ async function nr({ date: e, html: t, linkBaseUrl: n, linkType: r }) {
|
|
|
1817
1987
|
label: e.label,
|
|
1818
1988
|
title: e.title ?? null
|
|
1819
1989
|
};
|
|
1820
|
-
}).filter((e) => e !== void 0), ...
|
|
1990
|
+
}).filter((e) => e !== void 0), ...lr(t)],
|
|
1821
1991
|
tableOfContents: i.tableOfContents
|
|
1822
1992
|
};
|
|
1823
1993
|
}
|
|
1824
|
-
function
|
|
1825
|
-
return
|
|
1994
|
+
function dr(e, t) {
|
|
1995
|
+
return Oe("sha256").update(JSON.stringify({
|
|
1826
1996
|
item: e,
|
|
1827
1997
|
metadata: t
|
|
1828
1998
|
})).digest("hex");
|
|
1829
1999
|
}
|
|
1830
|
-
function
|
|
2000
|
+
function fr(e) {
|
|
1831
2001
|
if (typeof e != "object" || !e) return;
|
|
1832
2002
|
let t = e.cycleDeVie?.chrono;
|
|
1833
2003
|
if (t !== void 0) for (let e of [
|
|
@@ -1842,11 +2012,11 @@ function ir(e) {
|
|
|
1842
2012
|
}
|
|
1843
2013
|
//#endregion
|
|
1844
2014
|
//#region src/lib/server/senat_amendment_search.ts
|
|
1845
|
-
function
|
|
1846
|
-
return e?.trim() ?
|
|
2015
|
+
function pr(e) {
|
|
2016
|
+
return e?.trim() ? b(e).text().replace(/\u00a0/gu, " ").replace(/\s+/gu, " ").trim() : "";
|
|
1847
2017
|
}
|
|
1848
|
-
function
|
|
1849
|
-
let n =
|
|
2018
|
+
function mr({ dispositifHtml: e, objetHtml: t }) {
|
|
2019
|
+
let n = pr(e), r = pr(t);
|
|
1850
2020
|
return [...n ? [{
|
|
1851
2021
|
content: n,
|
|
1852
2022
|
itemKind: "dispositif",
|
|
@@ -1857,8 +2027,8 @@ function or({ dispositifHtml: e, objetHtml: t }) {
|
|
|
1857
2027
|
label: "Objet"
|
|
1858
2028
|
}] : []];
|
|
1859
2029
|
}
|
|
1860
|
-
function
|
|
1861
|
-
return
|
|
2030
|
+
function hr(e, t) {
|
|
2031
|
+
return Oe("sha256").update(JSON.stringify({
|
|
1862
2032
|
item: e,
|
|
1863
2033
|
metadata: t
|
|
1864
2034
|
})).digest("hex");
|
|
@@ -1872,76 +2042,76 @@ function W(e, t) {
|
|
|
1872
2042
|
type: "amendment_action_directive"
|
|
1873
2043
|
};
|
|
1874
2044
|
}
|
|
1875
|
-
function
|
|
2045
|
+
function gr(e, t) {
|
|
1876
2046
|
return {
|
|
1877
2047
|
type: e === "start" ? "head_of_target" : "tail_after_target",
|
|
1878
|
-
unit: t ?
|
|
2048
|
+
unit: t ? me(t) : "article"
|
|
1879
2049
|
};
|
|
1880
2050
|
}
|
|
1881
|
-
function
|
|
2051
|
+
function _r(e) {
|
|
1882
2052
|
return e === "start" ? "insert_before" : "insert_after";
|
|
1883
2053
|
}
|
|
1884
|
-
var
|
|
2054
|
+
var vr = T(E("[\\s\\S]*?(?=supprimer|substituer|remplacer|ins[eé]rer|compl[eé]ter|r[eé]diger)", { flags: "i" }), { default: "" }), G = w(l, k([E("les?\\s+", { flags: "i" }), i], { value: (e) => e[1] }), i, o), yr = w(k([E("la\\s+fin\\s+de\\s+", { flags: "i" }), G], { value: (e) => {
|
|
1885
2055
|
let t = e[1];
|
|
1886
2056
|
return {
|
|
1887
2057
|
targetReference: t,
|
|
1888
2058
|
targetScope: {
|
|
1889
2059
|
type: "tail_after_target",
|
|
1890
|
-
unit:
|
|
2060
|
+
unit: me(t)
|
|
1891
2061
|
}
|
|
1892
2062
|
};
|
|
1893
|
-
} }),
|
|
1894
|
-
|
|
1895
|
-
|
|
2063
|
+
} }), k([t], { value: (e) => ({ targetScope: e[0] }) })), K = T(k([
|
|
2064
|
+
T(E("(?:[aà]\\s+la\\s+fin\\s+(?:du|de\\s+la|de\\s+l['’]?)\\s*)", { flags: "i" }), { default: "" }),
|
|
2065
|
+
T(E("(?:au\\s+d[eé]but\\s+d(?:u|e\\s+la|e\\s+l['’]?)\\s*)", { flags: "i" }), { default: "" }),
|
|
1896
2066
|
G,
|
|
1897
|
-
|
|
2067
|
+
T(E("\\s*,?\\s*(?:(?:[IVXLCDM]+)\\s*[.\\-–—]+\\s*|\\d+°\\s*|[a-z]\\)\\s*)?", { flags: "i" }), { default: "" })
|
|
1898
2068
|
], { value: (e, t) => ({
|
|
1899
2069
|
reference: e[2],
|
|
1900
2070
|
text: t.text()
|
|
1901
|
-
}) }), { default: null }),
|
|
2071
|
+
}) }), { default: null }), br = T(E(`(?:(?:[aà]\\s+)?la\\s+(?:derni(?:ère|ere)|${Te})\\s+occurrence\\s+)`, { flags: "i" }), { default: "" });
|
|
1902
2072
|
function q(e) {
|
|
1903
2073
|
return e?.text ?? "";
|
|
1904
2074
|
}
|
|
1905
|
-
function
|
|
1906
|
-
return { citation:
|
|
2075
|
+
function xr(e) {
|
|
2076
|
+
return { citation: ae(e.position()) };
|
|
1907
2077
|
}
|
|
1908
|
-
var J =
|
|
2078
|
+
var J = w(k([f], { value: (e) => ({ citation: e[0] }) }), E("\\S[\\s\\S]*", { value: (e, t) => xr(t) })), Sr = E("\\S[\\s\\S]*", { value: (e, t) => xr(t) }), Y = E("[^:«“\"]*(?::\\s*)?", { flags: "i" }), Cr = E("\\S[\\s\\S]*?(?=\\s+par\\s+(?:les?\\s+)?(?:mots?|montants?|taux|références?|mentions?|dates?|années?)\\s*:)", {
|
|
1909
2079
|
flags: "i",
|
|
1910
|
-
value: (e, t) =>
|
|
1911
|
-
}),
|
|
2080
|
+
value: (e, t) => xr(t)
|
|
2081
|
+
}), wr = E("\\S[\\s\\S]*?(?=\\s+(?:ins[eé]rer|ajouter|supprimer|r[eé]diger)\\b)", {
|
|
1912
2082
|
flags: "i",
|
|
1913
|
-
value: (e, t) =>
|
|
1914
|
-
}),
|
|
2083
|
+
value: (e, t) => xr(t)
|
|
2084
|
+
}), Tr = E("\\S[\\s\\S]*?(?=\\s*(?:(?:[IVXLCDM]+)\\s*[.\\-–—]+\\s*|\\d+°\\s*|[a-z]\\)\\s*|$))", {
|
|
1915
2085
|
flags: "i",
|
|
1916
|
-
value: (e, t) =>
|
|
1917
|
-
}),
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
], { value: (e) => e[2] }),
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
2086
|
+
value: (e, t) => xr(t)
|
|
2087
|
+
}), Er = w(k([f], { value: (e) => ({ citation: e[0] }) }), Cr), Dr = w(k([f], { value: (e) => ({ citation: e[0] }) }), Tr), Or = k([E(`${n}s?\\s*:?\\s*`, { flags: "i" }), Er], { value: (e) => e[1] }), kr = k([E(`${r}s?(?: suivant(?:e)?s?)?\\s*:?\\s*`, { flags: "i" }), Dr], { value: (e) => e[1] }), Ar = w(k([f], { value: (e) => ({ citation: e[0] }) }), wr), jr = k([
|
|
2088
|
+
br,
|
|
2089
|
+
E(`${n}s?\\s*:?\\s*`, { flags: "i" }),
|
|
2090
|
+
Ar
|
|
2091
|
+
], { value: (e) => e[2] }), Mr = k([
|
|
2092
|
+
br,
|
|
2093
|
+
E(`${n}s?\\s*:?\\s*`, { flags: "i" }),
|
|
2094
|
+
w(k([f], { value: (e) => ({ citation: e[0] }) }), Sr)
|
|
1925
2095
|
], { value: (e) => e[2] });
|
|
1926
2096
|
function X(e) {
|
|
1927
2097
|
return e?.reference;
|
|
1928
2098
|
}
|
|
1929
|
-
var
|
|
2099
|
+
var Nr = k([vr, E("supprimer\\s+cet\\s+article", { flags: "i" })], { value: (e, t) => W(t, {
|
|
1930
2100
|
contextText: e[0],
|
|
1931
2101
|
kind: "delete_article"
|
|
1932
|
-
}) }),
|
|
2102
|
+
}) }), Pr = k([
|
|
1933
2103
|
K,
|
|
1934
|
-
|
|
1935
|
-
k(
|
|
1936
|
-
k(
|
|
2104
|
+
E("supprimer", { flags: "i" }),
|
|
2105
|
+
T(k([D, G], { value: (e) => e[1] }), { default: null }),
|
|
2106
|
+
T(k([D, Mr], { value: (e) => e[1] }), { default: null })
|
|
1937
2107
|
], { value: (e, t) => W(t, {
|
|
1938
2108
|
contextText: q(e[0]),
|
|
1939
2109
|
kind: "delete_portion",
|
|
1940
2110
|
targetCitation: e[3]?.citation ?? void 0,
|
|
1941
2111
|
targetReference: e[2] ?? X(e[0])
|
|
1942
|
-
}) }),
|
|
2112
|
+
}) }), Fr = k([
|
|
1943
2113
|
K,
|
|
1944
|
-
|
|
2114
|
+
w(E("r[eé]diger\\s+ainsi", { flags: "i" }), E("r[eé]tablir", { flags: "i" })),
|
|
1945
2115
|
Y,
|
|
1946
2116
|
J
|
|
1947
2117
|
], { value: (e, t) => W(t, {
|
|
@@ -1949,76 +2119,76 @@ var Tr = M([ur, O("supprimer\\s+cet\\s+article", { flags: "i" })], { value: (e,
|
|
|
1949
2119
|
kind: "rewrite_portion",
|
|
1950
2120
|
replacementCitation: e[3].citation,
|
|
1951
2121
|
targetReference: X(e[0])
|
|
1952
|
-
}) }),
|
|
2122
|
+
}) }), Ir = k([
|
|
1953
2123
|
K,
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
fr,
|
|
2124
|
+
w(E("substituer", { flags: "i" }), E("remplacer", { flags: "i" })),
|
|
2125
|
+
D,
|
|
1957
2126
|
br,
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
2127
|
+
Or,
|
|
2128
|
+
E("\\s*,?\\s*"),
|
|
2129
|
+
T(E("par\\s+", { flags: "i" }), { default: "" }),
|
|
2130
|
+
kr
|
|
1961
2131
|
], { value: (e, t) => W(t, {
|
|
1962
2132
|
contextText: q(e[0]),
|
|
1963
2133
|
kind: "replace",
|
|
1964
2134
|
replacementCitation: e[7].citation,
|
|
1965
2135
|
targetCitation: e[4].citation,
|
|
1966
2136
|
targetReference: X(e[0])
|
|
1967
|
-
}) }),
|
|
2137
|
+
}) }), Lr = k([
|
|
1968
2138
|
K,
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
2139
|
+
E("substituer", { flags: "i" }),
|
|
2140
|
+
D,
|
|
2141
|
+
T(E("(?:[aà]|aux?|à la)\\s+", { flags: "i" }), { default: "" }),
|
|
1972
2142
|
G,
|
|
1973
|
-
|
|
2143
|
+
E("[\\s\\S]*?(?=[«“\"]|$)"),
|
|
1974
2144
|
J
|
|
1975
2145
|
], { value: (e, t) => W(t, {
|
|
1976
2146
|
contextText: q(e[0]),
|
|
1977
2147
|
kind: "rewrite_portion",
|
|
1978
2148
|
replacementCitation: e[6].citation,
|
|
1979
2149
|
targetReference: e[4] ?? X(e[0])
|
|
1980
|
-
}) }),
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
2150
|
+
}) }), Rr = k([
|
|
2151
|
+
c,
|
|
2152
|
+
D,
|
|
2153
|
+
E("l['’ ]article", { flags: "i" }),
|
|
2154
|
+
E("[\\s\\S]*?(?=ins[eé]rer)", { flags: "i" }),
|
|
2155
|
+
E("ins[eé]rer", { flags: "i" }),
|
|
1986
2156
|
Y,
|
|
1987
2157
|
J
|
|
1988
2158
|
], { value: (e, t) => W(t, {
|
|
1989
2159
|
contextText: "",
|
|
1990
2160
|
insertCitation: e[6].citation,
|
|
1991
2161
|
kind: e[0] === "before" ? "insert_article_before" : "insert_article_after"
|
|
1992
|
-
}) }),
|
|
1993
|
-
|
|
1994
|
-
|
|
2162
|
+
}) }), zr = k([
|
|
2163
|
+
c,
|
|
2164
|
+
D,
|
|
1995
2165
|
G,
|
|
1996
|
-
|
|
1997
|
-
|
|
2166
|
+
E("[\\s\\S]*?(?=ins[eé]rer|ajouter)", { flags: "i" }),
|
|
2167
|
+
w(E("ins[eé]rer", { flags: "i" }), E("ajouter", { flags: "i" })),
|
|
1998
2168
|
Y,
|
|
1999
2169
|
J
|
|
2000
2170
|
], { value: (e, t) => W(t, {
|
|
2001
2171
|
contextText: "",
|
|
2002
2172
|
insertCitation: e[6].citation,
|
|
2003
|
-
kind:
|
|
2173
|
+
kind: S(e[0]),
|
|
2004
2174
|
targetReference: e[2]
|
|
2005
|
-
}) }),
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2175
|
+
}) }), Br = k([
|
|
2176
|
+
c,
|
|
2177
|
+
D,
|
|
2178
|
+
E("l['’ ]alin[eé]a", { flags: "i" }),
|
|
2179
|
+
E("[\\s\\S]*?(?=ins[eé]rer)", { flags: "i" }),
|
|
2180
|
+
E("ins[eé]rer", { flags: "i" }),
|
|
2011
2181
|
Y,
|
|
2012
2182
|
J
|
|
2013
2183
|
], { value: (e, t) => W(t, {
|
|
2014
2184
|
contextText: "",
|
|
2015
2185
|
insertCitation: e[6].citation,
|
|
2016
|
-
kind:
|
|
2017
|
-
}) }),
|
|
2186
|
+
kind: S(e[0])
|
|
2187
|
+
}) }), Vr = k([
|
|
2018
2188
|
K,
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2189
|
+
te,
|
|
2190
|
+
E("[\\s\\S]*?(?=ins[eé]rer|ajouter)", { flags: "i" }),
|
|
2191
|
+
w(E("ins[eé]rer", { flags: "i" }), E("ajouter", { flags: "i" })),
|
|
2022
2192
|
Y,
|
|
2023
2193
|
J
|
|
2024
2194
|
], { value: (e, t) => {
|
|
@@ -2026,62 +2196,62 @@ var Tr = M([ur, O("supprimer\\s+cet\\s+article", { flags: "i" })], { value: (e,
|
|
|
2026
2196
|
return W(t, {
|
|
2027
2197
|
contextText: q(n),
|
|
2028
2198
|
insertCitation: e[5].citation,
|
|
2029
|
-
kind:
|
|
2199
|
+
kind: _r(i),
|
|
2030
2200
|
targetReference: r,
|
|
2031
|
-
targetScope:
|
|
2201
|
+
targetScope: gr(i, r)
|
|
2032
2202
|
});
|
|
2033
|
-
} }),
|
|
2203
|
+
} }), Hr = k([
|
|
2034
2204
|
K,
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2205
|
+
c,
|
|
2206
|
+
D,
|
|
2207
|
+
jr,
|
|
2208
|
+
E("[\\s\\S]*?(?=ins[eé]rer)"),
|
|
2209
|
+
E("ins[eé]rer", { flags: "i" }),
|
|
2210
|
+
D,
|
|
2211
|
+
kr
|
|
2042
2212
|
], { value: (e, t) => W(t, {
|
|
2043
2213
|
contextText: q(e[0]),
|
|
2044
2214
|
insertCitation: e[7].citation,
|
|
2045
|
-
kind:
|
|
2215
|
+
kind: S(e[1]),
|
|
2046
2216
|
targetCitation: e[3].citation,
|
|
2047
2217
|
targetReference: X(e[0])
|
|
2048
|
-
}) }),
|
|
2218
|
+
}) }), Ur = k([
|
|
2049
2219
|
K,
|
|
2050
|
-
|
|
2051
|
-
|
|
2220
|
+
c,
|
|
2221
|
+
D,
|
|
2052
2222
|
G,
|
|
2053
|
-
|
|
2054
|
-
|
|
2223
|
+
E("[\\s\\S]*?(?=ins[eé]rer|ajouter)", { flags: "i" }),
|
|
2224
|
+
w(E("ins[eé]rer", { flags: "i" }), E("ajouter", { flags: "i" })),
|
|
2055
2225
|
Y,
|
|
2056
2226
|
J
|
|
2057
2227
|
], { value: (e, t) => W(t, {
|
|
2058
2228
|
contextText: q(e[0]),
|
|
2059
2229
|
insertCitation: e[7].citation,
|
|
2060
|
-
kind:
|
|
2230
|
+
kind: S(e[1]),
|
|
2061
2231
|
targetReference: X(e[0]) ?? e[3]
|
|
2062
|
-
}) }),
|
|
2232
|
+
}) }), Wr = w(Vr, Rr, zr, Br, Lr, k([
|
|
2063
2233
|
K,
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2234
|
+
c,
|
|
2235
|
+
D,
|
|
2236
|
+
jr,
|
|
2237
|
+
E("[\\s\\S]*?(?=supprimer|r[eé]diger)", { flags: "i" }),
|
|
2238
|
+
w(k([
|
|
2239
|
+
E("supprimer", {
|
|
2070
2240
|
flags: "i",
|
|
2071
2241
|
value: "delete_portion"
|
|
2072
2242
|
}),
|
|
2073
|
-
|
|
2074
|
-
|
|
2243
|
+
D,
|
|
2244
|
+
yr
|
|
2075
2245
|
], { value: (e) => ({
|
|
2076
2246
|
kind: e[0],
|
|
2077
2247
|
...e[2]
|
|
2078
|
-
}) }),
|
|
2079
|
-
|
|
2248
|
+
}) }), k([
|
|
2249
|
+
E("r[eé]diger\\s+ainsi", {
|
|
2080
2250
|
flags: "i",
|
|
2081
2251
|
value: "rewrite_portion"
|
|
2082
2252
|
}),
|
|
2083
|
-
|
|
2084
|
-
|
|
2253
|
+
D,
|
|
2254
|
+
yr,
|
|
2085
2255
|
Y,
|
|
2086
2256
|
J
|
|
2087
2257
|
], { value: (e) => ({
|
|
@@ -2099,24 +2269,24 @@ var Tr = M([ur, O("supprimer\\s+cet\\s+article", { flags: "i" })], { value: (e,
|
|
|
2099
2269
|
targetReference: X(e[0]) ?? n.targetReference,
|
|
2100
2270
|
targetScope: n.targetScope
|
|
2101
2271
|
});
|
|
2102
|
-
} }),
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2272
|
+
} }), Hr, Ur, k([
|
|
2273
|
+
vr,
|
|
2274
|
+
E("ins[eé]rer", { flags: "i" }),
|
|
2275
|
+
E(`[\\s\\S]*?(?=${u})`, { flags: "i" }),
|
|
2276
|
+
c,
|
|
2107
2277
|
Y,
|
|
2108
|
-
|
|
2278
|
+
f,
|
|
2109
2279
|
Y,
|
|
2110
|
-
|
|
2280
|
+
f
|
|
2111
2281
|
], { value: (e, t) => W(t, {
|
|
2112
2282
|
contextText: e[0],
|
|
2113
2283
|
insertCitation: e[8],
|
|
2114
|
-
kind:
|
|
2284
|
+
kind: S(e[3]),
|
|
2115
2285
|
targetCitation: e[6]
|
|
2116
|
-
}) }),
|
|
2286
|
+
}) }), Ir, Fr, k([
|
|
2117
2287
|
K,
|
|
2118
|
-
|
|
2119
|
-
k(
|
|
2288
|
+
E("compl[eé]ter", { flags: "i" }),
|
|
2289
|
+
T(k([D, G], { value: (e) => e[1] }), { default: null }),
|
|
2120
2290
|
Y,
|
|
2121
2291
|
J
|
|
2122
2292
|
], { value: (e, t) => W(t, {
|
|
@@ -2124,16 +2294,16 @@ var Tr = M([ur, O("supprimer\\s+cet\\s+article", { flags: "i" })], { value: (e,
|
|
|
2124
2294
|
insertCitation: e[4].citation,
|
|
2125
2295
|
kind: "insert_after",
|
|
2126
2296
|
targetReference: e[2] ?? X(e[0])
|
|
2127
|
-
}) }),
|
|
2297
|
+
}) }), Nr, Pr);
|
|
2128
2298
|
//#endregion
|
|
2129
2299
|
//#region src/lib/server/parsed_amendments.ts
|
|
2130
|
-
function
|
|
2300
|
+
function Gr(e) {
|
|
2131
2301
|
return e.replace(/\s+/gu, " ").trim();
|
|
2132
2302
|
}
|
|
2133
|
-
function
|
|
2134
|
-
return e.split(/\n/gu).map(
|
|
2303
|
+
function Kr(e) {
|
|
2304
|
+
return e.split(/\n/gu).map(Gr).filter(Boolean).join("\n");
|
|
2135
2305
|
}
|
|
2136
|
-
function
|
|
2306
|
+
function qr(e, t) {
|
|
2137
2307
|
let { start: n, stop: r } = t;
|
|
2138
2308
|
for (; n < r && /\s/u.test(e[n]);) n++;
|
|
2139
2309
|
for (; r > n && /\s/u.test(e[r - 1]);) r--;
|
|
@@ -2142,16 +2312,16 @@ function zr(e, t) {
|
|
|
2142
2312
|
stop: r
|
|
2143
2313
|
} : null;
|
|
2144
2314
|
}
|
|
2145
|
-
function
|
|
2146
|
-
return
|
|
2315
|
+
function Jr(e, t) {
|
|
2316
|
+
return ve(_e(e), t);
|
|
2147
2317
|
}
|
|
2148
|
-
function
|
|
2318
|
+
function Yr(e) {
|
|
2149
2319
|
return e === "before_article" || e === "on_article" || e === "after_article" ? e : "unknown";
|
|
2150
2320
|
}
|
|
2151
|
-
function
|
|
2321
|
+
function Xr(e) {
|
|
2152
2322
|
return {
|
|
2153
2323
|
articleLabel: e.targetArticleLabel ?? null,
|
|
2154
|
-
targetPosition:
|
|
2324
|
+
targetPosition: Yr(e.targetPosition),
|
|
2155
2325
|
alinea: e.targetAlinea ?? null,
|
|
2156
2326
|
alineaLabel: e.targetAlineaLabel ?? null,
|
|
2157
2327
|
subdivisionSourceId: e.targetSubdivisionSourceId ?? null,
|
|
@@ -2166,36 +2336,36 @@ function Z(e) {
|
|
|
2166
2336
|
sourceText: e.text
|
|
2167
2337
|
};
|
|
2168
2338
|
}
|
|
2169
|
-
function
|
|
2339
|
+
function Zr(e) {
|
|
2170
2340
|
return {
|
|
2171
2341
|
...e.originalTransformation === void 0 ? {} : { sourceOriginalTransformation: e.originalTransformation },
|
|
2172
2342
|
sourcePosition: e.position,
|
|
2173
2343
|
sourceText: e.text
|
|
2174
2344
|
};
|
|
2175
2345
|
}
|
|
2176
|
-
function
|
|
2346
|
+
function Qr(e) {
|
|
2177
2347
|
return {
|
|
2178
2348
|
...e?.originalTransformation === void 0 ? {} : { dispositifOriginalTransformation: e.originalTransformation },
|
|
2179
2349
|
...e === null ? {} : { dispositifPosition: e.position },
|
|
2180
2350
|
dispositifText: e?.text ?? null
|
|
2181
2351
|
};
|
|
2182
2352
|
}
|
|
2183
|
-
function
|
|
2353
|
+
function $r(e, t, n, r = Kr(e.slice(n.start, n.stop))) {
|
|
2184
2354
|
return {
|
|
2185
|
-
originalTransformation:
|
|
2355
|
+
originalTransformation: Jr(t, n),
|
|
2186
2356
|
position: n,
|
|
2187
2357
|
text: r
|
|
2188
2358
|
};
|
|
2189
2359
|
}
|
|
2190
|
-
function
|
|
2360
|
+
function ei(e) {
|
|
2191
2361
|
let t = e.dispositifHtml ?? e.dispositifText;
|
|
2192
2362
|
if (!t) return null;
|
|
2193
|
-
let n = e.dispositifHtml ?
|
|
2363
|
+
let n = e.dispositifHtml ? ge()(t) : O(t), r = n.output, i = qr(r, {
|
|
2194
2364
|
start: 0,
|
|
2195
2365
|
stop: r.length
|
|
2196
2366
|
});
|
|
2197
2367
|
return {
|
|
2198
|
-
dispositif: i === null ? null :
|
|
2368
|
+
dispositif: i === null ? null : $r(r, n, i),
|
|
2199
2369
|
simplifiedText: r,
|
|
2200
2370
|
transformation: n
|
|
2201
2371
|
};
|
|
@@ -2212,10 +2382,10 @@ function Q(e) {
|
|
|
2212
2382
|
return t === void 0 ? [] : Array.from({ length: e.count }, (e, n) => t + n);
|
|
2213
2383
|
}
|
|
2214
2384
|
if (e.type === "exclusion") return Q(e.left);
|
|
2215
|
-
for (let t of
|
|
2385
|
+
for (let t of a(e)) if (t.type === "alinéa" && typeof t.index == "number" && t.index > 0) return [t.index];
|
|
2216
2386
|
return [];
|
|
2217
2387
|
}
|
|
2218
|
-
function
|
|
2388
|
+
function ti(e, t) {
|
|
2219
2389
|
let n = Q(t);
|
|
2220
2390
|
return {
|
|
2221
2391
|
...e,
|
|
@@ -2223,11 +2393,11 @@ function qr(e, t) {
|
|
|
2223
2393
|
...n.length > 0 ? { alineas: n } : {}
|
|
2224
2394
|
};
|
|
2225
2395
|
}
|
|
2226
|
-
function
|
|
2396
|
+
function ni(e) {
|
|
2227
2397
|
return e.replace(/^\s*(?:[IVXLCDM]+)\s*(?:\.\s*)?[-–—]\s*/iu, "").replace(/^\s*(?:\d+°|[a-z]\))\s*/iu, "").trim();
|
|
2228
2398
|
}
|
|
2229
|
-
function
|
|
2230
|
-
let n = /^alin[eé]as?\s+(?:(\d+)|1er|premier)\b/iu.exec(
|
|
2399
|
+
function ri(e, t) {
|
|
2400
|
+
let n = /^alin[eé]as?\s+(?:(\d+)|1er|premier)\b/iu.exec(ni(t.text));
|
|
2231
2401
|
if (!n) return null;
|
|
2232
2402
|
let r = n[1] === void 0 ? 1 : Number.parseInt(n[1], 10);
|
|
2233
2403
|
return !Number.isFinite(r) || r < 1 ? null : {
|
|
@@ -2236,25 +2406,25 @@ function Yr(e, t) {
|
|
|
2236
2406
|
alineas: [r]
|
|
2237
2407
|
};
|
|
2238
2408
|
}
|
|
2239
|
-
function
|
|
2409
|
+
function ii(e, t) {
|
|
2240
2410
|
if (e) return e.unit === "article" && t.alinea !== null ? {
|
|
2241
2411
|
...e,
|
|
2242
2412
|
unit: "alinéa"
|
|
2243
2413
|
} : e;
|
|
2244
2414
|
}
|
|
2245
|
-
function
|
|
2246
|
-
return /^(?:apr[eè]s|avant|(?:au|a[uù])\s+d[eé]but|(?:a|à)\s+la\s+fin)\b/iu.test(
|
|
2415
|
+
function ai(e) {
|
|
2416
|
+
return /^(?:apr[eè]s|avant|(?:au|a[uù])\s+d[eé]but|(?:a|à)\s+la\s+fin)\b/iu.test(ni(e.text));
|
|
2247
2417
|
}
|
|
2248
|
-
function
|
|
2249
|
-
return
|
|
2418
|
+
function oi(e, t, n, r) {
|
|
2419
|
+
return $r(e, t, {
|
|
2250
2420
|
start: n.position.start,
|
|
2251
2421
|
stop: r.position.stop
|
|
2252
2422
|
});
|
|
2253
2423
|
}
|
|
2254
|
-
function
|
|
2424
|
+
function si(e) {
|
|
2255
2425
|
return /^\s*(?:[IVXLCDM]+)\s*(?:\.\s*)?[-–—]\s*(?!alin[eé]a\b)/iu.test(e.text);
|
|
2256
2426
|
}
|
|
2257
|
-
function
|
|
2427
|
+
function ci(e, t) {
|
|
2258
2428
|
let n = { ...t.position };
|
|
2259
2429
|
function r(t) {
|
|
2260
2430
|
let r = t.exec(e.slice(n.start, n.stop));
|
|
@@ -2263,29 +2433,29 @@ function ei(e, t) {
|
|
|
2263
2433
|
stop: n.stop
|
|
2264
2434
|
});
|
|
2265
2435
|
}
|
|
2266
|
-
return r(/^(?:(?:[IVXLCDM]+)\s*(?:\.\s*)?[-–—]\s*|[a-z]\)\s*(?:[.\-–—]\s*)*|\d+°\s*)/iu), r(/^[.\-–—]\s*/u), r(/^en\s+cons[ée]quence\s*,\s*/iu),
|
|
2436
|
+
return r(/^(?:(?:[IVXLCDM]+)\s*(?:\.\s*)?[-–—]\s*|[a-z]\)\s*(?:[.\-–—]\s*)*|\d+°\s*)/iu), r(/^[.\-–—]\s*/u), r(/^en\s+cons[ée]quence\s*,\s*/iu), qr(e, n);
|
|
2267
2437
|
}
|
|
2268
|
-
function
|
|
2269
|
-
return
|
|
2438
|
+
function li(e) {
|
|
2439
|
+
return p(e);
|
|
2270
2440
|
}
|
|
2271
|
-
function
|
|
2272
|
-
return
|
|
2441
|
+
function ui(e, t) {
|
|
2442
|
+
return Wr(new A(e.slice(0, t.stop), t.start)) ?? null;
|
|
2273
2443
|
}
|
|
2274
|
-
function $(t, n
|
|
2275
|
-
if (
|
|
2444
|
+
function $(e, t, n) {
|
|
2445
|
+
if (n) return $r(e, t, n.position, Kr(ue(e, n)));
|
|
2276
2446
|
}
|
|
2277
|
-
function
|
|
2447
|
+
function di(e, t) {
|
|
2278
2448
|
if (!e) return;
|
|
2279
2449
|
let n = structuredClone(e);
|
|
2280
|
-
for (let e of
|
|
2450
|
+
for (let e of g(n, { citations: !0 })) e.position !== void 0 && (e.originalTransformation = Jr(t, e.position));
|
|
2281
2451
|
return n;
|
|
2282
2452
|
}
|
|
2283
|
-
function
|
|
2284
|
-
let i =
|
|
2453
|
+
function fi(e, t, n, r) {
|
|
2454
|
+
let i = ci(e, n);
|
|
2285
2455
|
if (!i) return null;
|
|
2286
|
-
let a =
|
|
2456
|
+
let a = ui(e, i);
|
|
2287
2457
|
if (!a) return null;
|
|
2288
|
-
let o =
|
|
2458
|
+
let o = $r(e, t, i), s = di(a.targetReference, t), c = ti(r, s), l = li(o.text);
|
|
2289
2459
|
if (a.kind === "delete_article") return {
|
|
2290
2460
|
kind: "delete_article",
|
|
2291
2461
|
...Z(o),
|
|
@@ -2303,7 +2473,7 @@ function ii(e, t, n, r) {
|
|
|
2303
2473
|
},
|
|
2304
2474
|
targetOccurrence: l,
|
|
2305
2475
|
targetReference: s,
|
|
2306
|
-
targetScope:
|
|
2476
|
+
targetScope: ii(a.targetScope, c)
|
|
2307
2477
|
};
|
|
2308
2478
|
}
|
|
2309
2479
|
if (a.kind === "rewrite_portion") {
|
|
@@ -2320,7 +2490,7 @@ function ii(e, t, n, r) {
|
|
|
2320
2490
|
},
|
|
2321
2491
|
targetOccurrence: l,
|
|
2322
2492
|
targetReference: s,
|
|
2323
|
-
targetScope:
|
|
2493
|
+
targetScope: ii(a.targetScope, c),
|
|
2324
2494
|
replacementCitation: n,
|
|
2325
2495
|
replacementText: n.text
|
|
2326
2496
|
};
|
|
@@ -2375,19 +2545,19 @@ function ii(e, t, n, r) {
|
|
|
2375
2545
|
targetReference: s,
|
|
2376
2546
|
insertCitation: n,
|
|
2377
2547
|
insertText: n.text,
|
|
2378
|
-
targetScope:
|
|
2548
|
+
targetScope: ii(a.targetScope, c)
|
|
2379
2549
|
};
|
|
2380
2550
|
}
|
|
2381
2551
|
return null;
|
|
2382
2552
|
}
|
|
2383
|
-
function
|
|
2553
|
+
function pi(e, t) {
|
|
2384
2554
|
let n = [], r = 0, i = 0;
|
|
2385
2555
|
function a(r) {
|
|
2386
|
-
let a =
|
|
2556
|
+
let a = qr(e, {
|
|
2387
2557
|
start: i,
|
|
2388
2558
|
stop: r
|
|
2389
2559
|
});
|
|
2390
|
-
a !== null && n.push(
|
|
2560
|
+
a !== null && n.push($r(e, t, a));
|
|
2391
2561
|
}
|
|
2392
2562
|
function o(t) {
|
|
2393
2563
|
let n = Math.max(e.lastIndexOf("\n", t - 1), e.lastIndexOf("\r", t - 1));
|
|
@@ -2405,7 +2575,7 @@ function ai(e, t) {
|
|
|
2405
2575
|
continue;
|
|
2406
2576
|
}
|
|
2407
2577
|
if (r > 0) continue;
|
|
2408
|
-
let s = e.slice(t + 1), c = /[\n\r]/u.test(n), l = /[.;]/u.test(n), u = e.slice(i, l ? t + 1 : t), d = /^\s*(?:(?:[IVXLCDM]+)\s*[.\-–—]+\s*|\d+°\s*|[a-z]\)\s*|(?:Supprimer|Après|Avant|Compléter|Rédiger|Substituer|Remplacer)\b)/iu.test(s), f = c && /^\s*(?:R[eé]diger|Ins[eé]rer|Ajouter|Supprimer)\b/iu.test(s) &&
|
|
2578
|
+
let s = e.slice(t + 1), c = /[\n\r]/u.test(n), l = /[.;]/u.test(n), u = e.slice(i, l ? t + 1 : t), d = /^\s*(?:(?:[IVXLCDM]+)\s*[.\-–—]+\s*|\d+°\s*|[a-z]\)\s*|(?:Supprimer|Après|Avant|Compléter|Rédiger|Substituer|Remplacer)\b)/iu.test(s), f = c && /^\s*(?:R[eé]diger|Ins[eé]rer|Ajouter|Supprimer)\b/iu.test(s) && ai({
|
|
2409
2579
|
originalTransformation: void 0,
|
|
2410
2580
|
position: {
|
|
2411
2581
|
start: i,
|
|
@@ -2417,8 +2587,8 @@ function ai(e, t) {
|
|
|
2417
2587
|
}
|
|
2418
2588
|
return a(e.length), n;
|
|
2419
2589
|
}
|
|
2420
|
-
function
|
|
2421
|
-
let t =
|
|
2590
|
+
function mi(e) {
|
|
2591
|
+
let t = ei(e), n = t?.dispositif ?? null, r = Qr(n), i = [], a = [], o = Xr(e);
|
|
2422
2592
|
if (e.sourceFormat === "senat-ameli" && e.sourceKind === "S") return i.push({
|
|
2423
2593
|
code: "unsupported_sub_amendment",
|
|
2424
2594
|
message: "Les sous-amendements ne sont pas encore projetés."
|
|
@@ -2436,9 +2606,9 @@ function oi(e) {
|
|
|
2436
2606
|
});
|
|
2437
2607
|
else {
|
|
2438
2608
|
let { simplifiedText: e, transformation: r } = t, s = o, c = null;
|
|
2439
|
-
for (let t of
|
|
2440
|
-
|
|
2441
|
-
let n = c ?
|
|
2609
|
+
for (let t of pi(e, r)) {
|
|
2610
|
+
si(t) && (s = o, c = null);
|
|
2611
|
+
let n = c ? oi(e, r, c, t) : t, i = fi(e, r, n, s);
|
|
2442
2612
|
if (i) {
|
|
2443
2613
|
a.push(i), c = null, (i.target.alinea !== null || i.target.alineas) && (s = i.target);
|
|
2444
2614
|
continue;
|
|
@@ -2447,12 +2617,12 @@ function oi(e) {
|
|
|
2447
2617
|
c = n;
|
|
2448
2618
|
continue;
|
|
2449
2619
|
}
|
|
2450
|
-
let l =
|
|
2620
|
+
let l = ri(o, t);
|
|
2451
2621
|
if (l !== null) {
|
|
2452
2622
|
s = l;
|
|
2453
2623
|
continue;
|
|
2454
2624
|
}
|
|
2455
|
-
|
|
2625
|
+
ai(t) && (c = t);
|
|
2456
2626
|
}
|
|
2457
2627
|
a.length === 0 && (o.targetPosition === "after_article" || o.targetPosition === "before_article") && a.push({
|
|
2458
2628
|
kind: o.targetPosition === "before_article" ? "insert_article_before" : "insert_article_after",
|
|
@@ -2463,7 +2633,7 @@ function oi(e) {
|
|
|
2463
2633
|
}), a.length === 0 && i.push({
|
|
2464
2634
|
code: "unrecognized_dispositif",
|
|
2465
2635
|
message: "Le dispositif est présent mais aucune directive d'amendement n'a été reconnue.",
|
|
2466
|
-
...
|
|
2636
|
+
...Zr(n)
|
|
2467
2637
|
});
|
|
2468
2638
|
}
|
|
2469
2639
|
return {
|
|
@@ -2477,25 +2647,25 @@ function oi(e) {
|
|
|
2477
2647
|
}
|
|
2478
2648
|
//#endregion
|
|
2479
2649
|
//#region src/lib/server/senat_document_search.ts
|
|
2480
|
-
function
|
|
2650
|
+
function hi(e) {
|
|
2481
2651
|
return e.replace(/\u00a0/gu, " ").replace(/\s+/gu, " ").trim();
|
|
2482
2652
|
}
|
|
2483
|
-
function
|
|
2484
|
-
let t =
|
|
2653
|
+
function gi(e) {
|
|
2654
|
+
let t = C(e);
|
|
2485
2655
|
if (!t) return {
|
|
2486
2656
|
articleNumber: null,
|
|
2487
2657
|
label: e,
|
|
2488
2658
|
title: null
|
|
2489
2659
|
};
|
|
2490
|
-
let n =
|
|
2660
|
+
let n = hi(t.num ?? "") || null, r = hi(t.title ?? "") || null;
|
|
2491
2661
|
return {
|
|
2492
2662
|
articleNumber: n,
|
|
2493
2663
|
label: t.label,
|
|
2494
2664
|
title: r
|
|
2495
2665
|
};
|
|
2496
2666
|
}
|
|
2497
|
-
function
|
|
2498
|
-
let t =
|
|
2667
|
+
function _i(e) {
|
|
2668
|
+
let t = b(e), n = [], r = hi(t("section.akn-preamble").text());
|
|
2499
2669
|
return r && n.push({
|
|
2500
2670
|
anchor: "senat-expose-des-motifs",
|
|
2501
2671
|
articleNumber: null,
|
|
@@ -2505,9 +2675,9 @@ function li(e) {
|
|
|
2505
2675
|
label: "Exposé des motifs",
|
|
2506
2676
|
title: null
|
|
2507
2677
|
}), t("article.akn-article").each((e, r) => {
|
|
2508
|
-
let i = t(r), a = i.attr("id") || `akn-article-${e + 1}`, o =
|
|
2678
|
+
let i = t(r), a = i.attr("id") || `akn-article-${e + 1}`, o = hi(i.children("p.TCNumArticle").first().text()), s = `Article ${e + 1}`, c = gi(o || s), l = i.clone();
|
|
2509
2679
|
l.children("p.TCNumArticle").remove();
|
|
2510
|
-
let u =
|
|
2680
|
+
let u = hi(l.text());
|
|
2511
2681
|
u && n.push({
|
|
2512
2682
|
anchor: i.attr("id") || null,
|
|
2513
2683
|
articleNumber: c.articleNumber,
|
|
@@ -2519,40 +2689,40 @@ function li(e) {
|
|
|
2519
2689
|
});
|
|
2520
2690
|
}), n;
|
|
2521
2691
|
}
|
|
2522
|
-
function
|
|
2523
|
-
return
|
|
2692
|
+
function vi(e, t) {
|
|
2693
|
+
return Oe("sha256").update(JSON.stringify({
|
|
2524
2694
|
item: e,
|
|
2525
2695
|
metadata: t
|
|
2526
2696
|
})).digest("hex");
|
|
2527
2697
|
}
|
|
2528
2698
|
//#endregion
|
|
2529
2699
|
//#region src/lib/server/senat_document_sources.ts
|
|
2530
|
-
var
|
|
2531
|
-
function
|
|
2700
|
+
var yi = new Set(["senat.fr", "www.senat.fr"]), bi = "https://www.senat.fr";
|
|
2701
|
+
function xi(e) {
|
|
2532
2702
|
return e?.trim() || void 0;
|
|
2533
2703
|
}
|
|
2534
|
-
function
|
|
2704
|
+
function Si(e) {
|
|
2535
2705
|
try {
|
|
2536
|
-
let t = e.replace(/^\/+/, ""), n = /^https?:\/\//iu.test(e) ? new URL(e) : new URL(/^(?:akomantoso|leg)\//iu.test(t) ? `/${t}` : `/leg/${t}`,
|
|
2537
|
-
return
|
|
2706
|
+
let t = e.replace(/^\/+/, ""), n = /^https?:\/\//iu.test(e) ? new URL(e) : new URL(/^(?:akomantoso|leg)\//iu.test(t) ? `/${t}` : `/leg/${t}`, bi);
|
|
2707
|
+
return yi.has(n.hostname.toLowerCase()) ? n : void 0;
|
|
2538
2708
|
} catch {
|
|
2539
2709
|
return;
|
|
2540
2710
|
}
|
|
2541
2711
|
}
|
|
2542
|
-
function
|
|
2543
|
-
let t =
|
|
2712
|
+
function Ci(e) {
|
|
2713
|
+
let t = xi(e);
|
|
2544
2714
|
if (t === void 0) return {
|
|
2545
2715
|
publicUrl: null,
|
|
2546
2716
|
status: "no_url"
|
|
2547
2717
|
};
|
|
2548
|
-
let n =
|
|
2718
|
+
let n = Si(t);
|
|
2549
2719
|
if (n === void 0) return {
|
|
2550
2720
|
publicUrl: t,
|
|
2551
2721
|
status: "unsupported_source"
|
|
2552
2722
|
};
|
|
2553
2723
|
let r = n.pathname;
|
|
2554
2724
|
if (/^\/akomantoso\/[^/]+\.akn\.xml$/iu.test(r)) return {
|
|
2555
|
-
akomaNtosoUrl: `${
|
|
2725
|
+
akomaNtosoUrl: `${bi}${r}`,
|
|
2556
2726
|
publicUrl: n.toString(),
|
|
2557
2727
|
status: "available"
|
|
2558
2728
|
};
|
|
@@ -2561,17 +2731,17 @@ function hi(e) {
|
|
|
2561
2731
|
publicUrl: n.toString(),
|
|
2562
2732
|
status: "unsupported_source"
|
|
2563
2733
|
} : {
|
|
2564
|
-
akomaNtosoUrl: `${
|
|
2734
|
+
akomaNtosoUrl: `${bi}/akomantoso/${i.replace(/\.html$/iu, ".akn.xml")}`,
|
|
2565
2735
|
publicUrl: n.toString(),
|
|
2566
2736
|
status: "available"
|
|
2567
2737
|
};
|
|
2568
2738
|
}
|
|
2569
|
-
function
|
|
2739
|
+
function wi(e) {
|
|
2570
2740
|
return /^\s*(?:<\?xml\b[^>]*>\s*)?<akomaNtoso[\s/>]/iu.test(e);
|
|
2571
2741
|
}
|
|
2572
2742
|
//#endregion
|
|
2573
2743
|
//#region src/lib/alineas/alineas_numbers.ts
|
|
2574
|
-
var
|
|
2744
|
+
var Ti = {
|
|
2575
2745
|
"0150a855548f15a2af52ea057be53f5d": 1,
|
|
2576
2746
|
"039826cf379b94afefe90b25c6045ca0": 1,
|
|
2577
2747
|
"03a7e564b84662f4d957c51018e26244": 1,
|
|
@@ -21545,7 +21715,7 @@ var _i = {
|
|
|
21545
21715
|
d16d29c923bd60c7b095b66c6058fe60: 1664,
|
|
21546
21716
|
"1c14c2adf5cfda3220b2057160e10e91": 1665,
|
|
21547
21717
|
e44c55ca1ac46ff46420686a466c9fc6: 1665
|
|
21548
|
-
},
|
|
21718
|
+
}, Ei = "\np:has(.alinea) {\n margin: 0.6em 0;\n}\n.alinea {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.5em;\n height: 1.5em;\n padding: 0 0.3em;\n margin-right: 0.3em;\n font-size: 0.75em;\n font-weight: bold;\n color: #555;\n background-color: #f0f0f0;\n border: 1px solid #ccc;\n border-radius: 1em;\n vertical-align: middle;\n}\n", Di = "\nh1 {\n font-size: 1.8em;\n margin: 1em 0 0.5em 0;\n}\nh2 {\n font-size: 1.5em;\n margin: 0.9em 0 0.4em 0;\n}\nh3 {\n font-size: 1.3em;\n margin: 0.8em 0 0.4em 0;\n}\nh4 {\n font-size: 1.15em;\n margin: 0.7em 0 0.3em 0;\n}\nh5 {\n font-size: 1.05em;\n margin: 0.6em 0 0.3em 0;\n}\nh6 {\n font-size: 1em;\n margin: 0.5em 0 0.3em 0;\n}\n", Oi = "\n.expose-motifs-titre {\n font-size: 1.1em;\n font-weight: bold;\n color: #0070b9;\n margin: 1em 0 0.5em 0;\n}\n.expose-motifs {\n border-left: 3px solid #0070b9;\n padding-left: 1em;\n margin: 0.5em 0 1em 0;\n color: #333;\n}\n.expose-motifs p {\n margin: 0.5em 0;\n}\n", ki = "\nol {\n list-style: none;\n padding-left: 0;\n margin: 0.5em 0;\n counter-reset: list-counter;\n}\nol > li {\n counter-increment: list-counter;\n margin: 0.3em 0;\n padding-left: 2.3em;\n position: relative;\n}\nol > li::before {\n content: counter(list-counter);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.5em;\n height: 1.5em;\n padding: 0 0.3em;\n font-size: 0.75em;\n font-weight: bold;\n color: #555;\n background-color: #f0f0f0;\n border: 1px solid #ccc;\n border-radius: 1em;\n position: absolute;\n left: 0;\n top: 0.1em;\n}\n", Ai = "\n.cover-title {\n font-size: 1.8em;\n font-weight: bold;\n color: #0070b9;\n text-align: center;\n margin: 1em 0;\n}\n.cover-subtitle {\n font-size: 1.4em;\n font-weight: bold;\n color: #0070b9;\n text-align: center;\n margin: 0.8em 0;\n}\n.cover-info {\n text-align: center;\n margin: 0.3em 0;\n color: #333;\n}\n.cover-year {\n font-size: 2em;\n font-weight: bold;\n color: #0070b9;\n text-align: center;\n margin: 1em 0;\n}\n", ji = {
|
|
21549
21719
|
assnatetatagr: { bold: !0 },
|
|
21550
21720
|
assnatetatagrgr: { bold: !0 },
|
|
21551
21721
|
assnatetatatr: { bold: !0 },
|
|
@@ -21646,29 +21816,29 @@ var _i = {
|
|
|
21646
21816
|
assnatxl67: { align: "center" },
|
|
21647
21817
|
assnatenteteequilibre: { align: "center" }
|
|
21648
21818
|
};
|
|
21649
|
-
function
|
|
21650
|
-
let t = Object.keys(
|
|
21651
|
-
for (let n of t) if (e.includes(n)) return
|
|
21819
|
+
function Mi(e) {
|
|
21820
|
+
let t = Object.keys(ji).sort((e, t) => t.length - e.length);
|
|
21821
|
+
for (let n of t) if (e.includes(n)) return ji[n];
|
|
21652
21822
|
return null;
|
|
21653
21823
|
}
|
|
21654
|
-
function
|
|
21655
|
-
return
|
|
21824
|
+
function Ni(e) {
|
|
21825
|
+
return De.createHash("md5").update(e).digest("hex");
|
|
21656
21826
|
}
|
|
21657
|
-
function
|
|
21827
|
+
function Pi(e) {
|
|
21658
21828
|
return e ? /font-weight\s*:\s*(bold|[6-9]00|1000)/i.test(e) || /font-family\s*:\s*[^;]*\bBold\b/i.test(e) : !1;
|
|
21659
21829
|
}
|
|
21660
|
-
function
|
|
21830
|
+
function Fi(e) {
|
|
21661
21831
|
return e ? /font-style\s*:\s*italic/i.test(e) || /font-family\s*:\s*[^;]*\bItalic\b/i.test(e) : !1;
|
|
21662
21832
|
}
|
|
21663
|
-
function
|
|
21833
|
+
function Ii(e) {
|
|
21664
21834
|
if (!e || !/vertical-align\s*:\s*super/i.test(e)) return !1;
|
|
21665
21835
|
let t = e.match(/font-size\s*:\s*([\d.]+)pt/i);
|
|
21666
21836
|
return !(t && parseFloat(t[1]) < 8);
|
|
21667
21837
|
}
|
|
21668
|
-
function
|
|
21838
|
+
function Li(e) {
|
|
21669
21839
|
return e ? /vertical-align\s*:\s*sub/i.test(e) : !1;
|
|
21670
21840
|
}
|
|
21671
|
-
function
|
|
21841
|
+
function Ri(e) {
|
|
21672
21842
|
if (!e) return;
|
|
21673
21843
|
let t = [
|
|
21674
21844
|
"width",
|
|
@@ -21703,15 +21873,15 @@ function Ai(e) {
|
|
|
21703
21873
|
}
|
|
21704
21874
|
return n.length > 0 ? n.join("; ") : void 0;
|
|
21705
21875
|
}
|
|
21706
|
-
function
|
|
21876
|
+
function zi(e, t) {
|
|
21707
21877
|
return !!(e && /text-align\s*:\s*center/i.test(e) || t && /center/i.test(t));
|
|
21708
21878
|
}
|
|
21709
|
-
function
|
|
21879
|
+
function Bi(e) {
|
|
21710
21880
|
if (!e) return null;
|
|
21711
21881
|
let t = e.match(/text-align\s*:\s*(left|center|right|justify)/i);
|
|
21712
21882
|
return t ? t[1].toLowerCase() : null;
|
|
21713
21883
|
}
|
|
21714
|
-
function
|
|
21884
|
+
function Vi(e) {
|
|
21715
21885
|
if (!e) return null;
|
|
21716
21886
|
for (let [t, n] of [
|
|
21717
21887
|
[/assnat1Tome|assnatAN1PARTIE/i, 1],
|
|
@@ -21723,8 +21893,8 @@ function Ni(e) {
|
|
|
21723
21893
|
]) if (t.test(e)) return n;
|
|
21724
21894
|
return null;
|
|
21725
21895
|
}
|
|
21726
|
-
function
|
|
21727
|
-
let { keepAlignment: n = !0, removeEmptyParagraphs: r = !0, strictAlineas: i = !1 } = t, a =
|
|
21896
|
+
function Hi(e, t = {}) {
|
|
21897
|
+
let { keepAlignment: n = !0, removeEmptyParagraphs: r = !0, strictAlineas: i = !1 } = t, a = b(e, { xml: { decodeEntities: !1 } });
|
|
21728
21898
|
a("style, script, meta, link").remove(), a(".assnatHeader, .assnatFooter, .assnatHeaderLeft, .assnatHeaderandFooter").remove(), a(".assnatFARSautApres, .assnatFARSautAvant, .assnatFARSautPageNiv0, .assnatFARSautPageNiv1, .assnatFARSautPageNiv1PG").remove(), a(".assnatFARTT08Bleu").each((e, t) => {
|
|
21729
21899
|
let n = a(t).closest("table");
|
|
21730
21900
|
n.length > 0 && n.remove();
|
|
@@ -21749,7 +21919,7 @@ function Pi(e, t = {}) {
|
|
|
21749
21919
|
if (i.length !== 0 && !(n.parents("del").length > 0 || n.find("del img").length > 0) && !(i.parent("del").length > 0)) {
|
|
21750
21920
|
let e = i.attr();
|
|
21751
21921
|
if (e && (e.width === "45" && (e.height === "31" || e.height === "30") || parseInt(e.width || "0", 10) < 50 && parseInt(e.height || "0", 10) < 50) && r.includes("position:absolute")) {
|
|
21752
|
-
let t = (e.src || "").match(/^data:image\/png;base64,(.+)$/), r = t ?
|
|
21922
|
+
let t = (e.src || "").match(/^data:image\/png;base64,(.+)$/), r = t ? Ni(t[1]) : void 0, i = r ? ` data-image-hash="${r}"` : "";
|
|
21753
21923
|
n.replaceWith(`<span class="alinea"${i}></span>`);
|
|
21754
21924
|
return;
|
|
21755
21925
|
}
|
|
@@ -21768,7 +21938,7 @@ function Pi(e, t = {}) {
|
|
|
21768
21938
|
(!r || r === "\xA0") && n.remove();
|
|
21769
21939
|
}), a("span[style*=\"display:block\"][style*=\"position:absolute\"]:not(.alinea)").remove(), a("del").remove();
|
|
21770
21940
|
function o(e) {
|
|
21771
|
-
let t = a(e), n = t.attr("style"), r = e.tagName?.toLowerCase() || "", i =
|
|
21941
|
+
let t = a(e), n = t.attr("style"), r = e.tagName?.toLowerCase() || "", i = Pi(n) || r === "b" || r === "strong", o = Fi(n) || r === "i" || r === "em", s = Ii(n) || r === "sup", c = Li(n) || r === "sub", l = t.attr("class") || "";
|
|
21772
21942
|
return /bold/i.test(l) && (i = !0), /strongemphasis/i.test(l) ? i = !0 : /italic|emphasis/i.test(l) && (o = !0), {
|
|
21773
21943
|
bold: i,
|
|
21774
21944
|
italic: o,
|
|
@@ -21802,7 +21972,7 @@ function Pi(e, t = {}) {
|
|
|
21802
21972
|
c = e;
|
|
21803
21973
|
}
|
|
21804
21974
|
for (a("p").each((e, t) => {
|
|
21805
|
-
let r = a(t), i = r.attr("class") || "", o = r.attr("style"), s =
|
|
21975
|
+
let r = a(t), i = r.attr("class") || "", o = r.attr("style"), s = Vi(i);
|
|
21806
21976
|
if (i.includes("assnatFARCouvTitreD")) {
|
|
21807
21977
|
let e = r.html() || "";
|
|
21808
21978
|
r.replaceWith(`<p class="cover-subtitle">${e}</p>`);
|
|
@@ -21835,11 +22005,11 @@ function Pi(e, t = {}) {
|
|
|
21835
22005
|
let c = r.text().trim().startsWith("«");
|
|
21836
22006
|
if (s && !c) {
|
|
21837
22007
|
let e = a(`<h${s}>${r.html() || ""}</h${s}>`);
|
|
21838
|
-
n &&
|
|
22008
|
+
n && zi(o, i) && e.attr("align", "center"), r.replaceWith(e);
|
|
21839
22009
|
} else {
|
|
21840
|
-
let e =
|
|
22010
|
+
let e = Mi(i), t;
|
|
21841
22011
|
if (n) {
|
|
21842
|
-
let n =
|
|
22012
|
+
let n = Bi(o);
|
|
21843
22013
|
n && n !== "justify" && n !== "left" ? t = n : e?.align && (t = e.align);
|
|
21844
22014
|
}
|
|
21845
22015
|
if (r.removeAttr("style").removeAttr("class"), t && r.attr("align", t), e?.bold) {
|
|
@@ -21849,7 +22019,7 @@ function Pi(e, t = {}) {
|
|
|
21849
22019
|
}
|
|
21850
22020
|
}), a("h1, h2, h3, h4, h5, h6").each((e, t) => {
|
|
21851
22021
|
let r = a(t), i = r.attr("style"), o = r.attr("class");
|
|
21852
|
-
n &&
|
|
22022
|
+
n && zi(i, o) ? (r.removeAttr("style").removeAttr("class"), r.attr("align", "center")) : r.removeAttr("style").removeAttr("class");
|
|
21853
22023
|
}), a("a").each((e, t) => {
|
|
21854
22024
|
let n = a(t), r = n.attr("href"), i = n.attr("id"), o = { ...t.attribs || {} };
|
|
21855
22025
|
for (let e of Object.keys(o)) e !== "href" && e !== "id" && n.removeAttr(e);
|
|
@@ -21888,7 +22058,7 @@ function Pi(e, t = {}) {
|
|
|
21888
22058
|
}), a("br").each((e, t) => {
|
|
21889
22059
|
a(t).removeAttr("style").removeAttr("class");
|
|
21890
22060
|
}), a("table, tr, td, th, thead, tbody, tfoot").each((e, t) => {
|
|
21891
|
-
let n = a(t), r =
|
|
22061
|
+
let n = a(t), r = Ri(n.attr("style"));
|
|
21892
22062
|
n.removeAttr("style").removeAttr("class"), r && n.attr("style", r);
|
|
21893
22063
|
}), a("td, th").each((e, t) => {
|
|
21894
22064
|
let n = a(t), r = n.children();
|
|
@@ -21906,17 +22076,17 @@ function Pi(e, t = {}) {
|
|
|
21906
22076
|
!isNaN(e) && e > 1 && n.attr("style", `counter-reset: list-counter ${e - 1}`), n.attr("start", r);
|
|
21907
22077
|
}
|
|
21908
22078
|
}), a("li").each((e, t) => {
|
|
21909
|
-
let n = a(t), r =
|
|
22079
|
+
let n = a(t), r = Bi(n.attr("style"));
|
|
21910
22080
|
n.removeAttr("style").removeAttr("class"), r === "center" && n.attr("style", "text-align: center");
|
|
21911
22081
|
let i = n.html() || "", o = i.replace(/^(\s| | |\u00a0)+/, "");
|
|
21912
22082
|
o !== i && n.html(o);
|
|
21913
|
-
}),
|
|
22083
|
+
}), Ui(a), Wi(a, i);
|
|
21914
22084
|
let l = a("body").html() || a.html(), u = l.includes("class=\"alinea"), d = a("ol").length > 0, f = a("h1, h2, h3, h4, h5, h6").length > 0, p = l.includes("class=\"expose-motifs"), m = l.includes("class=\"cover-title\"") || l.includes("class=\"cover-subtitle\"") || l.includes("class=\"cover-info\"") || l.includes("class=\"cover-year\""), h = "";
|
|
21915
|
-
m && (h +=
|
|
22085
|
+
m && (h += Ai), f && (h += Di), p && (h += Oi), u && (h += Ei), d && (h += ki);
|
|
21916
22086
|
let g = h ? `<style>${h}</style>\n${l}` : l;
|
|
21917
|
-
return g = g.replace(/>\s+</g, "> <").replace(/\r\n/g, "\n").replace(/\r/g, "\n").replace(/\n{3,}/g, "\n\n").split("\n").map((e) => e.trim()).filter((e) => e.length > 0).join("\n"), g = g.replace(/ /g, "\xA0"), r && (g = g.replace(/<p[^>]*>\s*( | | |\u00a0|\s)*\s*<\/p>/gi, "").replace(/<p[^>]*>\s*<(strong|em|b|i)>\s*( | | |\u00a0|\s)*\s*<\/\1>\s*<\/p>/gi, "")), g = g.replace(/<span[^>]*>\s*<\/span>/gi, ""), g = g.replace(/ class=""/g, ""), g =
|
|
22087
|
+
return g = g.replace(/>\s+</g, "> <").replace(/\r\n/g, "\n").replace(/\r/g, "\n").replace(/\n{3,}/g, "\n\n").split("\n").map((e) => e.trim()).filter((e) => e.length > 0).join("\n"), g = g.replace(/ /g, "\xA0"), r && (g = g.replace(/<p[^>]*>\s*( | | |\u00a0|\s)*\s*<\/p>/gi, "").replace(/<p[^>]*>\s*<(strong|em|b|i)>\s*( | | |\u00a0|\s)*\s*<\/\1>\s*<\/p>/gi, "")), g = g.replace(/<span[^>]*>\s*<\/span>/gi, ""), g = g.replace(/ class=""/g, ""), g = Gi(g), g = g.replace(/<(strong|em|b|i|sup|sub)>\s*( | | |\u00a0|\s)*\s*<\/\1>/gi, "").replace(/<(strong|em|b|i)>( | | |\u00a0)+<\/\1>/gi, " ").replace(/<br\s*\/?>/gi, "<br/>").replace(/ +/g, " ").trim(), g;
|
|
21918
22088
|
}
|
|
21919
|
-
function
|
|
22089
|
+
function Ui(e) {
|
|
21920
22090
|
e("span[id]").each((t, n) => {
|
|
21921
22091
|
let r = e(n), i = r.attr("id"), a = n.attribs || {}, o = Object.keys(a);
|
|
21922
22092
|
if (o.length !== 1 || o[0] !== "id") return;
|
|
@@ -21939,13 +22109,13 @@ function Fi(e) {
|
|
|
21939
22109
|
l.trim() === u.trim() && (s.attr("id", i), r.replaceWith(r.html() || ""));
|
|
21940
22110
|
});
|
|
21941
22111
|
}
|
|
21942
|
-
function
|
|
22112
|
+
function Wi(e, t = !1) {
|
|
21943
22113
|
let n = e("body");
|
|
21944
22114
|
if (n.length === 0) return;
|
|
21945
22115
|
let r = n.find("span.alinea[data-image-hash]"), i = -1;
|
|
21946
22116
|
r.each((n, r) => {
|
|
21947
22117
|
let a = e(r), o = a.attr("data-image-hash"), s;
|
|
21948
|
-
if (o &&
|
|
22118
|
+
if (o && Ti[o] !== void 0 && (s = Ti[o]), s === void 0) {
|
|
21949
22119
|
if (t) throw Error(`Missing alinea number mapping for image hash: "${o}". Please extract images, review them, and update the mapping in "src/lib/alineas/alineas_numbers.ts".`);
|
|
21950
22120
|
a.remove();
|
|
21951
22121
|
return;
|
|
@@ -21957,11 +22127,11 @@ function Ii(e, t = !1) {
|
|
|
21957
22127
|
i = s, a.attr("data-alinea", String(s)), a.text(String(s)), a.removeAttr("data-image-hash");
|
|
21958
22128
|
});
|
|
21959
22129
|
}
|
|
21960
|
-
function
|
|
22130
|
+
function Gi(e) {
|
|
21961
22131
|
let t = e;
|
|
21962
22132
|
return t = t.replace(/<\/strong>(\s*)<strong>/gi, "$1"), t = t.replace(/<\/em>(\s*)<em>/gi, "$1"), t = t.replace(/<\/sup>(\s*)<sup>/gi, "$1"), t = t.replace(/<\/sub>(\s*)<sub>/gi, "$1"), t;
|
|
21963
22133
|
}
|
|
21964
|
-
function
|
|
22134
|
+
function Ki(e, t = {}) {
|
|
21965
22135
|
return `<!DOCTYPE html>
|
|
21966
22136
|
<html lang="fr">
|
|
21967
22137
|
<head>
|
|
@@ -21969,33 +22139,33 @@ function Ri(e, t = {}) {
|
|
|
21969
22139
|
<title>Document simplifié</title>
|
|
21970
22140
|
</head>
|
|
21971
22141
|
<body>
|
|
21972
|
-
${
|
|
22142
|
+
${Hi(e, t)}
|
|
21973
22143
|
</body>
|
|
21974
22144
|
</html>`;
|
|
21975
22145
|
}
|
|
21976
22146
|
//#endregion
|
|
21977
22147
|
//#region src/lib/server/text_parsers/transformers.ts
|
|
21978
|
-
function
|
|
22148
|
+
function qi(e, t) {
|
|
21979
22149
|
let n = "transformation_", r = {};
|
|
21980
|
-
for (let e of
|
|
22150
|
+
for (let e of j.readdirSync(t).toSorted()) if (e.startsWith(n) && e.endsWith(".json")) {
|
|
21981
22151
|
let i = e.slice(15, -5), a = i.split(".").map((e) => parseInt(e) - 1), o = r;
|
|
21982
22152
|
for (let e of a.slice(1)) {
|
|
21983
22153
|
let t = o.transformations ??= [];
|
|
21984
22154
|
for (; e >= t.length;) t.push({});
|
|
21985
22155
|
o = t[e];
|
|
21986
22156
|
}
|
|
21987
|
-
o.output =
|
|
21988
|
-
let { sourceMap: s, title: c } =
|
|
22157
|
+
o.output = j.readFileSync(ke.join(t, `${n}${i}.html`), { encoding: "utf-8" });
|
|
22158
|
+
let { sourceMap: s, title: c } = j.readJsonSync(ke.join(t, e), { encoding: "utf-8" });
|
|
21989
22159
|
o.sourceMap = s ?? [], o.title = c;
|
|
21990
22160
|
}
|
|
21991
|
-
return
|
|
22161
|
+
return Ji(r, e), r;
|
|
21992
22162
|
}
|
|
21993
|
-
function
|
|
21994
|
-
if (e.input = t, e.transformations !== void 0) for (let n of e.transformations)
|
|
22163
|
+
function Ji(e, t) {
|
|
22164
|
+
if (e.input = t, e.transformations !== void 0) for (let n of e.transformations) Ji(n, t), t = n.output;
|
|
21995
22165
|
return t;
|
|
21996
22166
|
}
|
|
21997
|
-
function
|
|
21998
|
-
if (
|
|
22167
|
+
function Yi(e, t, n = "1") {
|
|
22168
|
+
if (j.ensureDirSync(t), e.transformations === void 0) j.writeJsonSync(ke.join(t, `transformation_${n}.json`), {
|
|
21999
22169
|
sourceMap: e.sourceMap,
|
|
22000
22170
|
title: e.title
|
|
22001
22171
|
}, {
|
|
@@ -22003,24 +22173,24 @@ function Vi(e, t, n = "1") {
|
|
|
22003
22173
|
spaces: 2
|
|
22004
22174
|
});
|
|
22005
22175
|
else {
|
|
22006
|
-
|
|
22176
|
+
j.writeJsonSync(ke.join(t, `transformation_${n}.json`), { title: e.title }, {
|
|
22007
22177
|
encoding: "utf-8",
|
|
22008
22178
|
spaces: 2
|
|
22009
22179
|
});
|
|
22010
|
-
for (let [r, i] of e.transformations.entries())
|
|
22180
|
+
for (let [r, i] of e.transformations.entries()) Yi(i, t, `${n}.${r + 1}`);
|
|
22011
22181
|
}
|
|
22012
|
-
e.output !== void 0 &&
|
|
22182
|
+
e.output !== void 0 && j.writeFileSync(ke.join(t, `transformation_${n}.html`), e.output, { encoding: "utf-8" });
|
|
22013
22183
|
}
|
|
22014
22184
|
//#endregion
|
|
22015
22185
|
//#region src/lib/server/linkers/html.ts
|
|
22016
|
-
async function
|
|
22017
|
-
let _ = t ?? (e === void 0 ? void 0 : new
|
|
22186
|
+
async function Xi({ canutesDb: e, legiResolver: t, date: n, defaultTextId: r, htmlFilePath: i, htmlTransformationsInputDir: a, htmlTransformationsOutputDir: o, htmlWithLinksFilePath: s, htmlWithLinksOrReferencesFilePath: c, htmlWithLinksTransformationsOutputDir: l, htmlWithReferencesFilePath: u, linkBaseUrl: d, linkType: f, logIgnoredReferencesTypes: p, logPartialReferences: m, logReferences: h, referredLegifranceTextsInfosFilePath: g }) {
|
|
22187
|
+
let _ = t ?? (e === void 0 ? void 0 : new se(e));
|
|
22018
22188
|
if (_ === void 0) throw Error("A Canutes database or legal resolver is required");
|
|
22019
|
-
let v = await
|
|
22020
|
-
a === void 0 ? (y =
|
|
22189
|
+
let v = await j.readFile(i, { encoding: "utf-8" }), y;
|
|
22190
|
+
a === void 0 ? (y = ge({ removeAWithHref: !0 })(v), o !== void 0 && Yi(y, o)) : y = qi(v, a);
|
|
22021
22191
|
let b = [];
|
|
22022
22192
|
s !== void 0 && b.push("links"), c !== void 0 && b.push("links_or_references"), u !== void 0 && b.push("references");
|
|
22023
|
-
let { outputByType: x, referredLegifranceTextCountByCid: ee } = await
|
|
22193
|
+
let { outputByType: x, referredLegifranceTextCountByCid: ee } = await le({
|
|
22024
22194
|
legiResolver: _,
|
|
22025
22195
|
date: n,
|
|
22026
22196
|
defaultTextId: r,
|
|
@@ -22037,38 +22207,38 @@ async function Hi({ canutesDb: e, legiResolver: t, date: n, defaultTextId: r, ht
|
|
|
22037
22207
|
s !== void 0 && (S.links = s), c !== void 0 && (S.links_or_references = c), u !== void 0 && (S.references = u);
|
|
22038
22208
|
for (let [e, t] of Object.entries(x)) {
|
|
22039
22209
|
let n = S[e];
|
|
22040
|
-
n !== void 0 && await
|
|
22210
|
+
n !== void 0 && await j.writeFile(n, t.html, { encoding: "utf-8" });
|
|
22041
22211
|
}
|
|
22042
|
-
x.links !== void 0 && l !== void 0 &&
|
|
22212
|
+
x.links !== void 0 && l !== void 0 && Yi(ge()(x.links.html), l), g !== void 0 && await j.writeJson(g, ee, {
|
|
22043
22213
|
encoding: "utf-8",
|
|
22044
22214
|
spaces: 2
|
|
22045
22215
|
});
|
|
22046
22216
|
}
|
|
22047
22217
|
//#endregion
|
|
22048
22218
|
//#region src/lib/server/tables_of_contents.ts
|
|
22049
|
-
async function
|
|
22050
|
-
let i =
|
|
22051
|
-
for await (let e of
|
|
22219
|
+
async function Zi(e, t, n, r) {
|
|
22220
|
+
let i = qi(await j.readFile(e, { encoding: "utf-8" }), t), a = i.output, o = new A(a), s = await j.readJson(n, { encoding: "utf-8" });
|
|
22221
|
+
for await (let e of ce({
|
|
22052
22222
|
context: o,
|
|
22053
22223
|
tableOfContents: s,
|
|
22054
22224
|
transformation: i
|
|
22055
22225
|
}));
|
|
22056
|
-
await
|
|
22226
|
+
await j.writeJson(r, s, {
|
|
22057
22227
|
encoding: "utf-8",
|
|
22058
22228
|
spaces: 2
|
|
22059
22229
|
});
|
|
22060
22230
|
}
|
|
22061
|
-
async function
|
|
22062
|
-
let r =
|
|
22063
|
-
await
|
|
22231
|
+
async function Qi(e, t, n) {
|
|
22232
|
+
let r = qi(await j.readFile(e, { encoding: "utf-8" }), t).output, i = y(r);
|
|
22233
|
+
await j.writeJson(n, i, {
|
|
22064
22234
|
encoding: "utf-8",
|
|
22065
22235
|
spaces: 2
|
|
22066
22236
|
});
|
|
22067
22237
|
}
|
|
22068
22238
|
//#endregion
|
|
22069
22239
|
//#region src/lib/server/legi/resolvers.ts
|
|
22070
|
-
function
|
|
22071
|
-
return new
|
|
22240
|
+
function $i({ canutesDb: e }) {
|
|
22241
|
+
return new se(e);
|
|
22072
22242
|
}
|
|
22073
22243
|
//#endregion
|
|
22074
|
-
export {
|
|
22244
|
+
export { we as LegiResolver, Xi as addLinksOrReferencesToHtmlFile, Zi as addPositionsToTableOfContentsFile, Se as buildAndInstallTextTitlesInfos, Ce as buildTextTitlesInfos, $i as createLegiResolver, Ne as extractAssembleeAmendmentSearchItems, lr as extractAssembleeExposesDesMotifs, mr as extractSenatAmendmentSearchItems, Pe as hashAssembleeAmendmentSearchItem, dr as hashAssembleeSearchItem, hr as hashSenatAmendmentSearchItem, vi as hashSenatSearchItem, wi as isAkomaNtosoXml, fr as isoDateFromAssembleeDocument, ar as linkAkomaNtosoBillRaw, pn as linkAssembleeBillRaw, ir as parseAkomaNtosoBillRaw, mi as parseAmendment, fn as parseAssembleeBillRaw, ur as parseAssembleeDocumentSearchContent, _i as parseSenatDocumentSearchContent, qi as readTransformation, er as renderAkomaNtosoBillRaw, Ci as resolveSenatAkomaNtosoSource, Qi as simplifiedHtmlBillFileToTableOfContentsFile, Hi as simplifyWordHtml, Ki as simplifyWordHtmlToDocument, Yi as writeTransformation };
|