@tricoteuses/tisseuse 0.13.12 → 0.14.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/dist/{html-DhGw-Yqr.js → html-BKxA21Bq.js} +3118 -2926
- package/dist/index.js +64 -64
- package/dist/{resolver-DZS-DNp6.js → resolver-dqOM1G7A.js} +191 -137
- package/dist/server-f-legi.js +26 -17
- package/dist/server.js +1264 -564
- package/dist/src/lib/extractors/article_portions.d.ts +8 -0
- package/dist/src/lib/extractors/portion_references.d.ts +10 -0
- package/dist/src/lib/extractors/portion_references.test.d.ts +1 -0
- package/dist/src/lib/extractors/quoted_text.d.ts +20 -0
- package/dist/src/lib/extractors/table_of_contents.d.ts +18 -8
- package/dist/src/lib/extractors/table_of_contents.test.d.ts +1 -0
- package/dist/src/lib/index.d.ts +4 -4
- package/dist/src/lib/server/index.d.ts +2 -1
- package/dist/src/lib/server/parsed_amendments.d.ts +71 -0
- package/dist/src/lib/server/parsed_amendments.test.d.ts +1 -0
- package/dist/src/lib/server/parsed_bills.d.ts +6 -3
- package/dist/src/lib/text_parsers/action_citation_patterns.d.ts +2 -0
- package/dist/src/lib/text_parsers/action_citation_patterns.test.d.ts +1 -0
- package/dist/src/lib/text_parsers/action_occurrences.d.ts +3 -0
- package/dist/src/lib/text_parsers/action_occurrences.test.d.ts +1 -0
- package/dist/src/lib/text_parsers/action_position_cues.d.ts +12 -0
- package/dist/src/lib/text_parsers/action_position_cues.test.d.ts +1 -0
- package/dist/src/lib/text_parsers/action_target_scopes.d.ts +7 -0
- package/dist/src/lib/text_parsers/action_words.d.ts +10 -0
- package/dist/src/lib/text_parsers/amendment_action_directives.d.ts +17 -0
- package/dist/src/lib/text_parsers/articles.d.ts +17 -0
- package/dist/src/lib/text_parsers/citations.d.ts +4 -0
- package/dist/src/lib/text_parsers/numbers.d.ts +18 -15
- package/dist/src/lib/text_parsers/repeated_actions.d.ts +4 -0
- package/dist/src/lib/text_parsers/repeated_actions.test.d.ts +1 -0
- package/dist/src/scripts/shared/checkpoint_cli_options.d.ts +4 -0
- package/dist/src/scripts/shared/checkpoint_cli_options.test.d.ts +1 -0
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { E as
|
|
3
|
-
import * as
|
|
4
|
-
import { createHash as
|
|
5
|
-
import
|
|
6
|
-
import
|
|
1
|
+
import { C as e, D as t, E as n, Et as r, H as i, P as a, S as o, T as s, Tt as c, U as l, Y as u, _ as d, a as f, c as p, ct as m, d as h, ft as g, ht as _, m as ee, mt as v, n as y, o as b, pt as te, q as ne, t as re, v as x, vt as ie, w as ae, x as oe, y as se, z as S } from "./html-BKxA21Bq.js";
|
|
2
|
+
import { Ct as C, D as ce, E as le, N as ue, Q as de, Tt as w, gt as T, i as fe, j as pe, jt as E, kt as D, n as me, ot as he, pt as ge, r as _e, t as ve, wt as O } from "./resolver-dqOM1G7A.js";
|
|
3
|
+
import * as ye from "node:crypto";
|
|
4
|
+
import { createHash as k } from "node:crypto";
|
|
5
|
+
import A from "fs-extra";
|
|
6
|
+
import j from "node:path";
|
|
7
7
|
//#region src/lib/server/assemblee_amendment_search.ts
|
|
8
|
-
function
|
|
8
|
+
function M(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 v(e, t) {
|
|
|
13
13
|
}
|
|
14
14
|
return typeof n == "string" && n.trim() ? n.trim() : null;
|
|
15
15
|
}
|
|
16
|
-
function
|
|
16
|
+
function be(e) {
|
|
17
17
|
return e.replace(/\u00a0/gu, " ").replace(/\s+/gu, " ").trim();
|
|
18
18
|
}
|
|
19
|
-
function
|
|
20
|
-
return
|
|
19
|
+
function xe(e) {
|
|
20
|
+
return be(u(e).text());
|
|
21
21
|
}
|
|
22
|
-
function
|
|
23
|
-
let t =
|
|
24
|
-
|
|
22
|
+
function Se(e) {
|
|
23
|
+
let t = be([
|
|
24
|
+
M(e, [
|
|
25
25
|
"corps",
|
|
26
26
|
"contenuAuteur",
|
|
27
27
|
"dispositif"
|
|
28
28
|
]),
|
|
29
|
-
|
|
29
|
+
M(e, [
|
|
30
30
|
"corps",
|
|
31
31
|
"contenuAuteur",
|
|
32
32
|
"dispositifAmdtCreditPLF"
|
|
33
33
|
]),
|
|
34
|
-
|
|
34
|
+
M(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) => xe(e)).join("\n")), n = M(e, [
|
|
40
40
|
"corps",
|
|
41
41
|
"contenuAuteur",
|
|
42
42
|
"exposeSommaire"
|
|
43
|
-
]), r = n === null ? "" :
|
|
43
|
+
]), r = n === null ? "" : xe(n);
|
|
44
44
|
return [...t ? [{
|
|
45
45
|
content: t,
|
|
46
46
|
itemKind: "dispositif",
|
|
@@ -51,28 +51,37 @@ function x(e) {
|
|
|
51
51
|
label: "Exposé sommaire"
|
|
52
52
|
}] : []];
|
|
53
53
|
}
|
|
54
|
-
function
|
|
55
|
-
return
|
|
54
|
+
function Ce(e, t) {
|
|
55
|
+
return k("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/server/parsed_bills.ts
|
|
62
|
-
var
|
|
63
|
-
function
|
|
62
|
+
var we = /^expos[ée]\s+des\s+motifs\b/iu;
|
|
63
|
+
function N(e) {
|
|
64
64
|
return (e ?? "").replace(/\u00a0/g, " ").replace(/\s+/g, " ").trim();
|
|
65
65
|
}
|
|
66
|
-
function
|
|
67
|
-
return
|
|
66
|
+
function P(e) {
|
|
67
|
+
return N(e).toLowerCase().normalize("NFD").replace(/\p{Diacritic}/gu, "");
|
|
68
|
+
}
|
|
69
|
+
function Te(e) {
|
|
70
|
+
return g(N(e));
|
|
68
71
|
}
|
|
69
|
-
function
|
|
70
|
-
return
|
|
72
|
+
function Ee(e) {
|
|
73
|
+
return `_TocArt${Te(e).replace(/\s+/gu, "")}`;
|
|
71
74
|
}
|
|
72
|
-
function
|
|
73
|
-
return
|
|
75
|
+
function De(e, t) {
|
|
76
|
+
return e(t).closest(".assnatTOC6,.assnatTOC5,.assnatTOC4").length > 0;
|
|
74
77
|
}
|
|
75
|
-
function
|
|
78
|
+
function Oe(e) {
|
|
79
|
+
return P(e).replace(/[‐‑‒–—]/gu, "-").replace(/\s*\.\s*/gu, ".");
|
|
80
|
+
}
|
|
81
|
+
function ke(e) {
|
|
82
|
+
return Oe(e).replace(/[^a-z0-9]+/gu, "-").replace(/^-|-$/gu, "");
|
|
83
|
+
}
|
|
84
|
+
function Ae(e) {
|
|
76
85
|
switch (e.kind) {
|
|
77
86
|
case "insert_after":
|
|
78
87
|
case "insert_before": return e.insertText;
|
|
@@ -90,71 +99,71 @@ function te(e) {
|
|
|
90
99
|
default: return;
|
|
91
100
|
}
|
|
92
101
|
}
|
|
93
|
-
function
|
|
94
|
-
let t =
|
|
95
|
-
if (n?.[1] !== void 0) return
|
|
102
|
+
function je(e) {
|
|
103
|
+
let t = N(e.sourceText), n = /\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(t);
|
|
104
|
+
if (n?.[1] !== void 0) return te(n[1]);
|
|
96
105
|
}
|
|
97
|
-
function
|
|
98
|
-
let t =
|
|
106
|
+
function Me(e) {
|
|
107
|
+
let t = Ae(e), n = m(t ?? "");
|
|
99
108
|
if (n.length > 0 && t !== void 0) return n.map((e, r) => {
|
|
100
|
-
let i = e.
|
|
109
|
+
let i = e.start, a = n[r + 1]?.start ?? t.length, o = t.slice(i, a).trim();
|
|
101
110
|
return {
|
|
102
|
-
num:
|
|
111
|
+
num: e.num,
|
|
103
112
|
text: o
|
|
104
113
|
};
|
|
105
114
|
});
|
|
106
|
-
let r =
|
|
115
|
+
let r = je(e);
|
|
107
116
|
return r === void 0 ? [] : [{
|
|
108
117
|
num: r,
|
|
109
118
|
text: t ?? e.sourceText
|
|
110
119
|
}];
|
|
111
120
|
}
|
|
112
|
-
function
|
|
121
|
+
function Ne(e, t = /* @__PURE__ */ new Set()) {
|
|
113
122
|
if (e == null) return t;
|
|
114
123
|
if (Array.isArray(e)) {
|
|
115
|
-
for (let n of e)
|
|
124
|
+
for (let n of e) Ne(n, t);
|
|
116
125
|
return t;
|
|
117
126
|
}
|
|
118
127
|
if (typeof e != "object") return t;
|
|
119
128
|
let n = e;
|
|
120
129
|
n.type === "article" && typeof n.num == "string" && t.add(n.num);
|
|
121
|
-
for (let e of Object.values(n))
|
|
130
|
+
for (let e of Object.values(n)) Ne(e, t);
|
|
122
131
|
return t;
|
|
123
132
|
}
|
|
124
|
-
function
|
|
125
|
-
let t =
|
|
133
|
+
function Pe(e) {
|
|
134
|
+
let t = P(e.sourceText);
|
|
126
135
|
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);
|
|
127
136
|
}
|
|
128
|
-
function
|
|
129
|
-
return
|
|
137
|
+
function Fe(e) {
|
|
138
|
+
return N(e).replace(/[’']/gu, "'").replace(/[‐‑‒–—]/gu, "-");
|
|
130
139
|
}
|
|
131
|
-
function
|
|
132
|
-
let n = new
|
|
140
|
+
function Ie(e, t) {
|
|
141
|
+
let n = new C(e, t), r = de(n);
|
|
133
142
|
return typeof r != "string" || n.offset <= t ? null : {
|
|
134
143
|
date: r,
|
|
135
144
|
start: t,
|
|
136
145
|
stop: n.offset
|
|
137
146
|
};
|
|
138
147
|
}
|
|
139
|
-
function
|
|
148
|
+
function Le(e, t) {
|
|
140
149
|
let n = /\d/u.exec(e.slice(t));
|
|
141
150
|
if (!n) return null;
|
|
142
151
|
let r = t + n.index;
|
|
143
|
-
return e.slice(t, r).trim().length > 0 ? null :
|
|
152
|
+
return e.slice(t, r).trim().length > 0 ? null : Ie(e, r);
|
|
144
153
|
}
|
|
145
|
-
function
|
|
154
|
+
function Re(e) {
|
|
146
155
|
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);
|
|
147
156
|
for (; o !== -1;) {
|
|
148
157
|
let s = e.indexOf(a, o + 15), c = e.slice(o, o + 1400), l = t.exec(c);
|
|
149
158
|
if (l) {
|
|
150
|
-
let e =
|
|
159
|
+
let e = Le(c, l[0].length);
|
|
151
160
|
e && i.push(e.date);
|
|
152
161
|
}
|
|
153
162
|
let u = n.exec(c);
|
|
154
163
|
if (u) {
|
|
155
164
|
let e = /\barticle\s+\w/iu.exec(c), t = e === null ? c.slice(u[0].length) : c.slice(u[0].length, e.index);
|
|
156
165
|
for (r.lastIndex = 0; r.exec(t) !== null;) {
|
|
157
|
-
let e =
|
|
166
|
+
let e = Le(t, r.lastIndex);
|
|
158
167
|
e && /^\s+pour\s+les\s+autres\s+dispositions\s+fiscales\b/iu.test(t.slice(e.stop)) && i.push(e.date);
|
|
159
168
|
}
|
|
160
169
|
}
|
|
@@ -162,20 +171,20 @@ function se(e) {
|
|
|
162
171
|
}
|
|
163
172
|
return i;
|
|
164
173
|
}
|
|
165
|
-
function
|
|
166
|
-
let t =
|
|
174
|
+
function ze(e) {
|
|
175
|
+
let t = Re(Fe(e).toLowerCase()), n = Array.from(new Set(t));
|
|
167
176
|
return n.length === 1 ? n[0] : void 0;
|
|
168
177
|
}
|
|
169
|
-
function
|
|
170
|
-
return
|
|
178
|
+
function Be(e) {
|
|
179
|
+
return P(e).replace(/[’]/gu, "'").replace(/[‐‑‒–—]/gu, "-").replace(/^(?:(?:article\s+[^:]+|[a-z][.)]|[ivxlcdm]+\.|\d+°)\s*(?:-\s*)?)+/iu, "");
|
|
171
180
|
}
|
|
172
|
-
function
|
|
181
|
+
function F(e) {
|
|
173
182
|
return e?.type === "tag";
|
|
174
183
|
}
|
|
175
|
-
function
|
|
184
|
+
function Ve(e, t) {
|
|
176
185
|
return e.html(t) ?? "";
|
|
177
186
|
}
|
|
178
|
-
function
|
|
187
|
+
function He(e, t) {
|
|
179
188
|
let n = [], r = /* @__PURE__ */ new Set();
|
|
180
189
|
for (let i of e(t).find("a").get()) {
|
|
181
190
|
let a = e(i).attr("href") ?? "", o = /\/legifrance\/(articles|sections|textes)\/([^?#"]+)/u.exec(a);
|
|
@@ -183,111 +192,170 @@ function le(e, t) {
|
|
|
183
192
|
let s = o[1] === "articles" ? "article" : o[1] === "sections" ? "division" : "text", c = o[2].replace(/\.md$/u, ""), l = `${s}\0${c}`;
|
|
184
193
|
if (r.has(l)) continue;
|
|
185
194
|
r.add(l);
|
|
186
|
-
let u =
|
|
195
|
+
let u = N(e(i).text());
|
|
187
196
|
n.push({
|
|
188
197
|
id: c,
|
|
189
|
-
...
|
|
198
|
+
...Ue(e, t, i) ? { insideFrenchQuotes: !0 } : {},
|
|
190
199
|
...u ? { text: u } : {},
|
|
191
200
|
type: s
|
|
192
201
|
});
|
|
193
202
|
}
|
|
194
203
|
return n;
|
|
195
204
|
}
|
|
196
|
-
function
|
|
197
|
-
let r =
|
|
205
|
+
function Ue(e, t, n) {
|
|
206
|
+
let r = We(e, t, n);
|
|
198
207
|
return (r.match(/«/gu) ?? []).length > (r.match(/»/gu) ?? []).length;
|
|
199
208
|
}
|
|
200
|
-
function
|
|
209
|
+
function We(e, t, n) {
|
|
201
210
|
if (t === n) return "";
|
|
202
211
|
if (t.type === "text") return t.data ?? "";
|
|
203
|
-
if (!
|
|
212
|
+
if (!F(t)) return "";
|
|
204
213
|
let r = "";
|
|
205
214
|
for (let i of e(t).contents().get()) {
|
|
206
215
|
if (i === n) return r;
|
|
207
|
-
if (
|
|
216
|
+
if (F(i) && e.contains(i, n)) return r + We(e, i, n);
|
|
208
217
|
r += e(i).text();
|
|
209
218
|
}
|
|
210
219
|
return r;
|
|
211
220
|
}
|
|
212
|
-
function
|
|
213
|
-
return t.map((t) =>
|
|
214
|
-
}
|
|
215
|
-
function P(e) {
|
|
216
|
-
let t = E(e).replace(/\s+:\s+/u, " : "), n = w.exec(t), r = n?.[1]?.trim();
|
|
217
|
-
if (!r) return null;
|
|
218
|
-
let i = r.replace(/\s+/gu, ""), a = n?.[2]?.trim();
|
|
219
|
-
return {
|
|
220
|
-
label: `Article ${r}`,
|
|
221
|
-
num: i,
|
|
222
|
-
title: a
|
|
223
|
-
};
|
|
221
|
+
function Ge(e, t) {
|
|
222
|
+
return t.map((t) => N(e(t).text())).filter(Boolean).join("\n");
|
|
224
223
|
}
|
|
225
|
-
function
|
|
226
|
-
let
|
|
227
|
-
return !
|
|
224
|
+
function Ke(t) {
|
|
225
|
+
let n = P(t);
|
|
226
|
+
return !n || we.test(n) ? "noise" : e.test(t) ? "directive_candidate" : "context";
|
|
228
227
|
}
|
|
229
|
-
async function
|
|
230
|
-
if (
|
|
228
|
+
async function qe(e, t, n) {
|
|
229
|
+
if (n === void 0) throw Error("A document date is required to add links to legal references.");
|
|
231
230
|
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.");
|
|
232
|
-
let { output:
|
|
233
|
-
date:
|
|
231
|
+
let { output: r } = await y({
|
|
232
|
+
date: n,
|
|
234
233
|
html: e,
|
|
235
|
-
legiResolver: t.legiResolver ?? new
|
|
234
|
+
legiResolver: t.legiResolver ?? new h(t.canutesDb),
|
|
236
235
|
linkBaseUrl: t.linkBaseUrl,
|
|
237
236
|
linkType: t.linkType,
|
|
238
237
|
logIgnoredReferencesTypes: t.logIgnoredReferencesTypes,
|
|
239
238
|
logPartialReferences: t.logPartialReferences,
|
|
240
239
|
logReferences: t.logReferences
|
|
241
240
|
});
|
|
242
|
-
return
|
|
241
|
+
return r ?? e;
|
|
243
242
|
}
|
|
244
|
-
function
|
|
243
|
+
function Je(e, t) {
|
|
245
244
|
let n = e(t).closest("h1,h2,h3,h4,h5,h6,p,td,th").get(0), r = e(t).closest("table").get(0);
|
|
246
|
-
return
|
|
245
|
+
return F(r) && F(n) && e(n).parents("table").get(0) === r ? r : F(n) ? n : t;
|
|
247
246
|
}
|
|
248
|
-
function
|
|
249
|
-
|
|
247
|
+
function Ye(e, t, n, r) {
|
|
248
|
+
if (t.has(r.container)) return;
|
|
249
|
+
let i = r.id ?? Ee(r.num ?? r.label);
|
|
250
|
+
n.has(i) || (n.add(i), t.add(r.container), e.push({
|
|
251
|
+
id: i,
|
|
252
|
+
label: r.label,
|
|
253
|
+
num: r.num,
|
|
254
|
+
title: r.title,
|
|
255
|
+
element: r.element,
|
|
256
|
+
container: r.container
|
|
257
|
+
}));
|
|
250
258
|
}
|
|
251
|
-
function
|
|
259
|
+
function Xe(e) {
|
|
252
260
|
let t = [], n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set();
|
|
253
261
|
e("a[id], span[id], h1[id], h2[id], h3[id], h4[id], h5[id], h6[id]").each((i, a) => {
|
|
254
|
-
|
|
262
|
+
if (De(e, a)) return;
|
|
263
|
+
let o = v(N(e(a).text()));
|
|
255
264
|
if (!o) return;
|
|
256
265
|
let s = e(a).attr("id");
|
|
257
266
|
if (!s || r.has(s)) return;
|
|
258
|
-
let c =
|
|
259
|
-
|
|
267
|
+
let c = Je(e, a);
|
|
268
|
+
Ye(t, n, r, {
|
|
260
269
|
id: s,
|
|
261
270
|
...o,
|
|
262
271
|
element: a,
|
|
263
272
|
container: c
|
|
264
|
-
})
|
|
273
|
+
});
|
|
265
274
|
}), e("h1:not([id]), h2:not([id]), h3:not([id]), h4:not([id]), h5:not([id]), h6:not([id])").each((i, a) => {
|
|
266
275
|
if (n.has(a)) return;
|
|
267
|
-
let o =
|
|
268
|
-
|
|
269
|
-
let s = I(o);
|
|
270
|
-
r.has(s) || (r.add(s), n.add(a), t.push({
|
|
271
|
-
id: s,
|
|
276
|
+
let o = v(N(e(a).text()));
|
|
277
|
+
o && Ye(t, n, r, {
|
|
272
278
|
...o,
|
|
273
279
|
element: a,
|
|
274
280
|
container: a
|
|
275
|
-
})
|
|
281
|
+
});
|
|
276
282
|
});
|
|
277
283
|
let i = e("body *");
|
|
278
284
|
return t.sort((e, t) => i.index(e.container) - i.index(t.container)), t;
|
|
279
285
|
}
|
|
280
|
-
function
|
|
286
|
+
function Ze(e, t) {
|
|
287
|
+
if (De(e, t)) return !1;
|
|
288
|
+
let n = t.tagName?.toLowerCase();
|
|
289
|
+
if (n !== "p") return /^h[1-6]$/u.test(n ?? "");
|
|
290
|
+
let r = e(t).attr("style") ?? "", i = e(t).html() ?? "";
|
|
291
|
+
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));
|
|
292
|
+
}
|
|
293
|
+
function Qe(e) {
|
|
294
|
+
let t = [], n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set();
|
|
295
|
+
return e("p.assnat9ArticleNum,h1,h2,h3,h4,h5,h6,p").each((i, a) => {
|
|
296
|
+
if (De(e, a) || !e(a).hasClass("assnat9ArticleNum") && !Ze(e, a)) return;
|
|
297
|
+
let o = v(e(a).text());
|
|
298
|
+
o && Ye(t, n, r, {
|
|
299
|
+
...o,
|
|
300
|
+
element: a,
|
|
301
|
+
container: a
|
|
302
|
+
});
|
|
303
|
+
}), t;
|
|
304
|
+
}
|
|
305
|
+
function $e(e) {
|
|
306
|
+
let t = P(Te(e ?? "")).replace(/[()]/gu, "").trim();
|
|
307
|
+
if (!t || t === "liminaire") return;
|
|
308
|
+
if (t === "unique") return {
|
|
309
|
+
base: 1,
|
|
310
|
+
suffixOrder: 0,
|
|
311
|
+
text: t
|
|
312
|
+
};
|
|
313
|
+
let n = /^(?:(\d+)|1er|premier)(?:\s+([a-z]+))?$/u.exec(t);
|
|
314
|
+
if (!n) return;
|
|
315
|
+
let r = n[1] === void 0 ? 1 : Number.parseInt(n[1], 10), i = n[2], a = i === void 0 ? 0 : et(i);
|
|
316
|
+
if (a !== void 0) return {
|
|
317
|
+
base: r,
|
|
318
|
+
suffixOrder: a,
|
|
319
|
+
text: t
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
function et(e) {
|
|
323
|
+
let t = new C(e), n = he(t);
|
|
324
|
+
if (!(n === void 0 || t.offset !== e.length) && !(typeof n != "object" || !n || !("value" in n) || typeof n.value != "number")) return n.value - 1;
|
|
325
|
+
}
|
|
326
|
+
function tt(e) {
|
|
327
|
+
let t = [], n = e.map((e) => ({
|
|
328
|
+
heading: e,
|
|
329
|
+
token: $e(e.num)
|
|
330
|
+
}));
|
|
331
|
+
n.filter(({ token: e }) => e?.text === "unique").length > 0 && e.length > 1 && t.push("Article unique appears with other articles");
|
|
332
|
+
let r;
|
|
333
|
+
for (let { heading: e, token: i } of n) if (!(i === void 0 || i.text === "unique")) {
|
|
334
|
+
if (r !== void 0) {
|
|
335
|
+
let n = r.base * 100 + r.suffixOrder;
|
|
336
|
+
i.base * 100 + i.suffixOrder <= n ? t.push(`Article ${e.num ?? e.label} is out of order`) : (i.base === r.base && i.suffixOrder > r.suffixOrder + 1 || r.suffixOrder === 0 && i.suffixOrder === 0 && i.base > r.base + 1) && t.push(`Missing article between ${r.text} and ${i.text}`);
|
|
337
|
+
} else i.suffixOrder > 0 && t.push(`Missing article before ${i.text}`);
|
|
338
|
+
r = i;
|
|
339
|
+
}
|
|
340
|
+
t.length > 0 && process.env.TISSEUSE_WARN_ASSEMBLEE_HEADING_SEQUENCE === "1" && console.warn("Incoherent Assemblée article heading sequence", { issues: t });
|
|
341
|
+
}
|
|
342
|
+
function nt(e, { warn: t = !0 } = {}) {
|
|
343
|
+
let n = Xe(e);
|
|
344
|
+
if (n.length > 0) return t && tt(n), n;
|
|
345
|
+
let r = Qe(e);
|
|
346
|
+
return t && tt(r), r;
|
|
347
|
+
}
|
|
348
|
+
function rt(e) {
|
|
281
349
|
let t = e.next;
|
|
282
350
|
for (; t !== null;) {
|
|
283
|
-
if (
|
|
351
|
+
if (F(t)) return t;
|
|
284
352
|
t = t.next;
|
|
285
353
|
}
|
|
286
354
|
return null;
|
|
287
355
|
}
|
|
288
|
-
function
|
|
356
|
+
function it(e, t, n) {
|
|
289
357
|
let r = [t.container], i = n?.container;
|
|
290
|
-
for (let e =
|
|
358
|
+
for (let e = rt(t.container); e !== null && e !== i; e = rt(e)) r.push(e);
|
|
291
359
|
if (r.length > 1) return r;
|
|
292
360
|
let a = e("body *").index(t.container), o = i ? e("body *").index(i) : -1;
|
|
293
361
|
return e("body > *").get().filter((t) => {
|
|
@@ -295,7 +363,7 @@ function ge(e, t, n) {
|
|
|
295
363
|
return n >= a && (o === -1 || n < o);
|
|
296
364
|
});
|
|
297
365
|
}
|
|
298
|
-
function
|
|
366
|
+
function at(e, t) {
|
|
299
367
|
let n = [], r = /* @__PURE__ */ new Set();
|
|
300
368
|
for (let i of t) {
|
|
301
369
|
let t = "p,li,table", a = e(i).is(t) ? [i] : e(i).find(t).get();
|
|
@@ -303,98 +371,96 @@ function _e(e, t) {
|
|
|
303
371
|
}
|
|
304
372
|
return n;
|
|
305
373
|
}
|
|
306
|
-
function
|
|
374
|
+
function ot(e, t, n) {
|
|
307
375
|
let r = [], i = !1;
|
|
308
|
-
for (let a of
|
|
309
|
-
let n =
|
|
376
|
+
for (let a of at(e, n)) {
|
|
377
|
+
let n = N(e(a).text());
|
|
310
378
|
if (!n) continue;
|
|
311
|
-
|
|
312
|
-
let o = i ? "noise" :
|
|
379
|
+
we.test(n) && (i = !0);
|
|
380
|
+
let o = i ? "noise" : Ke(n), s = `${t}-b${r.length + 1}`;
|
|
313
381
|
e(a).attr("data-pjl-parsed-article-id", t), e(a).attr("data-pjl-parsed-block-id", s), r.push({
|
|
314
382
|
id: s,
|
|
315
383
|
articleId: t,
|
|
316
384
|
kind: o,
|
|
317
|
-
links:
|
|
385
|
+
links: He(e, a),
|
|
318
386
|
text: n,
|
|
319
|
-
html:
|
|
387
|
+
html: Ve(e, a)
|
|
320
388
|
});
|
|
321
389
|
}
|
|
322
390
|
return r;
|
|
323
391
|
}
|
|
324
|
-
function
|
|
392
|
+
function st(e, t) {
|
|
325
393
|
if (t.length === 0) return e;
|
|
326
394
|
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>`;
|
|
327
395
|
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}`;
|
|
328
396
|
}
|
|
329
|
-
function
|
|
330
|
-
let
|
|
331
|
-
for (let e of
|
|
332
|
-
let
|
|
333
|
-
i !==
|
|
397
|
+
function ct(e) {
|
|
398
|
+
let t = u(e);
|
|
399
|
+
for (let e of nt(t, { warn: !1 })) {
|
|
400
|
+
let n = Ee(e.num ?? e.label.replace(/^Article\s+/iu, "")), r = t(e.element), i = r.attr("id");
|
|
401
|
+
i !== n && (i?.startsWith("_Toc") && !lt(t, i, e.element) && r.before(t("<span></span>").attr("id", i)), r.attr("id", n));
|
|
334
402
|
}
|
|
335
|
-
let
|
|
336
|
-
for (let [e,
|
|
337
|
-
let i =
|
|
403
|
+
let n = nt(t);
|
|
404
|
+
for (let [e, r] of n.entries()) {
|
|
405
|
+
let i = it(t, r, n[e + 1]).flatMap((e) => t(e).is("span.alinea[data-alinea]") ? [e] : t(e).find("span.alinea[data-alinea]").get());
|
|
338
406
|
for (let e of i) {
|
|
339
|
-
let
|
|
340
|
-
if (!
|
|
341
|
-
let i = `${
|
|
342
|
-
if (
|
|
343
|
-
let a =
|
|
344
|
-
a && a !== i ?
|
|
407
|
+
let n = t(e).attr("data-alinea")?.trim();
|
|
408
|
+
if (!n) continue;
|
|
409
|
+
let i = `${r.id}-alinea-${n.replace(/\s+/gu, "")}`;
|
|
410
|
+
if (lt(t, i, e)) continue;
|
|
411
|
+
let a = t(e).attr("id");
|
|
412
|
+
a && a !== i ? t(e).before(t("<span></span>").attr("id", i)) : t(e).attr("id", i);
|
|
345
413
|
}
|
|
346
414
|
}
|
|
347
|
-
return
|
|
415
|
+
return t.html();
|
|
348
416
|
}
|
|
349
|
-
function
|
|
417
|
+
function lt(e, t, n) {
|
|
350
418
|
for (let r of e("[id]").get()) if (r !== n && e(r).attr("id") === t) return !0;
|
|
351
419
|
return !1;
|
|
352
420
|
}
|
|
353
|
-
function
|
|
354
|
-
let n =
|
|
421
|
+
function ut(e, t) {
|
|
422
|
+
let n = Be("sourceText" in t ? t.sourceText : "");
|
|
355
423
|
if (n) return e.filter((e) => e.kind === "directive_candidate").find((e) => {
|
|
356
|
-
let t =
|
|
424
|
+
let t = Be(e.text);
|
|
357
425
|
return t.length > 0 && (n.includes(t) || t.includes(n));
|
|
358
426
|
});
|
|
359
427
|
}
|
|
360
|
-
function
|
|
428
|
+
function dt(e, t) {
|
|
361
429
|
if (t) return t.blockIds.map((t) => e.get(t)).find((e) => e?.kind === "directive_candidate");
|
|
362
430
|
}
|
|
363
|
-
function
|
|
431
|
+
function ft(e) {
|
|
364
432
|
return e?.links.filter((e) => !e.insideFrenchQuotes && (e.type === "article" || e.type === "division")).map((e) => e.id) ?? [];
|
|
365
433
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
/^(\d+°)\s+/u,
|
|
369
|
-
/^([a-z])\)\s+/iu,
|
|
370
|
-
/^([ivxlcdm]+)\)\s+/iu
|
|
371
|
-
];
|
|
372
|
-
function Ee(e) {
|
|
373
|
-
let t = E(e);
|
|
434
|
+
function pt(e) {
|
|
435
|
+
let t = N(e);
|
|
374
436
|
if (!t) return;
|
|
375
|
-
let n =
|
|
376
|
-
return n
|
|
437
|
+
let n = ne(t);
|
|
438
|
+
return n ? n.level : t.endsWith(":") ? 0 : void 0;
|
|
377
439
|
}
|
|
378
|
-
function
|
|
440
|
+
function mt(e) {
|
|
379
441
|
let t = /* @__PURE__ */ new Map(), n = [];
|
|
380
442
|
for (let r of e) {
|
|
381
|
-
let e =
|
|
443
|
+
let e = pt(r.text);
|
|
382
444
|
if (e === void 0) {
|
|
383
|
-
t.set(r.id, [...n, r]);
|
|
445
|
+
t.set(r.id, [...n.map((e) => e.block), r]);
|
|
384
446
|
continue;
|
|
385
447
|
}
|
|
386
|
-
|
|
448
|
+
for (; n.length > 0 && n[n.length - 1].level >= e;) n.pop();
|
|
449
|
+
t.set(r.id, [...n.map((e) => e.block), r]), n.push({
|
|
450
|
+
level: e,
|
|
451
|
+
block: r
|
|
452
|
+
});
|
|
387
453
|
}
|
|
388
454
|
return t;
|
|
389
455
|
}
|
|
390
|
-
function
|
|
456
|
+
function ht(e, t) {
|
|
391
457
|
let n = [], r = /* @__PURE__ */ new Set();
|
|
392
458
|
for (let i of [...e ?? [], ...t]) i !== void 0 && (r.has(i.id) || (r.add(i.id), n.push(i)));
|
|
393
459
|
return n;
|
|
394
460
|
}
|
|
395
|
-
function
|
|
461
|
+
function gt(e, t, n) {
|
|
396
462
|
if (!t) return;
|
|
397
|
-
let r =
|
|
463
|
+
let r = ht(e, t.blockIds.map((e) => n.get(e)).filter((e) => e !== void 0));
|
|
398
464
|
if (r.length === 0) return;
|
|
399
465
|
let i = r.map((e) => e.id);
|
|
400
466
|
if (i.length === t.blockIds.length && i.every((e, n) => e === t.blockIds[n])) return;
|
|
@@ -409,7 +475,7 @@ function ke(e, t, n) {
|
|
|
409
475
|
}
|
|
410
476
|
};
|
|
411
477
|
}
|
|
412
|
-
function
|
|
478
|
+
function _t(e) {
|
|
413
479
|
let t = [], n = 0;
|
|
414
480
|
for (let r of e.blocks) {
|
|
415
481
|
let i = e.directiveText.indexOf(r.text, n);
|
|
@@ -423,7 +489,7 @@ function Ae(e) {
|
|
|
423
489
|
}
|
|
424
490
|
return t;
|
|
425
491
|
}
|
|
426
|
-
function
|
|
492
|
+
function vt(e, t, n) {
|
|
427
493
|
let { start: r, stop: i } = n.sourcePosition, a = t.filter((e) => e.stop >= r && e.start <= i);
|
|
428
494
|
if (a.length === 0) return;
|
|
429
495
|
let o = a[0], s = a[a.length - 1], c = o.start, l = s.stop;
|
|
@@ -437,7 +503,7 @@ function je(e, t, n) {
|
|
|
437
503
|
}
|
|
438
504
|
};
|
|
439
505
|
}
|
|
440
|
-
function
|
|
506
|
+
function yt(e, t, n) {
|
|
441
507
|
if (!t) return;
|
|
442
508
|
let r = e.directiveText.indexOf(t.text);
|
|
443
509
|
if (r === -1) return;
|
|
@@ -450,14 +516,14 @@ function Me(e, t, n) {
|
|
|
450
516
|
stop: a
|
|
451
517
|
};
|
|
452
518
|
}
|
|
453
|
-
function
|
|
454
|
-
let t =
|
|
519
|
+
function bt(e) {
|
|
520
|
+
let t = _t(e), n = new Map(e.blocks.map((e) => [e.id, e])), r = mt(e.blocks), i = /* @__PURE__ */ new Map(), a = [];
|
|
455
521
|
for (let t of e.blocks) {
|
|
456
|
-
let e =
|
|
457
|
-
e.length > 0 && (
|
|
522
|
+
let e = ft(t);
|
|
523
|
+
e.length > 0 && (a = e), i.set(t.id, a);
|
|
458
524
|
}
|
|
459
|
-
return
|
|
460
|
-
let o =
|
|
525
|
+
return ee(e.directiveText).map((a) => {
|
|
526
|
+
let o = vt(e, t, a), s = dt(n, o) ?? ut(e.blocks, a), c = ft(s), l = c.length > 0 ? c : s?.id === void 0 ? [] : i.get(s.id) ?? [], u = yt(e, s, a), d = gt(s?.id === void 0 ? void 0 : r.get(s.id), o, n);
|
|
461
527
|
return {
|
|
462
528
|
articleId: e.id,
|
|
463
529
|
blockId: s?.id,
|
|
@@ -472,18 +538,18 @@ function Ne(e) {
|
|
|
472
538
|
sourceContextBlockIds: d.blockIds,
|
|
473
539
|
sourceContextPosition: d.position
|
|
474
540
|
},
|
|
475
|
-
directive:
|
|
541
|
+
directive: a,
|
|
476
542
|
...l.length > 0 ? { targetIds: l } : {}
|
|
477
543
|
};
|
|
478
544
|
});
|
|
479
545
|
}
|
|
480
|
-
function
|
|
546
|
+
function xt(e) {
|
|
481
547
|
let t = /* @__PURE__ */ new Map(), n = [], r = /* @__PURE__ */ new Set();
|
|
482
548
|
for (let i of e) {
|
|
483
|
-
let e =
|
|
549
|
+
let e = Me(i.directive);
|
|
484
550
|
if (e.length === 0) continue;
|
|
485
551
|
let a = e.map(({ num: e }) => ({
|
|
486
|
-
definitionId: `${i.articleId}:article:${
|
|
552
|
+
definitionId: `${i.articleId}:article:${ke(e)}`,
|
|
487
553
|
num: e
|
|
488
554
|
}));
|
|
489
555
|
t.set(i, a);
|
|
@@ -495,7 +561,6 @@ function Pe(e) {
|
|
|
495
561
|
blockId: i.blockId,
|
|
496
562
|
html: o.text,
|
|
497
563
|
...i.targetIds === void 0 ? {} : { parentTargetIds: i.targetIds },
|
|
498
|
-
sourceDirectiveId: i.directive.sourceText,
|
|
499
564
|
...i.sourceBlockHtml === void 0 ? {} : { sourceBlockHtml: i.sourceBlockHtml },
|
|
500
565
|
...i.sourceBlockText === void 0 ? {} : { sourceBlockText: i.sourceBlockText },
|
|
501
566
|
text: o.text
|
|
@@ -507,13 +572,13 @@ function Pe(e) {
|
|
|
507
572
|
definitions: n
|
|
508
573
|
};
|
|
509
574
|
}
|
|
510
|
-
function
|
|
511
|
-
let r = new Map(t.map((e) => [
|
|
575
|
+
function St(e, t, n) {
|
|
576
|
+
let r = new Map(t.map((e) => [Oe(e.num), e]));
|
|
512
577
|
return e.map((e) => {
|
|
513
|
-
let t = n.get(e), i = t?.[0], a = [...
|
|
578
|
+
let t = n.get(e), i = t?.[0], a = [...Ne(e.directive.reference)].map((e) => r.get(Oe(e))).filter((e) => e !== void 0 && e.definitionId !== i?.definitionId)[0], o = a === void 0 ? void 0 : {
|
|
514
579
|
definitionId: a.definitionId,
|
|
515
580
|
num: a.num
|
|
516
|
-
}, s =
|
|
581
|
+
}, s = Pe(e.directive), c = (e.targetIds?.length ?? 0) > 0;
|
|
517
582
|
return {
|
|
518
583
|
...e,
|
|
519
584
|
...i === void 0 ? {} : { createdArticle: i },
|
|
@@ -526,72 +591,96 @@ function Fe(e, t, n) {
|
|
|
526
591
|
};
|
|
527
592
|
});
|
|
528
593
|
}
|
|
529
|
-
function
|
|
530
|
-
let c =
|
|
594
|
+
function Ct(e, t, n, r, i, a, o = !0, s) {
|
|
595
|
+
let c = i.map((e) => e.directiveText).filter(Boolean).join("\n"), l = {
|
|
531
596
|
sourceFormat: e,
|
|
532
|
-
documentDate:
|
|
597
|
+
documentDate: r,
|
|
533
598
|
html: t,
|
|
534
599
|
htmlWithLinks: n,
|
|
535
|
-
tableOfContents:
|
|
536
|
-
articles:
|
|
600
|
+
tableOfContents: a ?? b(c),
|
|
601
|
+
articles: i
|
|
537
602
|
};
|
|
538
|
-
if (!
|
|
603
|
+
if (!o) return {
|
|
539
604
|
...l,
|
|
540
605
|
directives: []
|
|
541
606
|
};
|
|
542
|
-
let u =
|
|
607
|
+
let u = ze(i.map((e) => e.text).join("\n")), d = i.flatMap(bt), { createdArticlesByDirective: f, definitions: p } = xt(d), m = St(d, p, f);
|
|
543
608
|
return {
|
|
544
609
|
...l,
|
|
545
610
|
...u ? { globalApplicabilityDate: u } : {},
|
|
546
611
|
...p.length > 0 ? { internalArticleDefinitions: p } : {},
|
|
547
|
-
directives: m
|
|
612
|
+
directives: m,
|
|
613
|
+
...s !== void 0 && s.length > 0 ? { diagnostics: s } : {}
|
|
548
614
|
};
|
|
549
615
|
}
|
|
550
|
-
function
|
|
551
|
-
|
|
552
|
-
function a(e) {
|
|
553
|
-
for (let t of e.articles ?? []) i += 1, t.id ??= n.get(D(t.line));
|
|
554
|
-
for (let t of e.divisions ?? []) a(t);
|
|
555
|
-
}
|
|
556
|
-
return a(t), i > 0 ? t : { articles: e.map((e) => ({
|
|
616
|
+
function wt(e) {
|
|
617
|
+
return { items: e.map((e) => ({
|
|
557
618
|
id: e.id,
|
|
558
619
|
line: e.title ? `${e.label} : ${e.title}` : e.label,
|
|
559
620
|
type: "article"
|
|
560
621
|
})) };
|
|
561
622
|
}
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
623
|
+
function Tt(e) {
|
|
624
|
+
return Array.from(p(e)).filter((e) => e.type === "article").map((e) => P(e.line.split(/[::]/u)[0]));
|
|
625
|
+
}
|
|
626
|
+
function Et(e) {
|
|
627
|
+
let t = Tt(b(e.map((e) => e.directiveText).filter(Boolean).join("\n"))), n = e.map((e) => P(e.label)), r = [];
|
|
628
|
+
if (t.length > 0 && (t.length !== n.length || t.some((e, t) => e !== n[t]))) {
|
|
629
|
+
let i = t.findIndex((e, t) => e !== n[t]);
|
|
630
|
+
r.push({
|
|
631
|
+
code: "assemblee_toc_article_order_mismatch",
|
|
632
|
+
message: "The article order reconstructed from divisions differs from the extracted article headings; using article heading order.",
|
|
633
|
+
details: {
|
|
634
|
+
articleHeadingCount: n.length,
|
|
635
|
+
extractedTocArticleCount: t.length,
|
|
636
|
+
firstArticleHeadings: e.slice(0, 12).map((e) => e.label),
|
|
637
|
+
firstExtractedTocArticles: t.slice(0, 12),
|
|
638
|
+
firstMismatch: i === -1 ? void 0 : {
|
|
639
|
+
index: i,
|
|
640
|
+
articleHeading: e[i]?.label,
|
|
641
|
+
extractedTocArticle: t[i]
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
});
|
|
645
|
+
}
|
|
646
|
+
return {
|
|
647
|
+
diagnostics: r,
|
|
648
|
+
tableOfContents: wt(e)
|
|
649
|
+
};
|
|
650
|
+
}
|
|
651
|
+
async function Dt(e, t) {
|
|
652
|
+
let n = new me("parseAssembleeBillRaw"), r = t.linkedHtml === void 0 ? await n.time("linkAssembleeBillRaw", () => Ot(e, t)) : void 0, i = n.timeSync("applyArticleAnchorIds", () => ct(t.linkedHtml ?? r.linkedHtml), { inputSize: e.length }), a = n.timeSync("cheerioLoadLinkedHtml", () => u(i)), o = n.timeSync("extractArticleHeadings", () => nt(a)), s = n.timeSync("extractArticlesAndBlocks", () => o.map((e, t) => {
|
|
653
|
+
let n = it(a, e, o[t + 1]), r = ot(a, e.id, n), i = r.filter((e) => e.kind !== "noise").map((e) => e.text).join("\n");
|
|
565
654
|
return {
|
|
566
655
|
id: e.id,
|
|
567
656
|
label: e.label,
|
|
568
657
|
num: e.num,
|
|
569
658
|
title: e.title,
|
|
570
|
-
text:
|
|
571
|
-
html: n.map((e) =>
|
|
659
|
+
text: Ge(a, n),
|
|
660
|
+
html: n.map((e) => Ve(a, e)).join("\n"),
|
|
572
661
|
directiveText: i,
|
|
573
662
|
blocks: r
|
|
574
663
|
};
|
|
575
|
-
}), { count:
|
|
576
|
-
return
|
|
664
|
+
}), { count: o.length }), c = n.timeSync("injectHiddenArticleSummary", () => st(a.html(), s)), { diagnostics: l, tableOfContents: d } = n.timeSync("buildAssembleeTableOfContents", () => Et(s), { count: s.length }), f = n.timeSync("buildParsedDocument", () => Ct("assemblee-html", e, c, t.date, s, d, t.includeDirectiveAnalysis, l));
|
|
665
|
+
return f.diagnostics?.length && process.env.TISSEUSE_WARN_PARSED_BILL_DIAGNOSTICS === "1" && console.warn("Assemblée bill parsing diagnostics", f.diagnostics), n.log({
|
|
577
666
|
articleCount: f.articles.length,
|
|
578
667
|
blockCount: f.articles.reduce((e, t) => e + t.blocks.length, 0),
|
|
579
668
|
directiveCount: f.directives.length,
|
|
580
669
|
targetDirectiveCount: f.directives.filter((e) => e.targetIds !== void 0).length
|
|
581
670
|
}), f;
|
|
582
671
|
}
|
|
583
|
-
async function
|
|
672
|
+
async function Ot(e, t) {
|
|
584
673
|
return {
|
|
585
674
|
sourceFormat: "assemblee-html",
|
|
586
675
|
documentDate: t.date,
|
|
587
676
|
html: e,
|
|
588
|
-
linkedHtml: await
|
|
677
|
+
linkedHtml: await qe(e, t, t.date)
|
|
589
678
|
};
|
|
590
679
|
}
|
|
591
|
-
function
|
|
680
|
+
function I(e) {
|
|
592
681
|
return e.replace(/&/gu, "&").replace(/</gu, "<").replace(/>/gu, ">").replace(/"/gu, """);
|
|
593
682
|
}
|
|
594
|
-
function
|
|
683
|
+
function kt(e) {
|
|
595
684
|
let t = e;
|
|
596
685
|
for (let e = 0; e < 3; e++) {
|
|
597
686
|
let e = t;
|
|
@@ -599,27 +688,27 @@ function Be(e) {
|
|
|
599
688
|
}
|
|
600
689
|
return t;
|
|
601
690
|
}
|
|
602
|
-
function
|
|
691
|
+
function At(e) {
|
|
603
692
|
return /(?:<|&lt;)\/?(?:p|br|span|b|i|u|sup|sub|table|thead|tbody|tr|th|td|ul|ol|li)\b/iu.test(e);
|
|
604
693
|
}
|
|
605
|
-
function
|
|
694
|
+
function L(e) {
|
|
606
695
|
return e.name.replace(/^.*:/u, "");
|
|
607
696
|
}
|
|
608
|
-
function
|
|
609
|
-
return t.children.map((t) =>
|
|
697
|
+
function jt(e, t) {
|
|
698
|
+
return t.children.map((t) => R(e, t)).filter(Boolean).join("");
|
|
610
699
|
}
|
|
611
|
-
function
|
|
612
|
-
return t.children.map((t) => t.type === "text" &&
|
|
700
|
+
function Mt(e, t) {
|
|
701
|
+
return t.children.map((t) => t.type === "text" && At(t.data) ? kt(t.data) : R(e, t)).filter(Boolean).join("");
|
|
613
702
|
}
|
|
614
|
-
function
|
|
703
|
+
function R(e, t) {
|
|
615
704
|
if (t.type === "text") {
|
|
616
705
|
let e = t.data.replace(/\s+\./gu, ".");
|
|
617
|
-
return
|
|
706
|
+
return At(e) ? kt(e) : I(e);
|
|
618
707
|
}
|
|
619
|
-
if (!
|
|
620
|
-
let n =
|
|
708
|
+
if (!F(t)) return "";
|
|
709
|
+
let n = L(t), r = jt(e, t);
|
|
621
710
|
switch (n) {
|
|
622
|
-
case "p": return `<p${
|
|
711
|
+
case "p": return `<p${z(e, t, [
|
|
623
712
|
"id",
|
|
624
713
|
"class",
|
|
625
714
|
"align",
|
|
@@ -633,13 +722,13 @@ function H(e, t) {
|
|
|
633
722
|
case "u":
|
|
634
723
|
case "sup":
|
|
635
724
|
case "sub":
|
|
636
|
-
case "abbr": return `<${n}${
|
|
725
|
+
case "abbr": return `<${n}${z(e, t, [
|
|
637
726
|
"id",
|
|
638
727
|
"class",
|
|
639
728
|
"title",
|
|
640
729
|
"style"
|
|
641
730
|
])}>${r}</${n}>`;
|
|
642
|
-
case "a": return `<a href="${
|
|
731
|
+
case "a": return `<a href="${I(e(t).attr("href") ?? e(t).attr("target") ?? "#")}"${z(e, t, [
|
|
643
732
|
"id",
|
|
644
733
|
"class",
|
|
645
734
|
"title",
|
|
@@ -650,8 +739,8 @@ function H(e, t) {
|
|
|
650
739
|
case "tbody":
|
|
651
740
|
case "tr":
|
|
652
741
|
case "th":
|
|
653
|
-
case "td": return
|
|
654
|
-
case "caption": return `<caption${
|
|
742
|
+
case "td": return Nt(e, t, n, r);
|
|
743
|
+
case "caption": return `<caption${z(e, t, [
|
|
655
744
|
"id",
|
|
656
745
|
"class",
|
|
657
746
|
"align",
|
|
@@ -659,12 +748,12 @@ function H(e, t) {
|
|
|
659
748
|
])}>${r}</caption>`;
|
|
660
749
|
case "num": return `<span class="akn-num">${r}</span> `;
|
|
661
750
|
case "heading": return `<p class="akn-heading">${r}</p>`;
|
|
662
|
-
case "content": return
|
|
663
|
-
case "alinea": return
|
|
664
|
-
case "article": return
|
|
751
|
+
case "content": return Mt(e, t);
|
|
752
|
+
case "alinea": return B(e, t, "div", "akn-alinea");
|
|
753
|
+
case "article": return B(e, t, "article", "akn-article");
|
|
665
754
|
case "blockList":
|
|
666
755
|
case "list": return `<div class="akn-list">${r}</div>`;
|
|
667
|
-
case "item": return
|
|
756
|
+
case "item": return B(e, t, "div", "akn-item");
|
|
668
757
|
case "listIntroduction":
|
|
669
758
|
case "listWrapUp":
|
|
670
759
|
case "intro":
|
|
@@ -680,23 +769,23 @@ function H(e, t) {
|
|
|
680
769
|
case "book":
|
|
681
770
|
case "tome":
|
|
682
771
|
case "subchapter":
|
|
683
|
-
case "subsection": return
|
|
772
|
+
case "subsection": return B(e, t, "section", `akn-${n}`);
|
|
684
773
|
case "crossHeading": return `<p class="akn-cross-heading">${r}</p>`;
|
|
685
774
|
default: return r;
|
|
686
775
|
}
|
|
687
776
|
}
|
|
688
|
-
function
|
|
777
|
+
function z(e, t, n, r = {}) {
|
|
689
778
|
let i = [];
|
|
690
779
|
for (let r of n) {
|
|
691
780
|
if (r === "style") continue;
|
|
692
781
|
let n = e(t).attr(r);
|
|
693
|
-
n !== void 0 && i.push(`${r}="${
|
|
782
|
+
n !== void 0 && i.push(`${r}="${I(n)}"`);
|
|
694
783
|
}
|
|
695
784
|
let a = r.style ?? e(t).attr("style");
|
|
696
|
-
return a && i.push(`style="${
|
|
785
|
+
return a && i.push(`style="${I(a)}"`), i.length > 0 ? ` ${i.join(" ")}` : "";
|
|
697
786
|
}
|
|
698
|
-
function
|
|
699
|
-
return `<${n}${
|
|
787
|
+
function Nt(e, t, n, r) {
|
|
788
|
+
return `<${n}${z(e, t, [
|
|
700
789
|
"id",
|
|
701
790
|
"class",
|
|
702
791
|
"colspan",
|
|
@@ -709,155 +798,155 @@ function He(e, t, n, r) {
|
|
|
709
798
|
"cellspacing",
|
|
710
799
|
"cellpadding",
|
|
711
800
|
"style"
|
|
712
|
-
], { style:
|
|
801
|
+
], { style: Pt(e, t, n) })}>${r}</${n}>`;
|
|
713
802
|
}
|
|
714
|
-
function
|
|
803
|
+
function Pt(e, t, n) {
|
|
715
804
|
let r = e(t).attr("style") ?? "";
|
|
716
|
-
return (n === "td" || n === "th") && /font-weight\s*:\s*bold/iu.test(r) && !/text-align\s*:/iu.test(r) && (r =
|
|
805
|
+
return (n === "td" || n === "th") && /font-weight\s*:\s*bold/iu.test(r) && !/text-align\s*:/iu.test(r) && (r = Ft(r, "text-align", "center")), r || void 0;
|
|
717
806
|
}
|
|
718
|
-
function
|
|
807
|
+
function Ft(e, t, n) {
|
|
719
808
|
let r = e.trim();
|
|
720
809
|
return `${r}${r && !r.endsWith(";") ? ";" : ""} ${t}: ${n};`.trim();
|
|
721
810
|
}
|
|
722
|
-
function
|
|
723
|
-
let n = [
|
|
724
|
-
return n.length === 0 ? "" : `<p class="akn-heading">${
|
|
811
|
+
function It(e, t) {
|
|
812
|
+
let n = [N(e(t).children("num").first().text()), N(e(t).children("heading").first().text())].filter(Boolean);
|
|
813
|
+
return n.length === 0 ? "" : `<p class="akn-heading">${I(n.join(" "))}</p>`;
|
|
725
814
|
}
|
|
726
|
-
function
|
|
815
|
+
function Lt(e, t) {
|
|
727
816
|
if (!t) return !1;
|
|
728
|
-
let n = (e) =>
|
|
729
|
-
return n(
|
|
817
|
+
let n = (e) => N(e).replace(/\s+/gu, " ").replace(/\s*[..]\s*(?=[–—-])/gu, " ").trim();
|
|
818
|
+
return n(N(e.replace(/<[^>]*>/gu, " ").replace(/ /gu, " ").replace(/ /giu, " ").replace(/–/giu, "–"))).startsWith(n(t));
|
|
730
819
|
}
|
|
731
|
-
function
|
|
732
|
-
let t =
|
|
820
|
+
function Rt(e) {
|
|
821
|
+
let t = I(e);
|
|
733
822
|
return `<p data-pastille="${t}" class="pastille"><span aria-label="pastille ${t}">${t}</span></p>`;
|
|
734
823
|
}
|
|
735
|
-
function
|
|
736
|
-
return
|
|
824
|
+
function zt(e, t) {
|
|
825
|
+
return Bt([Vt({
|
|
737
826
|
content: e,
|
|
738
827
|
pastille: t
|
|
739
828
|
})]);
|
|
740
829
|
}
|
|
741
|
-
function
|
|
830
|
+
function Bt(e) {
|
|
742
831
|
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>`;
|
|
743
832
|
}
|
|
744
|
-
function
|
|
745
|
-
let i = n ? ` style="${
|
|
746
|
-
return `<tr${r ? ` class="${
|
|
833
|
+
function Vt({ content: e, pastille: t, style: n, contextClass: r }) {
|
|
834
|
+
let i = n ? ` style="${I(n)}"` : "", a = r ? ` ${I(r)}` : "";
|
|
835
|
+
return `<tr${r ? ` class="${I(r)} hideable"` : ""}><td style="overflow: hidden; width: 5.0%;" class="texte-col-0 texte-col-pastille no-right-border"><div class="tableauComparatifCell${a}">${Rt(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>`;
|
|
747
836
|
}
|
|
748
|
-
function
|
|
749
|
-
let r = t ? ` style="${
|
|
750
|
-
return `<tr${n ? ` class="${
|
|
837
|
+
function Ht({ content: e, style: t, contextClass: n }) {
|
|
838
|
+
let r = t ? ` style="${I(t)}"` : "", i = n ? ` ${I(n)}` : "";
|
|
839
|
+
return `<tr${n ? ` class="${I(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>`;
|
|
751
840
|
}
|
|
752
|
-
function
|
|
841
|
+
function Ut(e, t) {
|
|
753
842
|
return e(t).attr("data:pastille") ?? e(t).attr("pastille");
|
|
754
843
|
}
|
|
755
|
-
function
|
|
844
|
+
function Wt(e, t) {
|
|
756
845
|
return e(t).find("alinea[data\\:pastille],alinea[pastille]").length > 0;
|
|
757
846
|
}
|
|
758
|
-
function
|
|
759
|
-
return e(t).children().get().filter((e) =>
|
|
847
|
+
function Gt(e, t) {
|
|
848
|
+
return e(t).children().get().filter((e) => F(e) ? L(e) === "content" : !1).map((t) => R(e, t)).filter(Boolean).join("\n");
|
|
760
849
|
}
|
|
761
|
-
function
|
|
850
|
+
function Kt(e, t) {
|
|
762
851
|
let n = [];
|
|
763
852
|
return e(t).children().each((t, r) => {
|
|
764
|
-
if (!
|
|
765
|
-
let i =
|
|
766
|
-
i === "num" || i === "heading" || i === "content" || n.push(
|
|
853
|
+
if (!F(r)) return;
|
|
854
|
+
let i = L(r);
|
|
855
|
+
i === "num" || i === "heading" || i === "content" || n.push(R(e, r));
|
|
767
856
|
}), n.filter(Boolean);
|
|
768
857
|
}
|
|
769
|
-
function
|
|
770
|
-
let n = [], r =
|
|
858
|
+
function qt(e, t) {
|
|
859
|
+
let n = [], r = L(t), i = r === "alinea" ? Ut(e, t) : void 0, a = Gt(e, t), o = Jt(e, t, r, i), s = en(e, t);
|
|
771
860
|
if (i) {
|
|
772
|
-
let r = [
|
|
773
|
-
|
|
861
|
+
let r = [Lt(a, N(e(t).children("num").first().text())) ? "" : It(e, t), a].filter(Boolean).join("\n");
|
|
862
|
+
N(r) && n.push(Vt({
|
|
774
863
|
content: r,
|
|
775
864
|
pastille: i,
|
|
776
865
|
style: o,
|
|
777
866
|
contextClass: s
|
|
778
867
|
}));
|
|
779
|
-
} else a && n.push(
|
|
868
|
+
} else a && n.push(Ht({
|
|
780
869
|
content: a,
|
|
781
870
|
style: o,
|
|
782
871
|
contextClass: s
|
|
783
872
|
}));
|
|
784
873
|
for (let r of e(t).children().get()) {
|
|
785
|
-
if (!
|
|
786
|
-
let t =
|
|
787
|
-
t === "num" || t === "heading" || t === "content" || (t === "alinea" ||
|
|
874
|
+
if (!F(r)) continue;
|
|
875
|
+
let t = L(r);
|
|
876
|
+
t === "num" || t === "heading" || t === "content" || (t === "alinea" || Wt(e, r)) && n.push(...qt(e, r));
|
|
788
877
|
}
|
|
789
878
|
return n;
|
|
790
879
|
}
|
|
791
|
-
function
|
|
792
|
-
let i =
|
|
793
|
-
a ? `id="${
|
|
880
|
+
function B(e, t, n, r) {
|
|
881
|
+
let i = L(t), a = e(t).attr("eId") ?? e(t).attr("GUID"), o = Ut(e, t), s = Jt(e, t, i, o), c = [`<${n} ${[
|
|
882
|
+
a ? `id="${I(a)}"` : void 0,
|
|
794
883
|
`class="${r}"`,
|
|
795
|
-
o ? `data-pastille="${
|
|
796
|
-
s ? `style="${
|
|
884
|
+
o ? `data-pastille="${I(o)}"` : void 0,
|
|
885
|
+
s ? `style="${I(s)}"` : void 0
|
|
797
886
|
].filter((e) => e !== void 0).join(" ")}>`];
|
|
798
887
|
if (i === "part" || i === "title") {
|
|
799
|
-
let r =
|
|
888
|
+
let r = Zt(e, t, i), a = $t(e, t), o = r ? [Ht({
|
|
800
889
|
content: r,
|
|
801
890
|
contextClass: a
|
|
802
891
|
})] : [], s = () => {
|
|
803
|
-
o.length !== 0 && (c.push(
|
|
892
|
+
o.length !== 0 && (c.push(Xt(o)), o = []);
|
|
804
893
|
};
|
|
805
894
|
return e(t).children().each((t, n) => {
|
|
806
|
-
if (!
|
|
807
|
-
let r =
|
|
895
|
+
if (!F(n)) return;
|
|
896
|
+
let r = L(n);
|
|
808
897
|
if (!(r === "num" || r === "heading" || r === "content")) {
|
|
809
898
|
if (r === "alinea") {
|
|
810
|
-
o.push(...
|
|
899
|
+
o.push(...qt(e, n));
|
|
811
900
|
return;
|
|
812
901
|
}
|
|
813
|
-
s(), c.push(
|
|
902
|
+
s(), c.push(R(e, n));
|
|
814
903
|
}
|
|
815
904
|
}), s(), c.push(`</${n}>`), c.join("\n");
|
|
816
905
|
}
|
|
817
906
|
if (i === "article") {
|
|
818
|
-
let r =
|
|
907
|
+
let r = N(e(t).children("num").first().text()), i = N(e(t).children("heading").first().text()), a = v(r) ?? {
|
|
819
908
|
label: r,
|
|
820
909
|
num: r
|
|
821
|
-
}, o = `<p class="TCNumArticle as-text toc-article dispositif" id="${
|
|
822
|
-
if (
|
|
823
|
-
let r = [
|
|
910
|
+
}, o = `<p class="TCNumArticle as-text toc-article dispositif" id="${I(`_TocArt${(a.num ?? r).replace(/\s+/gu, "")}`)}">${I(a.label)}${i ? ` : ${I(i)}` : ""}</p>`;
|
|
911
|
+
if (Wt(e, t)) {
|
|
912
|
+
let r = [Ht({
|
|
824
913
|
content: o,
|
|
825
|
-
contextClass:
|
|
826
|
-
}), ...
|
|
827
|
-
c.push(
|
|
828
|
-
for (let n of
|
|
914
|
+
contextClass: nn(a.label)
|
|
915
|
+
}), ...qt(e, t)];
|
|
916
|
+
c.push(Bt(r));
|
|
917
|
+
for (let n of Kt(e, t)) n.includes("akn-pastille-table") || c.push(n);
|
|
829
918
|
return c.push(`</${n}>`), c.join("\n");
|
|
830
919
|
}
|
|
831
920
|
c.push(o);
|
|
832
921
|
}
|
|
833
922
|
let l = [];
|
|
834
923
|
for (let n of ["content", "children"]) e(t).children().each((t, r) => {
|
|
835
|
-
if (!
|
|
836
|
-
let i =
|
|
837
|
-
i === "num" || i === "heading" || n === "content" && i !== "content" || n === "children" && i === "content" || l.push(
|
|
924
|
+
if (!F(r)) return;
|
|
925
|
+
let i = L(r);
|
|
926
|
+
i === "num" || i === "heading" || n === "content" && i !== "content" || n === "children" && i === "content" || l.push(R(e, r));
|
|
838
927
|
});
|
|
839
928
|
let u = l.join("\n");
|
|
840
929
|
if (i !== "article") {
|
|
841
|
-
let n =
|
|
930
|
+
let n = Lt(u, N(e(t).children("num").first().text())) ? "" : It(e, t);
|
|
842
931
|
n && c.push(n);
|
|
843
932
|
}
|
|
844
|
-
return c.push(o ?
|
|
933
|
+
return c.push(o ? zt(u, o) : u), c.push(`</${n}>`), c.join("\n");
|
|
845
934
|
}
|
|
846
|
-
function
|
|
847
|
-
let i =
|
|
848
|
-
return !r && n !== "article" && /font-weight\s*:\s*bold/iu.test(i) && !/text-align\s*:/iu.test(i) && (i =
|
|
935
|
+
function Jt(e, t, n, r) {
|
|
936
|
+
let i = Yt(e(t).attr("style") ?? "", "font-family");
|
|
937
|
+
return !r && n !== "article" && /font-weight\s*:\s*bold/iu.test(i) && !/text-align\s*:/iu.test(i) && (i = Ft(i, "text-align", "center")), i || void 0;
|
|
849
938
|
}
|
|
850
|
-
function
|
|
939
|
+
function Yt(e, t) {
|
|
851
940
|
return e.split(";").map((e) => e.trim()).filter(Boolean).filter((e) => !e.toLowerCase().startsWith(`${t.toLowerCase()}:`)).join(";");
|
|
852
941
|
}
|
|
853
|
-
function
|
|
942
|
+
function Xt(e) {
|
|
854
943
|
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>`;
|
|
855
944
|
}
|
|
856
|
-
function
|
|
857
|
-
let r =
|
|
858
|
-
return r && o.push(`<p class="${a.num} as-text dispositif"><span aria-label="">${
|
|
945
|
+
function Zt(e, t, n) {
|
|
946
|
+
let r = N(e(t).children("num").first().text()), i = N(e(t).children("heading").first().text()), a = Qt(n), o = [];
|
|
947
|
+
return r && o.push(`<p class="${a.num} as-text dispositif"><span aria-label="">${I(r)}</span></p>`), i && o.push(`<p class="${a.heading} as-text dispositif"><span aria-label="">${I(i)}</span></p>`), o.join("\n");
|
|
859
948
|
}
|
|
860
|
-
function
|
|
949
|
+
function Qt(e) {
|
|
861
950
|
switch (e) {
|
|
862
951
|
case "part": return {
|
|
863
952
|
num: "TCNumPartie",
|
|
@@ -881,22 +970,22 @@ function at(e) {
|
|
|
881
970
|
};
|
|
882
971
|
}
|
|
883
972
|
}
|
|
884
|
-
function
|
|
885
|
-
let n =
|
|
973
|
+
function $t(e, t) {
|
|
974
|
+
let n = tn(N(e(t).children("num").first().text()));
|
|
886
975
|
if (n) return n;
|
|
887
976
|
for (let n of e(t).parents().get()) {
|
|
888
|
-
if (!
|
|
889
|
-
let t =
|
|
977
|
+
if (!F(n)) continue;
|
|
978
|
+
let t = L(n);
|
|
890
979
|
if (t !== "title" && t !== "part") continue;
|
|
891
|
-
let r =
|
|
980
|
+
let r = tn(N(e(n).children("num").first().text()));
|
|
892
981
|
if (r) return r;
|
|
893
982
|
}
|
|
894
983
|
}
|
|
895
|
-
function
|
|
896
|
-
return
|
|
984
|
+
function en(e, t) {
|
|
985
|
+
return $t(e, t);
|
|
897
986
|
}
|
|
898
|
-
function
|
|
899
|
-
let [t, ...n] =
|
|
987
|
+
function tn(e) {
|
|
988
|
+
let [t, ...n] = N(e).split(/\s+/u);
|
|
900
989
|
if (!t || n.length === 0) return;
|
|
901
990
|
let r = t.toLocaleLowerCase("fr-FR");
|
|
902
991
|
if ([
|
|
@@ -906,10 +995,10 @@ function ct(e) {
|
|
|
906
995
|
"section"
|
|
907
996
|
].includes(r)) return `${r}-${n.join("_")}`;
|
|
908
997
|
}
|
|
909
|
-
function
|
|
910
|
-
return `article-${
|
|
998
|
+
function nn(e) {
|
|
999
|
+
return `article-${N(e).replace(/^Article\s+/iu, "").replace(/\s+/gu, "_")} article`;
|
|
911
1000
|
}
|
|
912
|
-
function
|
|
1001
|
+
function rn(e) {
|
|
913
1002
|
switch (e) {
|
|
914
1003
|
case "part": return "partie";
|
|
915
1004
|
case "book": return "livre";
|
|
@@ -921,11 +1010,11 @@ function ut(e) {
|
|
|
921
1010
|
default: return;
|
|
922
1011
|
}
|
|
923
1012
|
}
|
|
924
|
-
function
|
|
925
|
-
return [
|
|
1013
|
+
function an(e, t) {
|
|
1014
|
+
return [N(e(t).children("num").first().text()), N(e(t).children("heading").first().text())].filter(Boolean).join(" ");
|
|
926
1015
|
}
|
|
927
|
-
function
|
|
928
|
-
let n =
|
|
1016
|
+
function on(e, t) {
|
|
1017
|
+
let n = N(e(t).children("num").first().text()), r = N(e(t).children("heading").first().text()), i = v(n) ?? {
|
|
929
1018
|
label: n,
|
|
930
1019
|
num: n
|
|
931
1020
|
};
|
|
@@ -935,138 +1024,138 @@ function ft(e, t) {
|
|
|
935
1024
|
type: "article"
|
|
936
1025
|
};
|
|
937
1026
|
}
|
|
938
|
-
function
|
|
939
|
-
|
|
1027
|
+
function sn(e, t) {
|
|
1028
|
+
e.items.push(...t.items);
|
|
940
1029
|
}
|
|
941
|
-
function
|
|
942
|
-
let n = {};
|
|
1030
|
+
function cn(e, t) {
|
|
1031
|
+
let n = { items: [] };
|
|
943
1032
|
return e(t).children().each((t, r) => {
|
|
944
|
-
if (!
|
|
945
|
-
let i =
|
|
1033
|
+
if (!F(r)) return;
|
|
1034
|
+
let i = L(r);
|
|
946
1035
|
if (i === "article") {
|
|
947
|
-
n.
|
|
1036
|
+
n.items.push(on(e, r));
|
|
948
1037
|
return;
|
|
949
1038
|
}
|
|
950
|
-
let a =
|
|
1039
|
+
let a = rn(i);
|
|
951
1040
|
if (!a) {
|
|
952
|
-
|
|
1041
|
+
sn(n, cn(e, r));
|
|
953
1042
|
return;
|
|
954
1043
|
}
|
|
955
|
-
let o =
|
|
956
|
-
!o &&
|
|
1044
|
+
let o = an(e, r), s = cn(e, r);
|
|
1045
|
+
!o && s.items.length === 0 || n.items.push({
|
|
957
1046
|
...s,
|
|
958
1047
|
id: e(r).attr("eId") ?? e(r).attr("GUID"),
|
|
959
1048
|
line: o,
|
|
960
1049
|
type: a
|
|
961
|
-
})
|
|
1050
|
+
});
|
|
962
1051
|
}), n;
|
|
963
1052
|
}
|
|
964
|
-
function
|
|
1053
|
+
function ln(e) {
|
|
965
1054
|
let t = e("body").first().get(0);
|
|
966
|
-
return t === void 0 ? {} :
|
|
1055
|
+
return t === void 0 ? { items: [] } : cn(e, t);
|
|
967
1056
|
}
|
|
968
|
-
function
|
|
1057
|
+
function un(e) {
|
|
969
1058
|
return e("FRBRExpression FRBRdate[name=\"#depot\"]").attr("date") ?? e("FRBRWork FRBRdate[name=\"#presentation\"]").attr("date");
|
|
970
1059
|
}
|
|
971
|
-
function
|
|
1060
|
+
function dn(e) {
|
|
972
1061
|
let t = e("preamble").first(), n = e("body").first(), r = ["<div class=\"akn-bill\">"];
|
|
973
|
-
return t.length > 0 && (r.push("<section class=\"akn-preamble\">"), r.push(
|
|
974
|
-
|
|
1062
|
+
return t.length > 0 && (r.push("<section class=\"akn-preamble\">"), r.push(jt(e, t.get(0))), r.push("</section>")), r.push("<section class=\"akn-body\">"), n.children().each((t, n) => {
|
|
1063
|
+
F(n) && r.push(L(n) === "article" ? B(e, n, "article", "akn-article") : R(e, n));
|
|
975
1064
|
}), r.push("</section></div>"), r.join("\n");
|
|
976
1065
|
}
|
|
977
|
-
function
|
|
978
|
-
let
|
|
1066
|
+
function fn(e) {
|
|
1067
|
+
let t = u(e, { xml: {
|
|
979
1068
|
decodeEntities: !1,
|
|
980
1069
|
lowerCaseTags: !1,
|
|
981
1070
|
lowerCaseAttributeNames: !1,
|
|
982
1071
|
xmlMode: !0
|
|
983
|
-
} }),
|
|
1072
|
+
} }), n = un(t), r = dn(t);
|
|
984
1073
|
return {
|
|
985
1074
|
sourceFormat: "akoma-ntoso",
|
|
986
|
-
documentDate:
|
|
987
|
-
html:
|
|
988
|
-
linkedHtml:
|
|
1075
|
+
documentDate: n,
|
|
1076
|
+
html: r,
|
|
1077
|
+
linkedHtml: r
|
|
989
1078
|
};
|
|
990
1079
|
}
|
|
991
|
-
function
|
|
992
|
-
return
|
|
1080
|
+
function pn(e) {
|
|
1081
|
+
return mn(u(e));
|
|
993
1082
|
}
|
|
994
|
-
function
|
|
1083
|
+
function mn(e) {
|
|
995
1084
|
let t = [];
|
|
996
1085
|
return e("article.akn-article").each((n, r) => {
|
|
997
|
-
let i = e(r).children("p.TCNumArticle").first().get(0), a =
|
|
1086
|
+
let i = e(r).children("p.TCNumArticle").first().get(0), a = N(i ? e(i).text() : ""), o = v(a) ?? { label: a || `Article ${n + 1}` }, s = e(r).attr("id") ?? `akn-article-${String(n + 1).padStart(3, "0")}`, c = [r], l = ot(e, s, c), u = l.filter((e) => e.kind !== "noise").map((e) => e.text).join("\n");
|
|
998
1087
|
t.push({
|
|
999
1088
|
id: s,
|
|
1000
1089
|
label: o.label,
|
|
1001
1090
|
num: o.num,
|
|
1002
1091
|
title: o.title,
|
|
1003
|
-
text:
|
|
1004
|
-
html:
|
|
1092
|
+
text: Ge(e, c),
|
|
1093
|
+
html: Ve(e, r),
|
|
1005
1094
|
directiveText: u,
|
|
1006
1095
|
blocks: l
|
|
1007
1096
|
});
|
|
1008
1097
|
}), t;
|
|
1009
1098
|
}
|
|
1010
|
-
function
|
|
1011
|
-
let
|
|
1099
|
+
function hn(e) {
|
|
1100
|
+
let t = u(e);
|
|
1012
1101
|
return {
|
|
1013
|
-
articles:
|
|
1014
|
-
htmlWithLinks:
|
|
1102
|
+
articles: mn(t),
|
|
1103
|
+
htmlWithLinks: t.html()
|
|
1015
1104
|
};
|
|
1016
1105
|
}
|
|
1017
|
-
async function
|
|
1018
|
-
let
|
|
1106
|
+
async function gn(e, t) {
|
|
1107
|
+
let n = new me("parseAkomaNtosoBillRaw"), r = n.timeSync("cheerioLoadXml", () => u(e, { xml: {
|
|
1019
1108
|
decodeEntities: !1,
|
|
1020
1109
|
lowerCaseTags: !1,
|
|
1021
1110
|
lowerCaseAttributeNames: !1,
|
|
1022
1111
|
xmlMode: !0
|
|
1023
|
-
} })),
|
|
1024
|
-
...
|
|
1025
|
-
date:
|
|
1026
|
-
},
|
|
1027
|
-
return
|
|
1028
|
-
articleCount:
|
|
1029
|
-
blockCount:
|
|
1030
|
-
directiveCount:
|
|
1031
|
-
targetDirectiveCount:
|
|
1032
|
-
}),
|
|
1112
|
+
} })), i = t.date ?? un(r), a = n.timeSync("renderAknHtml", () => dn(r), { inputSize: e.length }), o = t.linkedHtml ?? await n.time("addLinksToRenderedAknHtml", () => qe(a, {
|
|
1113
|
+
...t,
|
|
1114
|
+
date: i
|
|
1115
|
+
}, i)), s = n.timeSync("extractRenderedAknArticles", () => pn(a)), c = n.timeSync("injectHiddenArticleSummary", () => st(o, s)), { articles: l, htmlWithLinks: d } = n.timeSync("extractLinkedAknArticlesAndTaggedHtml", () => hn(c)), f = l.length > 0 ? l : s, p = n.timeSync("extractAknTableOfContents", () => ln(r)), m = n.timeSync("buildParsedDocument", () => Ct("akoma-ntoso", a, l.length > 0 ? d : c, i, f, p, t.includeDirectiveAnalysis));
|
|
1116
|
+
return n.log({
|
|
1117
|
+
articleCount: m.articles.length,
|
|
1118
|
+
blockCount: m.articles.reduce((e, t) => e + t.blocks.length, 0),
|
|
1119
|
+
directiveCount: m.directives.length,
|
|
1120
|
+
targetDirectiveCount: m.directives.filter((e) => e.targetIds !== void 0).length
|
|
1121
|
+
}), m;
|
|
1033
1122
|
}
|
|
1034
|
-
async function
|
|
1035
|
-
let n =
|
|
1123
|
+
async function _n(e, t) {
|
|
1124
|
+
let n = fn(e), r = t.date ?? n.documentDate;
|
|
1036
1125
|
return {
|
|
1037
1126
|
sourceFormat: "akoma-ntoso",
|
|
1038
1127
|
documentDate: r,
|
|
1039
1128
|
html: n.html,
|
|
1040
|
-
linkedHtml: await
|
|
1129
|
+
linkedHtml: await qe(n.html, t, r)
|
|
1041
1130
|
};
|
|
1042
1131
|
}
|
|
1043
1132
|
//#endregion
|
|
1044
1133
|
//#region src/lib/server/assemblee_document_search.ts
|
|
1045
|
-
var
|
|
1046
|
-
function
|
|
1134
|
+
var vn = /\bexpos[ée]\s+des\s+motifs\b/giu, yn = /\barticle\s+(?:premier|1er|\d+)/iu;
|
|
1135
|
+
function bn(e) {
|
|
1047
1136
|
return e.replace(/\u00a0/gu, " ").replace(/\s+/gu, " ").trim();
|
|
1048
1137
|
}
|
|
1049
|
-
function
|
|
1050
|
-
let
|
|
1051
|
-
for (let [e,
|
|
1052
|
-
let o = (
|
|
1053
|
-
if (l.length < 20 ||
|
|
1054
|
-
|
|
1138
|
+
function xn(e) {
|
|
1139
|
+
let t = bn(u(e).text()), n = [...t.matchAll(vn)], r = /* @__PURE__ */ new Set(), i = [];
|
|
1140
|
+
for (let [e, a] of n.entries()) {
|
|
1141
|
+
let o = (a.index ?? 0) + a[0].length, s = t.slice(o), c = yn.exec(s), l = bn(s.slice(0, c?.index ?? s.length));
|
|
1142
|
+
if (l.length < 20 || r.has(l)) continue;
|
|
1143
|
+
r.add(l);
|
|
1055
1144
|
let u = `expose-des-motifs-${e + 1}`;
|
|
1056
|
-
|
|
1145
|
+
i.push({
|
|
1057
1146
|
anchor: u,
|
|
1058
1147
|
articleNumber: null,
|
|
1059
1148
|
content: l,
|
|
1060
1149
|
itemId: u,
|
|
1061
1150
|
itemKind: "expose_des_motifs",
|
|
1062
|
-
label:
|
|
1151
|
+
label: n.length === 1 ? "Exposé des motifs" : `Exposé des motifs ${e + 1}`,
|
|
1063
1152
|
title: null
|
|
1064
1153
|
});
|
|
1065
1154
|
}
|
|
1066
|
-
return
|
|
1155
|
+
return i;
|
|
1067
1156
|
}
|
|
1068
|
-
async function
|
|
1069
|
-
let i = await
|
|
1157
|
+
async function Sn({ date: e, html: t, linkBaseUrl: n, linkType: r }) {
|
|
1158
|
+
let i = await Dt(t, {
|
|
1070
1159
|
date: e,
|
|
1071
1160
|
includeDirectiveAnalysis: !1,
|
|
1072
1161
|
linkBaseUrl: n,
|
|
@@ -1075,7 +1164,7 @@ async function Tt({ date: e, html: t, linkBaseUrl: n, linkType: r }) {
|
|
|
1075
1164
|
});
|
|
1076
1165
|
return {
|
|
1077
1166
|
items: [...i.articles.map((e) => {
|
|
1078
|
-
let t =
|
|
1167
|
+
let t = bn(e.directiveText || e.text);
|
|
1079
1168
|
if (t) return {
|
|
1080
1169
|
anchor: e.id,
|
|
1081
1170
|
articleNumber: e.num ?? null,
|
|
@@ -1085,17 +1174,17 @@ async function Tt({ date: e, html: t, linkBaseUrl: n, linkType: r }) {
|
|
|
1085
1174
|
label: e.label,
|
|
1086
1175
|
title: e.title ?? null
|
|
1087
1176
|
};
|
|
1088
|
-
}).filter((e) => e !== void 0), ...
|
|
1177
|
+
}).filter((e) => e !== void 0), ...xn(t)],
|
|
1089
1178
|
tableOfContents: i.tableOfContents
|
|
1090
1179
|
};
|
|
1091
1180
|
}
|
|
1092
|
-
function
|
|
1093
|
-
return
|
|
1181
|
+
function Cn(e, t) {
|
|
1182
|
+
return k("sha256").update(JSON.stringify({
|
|
1094
1183
|
item: e,
|
|
1095
1184
|
metadata: t
|
|
1096
1185
|
})).digest("hex");
|
|
1097
1186
|
}
|
|
1098
|
-
function
|
|
1187
|
+
function wn(e) {
|
|
1099
1188
|
if (typeof e != "object" || !e) return;
|
|
1100
1189
|
let t = e.cycleDeVie?.chrono;
|
|
1101
1190
|
if (t !== void 0) for (let e of [
|
|
@@ -1110,11 +1199,11 @@ function Dt(e) {
|
|
|
1110
1199
|
}
|
|
1111
1200
|
//#endregion
|
|
1112
1201
|
//#region src/lib/server/senat_amendment_search.ts
|
|
1113
|
-
function
|
|
1114
|
-
return
|
|
1202
|
+
function Tn(e) {
|
|
1203
|
+
return e?.trim() ? u(e).text().replace(/\u00a0/gu, " ").replace(/\s+/gu, " ").trim() : "";
|
|
1115
1204
|
}
|
|
1116
|
-
function
|
|
1117
|
-
let n =
|
|
1205
|
+
function En({ dispositifHtml: e, objetHtml: t }) {
|
|
1206
|
+
let n = Tn(e), r = Tn(t);
|
|
1118
1207
|
return [...n ? [{
|
|
1119
1208
|
content: n,
|
|
1120
1209
|
itemKind: "dispositif",
|
|
@@ -1125,47 +1214,658 @@ function kt({ dispositifHtml: e, objetHtml: t }) {
|
|
|
1125
1214
|
label: "Objet"
|
|
1126
1215
|
}] : []];
|
|
1127
1216
|
}
|
|
1128
|
-
function
|
|
1129
|
-
return
|
|
1217
|
+
function Dn(e, t) {
|
|
1218
|
+
return k("sha256").update(JSON.stringify({
|
|
1130
1219
|
item: e,
|
|
1131
1220
|
metadata: t
|
|
1132
1221
|
})).digest("hex");
|
|
1133
1222
|
}
|
|
1134
1223
|
//#endregion
|
|
1224
|
+
//#region src/lib/text_parsers/amendment_action_directives.ts
|
|
1225
|
+
function V(e, t) {
|
|
1226
|
+
return {
|
|
1227
|
+
...t,
|
|
1228
|
+
position: e.position(),
|
|
1229
|
+
type: "amendment_action_directive"
|
|
1230
|
+
};
|
|
1231
|
+
}
|
|
1232
|
+
function On(e, t) {
|
|
1233
|
+
return {
|
|
1234
|
+
type: e === "start" ? "head_of_target" : "tail_after_target",
|
|
1235
|
+
unit: t ? se(t) : "article"
|
|
1236
|
+
};
|
|
1237
|
+
}
|
|
1238
|
+
function kn(e) {
|
|
1239
|
+
return e === "start" ? "insert_before" : "insert_after";
|
|
1240
|
+
}
|
|
1241
|
+
var An = D(E("[\\s\\S]*?(?=supprimer|substituer|remplacer|ins[eé]rer|compl[eé]ter|r[eé]diger)", { flags: "i" }), { default: "" }), H = O(_, w([E("les?\\s+", { flags: "i" }), ie], { value: (e) => e[1] }), ie, a), jn = O(w([E("la\\s+fin\\s+de\\s+", { flags: "i" }), H], { value: (e) => {
|
|
1242
|
+
let t = e[1];
|
|
1243
|
+
return {
|
|
1244
|
+
targetReference: t,
|
|
1245
|
+
targetScope: {
|
|
1246
|
+
type: "tail_after_target",
|
|
1247
|
+
unit: se(t)
|
|
1248
|
+
}
|
|
1249
|
+
};
|
|
1250
|
+
} }), w([x], { value: (e) => ({ targetScope: e[0] }) })), U = D(w([
|
|
1251
|
+
D(E("(?:[aà]\\s+la\\s+fin\\s+(?:du|de\\s+la|de\\s+l['’]?)\\s*)", { flags: "i" }), { default: "" }),
|
|
1252
|
+
D(E("(?:au\\s+d[eé]but\\s+d(?:u|e\\s+la|e\\s+l['’]?)\\s*)", { flags: "i" }), { default: "" }),
|
|
1253
|
+
H,
|
|
1254
|
+
D(E("\\s*,?\\s*(?:(?:[IVXLCDM]+)\\s*[.\\-–—]+\\s*|\\d+°\\s*|[a-z]\\)\\s*)?", { flags: "i" }), { default: "" })
|
|
1255
|
+
], { value: (e, t) => ({
|
|
1256
|
+
reference: e[2],
|
|
1257
|
+
text: t.text()
|
|
1258
|
+
}) }), { default: null }), Mn = D(E(`(?:(?:[aà]\\s+)?la\\s+(?:derni(?:ère|ere)|${ge})\\s+occurrence\\s+)`, { flags: "i" }), { default: "" });
|
|
1259
|
+
function W(e) {
|
|
1260
|
+
return e?.text ?? "";
|
|
1261
|
+
}
|
|
1262
|
+
function G(e) {
|
|
1263
|
+
return { citation: l(e.position()) };
|
|
1264
|
+
}
|
|
1265
|
+
var K = O(w([S], { value: (e) => ({ citation: e[0] }) }), E("\\S[\\s\\S]*", { value: (e, t) => G(t) })), Nn = E("\\S[\\s\\S]*", { value: (e, t) => G(t) }), q = E("[^:«“\"]*(?::\\s*)?", { flags: "i" }), Pn = E("\\S[\\s\\S]*?(?=\\s+par\\s+(?:les?\\s+)?(?:mots?|montants?|taux|références?|mentions?|dates?|années?)\\s*:)", {
|
|
1266
|
+
flags: "i",
|
|
1267
|
+
value: (e, t) => G(t)
|
|
1268
|
+
}), Fn = E("\\S[\\s\\S]*?(?=\\s+(?:ins[eé]rer|ajouter|supprimer|r[eé]diger)\\b)", {
|
|
1269
|
+
flags: "i",
|
|
1270
|
+
value: (e, t) => G(t)
|
|
1271
|
+
}), In = E("\\S[\\s\\S]*?(?=\\s*(?:(?:[IVXLCDM]+)\\s*[.\\-–—]+\\s*|\\d+°\\s*|[a-z]\\)\\s*|$))", {
|
|
1272
|
+
flags: "i",
|
|
1273
|
+
value: (e, t) => G(t)
|
|
1274
|
+
}), Ln = O(w([S], { value: (e) => ({ citation: e[0] }) }), Pn), Rn = O(w([S], { value: (e) => ({ citation: e[0] }) }), In), zn = w([E(`${o}s?\\s*:?\\s*`, { flags: "i" }), Ln], { value: (e) => e[1] }), Bn = w([E(`${oe}s?(?: suivant(?:e)?s?)?\\s*:?\\s*`, { flags: "i" }), Rn], { value: (e) => e[1] }), Vn = O(w([S], { value: (e) => ({ citation: e[0] }) }), Fn), Hn = w([
|
|
1275
|
+
Mn,
|
|
1276
|
+
E(`${o}s?\\s*:?\\s*`, { flags: "i" }),
|
|
1277
|
+
Vn
|
|
1278
|
+
], { value: (e) => e[2] }), Un = w([
|
|
1279
|
+
Mn,
|
|
1280
|
+
E(`${o}s?\\s*:?\\s*`, { flags: "i" }),
|
|
1281
|
+
O(w([S], { value: (e) => ({ citation: e[0] }) }), Nn)
|
|
1282
|
+
], { value: (e) => e[2] });
|
|
1283
|
+
function J(e) {
|
|
1284
|
+
return e?.reference;
|
|
1285
|
+
}
|
|
1286
|
+
var Wn = w([An, E("supprimer\\s+cet\\s+article", { flags: "i" })], { value: (e, t) => V(t, {
|
|
1287
|
+
contextText: e[0],
|
|
1288
|
+
kind: "delete_article"
|
|
1289
|
+
}) }), Gn = w([
|
|
1290
|
+
U,
|
|
1291
|
+
E("supprimer", { flags: "i" }),
|
|
1292
|
+
D(w([T, H], { value: (e) => e[1] }), { default: null }),
|
|
1293
|
+
D(w([T, Un], { value: (e) => e[1] }), { default: null })
|
|
1294
|
+
], { value: (e, t) => V(t, {
|
|
1295
|
+
contextText: W(e[0]),
|
|
1296
|
+
kind: "delete_portion",
|
|
1297
|
+
targetCitation: e[3]?.citation ?? void 0,
|
|
1298
|
+
targetReference: e[2] ?? J(e[0])
|
|
1299
|
+
}) }), Kn = w([
|
|
1300
|
+
U,
|
|
1301
|
+
O(E("r[eé]diger\\s+ainsi", { flags: "i" }), E("r[eé]tablir", { flags: "i" })),
|
|
1302
|
+
q,
|
|
1303
|
+
K
|
|
1304
|
+
], { value: (e, t) => V(t, {
|
|
1305
|
+
contextText: W(e[0]),
|
|
1306
|
+
kind: "rewrite_portion",
|
|
1307
|
+
replacementCitation: e[3].citation,
|
|
1308
|
+
targetReference: J(e[0])
|
|
1309
|
+
}) }), qn = w([
|
|
1310
|
+
U,
|
|
1311
|
+
O(E("substituer", { flags: "i" }), E("remplacer", { flags: "i" })),
|
|
1312
|
+
T,
|
|
1313
|
+
Mn,
|
|
1314
|
+
zn,
|
|
1315
|
+
E("\\s*,?\\s*"),
|
|
1316
|
+
D(E("par\\s+", { flags: "i" }), { default: "" }),
|
|
1317
|
+
Bn
|
|
1318
|
+
], { value: (e, t) => V(t, {
|
|
1319
|
+
contextText: W(e[0]),
|
|
1320
|
+
kind: "replace",
|
|
1321
|
+
replacementCitation: e[7].citation,
|
|
1322
|
+
targetCitation: e[4].citation,
|
|
1323
|
+
targetReference: J(e[0])
|
|
1324
|
+
}) }), Jn = w([
|
|
1325
|
+
U,
|
|
1326
|
+
E("substituer", { flags: "i" }),
|
|
1327
|
+
T,
|
|
1328
|
+
D(E("(?:[aà]|aux?|à la)\\s+", { flags: "i" }), { default: "" }),
|
|
1329
|
+
H,
|
|
1330
|
+
E("[\\s\\S]*?(?=[«“\"]|$)"),
|
|
1331
|
+
K
|
|
1332
|
+
], { value: (e, t) => V(t, {
|
|
1333
|
+
contextText: W(e[0]),
|
|
1334
|
+
kind: "rewrite_portion",
|
|
1335
|
+
replacementCitation: e[6].citation,
|
|
1336
|
+
targetReference: e[4] ?? J(e[0])
|
|
1337
|
+
}) }), Yn = w([
|
|
1338
|
+
n,
|
|
1339
|
+
T,
|
|
1340
|
+
E("l['’ ]article", { flags: "i" }),
|
|
1341
|
+
E("[\\s\\S]*?(?=ins[eé]rer)", { flags: "i" }),
|
|
1342
|
+
E("ins[eé]rer", { flags: "i" }),
|
|
1343
|
+
q,
|
|
1344
|
+
K
|
|
1345
|
+
], { value: (e, t) => V(t, {
|
|
1346
|
+
contextText: "",
|
|
1347
|
+
insertCitation: e[6].citation,
|
|
1348
|
+
kind: e[0] === "before" ? "insert_article_before" : "insert_article_after"
|
|
1349
|
+
}) }), Xn = w([
|
|
1350
|
+
n,
|
|
1351
|
+
T,
|
|
1352
|
+
H,
|
|
1353
|
+
E("[\\s\\S]*?(?=ins[eé]rer|ajouter)", { flags: "i" }),
|
|
1354
|
+
O(E("ins[eé]rer", { flags: "i" }), E("ajouter", { flags: "i" })),
|
|
1355
|
+
q,
|
|
1356
|
+
K
|
|
1357
|
+
], { value: (e, t) => V(t, {
|
|
1358
|
+
contextText: "",
|
|
1359
|
+
insertCitation: e[6].citation,
|
|
1360
|
+
kind: s(e[0]),
|
|
1361
|
+
targetReference: e[2]
|
|
1362
|
+
}) }), Zn = w([
|
|
1363
|
+
n,
|
|
1364
|
+
T,
|
|
1365
|
+
E("l['’ ]alin[eé]a", { flags: "i" }),
|
|
1366
|
+
E("[\\s\\S]*?(?=ins[eé]rer)", { flags: "i" }),
|
|
1367
|
+
E("ins[eé]rer", { flags: "i" }),
|
|
1368
|
+
q,
|
|
1369
|
+
K
|
|
1370
|
+
], { value: (e, t) => V(t, {
|
|
1371
|
+
contextText: "",
|
|
1372
|
+
insertCitation: e[6].citation,
|
|
1373
|
+
kind: s(e[0])
|
|
1374
|
+
}) }), Qn = w([
|
|
1375
|
+
U,
|
|
1376
|
+
ae,
|
|
1377
|
+
E("[\\s\\S]*?(?=ins[eé]rer|ajouter)", { flags: "i" }),
|
|
1378
|
+
O(E("ins[eé]rer", { flags: "i" }), E("ajouter", { flags: "i" })),
|
|
1379
|
+
q,
|
|
1380
|
+
K
|
|
1381
|
+
], { value: (e, t) => {
|
|
1382
|
+
let n = e[0], r = J(n), i = e[1];
|
|
1383
|
+
return V(t, {
|
|
1384
|
+
contextText: W(n),
|
|
1385
|
+
insertCitation: e[5].citation,
|
|
1386
|
+
kind: kn(i),
|
|
1387
|
+
targetReference: r,
|
|
1388
|
+
targetScope: On(i, r)
|
|
1389
|
+
});
|
|
1390
|
+
} }), $n = w([
|
|
1391
|
+
U,
|
|
1392
|
+
n,
|
|
1393
|
+
T,
|
|
1394
|
+
Hn,
|
|
1395
|
+
E("[\\s\\S]*?(?=ins[eé]rer)"),
|
|
1396
|
+
E("ins[eé]rer", { flags: "i" }),
|
|
1397
|
+
T,
|
|
1398
|
+
Bn
|
|
1399
|
+
], { value: (e, t) => V(t, {
|
|
1400
|
+
contextText: W(e[0]),
|
|
1401
|
+
insertCitation: e[7].citation,
|
|
1402
|
+
kind: s(e[1]),
|
|
1403
|
+
targetCitation: e[3].citation,
|
|
1404
|
+
targetReference: J(e[0])
|
|
1405
|
+
}) }), er = w([
|
|
1406
|
+
U,
|
|
1407
|
+
n,
|
|
1408
|
+
T,
|
|
1409
|
+
H,
|
|
1410
|
+
E("[\\s\\S]*?(?=ins[eé]rer|ajouter)", { flags: "i" }),
|
|
1411
|
+
O(E("ins[eé]rer", { flags: "i" }), E("ajouter", { flags: "i" })),
|
|
1412
|
+
q,
|
|
1413
|
+
K
|
|
1414
|
+
], { value: (e, t) => V(t, {
|
|
1415
|
+
contextText: W(e[0]),
|
|
1416
|
+
insertCitation: e[7].citation,
|
|
1417
|
+
kind: s(e[1]),
|
|
1418
|
+
targetReference: J(e[0]) ?? e[3]
|
|
1419
|
+
}) }), tr = O(Qn, Yn, Xn, Zn, Jn, w([
|
|
1420
|
+
U,
|
|
1421
|
+
n,
|
|
1422
|
+
T,
|
|
1423
|
+
Hn,
|
|
1424
|
+
E("[\\s\\S]*?(?=supprimer|r[eé]diger)", { flags: "i" }),
|
|
1425
|
+
O(w([
|
|
1426
|
+
E("supprimer", {
|
|
1427
|
+
flags: "i",
|
|
1428
|
+
value: "delete_portion"
|
|
1429
|
+
}),
|
|
1430
|
+
T,
|
|
1431
|
+
jn
|
|
1432
|
+
], { value: (e) => ({
|
|
1433
|
+
kind: e[0],
|
|
1434
|
+
...e[2]
|
|
1435
|
+
}) }), w([
|
|
1436
|
+
E("r[eé]diger\\s+ainsi", {
|
|
1437
|
+
flags: "i",
|
|
1438
|
+
value: "rewrite_portion"
|
|
1439
|
+
}),
|
|
1440
|
+
T,
|
|
1441
|
+
jn,
|
|
1442
|
+
q,
|
|
1443
|
+
K
|
|
1444
|
+
], { value: (e) => ({
|
|
1445
|
+
kind: e[0],
|
|
1446
|
+
replacementCitation: e[4].citation,
|
|
1447
|
+
...e[2]
|
|
1448
|
+
}) }))
|
|
1449
|
+
], { value: (e, t) => {
|
|
1450
|
+
let n = e[5];
|
|
1451
|
+
return V(t, {
|
|
1452
|
+
contextText: W(e[0]),
|
|
1453
|
+
kind: n.kind,
|
|
1454
|
+
replacementCitation: n.replacementCitation,
|
|
1455
|
+
targetCitation: e[3].citation,
|
|
1456
|
+
targetReference: J(e[0]) ?? n.targetReference,
|
|
1457
|
+
targetScope: n.targetScope
|
|
1458
|
+
});
|
|
1459
|
+
} }), $n, er, w([
|
|
1460
|
+
An,
|
|
1461
|
+
E("ins[eé]rer", { flags: "i" }),
|
|
1462
|
+
E(`[\\s\\S]*?(?=${t})`, { flags: "i" }),
|
|
1463
|
+
n,
|
|
1464
|
+
q,
|
|
1465
|
+
S,
|
|
1466
|
+
q,
|
|
1467
|
+
S
|
|
1468
|
+
], { value: (e, t) => V(t, {
|
|
1469
|
+
contextText: e[0],
|
|
1470
|
+
insertCitation: e[8],
|
|
1471
|
+
kind: s(e[3]),
|
|
1472
|
+
targetCitation: e[6]
|
|
1473
|
+
}) }), qn, Kn, w([
|
|
1474
|
+
U,
|
|
1475
|
+
E("compl[eé]ter", { flags: "i" }),
|
|
1476
|
+
D(w([T, H], { value: (e) => e[1] }), { default: null }),
|
|
1477
|
+
q,
|
|
1478
|
+
K
|
|
1479
|
+
], { value: (e, t) => V(t, {
|
|
1480
|
+
contextText: W(e[0]),
|
|
1481
|
+
insertCitation: e[4].citation,
|
|
1482
|
+
kind: "insert_after",
|
|
1483
|
+
targetReference: e[2] ?? J(e[0])
|
|
1484
|
+
}) }), Wn, Gn);
|
|
1485
|
+
//#endregion
|
|
1486
|
+
//#region src/lib/server/parsed_amendments.ts
|
|
1487
|
+
function nr(e) {
|
|
1488
|
+
return e.replace(/\s+/gu, " ").trim();
|
|
1489
|
+
}
|
|
1490
|
+
function rr(e) {
|
|
1491
|
+
return e.split(/\n/gu).map(nr).filter(Boolean).join("\n");
|
|
1492
|
+
}
|
|
1493
|
+
function ir(e, t) {
|
|
1494
|
+
let { start: n, stop: r } = t;
|
|
1495
|
+
for (; n < r && /\s/u.test(e[n]);) n++;
|
|
1496
|
+
for (; r > n && /\s/u.test(e[r - 1]);) r--;
|
|
1497
|
+
return n < r ? {
|
|
1498
|
+
start: n,
|
|
1499
|
+
stop: r
|
|
1500
|
+
} : null;
|
|
1501
|
+
}
|
|
1502
|
+
function ar(e, t) {
|
|
1503
|
+
return ue(pe(e), t);
|
|
1504
|
+
}
|
|
1505
|
+
function or(e) {
|
|
1506
|
+
return e === "before_article" || e === "on_article" || e === "after_article" ? e : "unknown";
|
|
1507
|
+
}
|
|
1508
|
+
function sr(e) {
|
|
1509
|
+
return {
|
|
1510
|
+
articleLabel: e.targetArticleLabel ?? null,
|
|
1511
|
+
targetPosition: or(e.targetPosition),
|
|
1512
|
+
alinea: e.targetAlinea ?? null,
|
|
1513
|
+
alineaLabel: e.targetAlineaLabel ?? null,
|
|
1514
|
+
subdivisionSourceId: e.targetSubdivisionSourceId ?? null,
|
|
1515
|
+
subdivisionLabel: e.targetSubdivisionLabel ?? null,
|
|
1516
|
+
subpos: e.targetSubpos ?? null
|
|
1517
|
+
};
|
|
1518
|
+
}
|
|
1519
|
+
function Y(e) {
|
|
1520
|
+
return {
|
|
1521
|
+
...e.originalTransformation === void 0 ? {} : { sourceOriginalTransformation: e.originalTransformation },
|
|
1522
|
+
sourcePosition: e.position,
|
|
1523
|
+
sourceText: e.text
|
|
1524
|
+
};
|
|
1525
|
+
}
|
|
1526
|
+
function cr(e) {
|
|
1527
|
+
return {
|
|
1528
|
+
...e.originalTransformation === void 0 ? {} : { sourceOriginalTransformation: e.originalTransformation },
|
|
1529
|
+
sourcePosition: e.position,
|
|
1530
|
+
sourceText: e.text
|
|
1531
|
+
};
|
|
1532
|
+
}
|
|
1533
|
+
function lr(e) {
|
|
1534
|
+
return {
|
|
1535
|
+
...e?.originalTransformation === void 0 ? {} : { dispositifOriginalTransformation: e.originalTransformation },
|
|
1536
|
+
...e === null ? {} : { dispositifPosition: e.position },
|
|
1537
|
+
dispositifText: e?.text ?? null
|
|
1538
|
+
};
|
|
1539
|
+
}
|
|
1540
|
+
function X(e, t, n, r = rr(e.slice(n.start, n.stop))) {
|
|
1541
|
+
return {
|
|
1542
|
+
originalTransformation: ar(t, n),
|
|
1543
|
+
position: n,
|
|
1544
|
+
text: r
|
|
1545
|
+
};
|
|
1546
|
+
}
|
|
1547
|
+
function ur(e) {
|
|
1548
|
+
let t = e.dispositifHtml ?? e.dispositifText;
|
|
1549
|
+
if (!t) return null;
|
|
1550
|
+
let n = e.dispositifHtml ? le()(t) : ce(t), r = n.output, i = ir(r, {
|
|
1551
|
+
start: 0,
|
|
1552
|
+
stop: r.length
|
|
1553
|
+
});
|
|
1554
|
+
return {
|
|
1555
|
+
dispositif: i === null ? null : X(r, n, i),
|
|
1556
|
+
simplifiedText: r,
|
|
1557
|
+
transformation: n
|
|
1558
|
+
};
|
|
1559
|
+
}
|
|
1560
|
+
function Z(e) {
|
|
1561
|
+
if (!e) return [];
|
|
1562
|
+
if (e.type === "enumeration") return [...Z(e.left), ...Z(e.right)];
|
|
1563
|
+
if (e.type === "bounded-interval") {
|
|
1564
|
+
let t = Z(e.first)[0], n = Z(e.last)[0];
|
|
1565
|
+
return t !== void 0 && n !== void 0 && n >= t ? Array.from({ length: n - t + 1 }, (e, n) => t + n) : [t, n].filter((e) => e !== void 0);
|
|
1566
|
+
}
|
|
1567
|
+
if (e.type === "counted-interval") {
|
|
1568
|
+
let t = Z(e.first)[0];
|
|
1569
|
+
return t === void 0 ? [] : Array.from({ length: e.count }, (e, n) => t + n);
|
|
1570
|
+
}
|
|
1571
|
+
if (e.type === "exclusion") return Z(e.left);
|
|
1572
|
+
for (let t of c(e)) if (t.type === "alinéa" && typeof t.index == "number" && t.index > 0) return [t.index];
|
|
1573
|
+
return [];
|
|
1574
|
+
}
|
|
1575
|
+
function dr(e, t) {
|
|
1576
|
+
let n = Z(t);
|
|
1577
|
+
return {
|
|
1578
|
+
...e,
|
|
1579
|
+
alinea: n[0] ?? e.alinea ?? null,
|
|
1580
|
+
...n.length > 0 ? { alineas: n } : {}
|
|
1581
|
+
};
|
|
1582
|
+
}
|
|
1583
|
+
function fr(e) {
|
|
1584
|
+
return e.replace(/^\s*(?:[IVXLCDM]+)\s*(?:\.\s*)?[-–—]\s*/iu, "").replace(/^\s*(?:\d+°|[a-z]\))\s*/iu, "").trim();
|
|
1585
|
+
}
|
|
1586
|
+
function pr(e, t) {
|
|
1587
|
+
let n = /^alin[eé]as?\s+(?:(\d+)|1er|premier)\b/iu.exec(fr(t.text));
|
|
1588
|
+
if (!n) return null;
|
|
1589
|
+
let r = n[1] === void 0 ? 1 : Number.parseInt(n[1], 10);
|
|
1590
|
+
return !Number.isFinite(r) || r < 1 ? null : {
|
|
1591
|
+
...e,
|
|
1592
|
+
alinea: r,
|
|
1593
|
+
alineas: [r]
|
|
1594
|
+
};
|
|
1595
|
+
}
|
|
1596
|
+
function mr(e, t) {
|
|
1597
|
+
if (e) return e.unit === "article" && t.alinea !== null ? {
|
|
1598
|
+
...e,
|
|
1599
|
+
unit: "alinéa"
|
|
1600
|
+
} : e;
|
|
1601
|
+
}
|
|
1602
|
+
function hr(e) {
|
|
1603
|
+
return /^(?:apr[eè]s|avant|(?:au|a[uù])\s+d[eé]but|(?:a|à)\s+la\s+fin)\b/iu.test(fr(e.text));
|
|
1604
|
+
}
|
|
1605
|
+
function gr(e, t, n, r) {
|
|
1606
|
+
return X(e, t, {
|
|
1607
|
+
start: n.position.start,
|
|
1608
|
+
stop: r.position.stop
|
|
1609
|
+
});
|
|
1610
|
+
}
|
|
1611
|
+
function _r(e) {
|
|
1612
|
+
return /^\s*(?:[IVXLCDM]+)\s*(?:\.\s*)?[-–—]\s*(?!alin[eé]a\b)/iu.test(e.text);
|
|
1613
|
+
}
|
|
1614
|
+
function vr(e, t) {
|
|
1615
|
+
let n = { ...t.position };
|
|
1616
|
+
function r(t) {
|
|
1617
|
+
let r = t.exec(e.slice(n.start, n.stop));
|
|
1618
|
+
r && (n = {
|
|
1619
|
+
start: n.start + r[0].length,
|
|
1620
|
+
stop: n.stop
|
|
1621
|
+
});
|
|
1622
|
+
}
|
|
1623
|
+
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), ir(e, n);
|
|
1624
|
+
}
|
|
1625
|
+
function yr(e) {
|
|
1626
|
+
return d(e);
|
|
1627
|
+
}
|
|
1628
|
+
function br(e, t) {
|
|
1629
|
+
return tr(new C(e.slice(0, t.stop), t.start)) ?? null;
|
|
1630
|
+
}
|
|
1631
|
+
function Q(e, t, n) {
|
|
1632
|
+
if (n) return X(e, t, n.position, rr(i(e, n)));
|
|
1633
|
+
}
|
|
1634
|
+
function xr(e, t) {
|
|
1635
|
+
if (!e) return;
|
|
1636
|
+
let n = structuredClone(e);
|
|
1637
|
+
for (let e of r(n, { citations: !0 })) e.position !== void 0 && (e.originalTransformation = ar(t, e.position));
|
|
1638
|
+
return n;
|
|
1639
|
+
}
|
|
1640
|
+
function Sr(e, t, n, r) {
|
|
1641
|
+
let i = vr(e, n);
|
|
1642
|
+
if (!i) return null;
|
|
1643
|
+
let a = br(e, i);
|
|
1644
|
+
if (!a) return null;
|
|
1645
|
+
let o = X(e, t, i), s = xr(a.targetReference, t), c = dr(r, s), l = yr(o.text);
|
|
1646
|
+
if (a.kind === "delete_article") return {
|
|
1647
|
+
kind: "delete_article",
|
|
1648
|
+
...Y(o),
|
|
1649
|
+
target: c
|
|
1650
|
+
};
|
|
1651
|
+
if (a.kind === "delete_portion") {
|
|
1652
|
+
let n = Q(e, t, a.targetCitation);
|
|
1653
|
+
return {
|
|
1654
|
+
kind: "delete_portion",
|
|
1655
|
+
...Y(o),
|
|
1656
|
+
target: c,
|
|
1657
|
+
...n === void 0 ? {} : {
|
|
1658
|
+
targetCitation: n,
|
|
1659
|
+
targetText: n.text
|
|
1660
|
+
},
|
|
1661
|
+
targetOccurrence: l,
|
|
1662
|
+
targetReference: s,
|
|
1663
|
+
targetScope: mr(a.targetScope, c)
|
|
1664
|
+
};
|
|
1665
|
+
}
|
|
1666
|
+
if (a.kind === "rewrite_portion") {
|
|
1667
|
+
let n = Q(e, t, a.replacementCitation);
|
|
1668
|
+
if (!n) return null;
|
|
1669
|
+
let r = Q(e, t, a.targetCitation);
|
|
1670
|
+
return {
|
|
1671
|
+
kind: "rewrite_portion",
|
|
1672
|
+
...Y(o),
|
|
1673
|
+
target: c,
|
|
1674
|
+
...r === void 0 ? {} : {
|
|
1675
|
+
targetCitation: r,
|
|
1676
|
+
targetText: r.text
|
|
1677
|
+
},
|
|
1678
|
+
targetOccurrence: l,
|
|
1679
|
+
targetReference: s,
|
|
1680
|
+
targetScope: mr(a.targetScope, c),
|
|
1681
|
+
replacementCitation: n,
|
|
1682
|
+
replacementText: n.text
|
|
1683
|
+
};
|
|
1684
|
+
}
|
|
1685
|
+
if (a.kind === "replace") {
|
|
1686
|
+
let n = Q(e, t, a.replacementCitation), r = Q(e, t, a.targetCitation);
|
|
1687
|
+
return !n || !r ? null : {
|
|
1688
|
+
kind: "replace",
|
|
1689
|
+
...Y(o),
|
|
1690
|
+
target: c,
|
|
1691
|
+
targetCitation: r,
|
|
1692
|
+
targetText: r.text,
|
|
1693
|
+
targetOccurrence: l,
|
|
1694
|
+
targetReference: s,
|
|
1695
|
+
replacementCitation: n,
|
|
1696
|
+
replacementText: n.text
|
|
1697
|
+
};
|
|
1698
|
+
}
|
|
1699
|
+
if (a.kind === "insert_article_after") {
|
|
1700
|
+
let n = Q(e, t, a.insertCitation);
|
|
1701
|
+
return n ? {
|
|
1702
|
+
kind: "insert_article_after",
|
|
1703
|
+
...Y(o),
|
|
1704
|
+
target: c,
|
|
1705
|
+
insertCitation: n,
|
|
1706
|
+
insertText: n.text
|
|
1707
|
+
} : null;
|
|
1708
|
+
}
|
|
1709
|
+
if (a.kind === "insert_article_before") {
|
|
1710
|
+
let n = Q(e, t, a.insertCitation);
|
|
1711
|
+
return n ? {
|
|
1712
|
+
kind: "insert_article_before",
|
|
1713
|
+
...Y(o),
|
|
1714
|
+
target: c,
|
|
1715
|
+
insertCitation: n,
|
|
1716
|
+
insertText: n.text
|
|
1717
|
+
} : null;
|
|
1718
|
+
}
|
|
1719
|
+
if (a.kind === "insert_after" || a.kind === "insert_before") {
|
|
1720
|
+
let n = Q(e, t, a.insertCitation);
|
|
1721
|
+
if (!n) return null;
|
|
1722
|
+
let r = Q(e, t, a.targetCitation);
|
|
1723
|
+
return {
|
|
1724
|
+
kind: a.kind,
|
|
1725
|
+
...Y(o),
|
|
1726
|
+
target: c,
|
|
1727
|
+
...r === void 0 ? {} : {
|
|
1728
|
+
targetCitation: r,
|
|
1729
|
+
targetText: r.text
|
|
1730
|
+
},
|
|
1731
|
+
targetOccurrence: l,
|
|
1732
|
+
targetReference: s,
|
|
1733
|
+
insertCitation: n,
|
|
1734
|
+
insertText: n.text,
|
|
1735
|
+
targetScope: mr(a.targetScope, c)
|
|
1736
|
+
};
|
|
1737
|
+
}
|
|
1738
|
+
return null;
|
|
1739
|
+
}
|
|
1740
|
+
function Cr(e, t) {
|
|
1741
|
+
let n = [], r = 0, i = 0;
|
|
1742
|
+
function a(r) {
|
|
1743
|
+
let a = ir(e, {
|
|
1744
|
+
start: i,
|
|
1745
|
+
stop: r
|
|
1746
|
+
});
|
|
1747
|
+
a !== null && n.push(X(e, t, a));
|
|
1748
|
+
}
|
|
1749
|
+
function o(t) {
|
|
1750
|
+
let n = Math.max(e.lastIndexOf("\n", t - 1), e.lastIndexOf("\r", t - 1));
|
|
1751
|
+
return e.slice(n + 1, t).trim() === "";
|
|
1752
|
+
}
|
|
1753
|
+
for (let t = 0; t < e.length; t++) {
|
|
1754
|
+
let n = e[t];
|
|
1755
|
+
if (n === "«" || n === "“") {
|
|
1756
|
+
if (r > 0 && o(t)) continue;
|
|
1757
|
+
r += 1;
|
|
1758
|
+
continue;
|
|
1759
|
+
}
|
|
1760
|
+
if (n === "»" || n === "”") {
|
|
1761
|
+
r = Math.max(0, r - 1);
|
|
1762
|
+
continue;
|
|
1763
|
+
}
|
|
1764
|
+
if (r > 0) continue;
|
|
1765
|
+
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) && hr({
|
|
1766
|
+
originalTransformation: void 0,
|
|
1767
|
+
position: {
|
|
1768
|
+
start: i,
|
|
1769
|
+
stop: t
|
|
1770
|
+
},
|
|
1771
|
+
text: u
|
|
1772
|
+
});
|
|
1773
|
+
(c || l) && d && !f && (a(l ? t + 1 : t), i = t + 1);
|
|
1774
|
+
}
|
|
1775
|
+
return a(e.length), n;
|
|
1776
|
+
}
|
|
1777
|
+
function wr(e) {
|
|
1778
|
+
let t = ur(e), n = t?.dispositif ?? null, r = lr(n), i = [], a = [], o = sr(e);
|
|
1779
|
+
if (e.sourceFormat === "senat-ameli" && e.sourceKind === "S") return i.push({
|
|
1780
|
+
code: "unsupported_sub_amendment",
|
|
1781
|
+
message: "Les sous-amendements ne sont pas encore projetés."
|
|
1782
|
+
}), {
|
|
1783
|
+
sourceFormat: e.sourceFormat,
|
|
1784
|
+
amendmentId: String(e.amendmentId),
|
|
1785
|
+
amendmentNumber: e.amendmentNumber ?? null,
|
|
1786
|
+
...r,
|
|
1787
|
+
directives: a,
|
|
1788
|
+
diagnostics: i
|
|
1789
|
+
};
|
|
1790
|
+
if (!t || !n) i.push({
|
|
1791
|
+
code: "missing_dispositif",
|
|
1792
|
+
message: "Le dispositif de l'amendement est absent."
|
|
1793
|
+
});
|
|
1794
|
+
else {
|
|
1795
|
+
let { simplifiedText: e, transformation: r } = t, s = o, c = null;
|
|
1796
|
+
for (let t of Cr(e, r)) {
|
|
1797
|
+
_r(t) && (s = o, c = null);
|
|
1798
|
+
let n = c ? gr(e, r, c, t) : t, i = Sr(e, r, n, s);
|
|
1799
|
+
if (i) {
|
|
1800
|
+
a.push(i), c = null, (i.target.alinea !== null || i.target.alineas) && (s = i.target);
|
|
1801
|
+
continue;
|
|
1802
|
+
}
|
|
1803
|
+
if (c) {
|
|
1804
|
+
c = n;
|
|
1805
|
+
continue;
|
|
1806
|
+
}
|
|
1807
|
+
let l = pr(o, t);
|
|
1808
|
+
if (l !== null) {
|
|
1809
|
+
s = l;
|
|
1810
|
+
continue;
|
|
1811
|
+
}
|
|
1812
|
+
hr(t) && (c = t);
|
|
1813
|
+
}
|
|
1814
|
+
a.length === 0 && (o.targetPosition === "after_article" || o.targetPosition === "before_article") && a.push({
|
|
1815
|
+
kind: o.targetPosition === "before_article" ? "insert_article_before" : "insert_article_after",
|
|
1816
|
+
...Y(n),
|
|
1817
|
+
target: o,
|
|
1818
|
+
insertCitation: n,
|
|
1819
|
+
insertText: n.text
|
|
1820
|
+
}), a.length === 0 && i.push({
|
|
1821
|
+
code: "unrecognized_dispositif",
|
|
1822
|
+
message: "Le dispositif est présent mais aucune directive d'amendement n'a été reconnue.",
|
|
1823
|
+
...cr(n)
|
|
1824
|
+
});
|
|
1825
|
+
}
|
|
1826
|
+
return {
|
|
1827
|
+
sourceFormat: e.sourceFormat,
|
|
1828
|
+
amendmentId: String(e.amendmentId),
|
|
1829
|
+
amendmentNumber: e.amendmentNumber ?? null,
|
|
1830
|
+
...r,
|
|
1831
|
+
directives: a,
|
|
1832
|
+
diagnostics: i
|
|
1833
|
+
};
|
|
1834
|
+
}
|
|
1835
|
+
//#endregion
|
|
1135
1836
|
//#region src/lib/server/senat_document_search.ts
|
|
1136
|
-
|
|
1137
|
-
function X(e) {
|
|
1837
|
+
function $(e) {
|
|
1138
1838
|
return e.replace(/\u00a0/gu, " ").replace(/\s+/gu, " ").trim();
|
|
1139
1839
|
}
|
|
1140
|
-
function
|
|
1141
|
-
let t = e
|
|
1840
|
+
function Tr(e) {
|
|
1841
|
+
let t = v(e);
|
|
1142
1842
|
if (!t) return {
|
|
1143
1843
|
articleNumber: null,
|
|
1144
1844
|
label: e,
|
|
1145
1845
|
title: null
|
|
1146
1846
|
};
|
|
1147
|
-
let n =
|
|
1847
|
+
let n = $(t.num ?? "") || null, r = $(t.title ?? "") || null;
|
|
1148
1848
|
return {
|
|
1149
1849
|
articleNumber: n,
|
|
1150
|
-
label:
|
|
1850
|
+
label: t.label,
|
|
1151
1851
|
title: r
|
|
1152
1852
|
};
|
|
1153
1853
|
}
|
|
1154
|
-
function
|
|
1155
|
-
let
|
|
1156
|
-
return
|
|
1854
|
+
function Er(e) {
|
|
1855
|
+
let t = u(e), n = [], r = $(t("section.akn-preamble").text());
|
|
1856
|
+
return r && n.push({
|
|
1157
1857
|
anchor: "senat-expose-des-motifs",
|
|
1158
1858
|
articleNumber: null,
|
|
1159
|
-
content:
|
|
1859
|
+
content: r,
|
|
1160
1860
|
itemId: "expose-des-motifs",
|
|
1161
1861
|
itemKind: "expose_des_motifs",
|
|
1162
1862
|
label: "Exposé des motifs",
|
|
1163
1863
|
title: null
|
|
1164
|
-
}),
|
|
1165
|
-
let i =
|
|
1864
|
+
}), t("article.akn-article").each((e, r) => {
|
|
1865
|
+
let i = t(r), a = i.attr("id") || `akn-article-${e + 1}`, o = $(i.children("p.TCNumArticle").first().text()), s = `Article ${e + 1}`, c = Tr(o || s), l = i.clone();
|
|
1166
1866
|
l.children("p.TCNumArticle").remove();
|
|
1167
|
-
let u =
|
|
1168
|
-
u &&
|
|
1867
|
+
let u = $(l.text());
|
|
1868
|
+
u && n.push({
|
|
1169
1869
|
anchor: i.attr("id") || null,
|
|
1170
1870
|
articleNumber: c.articleNumber,
|
|
1171
1871
|
content: u,
|
|
@@ -1174,42 +1874,42 @@ function Nt(t) {
|
|
|
1174
1874
|
label: c.label,
|
|
1175
1875
|
title: c.title
|
|
1176
1876
|
});
|
|
1177
|
-
}),
|
|
1877
|
+
}), n;
|
|
1178
1878
|
}
|
|
1179
|
-
function
|
|
1180
|
-
return
|
|
1879
|
+
function Dr(e, t) {
|
|
1880
|
+
return k("sha256").update(JSON.stringify({
|
|
1181
1881
|
item: e,
|
|
1182
1882
|
metadata: t
|
|
1183
1883
|
})).digest("hex");
|
|
1184
1884
|
}
|
|
1185
1885
|
//#endregion
|
|
1186
1886
|
//#region src/lib/server/senat_document_sources.ts
|
|
1187
|
-
var
|
|
1188
|
-
function
|
|
1887
|
+
var Or = new Set(["senat.fr", "www.senat.fr"]), kr = "https://www.senat.fr";
|
|
1888
|
+
function Ar(e) {
|
|
1189
1889
|
return e?.trim() || void 0;
|
|
1190
1890
|
}
|
|
1191
|
-
function
|
|
1891
|
+
function jr(e) {
|
|
1192
1892
|
try {
|
|
1193
|
-
let t = e.replace(/^\/+/, ""), n = /^https?:\/\//iu.test(e) ? new URL(e) : new URL(/^(?:akomantoso|leg)\//iu.test(t) ? `/${t}` : `/leg/${t}`,
|
|
1194
|
-
return
|
|
1893
|
+
let t = e.replace(/^\/+/, ""), n = /^https?:\/\//iu.test(e) ? new URL(e) : new URL(/^(?:akomantoso|leg)\//iu.test(t) ? `/${t}` : `/leg/${t}`, kr);
|
|
1894
|
+
return Or.has(n.hostname.toLowerCase()) ? n : void 0;
|
|
1195
1895
|
} catch {
|
|
1196
1896
|
return;
|
|
1197
1897
|
}
|
|
1198
1898
|
}
|
|
1199
|
-
function
|
|
1200
|
-
let t =
|
|
1899
|
+
function Mr(e) {
|
|
1900
|
+
let t = Ar(e);
|
|
1201
1901
|
if (t === void 0) return {
|
|
1202
1902
|
publicUrl: null,
|
|
1203
1903
|
status: "no_url"
|
|
1204
1904
|
};
|
|
1205
|
-
let n =
|
|
1905
|
+
let n = jr(t);
|
|
1206
1906
|
if (n === void 0) return {
|
|
1207
1907
|
publicUrl: t,
|
|
1208
1908
|
status: "unsupported_source"
|
|
1209
1909
|
};
|
|
1210
1910
|
let r = n.pathname;
|
|
1211
1911
|
if (/^\/akomantoso\/[^/]+\.akn\.xml$/iu.test(r)) return {
|
|
1212
|
-
akomaNtosoUrl: `${
|
|
1912
|
+
akomaNtosoUrl: `${kr}${r}`,
|
|
1213
1913
|
publicUrl: n.toString(),
|
|
1214
1914
|
status: "available"
|
|
1215
1915
|
};
|
|
@@ -1218,17 +1918,17 @@ function Rt(e) {
|
|
|
1218
1918
|
publicUrl: n.toString(),
|
|
1219
1919
|
status: "unsupported_source"
|
|
1220
1920
|
} : {
|
|
1221
|
-
akomaNtosoUrl: `${
|
|
1921
|
+
akomaNtosoUrl: `${kr}/akomantoso/${i.replace(/\.html$/iu, ".akn.xml")}`,
|
|
1222
1922
|
publicUrl: n.toString(),
|
|
1223
1923
|
status: "available"
|
|
1224
1924
|
};
|
|
1225
1925
|
}
|
|
1226
|
-
function
|
|
1926
|
+
function Nr(e) {
|
|
1227
1927
|
return /^\s*(?:<\?xml\b[^>]*>\s*)?<akomaNtoso[\s/>]/iu.test(e);
|
|
1228
1928
|
}
|
|
1229
1929
|
//#endregion
|
|
1230
1930
|
//#region src/lib/alineas/alineas_numbers.ts
|
|
1231
|
-
var
|
|
1931
|
+
var Pr = {
|
|
1232
1932
|
"0150a855548f15a2af52ea057be53f5d": 1,
|
|
1233
1933
|
"039826cf379b94afefe90b25c6045ca0": 1,
|
|
1234
1934
|
"03a7e564b84662f4d957c51018e26244": 1,
|
|
@@ -20202,7 +20902,7 @@ var Bt = {
|
|
|
20202
20902
|
d16d29c923bd60c7b095b66c6058fe60: 1664,
|
|
20203
20903
|
"1c14c2adf5cfda3220b2057160e10e91": 1665,
|
|
20204
20904
|
e44c55ca1ac46ff46420686a466c9fc6: 1665
|
|
20205
|
-
},
|
|
20905
|
+
}, Fr = "\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", Ir = "\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", Lr = "\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", Rr = "\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", zr = "\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", Br = {
|
|
20206
20906
|
assnatetatagr: { bold: !0 },
|
|
20207
20907
|
assnatetatagrgr: { bold: !0 },
|
|
20208
20908
|
assnatetatatr: { bold: !0 },
|
|
@@ -20303,29 +21003,29 @@ var Bt = {
|
|
|
20303
21003
|
assnatxl67: { align: "center" },
|
|
20304
21004
|
assnatenteteequilibre: { align: "center" }
|
|
20305
21005
|
};
|
|
20306
|
-
function
|
|
20307
|
-
let t = Object.keys(
|
|
20308
|
-
for (let n of t) if (e.includes(n)) return
|
|
21006
|
+
function Vr(e) {
|
|
21007
|
+
let t = Object.keys(Br).sort((e, t) => t.length - e.length);
|
|
21008
|
+
for (let n of t) if (e.includes(n)) return Br[n];
|
|
20309
21009
|
return null;
|
|
20310
21010
|
}
|
|
20311
|
-
function
|
|
20312
|
-
return
|
|
21011
|
+
function Hr(e) {
|
|
21012
|
+
return ye.createHash("md5").update(e).digest("hex");
|
|
20313
21013
|
}
|
|
20314
|
-
function
|
|
21014
|
+
function Ur(e) {
|
|
20315
21015
|
return e ? /font-weight\s*:\s*(bold|[6-9]00|1000)/i.test(e) || /font-family\s*:\s*[^;]*\bBold\b/i.test(e) : !1;
|
|
20316
21016
|
}
|
|
20317
|
-
function
|
|
21017
|
+
function Wr(e) {
|
|
20318
21018
|
return e ? /font-style\s*:\s*italic/i.test(e) || /font-family\s*:\s*[^;]*\bItalic\b/i.test(e) : !1;
|
|
20319
21019
|
}
|
|
20320
|
-
function
|
|
21020
|
+
function Gr(e) {
|
|
20321
21021
|
if (!e || !/vertical-align\s*:\s*super/i.test(e)) return !1;
|
|
20322
21022
|
let t = e.match(/font-size\s*:\s*([\d.]+)pt/i);
|
|
20323
21023
|
return !(t && parseFloat(t[1]) < 8);
|
|
20324
21024
|
}
|
|
20325
|
-
function
|
|
21025
|
+
function Kr(e) {
|
|
20326
21026
|
return e ? /vertical-align\s*:\s*sub/i.test(e) : !1;
|
|
20327
21027
|
}
|
|
20328
|
-
function
|
|
21028
|
+
function qr(e) {
|
|
20329
21029
|
if (!e) return;
|
|
20330
21030
|
let t = [
|
|
20331
21031
|
"width",
|
|
@@ -20360,15 +21060,15 @@ function $t(e) {
|
|
|
20360
21060
|
}
|
|
20361
21061
|
return n.length > 0 ? n.join("; ") : void 0;
|
|
20362
21062
|
}
|
|
20363
|
-
function
|
|
21063
|
+
function Jr(e, t) {
|
|
20364
21064
|
return !!(e && /text-align\s*:\s*center/i.test(e) || t && /center/i.test(t));
|
|
20365
21065
|
}
|
|
20366
|
-
function
|
|
21066
|
+
function Yr(e) {
|
|
20367
21067
|
if (!e) return null;
|
|
20368
21068
|
let t = e.match(/text-align\s*:\s*(left|center|right|justify)/i);
|
|
20369
21069
|
return t ? t[1].toLowerCase() : null;
|
|
20370
21070
|
}
|
|
20371
|
-
function
|
|
21071
|
+
function Xr(e) {
|
|
20372
21072
|
if (!e) return null;
|
|
20373
21073
|
for (let [t, n] of [
|
|
20374
21074
|
[/assnat1Tome|assnatAN1PARTIE/i, 1],
|
|
@@ -20380,73 +21080,73 @@ function nn(e) {
|
|
|
20380
21080
|
]) if (t.test(e)) return n;
|
|
20381
21081
|
return null;
|
|
20382
21082
|
}
|
|
20383
|
-
function
|
|
20384
|
-
let { keepAlignment:
|
|
20385
|
-
|
|
20386
|
-
let n =
|
|
21083
|
+
function Zr(e, t = {}) {
|
|
21084
|
+
let { keepAlignment: n = !0, removeEmptyParagraphs: r = !0, strictAlineas: i = !1 } = t, a = u(e, { xml: { decodeEntities: !1 } });
|
|
21085
|
+
a("style, script, meta, link").remove(), a(".assnatHeader, .assnatFooter, .assnatHeaderLeft, .assnatHeaderandFooter").remove(), a(".assnatFARSautApres, .assnatFARSautAvant, .assnatFARSautPageNiv0, .assnatFARSautPageNiv1, .assnatFARSautPageNiv1PG").remove(), a(".assnatFARTT08Bleu").each((e, t) => {
|
|
21086
|
+
let n = a(t).closest("table");
|
|
20387
21087
|
n.length > 0 && n.remove();
|
|
20388
|
-
}),
|
|
20389
|
-
let n =
|
|
21088
|
+
}), a("table").each((e, t) => {
|
|
21089
|
+
let n = a(t), r = n.find("> tbody > tr, > tr");
|
|
20390
21090
|
if (r.length !== 1) return;
|
|
20391
21091
|
let i = r.find("> td, > th");
|
|
20392
21092
|
if (i.length !== 1) return;
|
|
20393
|
-
let
|
|
20394
|
-
if (
|
|
20395
|
-
let e =
|
|
20396
|
-
(e.includes("border-left:") || e.includes("border-bottom:")) && n.replaceWith(
|
|
21093
|
+
let o = i.first();
|
|
21094
|
+
if (o.find("h1, h2, h3, h4, h5, h6").length > 0) {
|
|
21095
|
+
let e = o.attr("style") || "";
|
|
21096
|
+
(e.includes("border-left:") || e.includes("border-bottom:")) && n.replaceWith(o.html() || "");
|
|
20397
21097
|
}
|
|
20398
|
-
}),
|
|
20399
|
-
let n =
|
|
21098
|
+
}), a("br[style*=\"page-break\"]").remove(), a("span[style*=\"position:absolute\"][style*=\"z-index:-65537\"]").each((e, t) => {
|
|
21099
|
+
let n = a(t), r = n.find("img");
|
|
20400
21100
|
if (r.length > 0) {
|
|
20401
21101
|
let e = parseInt(r.attr("width") || "0", 10), t = parseInt(r.attr("height") || "0", 10);
|
|
20402
21102
|
(e >= 50 || t >= 50) && n.remove();
|
|
20403
21103
|
}
|
|
20404
|
-
}),
|
|
20405
|
-
let n =
|
|
21104
|
+
}), a("span[style*=\"position:absolute\"]").each((e, t) => {
|
|
21105
|
+
let n = a(t), r = n.attr("style") || "", i = n.find("img");
|
|
20406
21106
|
if (i.length !== 0 && !(n.parents("del").length > 0 || n.find("del img").length > 0) && !(i.parent("del").length > 0)) {
|
|
20407
21107
|
let e = i.attr();
|
|
20408
21108
|
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")) {
|
|
20409
|
-
let t = (e.src || "").match(/^data:image\/png;base64,(.+)$/), r = t ?
|
|
21109
|
+
let t = (e.src || "").match(/^data:image\/png;base64,(.+)$/), r = t ? Hr(t[1]) : void 0, i = r ? ` data-image-hash="${r}"` : "";
|
|
20410
21110
|
n.replaceWith(`<span class="alinea"${i}></span>`);
|
|
20411
21111
|
return;
|
|
20412
21112
|
}
|
|
20413
21113
|
}
|
|
20414
|
-
}),
|
|
20415
|
-
let n =
|
|
21114
|
+
}), a("span[style*=\"position:absolute\"]").each((e, t) => {
|
|
21115
|
+
let n = a(t), r = n.attr("style") || "", i = n.find("img");
|
|
20416
21116
|
if (i.length > 0 && n.children().length === 1 && r.includes("height:0pt")) {
|
|
20417
21117
|
let e = parseInt(i.attr("width") || "0", 10), t = parseInt(i.attr("height") || "0", 10);
|
|
20418
21118
|
e < 100 || t < 100 ? n.remove() : n.replaceWith(i);
|
|
20419
21119
|
}
|
|
20420
|
-
}),
|
|
20421
|
-
let n =
|
|
21120
|
+
}), a("img").each((e, t) => {
|
|
21121
|
+
let n = a(t), r = parseInt(n.attr("width") || "0", 10), i = parseInt(n.attr("height") || "0", 10);
|
|
20422
21122
|
r < 100 || i < 100 ? n.remove() : n.removeAttr("style").removeAttr("class");
|
|
20423
|
-
}),
|
|
20424
|
-
let n =
|
|
21123
|
+
}), a("span[style*=\"height:0pt\"]:not(.alinea)").each((e, t) => {
|
|
21124
|
+
let n = a(t), r = n.text().trim();
|
|
20425
21125
|
(!r || r === "\xA0") && n.remove();
|
|
20426
|
-
}),
|
|
20427
|
-
function
|
|
20428
|
-
let t =
|
|
20429
|
-
return /bold/i.test(l) && (i = !0), /strongemphasis/i.test(l) ? i = !0 : /italic|emphasis/i.test(l) && (
|
|
21126
|
+
}), a("span[style*=\"display:block\"][style*=\"position:absolute\"]:not(.alinea)").remove(), a("del").remove();
|
|
21127
|
+
function o(e) {
|
|
21128
|
+
let t = a(e), n = t.attr("style"), r = e.tagName?.toLowerCase() || "", i = Ur(n) || r === "b" || r === "strong", o = Wr(n) || r === "i" || r === "em", s = Gr(n) || r === "sup", c = Kr(n) || r === "sub", l = t.attr("class") || "";
|
|
21129
|
+
return /bold/i.test(l) && (i = !0), /strongemphasis/i.test(l) ? i = !0 : /italic|emphasis/i.test(l) && (o = !0), {
|
|
20430
21130
|
bold: i,
|
|
20431
|
-
italic:
|
|
21131
|
+
italic: o,
|
|
20432
21132
|
sup: s,
|
|
20433
21133
|
sub: c
|
|
20434
21134
|
};
|
|
20435
21135
|
}
|
|
20436
|
-
function
|
|
21136
|
+
function s(e, t) {
|
|
20437
21137
|
let n = e;
|
|
20438
21138
|
return t.sup ? n = `<sup>${n}</sup>` : t.sub && (n = `<sub>${n}</sub>`), t.italic && (n = `<em>${n}</em>`), t.bold && (n = `<strong>${n}</strong>`), n;
|
|
20439
21139
|
}
|
|
20440
|
-
let
|
|
20441
|
-
for (;
|
|
20442
|
-
|
|
20443
|
-
let n =
|
|
21140
|
+
let c = a("span").length;
|
|
21141
|
+
for (; c > 0;) {
|
|
21142
|
+
a("span").each((e, t) => {
|
|
21143
|
+
let n = a(t), r = n.attr("style") || "", i = n.attr("class") || "", c = o(t), l = c.bold || c.italic || c.sup || c.sub, u = /vertical-align\s*:\s*super/i.test(r) && /font-size\s*:\s*([\d.]+)pt/i.test(r) && parseFloat((r.match(/font-size\s*:\s*([\d.]+)pt/i) || ["", "12"])[1]) < 8, d = i && !/^assnat/i.test(i), f = n.attr("id");
|
|
20444
21144
|
if (u) {
|
|
20445
21145
|
let e = n.html() || "";
|
|
20446
21146
|
n.replaceWith(e);
|
|
20447
21147
|
} else if (l) {
|
|
20448
21148
|
let e = n.html() || "";
|
|
20449
|
-
n.replaceWith(
|
|
21149
|
+
n.replaceWith(s(e, c));
|
|
20450
21150
|
} else if (d) n.removeAttr("style");
|
|
20451
21151
|
else if (f) n.removeAttr("style").removeAttr("class");
|
|
20452
21152
|
else {
|
|
@@ -20454,76 +21154,76 @@ function rn(t, n = {}) {
|
|
|
20454
21154
|
e.trim() === "" && e.length > 0 ? n.replaceWith(" ") : n.replaceWith(e);
|
|
20455
21155
|
}
|
|
20456
21156
|
});
|
|
20457
|
-
let e =
|
|
20458
|
-
if (e >=
|
|
20459
|
-
|
|
21157
|
+
let e = a("span").length;
|
|
21158
|
+
if (e >= c) break;
|
|
21159
|
+
c = e;
|
|
20460
21160
|
}
|
|
20461
|
-
for (
|
|
20462
|
-
let
|
|
21161
|
+
for (a("p").each((e, t) => {
|
|
21162
|
+
let r = a(t), i = r.attr("class") || "", o = r.attr("style"), s = Xr(i);
|
|
20463
21163
|
if (i.includes("assnatFARCouvTitreD")) {
|
|
20464
|
-
let e =
|
|
20465
|
-
|
|
21164
|
+
let e = r.html() || "";
|
|
21165
|
+
r.replaceWith(`<p class="cover-subtitle">${e}</p>`);
|
|
20466
21166
|
return;
|
|
20467
21167
|
}
|
|
20468
21168
|
if (i.includes("assnatFARCouvTitre")) {
|
|
20469
|
-
let e =
|
|
20470
|
-
|
|
21169
|
+
let e = r.html() || "";
|
|
21170
|
+
r.replaceWith(`<p class="cover-title">${e}</p>`);
|
|
20471
21171
|
return;
|
|
20472
21172
|
}
|
|
20473
21173
|
if (i.includes("assnatFPFprem")) {
|
|
20474
|
-
let e =
|
|
20475
|
-
|
|
21174
|
+
let e = r.html() || "";
|
|
21175
|
+
r.replaceWith(`<p class="cover-info">${e}</p>`);
|
|
20476
21176
|
return;
|
|
20477
21177
|
}
|
|
20478
21178
|
if (i.includes("assnatFARCouvAnnee")) {
|
|
20479
|
-
let e =
|
|
20480
|
-
|
|
21179
|
+
let e = r.html() || "";
|
|
21180
|
+
r.replaceWith(`<p class="cover-year">${e}</p>`);
|
|
20481
21181
|
return;
|
|
20482
21182
|
}
|
|
20483
21183
|
if (i.includes("assnatFPFexpogentitre1")) {
|
|
20484
|
-
let e =
|
|
20485
|
-
|
|
21184
|
+
let e = r.html() || "";
|
|
21185
|
+
r.replaceWith(`<p class="expose-motifs-titre">${e}</p>`);
|
|
20486
21186
|
return;
|
|
20487
21187
|
}
|
|
20488
21188
|
if (i.includes("assnatFPFexpogentexte")) {
|
|
20489
|
-
|
|
21189
|
+
r.removeAttr("style").attr("class", "expose-motifs-text");
|
|
20490
21190
|
return;
|
|
20491
21191
|
}
|
|
20492
|
-
let c =
|
|
21192
|
+
let c = r.text().trim().startsWith("«");
|
|
20493
21193
|
if (s && !c) {
|
|
20494
|
-
let e =
|
|
20495
|
-
|
|
21194
|
+
let e = a(`<h${s}>${r.html() || ""}</h${s}>`);
|
|
21195
|
+
n && Jr(o, i) && e.attr("align", "center"), r.replaceWith(e);
|
|
20496
21196
|
} else {
|
|
20497
|
-
let e =
|
|
20498
|
-
if (
|
|
20499
|
-
let n =
|
|
21197
|
+
let e = Vr(i), t;
|
|
21198
|
+
if (n) {
|
|
21199
|
+
let n = Yr(o);
|
|
20500
21200
|
n && n !== "justify" && n !== "left" ? t = n : e?.align && (t = e.align);
|
|
20501
21201
|
}
|
|
20502
|
-
if (
|
|
20503
|
-
let e =
|
|
20504
|
-
e.trim().startsWith("<strong>") ||
|
|
21202
|
+
if (r.removeAttr("style").removeAttr("class"), t && r.attr("align", t), e?.bold) {
|
|
21203
|
+
let e = r.html() || "";
|
|
21204
|
+
e.trim().startsWith("<strong>") || r.html(`<strong>${e}</strong>`);
|
|
20505
21205
|
}
|
|
20506
21206
|
}
|
|
20507
|
-
}),
|
|
20508
|
-
let
|
|
20509
|
-
|
|
20510
|
-
}),
|
|
20511
|
-
let n =
|
|
20512
|
-
for (let e of Object.keys(
|
|
21207
|
+
}), a("h1, h2, h3, h4, h5, h6").each((e, t) => {
|
|
21208
|
+
let r = a(t), i = r.attr("style"), o = r.attr("class");
|
|
21209
|
+
n && Jr(i, o) ? (r.removeAttr("style").removeAttr("class"), r.attr("align", "center")) : r.removeAttr("style").removeAttr("class");
|
|
21210
|
+
}), a("a").each((e, t) => {
|
|
21211
|
+
let n = a(t), r = n.attr("href"), i = n.attr("id"), o = { ...t.attribs || {} };
|
|
21212
|
+
for (let e of Object.keys(o)) e !== "href" && e !== "id" && n.removeAttr(e);
|
|
20513
21213
|
if (!r && !i) n.replaceWith(n.html() || "");
|
|
20514
21214
|
else if (!r && i) {
|
|
20515
21215
|
let e = n.html() || "";
|
|
20516
21216
|
n.replaceWith(`<span id="${i}">${e}</span>`);
|
|
20517
21217
|
}
|
|
20518
|
-
});
|
|
20519
|
-
let n =
|
|
21218
|
+
}); a("div").length > 0;) a("div").each((e, t) => {
|
|
21219
|
+
let n = a(t), r = n.html() || "";
|
|
20520
21220
|
n.replaceWith(r);
|
|
20521
21221
|
});
|
|
20522
|
-
|
|
20523
|
-
let n =
|
|
21222
|
+
a(".expose-motifs-titre").each((e, t) => {
|
|
21223
|
+
let n = a(t), r = [], i = n.next();
|
|
20524
21224
|
for (; i.length > 0;) if (i.is("table") && i.find(".expose-motifs-text").length > 0) {
|
|
20525
21225
|
i.find(".expose-motifs-text").each((e, t) => {
|
|
20526
|
-
r.push(
|
|
21226
|
+
r.push(a(t).clone());
|
|
20527
21227
|
});
|
|
20528
21228
|
let e = i;
|
|
20529
21229
|
i = i.next(), e.remove();
|
|
@@ -20537,43 +21237,43 @@ function rn(t, n = {}) {
|
|
|
20537
21237
|
i = i.next(), e.remove();
|
|
20538
21238
|
} else break;
|
|
20539
21239
|
if (r.length > 0) {
|
|
20540
|
-
let e =
|
|
21240
|
+
let e = a("<div class=\"expose-motifs\"></div>");
|
|
20541
21241
|
r.forEach((t) => {
|
|
20542
21242
|
t.removeClass("expose-motifs-text"), e.append(t);
|
|
20543
21243
|
}), n.after(e);
|
|
20544
21244
|
}
|
|
20545
|
-
}),
|
|
20546
|
-
|
|
20547
|
-
}),
|
|
20548
|
-
let n =
|
|
21245
|
+
}), a("br").each((e, t) => {
|
|
21246
|
+
a(t).removeAttr("style").removeAttr("class");
|
|
21247
|
+
}), a("table, tr, td, th, thead, tbody, tfoot").each((e, t) => {
|
|
21248
|
+
let n = a(t), r = qr(n.attr("style"));
|
|
20549
21249
|
n.removeAttr("style").removeAttr("class"), r && n.attr("style", r);
|
|
20550
|
-
}),
|
|
20551
|
-
let n =
|
|
21250
|
+
}), a("td, th").each((e, t) => {
|
|
21251
|
+
let n = a(t), r = n.children();
|
|
20552
21252
|
if (r.length === 1 && r.first().is("p")) {
|
|
20553
|
-
let e = r.first(), t = n.html() || "", i =
|
|
21253
|
+
let e = r.first(), t = n.html() || "", i = a.html(e);
|
|
20554
21254
|
if (t.trim() === i.trim()) {
|
|
20555
21255
|
let t = e.attr("align"), r = e.attr("id");
|
|
20556
21256
|
n.html(e.html() || ""), t && !n.attr("align") && n.attr("align", t), r && !n.attr("id") && n.attr("id", r);
|
|
20557
21257
|
}
|
|
20558
21258
|
}
|
|
20559
|
-
}),
|
|
20560
|
-
let n =
|
|
21259
|
+
}), a("ol, ul").each((e, t) => {
|
|
21260
|
+
let n = a(t), r = n.attr("start");
|
|
20561
21261
|
if (n.removeAttr("style").removeAttr("class"), r) {
|
|
20562
21262
|
let e = parseInt(r, 10);
|
|
20563
21263
|
!isNaN(e) && e > 1 && n.attr("style", `counter-reset: list-counter ${e - 1}`), n.attr("start", r);
|
|
20564
21264
|
}
|
|
20565
|
-
}),
|
|
20566
|
-
let n =
|
|
21265
|
+
}), a("li").each((e, t) => {
|
|
21266
|
+
let n = a(t), r = Yr(n.attr("style"));
|
|
20567
21267
|
n.removeAttr("style").removeAttr("class"), r === "center" && n.attr("style", "text-align: center");
|
|
20568
|
-
let i = n.html() || "",
|
|
20569
|
-
|
|
20570
|
-
}),
|
|
20571
|
-
let
|
|
20572
|
-
h && (g +=
|
|
20573
|
-
let _ = g ? `<style>${g}</style>\n${
|
|
20574
|
-
return _ = _.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"), _ = _.replace(/ /g, "\xA0"),
|
|
21268
|
+
let i = n.html() || "", o = i.replace(/^(\s| | |\u00a0)+/, "");
|
|
21269
|
+
o !== i && n.html(o);
|
|
21270
|
+
}), Qr(a), $r(a, i);
|
|
21271
|
+
let l = a("body").html() || a.html(), d = l.includes("class=\"alinea"), f = a("ol").length > 0, p = a("h1, h2, h3, h4, h5, h6").length > 0, m = l.includes("class=\"expose-motifs"), h = l.includes("class=\"cover-title\"") || l.includes("class=\"cover-subtitle\"") || l.includes("class=\"cover-info\"") || l.includes("class=\"cover-year\""), g = "";
|
|
21272
|
+
h && (g += zr), p && (g += Ir), m && (g += Lr), d && (g += Fr), f && (g += Rr);
|
|
21273
|
+
let _ = g ? `<style>${g}</style>\n${l}` : l;
|
|
21274
|
+
return _ = _.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"), _ = _.replace(/ /g, "\xA0"), r && (_ = _.replace(/<p[^>]*>\s*( | | |\u00a0|\s)*\s*<\/p>/gi, "").replace(/<p[^>]*>\s*<(strong|em|b|i)>\s*( | | |\u00a0|\s)*\s*<\/\1>\s*<\/p>/gi, "")), _ = _.replace(/<span[^>]*>\s*<\/span>/gi, ""), _ = _.replace(/ class=""/g, ""), _ = ei(_), _ = _.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(), _;
|
|
20575
21275
|
}
|
|
20576
|
-
function
|
|
21276
|
+
function Qr(e) {
|
|
20577
21277
|
e("span[id]").each((t, n) => {
|
|
20578
21278
|
let r = e(n), i = r.attr("id"), a = n.attribs || {}, o = Object.keys(a);
|
|
20579
21279
|
if (o.length !== 1 || o[0] !== "id") return;
|
|
@@ -20596,13 +21296,13 @@ function an(e) {
|
|
|
20596
21296
|
l.trim() === u.trim() && (s.attr("id", i), r.replaceWith(r.html() || ""));
|
|
20597
21297
|
});
|
|
20598
21298
|
}
|
|
20599
|
-
function
|
|
21299
|
+
function $r(e, t = !1) {
|
|
20600
21300
|
let n = e("body");
|
|
20601
21301
|
if (n.length === 0) return;
|
|
20602
21302
|
let r = n.find("span.alinea[data-image-hash]"), i = -1;
|
|
20603
21303
|
r.each((n, r) => {
|
|
20604
21304
|
let a = e(r), o = a.attr("data-image-hash"), s;
|
|
20605
|
-
if (o &&
|
|
21305
|
+
if (o && Pr[o] !== void 0 && (s = Pr[o]), s === void 0) {
|
|
20606
21306
|
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".`);
|
|
20607
21307
|
a.remove();
|
|
20608
21308
|
return;
|
|
@@ -20614,11 +21314,11 @@ function on(e, t = !1) {
|
|
|
20614
21314
|
i = s, a.attr("data-alinea", String(s)), a.text(String(s)), a.removeAttr("data-image-hash");
|
|
20615
21315
|
});
|
|
20616
21316
|
}
|
|
20617
|
-
function
|
|
21317
|
+
function ei(e) {
|
|
20618
21318
|
let t = e;
|
|
20619
21319
|
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;
|
|
20620
21320
|
}
|
|
20621
|
-
function
|
|
21321
|
+
function ti(e, t = {}) {
|
|
20622
21322
|
return `<!DOCTYPE html>
|
|
20623
21323
|
<html lang="fr">
|
|
20624
21324
|
<head>
|
|
@@ -20626,33 +21326,33 @@ function cn(e, t = {}) {
|
|
|
20626
21326
|
<title>Document simplifié</title>
|
|
20627
21327
|
</head>
|
|
20628
21328
|
<body>
|
|
20629
|
-
${
|
|
21329
|
+
${Zr(e, t)}
|
|
20630
21330
|
</body>
|
|
20631
21331
|
</html>`;
|
|
20632
21332
|
}
|
|
20633
21333
|
//#endregion
|
|
20634
21334
|
//#region src/lib/server/text_parsers/transformers.ts
|
|
20635
|
-
function
|
|
21335
|
+
function ni(e, t) {
|
|
20636
21336
|
let n = "transformation_", r = {};
|
|
20637
|
-
for (let e of
|
|
21337
|
+
for (let e of A.readdirSync(t).toSorted()) if (e.startsWith(n) && e.endsWith(".json")) {
|
|
20638
21338
|
let i = e.slice(15, -5), a = i.split(".").map((e) => parseInt(e) - 1), o = r;
|
|
20639
21339
|
for (let e of a.slice(1)) {
|
|
20640
21340
|
let t = o.transformations ??= [];
|
|
20641
21341
|
for (; e >= t.length;) t.push({});
|
|
20642
21342
|
o = t[e];
|
|
20643
21343
|
}
|
|
20644
|
-
o.output =
|
|
20645
|
-
let { sourceMap: s, title: c } =
|
|
21344
|
+
o.output = A.readFileSync(j.join(t, `${n}${i}.html`), { encoding: "utf-8" });
|
|
21345
|
+
let { sourceMap: s, title: c } = A.readJsonSync(j.join(t, e), { encoding: "utf-8" });
|
|
20646
21346
|
o.sourceMap = s ?? [], o.title = c;
|
|
20647
21347
|
}
|
|
20648
|
-
return
|
|
21348
|
+
return ri(r, e), r;
|
|
20649
21349
|
}
|
|
20650
|
-
function
|
|
20651
|
-
if (e.input = t, e.transformations !== void 0) for (let n of e.transformations)
|
|
21350
|
+
function ri(e, t) {
|
|
21351
|
+
if (e.input = t, e.transformations !== void 0) for (let n of e.transformations) ri(n, t), t = n.output;
|
|
20652
21352
|
return t;
|
|
20653
21353
|
}
|
|
20654
|
-
function
|
|
20655
|
-
if (
|
|
21354
|
+
function ii(e, t, n = "1") {
|
|
21355
|
+
if (A.ensureDirSync(t), e.transformations === void 0) A.writeJsonSync(j.join(t, `transformation_${n}.json`), {
|
|
20656
21356
|
sourceMap: e.sourceMap,
|
|
20657
21357
|
title: e.title
|
|
20658
21358
|
}, {
|
|
@@ -20660,72 +21360,72 @@ function $(e, t, n = "1") {
|
|
|
20660
21360
|
spaces: 2
|
|
20661
21361
|
});
|
|
20662
21362
|
else {
|
|
20663
|
-
|
|
21363
|
+
A.writeJsonSync(j.join(t, `transformation_${n}.json`), { title: e.title }, {
|
|
20664
21364
|
encoding: "utf-8",
|
|
20665
21365
|
spaces: 2
|
|
20666
21366
|
});
|
|
20667
|
-
for (let [r, i] of e.transformations.entries())
|
|
21367
|
+
for (let [r, i] of e.transformations.entries()) ii(i, t, `${n}.${r + 1}`);
|
|
20668
21368
|
}
|
|
20669
|
-
e.output !== void 0 &&
|
|
21369
|
+
e.output !== void 0 && A.writeFileSync(j.join(t, `transformation_${n}.html`), e.output, { encoding: "utf-8" });
|
|
20670
21370
|
}
|
|
20671
21371
|
//#endregion
|
|
20672
21372
|
//#region src/lib/server/linkers/html.ts
|
|
20673
|
-
async function
|
|
20674
|
-
let
|
|
20675
|
-
if (
|
|
20676
|
-
let
|
|
20677
|
-
|
|
20678
|
-
let
|
|
20679
|
-
|
|
20680
|
-
let { outputByType:
|
|
20681
|
-
legiResolver:
|
|
21373
|
+
async function ai({ 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: g, referredLegifranceTextsInfosFilePath: _ }) {
|
|
21374
|
+
let ee = t ?? (e === void 0 ? void 0 : new h(e));
|
|
21375
|
+
if (ee === void 0) throw Error("A Canutes database or legal resolver is required");
|
|
21376
|
+
let v = await A.readFile(i, { encoding: "utf-8" }), y;
|
|
21377
|
+
a === void 0 ? (y = le({ removeAWithHref: !0 })(v), o !== void 0 && ii(y, o)) : y = ni(v, a);
|
|
21378
|
+
let b = [];
|
|
21379
|
+
s !== void 0 && b.push("links"), c !== void 0 && b.push("links_or_references"), u !== void 0 && b.push("references");
|
|
21380
|
+
let { outputByType: te, referredLegifranceTextCountByCid: ne } = await re({
|
|
21381
|
+
legiResolver: ee,
|
|
20682
21382
|
date: n,
|
|
20683
21383
|
defaultTextId: r,
|
|
20684
|
-
htmlTransformation:
|
|
20685
|
-
inputHtml:
|
|
20686
|
-
linkBaseUrl:
|
|
20687
|
-
linkType:
|
|
20688
|
-
logIgnoredReferencesTypes:
|
|
20689
|
-
logPartialReferences:
|
|
20690
|
-
logReferences:
|
|
20691
|
-
outputTypes:
|
|
20692
|
-
referredLegifranceTextsInfos:
|
|
20693
|
-
}),
|
|
20694
|
-
|
|
20695
|
-
for (let [e, t] of Object.entries(
|
|
20696
|
-
let n =
|
|
20697
|
-
n !== void 0 && await
|
|
21384
|
+
htmlTransformation: y,
|
|
21385
|
+
inputHtml: v,
|
|
21386
|
+
linkBaseUrl: d,
|
|
21387
|
+
linkType: f,
|
|
21388
|
+
logIgnoredReferencesTypes: p,
|
|
21389
|
+
logPartialReferences: m,
|
|
21390
|
+
logReferences: g,
|
|
21391
|
+
outputTypes: b,
|
|
21392
|
+
referredLegifranceTextsInfos: _ !== void 0
|
|
21393
|
+
}), x = {};
|
|
21394
|
+
s !== void 0 && (x.links = s), c !== void 0 && (x.links_or_references = c), u !== void 0 && (x.references = u);
|
|
21395
|
+
for (let [e, t] of Object.entries(te)) {
|
|
21396
|
+
let n = x[e];
|
|
21397
|
+
n !== void 0 && await A.writeFile(n, t.html, { encoding: "utf-8" });
|
|
20698
21398
|
}
|
|
20699
|
-
|
|
21399
|
+
te.links !== void 0 && l !== void 0 && ii(le()(te.links.html), l), _ !== void 0 && await A.writeJson(_, ne, {
|
|
20700
21400
|
encoding: "utf-8",
|
|
20701
21401
|
spaces: 2
|
|
20702
21402
|
});
|
|
20703
21403
|
}
|
|
20704
21404
|
//#endregion
|
|
20705
21405
|
//#region src/lib/server/tables_of_contents.ts
|
|
20706
|
-
async function
|
|
20707
|
-
let
|
|
20708
|
-
for await (let e of
|
|
20709
|
-
context:
|
|
20710
|
-
tableOfContents:
|
|
20711
|
-
transformation:
|
|
21406
|
+
async function oi(e, t, n, r) {
|
|
21407
|
+
let i = ni(await A.readFile(e, { encoding: "utf-8" }), t), a = i.output, o = new C(a), s = await A.readJson(n, { encoding: "utf-8" });
|
|
21408
|
+
for await (let e of f({
|
|
21409
|
+
context: o,
|
|
21410
|
+
tableOfContents: s,
|
|
21411
|
+
transformation: i
|
|
20712
21412
|
}));
|
|
20713
|
-
await
|
|
21413
|
+
await A.writeJson(r, s, {
|
|
20714
21414
|
encoding: "utf-8",
|
|
20715
21415
|
spaces: 2
|
|
20716
21416
|
});
|
|
20717
21417
|
}
|
|
20718
|
-
async function
|
|
20719
|
-
let
|
|
20720
|
-
await
|
|
21418
|
+
async function si(e, t, n) {
|
|
21419
|
+
let r = ni(await A.readFile(e, { encoding: "utf-8" }), t).output, i = b(r);
|
|
21420
|
+
await A.writeJson(n, i, {
|
|
20721
21421
|
encoding: "utf-8",
|
|
20722
21422
|
spaces: 2
|
|
20723
21423
|
});
|
|
20724
21424
|
}
|
|
20725
21425
|
//#endregion
|
|
20726
21426
|
//#region src/lib/server/legi/resolvers.ts
|
|
20727
|
-
function
|
|
20728
|
-
return new
|
|
21427
|
+
function ci({ canutesDb: e }) {
|
|
21428
|
+
return new h(e);
|
|
20729
21429
|
}
|
|
20730
21430
|
//#endregion
|
|
20731
|
-
export {
|
|
21431
|
+
export { ve as LegiResolver, ai as addLinksOrReferencesToHtmlFile, oi as addPositionsToTableOfContentsFile, _e as buildAndInstallTextTitlesInfos, fe as buildTextTitlesInfos, ci as createLegiResolver, Se as extractAssembleeAmendmentSearchItems, xn as extractAssembleeExposesDesMotifs, En as extractSenatAmendmentSearchItems, Ce as hashAssembleeAmendmentSearchItem, Cn as hashAssembleeSearchItem, Dn as hashSenatAmendmentSearchItem, Dr as hashSenatSearchItem, Nr as isAkomaNtosoXml, wn as isoDateFromAssembleeDocument, _n as linkAkomaNtosoBillRaw, Ot as linkAssembleeBillRaw, gn as parseAkomaNtosoBillRaw, wr as parseAmendment, Dt as parseAssembleeBillRaw, Sn as parseAssembleeDocumentSearchContent, Er as parseSenatDocumentSearchContent, ni as readTransformation, fn as renderAkomaNtosoBillRaw, Mr as resolveSenatAkomaNtosoSource, si as simplifiedHtmlBillFileToTableOfContentsFile, Zr as simplifyWordHtml, ti as simplifyWordHtmlToDocument, ii as writeTransformation };
|