77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
}
return Array.from(aSugg).join("|");
}
return "";
}
function joinVerbAndSuffix (sFlex, sSfx) {
if (/^-[tT]-/.test(sSfx) && /[tdTD]$/.test(sFlex)) {
return sFlex + sSfx.slice(2);
}
if (/[eacEAC]$/.test(sFlex)) {
if (/-(?:en|y)$/i.test(sSfx)) {
return sFlex + "s" + sSfx;
}
if (/-(?:ie?l|elle|on)$/i.test(sSfx)) {
return sFlex + "-t" + sSfx;
}
}
return sFlex + sSfx;
}
function suggVerbPpas (sFlex, sWhat=null) {
|
|
|
|
|
|
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
}
return Array.from(aSugg).join("|");
}
return "";
}
function joinVerbAndSuffix (sFlex, sSfx) {
if (/^-t-/i.test(sSfx) && /[td]$/i.test(sFlex)) {
return sFlex + sSfx.slice(2);
}
if (/[eac]$/i.test(sFlex)) {
if (/^-(?:en|y)$/i.test(sSfx)) {
return sFlex + "s" + sSfx;
}
if (/^-(?:ie?l|elle|on)$/i.test(sSfx)) {
return sFlex + "-t" + sSfx;
}
}
return sFlex + sSfx;
}
function suggVerbPpas (sFlex, sWhat=null) {
|
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
function suggVerbFrom (sStem, sFlex, sWho="") {
"conjugate <sStem> according to <sFlex> (and eventually <sWho>)"
let aSugg = new Set();
for (let sMorph of gc_engine.oSpellChecker.getMorph(sFlex)) {
let lTenses = [ ...sMorph.matchAll(/:(?:Y|I[pqsf]|S[pq]|K|P|Q)/g) ];
if (sWho) {
for (let sTense of lTenses) {
if (conj.hasConj(sStem, sTense, sWho)) {
aSugg.add(conj.getConj(sStem, sTense, sWho));
}
}
}
else {
for (let sTense of lTenses) {
for (let sWho of [ ...sMorph.matchAll(/:[123][sp]/g) ]) {
if (conj.hasConj(sStem, sTense, sWho)) {
aSugg.add(conj.getConj(sStem, sTense, sWho));
}
}
}
}
|
|
|
|
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
function suggVerbFrom (sStem, sFlex, sWho="") {
"conjugate <sStem> according to <sFlex> (and eventually <sWho>)"
let aSugg = new Set();
for (let sMorph of gc_engine.oSpellChecker.getMorph(sFlex)) {
let lTenses = [ ...sMorph.matchAll(/:(?:Y|I[pqsf]|S[pq]|K|P|Q)/g) ];
if (sWho) {
for (let [sTense, ] of lTenses) {
if (conj.hasConj(sStem, sTense, sWho)) {
aSugg.add(conj.getConj(sStem, sTense, sWho));
}
}
}
else {
for (let [sTense, ] of lTenses) {
for (let sWho of [ ...sMorph.matchAll(/:[123][sp]/g) ]) {
if (conj.hasConj(sStem, sTense, sWho)) {
aSugg.add(conj.getConj(sStem, sTense, sWho));
}
}
}
}
|
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
|
}
const _dQuiEst = new Map ([
["je", ":1s"], ["j’", ":1s"], ["tu", ":2s"], ["il", ":3s"], ["on", ":3s"], ["elle", ":3s"], ["iel", ":3s"],
["nous", ":1p"], ["vous", ":2p"], ["ils", ":3p"], ["elles", ":3p"], ["iels", ":3p"]
]);
const _lIndicatif = [":Ip", ":Iq", ":Is", ":If"];
const _lSubjonctif = [":Sp", ":Sq"];
function suggVerbMode (sFlex, cMode, sSuj) {
let lMode;
if (cMode == ":I") {
lMode = _lIndicatif;
} else if (cMode == ":S") {
lMode = _lSubjonctif;
} else if (cMode.startsWith(":I") || cMode.startsWith(":S")) {
lMode = [cMode];
} else {
return "";
}
let sWho = _dQuiEst.gl_get(sSuj.toLowerCase(), ":3s");
let aSugg = new Set();
|
<
<
|
|
|
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
|
}
const _dQuiEst = new Map ([
["je", ":1s"], ["j’", ":1s"], ["tu", ":2s"], ["il", ":3s"], ["on", ":3s"], ["elle", ":3s"], ["iel", ":3s"],
["nous", ":1p"], ["vous", ":2p"], ["ils", ":3p"], ["elles", ":3p"], ["iels", ":3p"]
]);
function suggVerbMode (sFlex, cMode, sSuj) {
let lMode;
if (cMode == ":I") {
lMode = [":Ip", ":Iq", ":Is", ":If"];
} else if (cMode == ":S") {
lMode = [":Sp", ":Sq"];
} else if (cMode.startsWith(":I") || cMode.startsWith(":S")) {
lMode = [cMode];
} else {
return "";
}
let sWho = _dQuiEst.gl_get(sSuj.toLowerCase(), ":3s");
let aSugg = new Set();
|
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
|
return Array.from(aSugg).join("|");
}
return "";
}
//// Nouns and adjectives
function suggPlur (sFlex, sWordToAgree=null, bSelfSugg=false) {
// returns plural forms assuming sFlex is singular
if (sWordToAgree) {
let lMorph = gc_engine.oSpellChecker.getMorph(sWordToAgree);
if (lMorph.length === 0) {
return "";
}
let sGender = cregex.getGender(lMorph);
if (sGender == ":m") {
return suggMasPlur(sFlex);
} else if (sGender == ":f") {
return suggFemPlur(sFlex);
}
}
let aSugg = new Set();
if (sFlex.endsWith("l")) {
if (sFlex.endsWith("al") && sFlex.length > 2 && gc_engine.oSpellChecker.isValid(sFlex.slice(0,-1)+"ux")) {
aSugg.add(sFlex.slice(0,-1)+"ux");
}
if (sFlex.endsWith("ail") && sFlex.length > 3 && gc_engine.oSpellChecker.isValid(sFlex.slice(0,-2)+"ux")) {
aSugg.add(sFlex.slice(0,-2)+"ux");
|
|
<
<
<
<
<
<
<
<
<
<
<
<
|
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
|
return Array.from(aSugg).join("|");
}
return "";
}
//// Nouns and adjectives
function suggPlur (sFlex, bSelfSugg=false) {
// returns plural forms assuming sFlex is singular
let aSugg = new Set();
if (sFlex.endsWith("l")) {
if (sFlex.endsWith("al") && sFlex.length > 2 && gc_engine.oSpellChecker.isValid(sFlex.slice(0,-1)+"ux")) {
aSugg.add(sFlex.slice(0,-1)+"ux");
}
if (sFlex.endsWith("ail") && sFlex.length > 3 && gc_engine.oSpellChecker.isValid(sFlex.slice(0,-2)+"ux")) {
aSugg.add(sFlex.slice(0,-2)+"ux");
|
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
|
aSugg.add(sFlex+"s");
}
if (gc_engine.oSpellChecker.isValid(sFlex+"x")) {
aSugg.add(sFlex+"x");
}
} else {
if (gc_engine.oSpellChecker.isValid(sFlex+"S")) {
aSugg.add(sFlex+"s");
}
if (gc_engine.oSpellChecker.isValid(sFlex+"X")) {
aSugg.add(sFlex+"x");
}
}
if (mfsp.hasMiscPlural(sFlex)) {
mfsp.getMiscPlural(sFlex).forEach(function(x) { aSugg.add(x); });
}
if (aSugg.size == 0 && bSelfSugg && (sFlex.endsWith("s") || sFlex.endsWith("x") || sFlex.endsWith("S") || sFlex.endsWith("X"))) {
aSugg.add(sFlex);
}
aSugg.delete("");
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggSing (sFlex, bSelfSugg=false) {
// returns singular forms assuming sFlex is plural
let aSugg = new Set();
if (sFlex.endsWith("ux")) {
if (gc_engine.oSpellChecker.isValid(sFlex.slice(0,-2)+"l")) {
aSugg.add(sFlex.slice(0,-2)+"l");
}
if (gc_engine.oSpellChecker.isValid(sFlex.slice(0,-2)+"il")) {
|
|
|
|
|
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
|
aSugg.add(sFlex+"s");
}
if (gc_engine.oSpellChecker.isValid(sFlex+"x")) {
aSugg.add(sFlex+"x");
}
} else {
if (gc_engine.oSpellChecker.isValid(sFlex+"S")) {
aSugg.add(sFlex+"S");
}
if (gc_engine.oSpellChecker.isValid(sFlex+"X")) {
aSugg.add(sFlex+"X");
}
}
if (mfsp.hasMiscPlural(sFlex)) {
mfsp.getMiscPlural(sFlex).forEach(function(x) { aSugg.add(x); });
}
if (aSugg.size == 0 && bSelfSugg && (sFlex.endsWith("s") || sFlex.endsWith("x") || sFlex.endsWith("S") || sFlex.endsWith("X"))) {
aSugg.add(sFlex);
}
aSugg.delete("");
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
function suggSing (sFlex, bSelfSugg=true) {
// returns singular forms assuming sFlex is plural
let aSugg = new Set();
if (sFlex.endsWith("ux")) {
if (gc_engine.oSpellChecker.isValid(sFlex.slice(0,-2)+"l")) {
aSugg.add(sFlex.slice(0,-2)+"l");
}
if (gc_engine.oSpellChecker.isValid(sFlex.slice(0,-2)+"il")) {
|
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
|
if (!sMorph.includes(":V")) {
// not a verb
if (sMorph.includes(":m") || sMorph.includes(":e")) {
aSugg.add(suggPlur(sFlex));
} else {
let sStem = cregex.getLemmaOfMorph(sMorph);
if (mfsp.isMasForm(sStem)) {
aSugg.add(suggPlur(sStem, null, true));
}
}
} else {
// a verb
let sVerb = cregex.getLemmaOfMorph(sMorph);
if (conj.hasConj(sVerb, ":PQ", ":Q2")) {
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q2"));
|
|
|
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
|
if (!sMorph.includes(":V")) {
// not a verb
if (sMorph.includes(":m") || sMorph.includes(":e")) {
aSugg.add(suggPlur(sFlex));
} else {
let sStem = cregex.getLemmaOfMorph(sMorph);
if (mfsp.isMasForm(sStem)) {
aSugg.add(suggPlur(sStem, true));
}
}
} else {
// a verb
let sVerb = cregex.getLemmaOfMorph(sMorph);
if (conj.hasConj(sVerb, ":PQ", ":Q2")) {
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q2"));
|