Index: gc_lang/fr/modules-js/conj.js ================================================================== --- gc_lang/fr/modules-js/conj.js +++ gc_lang/fr/modules-js/conj.js @@ -60,10 +60,13 @@ getConj: function (sVerb, sTense, sWho) { // returns conjugation (can be an empty string) if (!this._dVerb.hasOwnProperty(sVerb)) { return null; + } + if (sTense == ":Y") { + return sVerb; } if (!this._dPatternConj[sTense][this._lTags[this._dVerb[sVerb][1]][this._dTenseIdx.get(sTense)]].hasOwnProperty(sWho)) { return ""; } return this._modifyStringWithSuffixCode(sVerb, this._dPatternConj[sTense][this._lTags[this._dVerb[sVerb][1]][this._dTenseIdx.get(sTense)]][sWho]); @@ -71,10 +74,13 @@ hasConj: function (sVerb, sTense, sWho) { // returns false if no conjugation (also if empty) else true if (!this._dVerb.hasOwnProperty(sVerb)) { return false; + } + if (sTense == ":Y") { + return true; } if (this._dPatternConj[sTense][this._lTags[this._dVerb[sVerb][1]][this._dTenseIdx.get(sTense)]].hasOwnProperty(sWho) && this._dPatternConj[sTense][this._lTags[this._dVerb[sVerb][1]][this._dTenseIdx.get(sTense)]][sWho]) { return true; } @@ -123,18 +129,24 @@ return this._lTags[this._dVerb[sVerb][1]]; }, _getConjWithTags: function (sVerb, tTags, sTense, sWho) { // returns conjugation (can be an empty string) + if (sTense == ":Y") { + return sVerb; + } if (!this._dPatternConj[sTense][tTags[this._dTenseIdx.get(sTense)]].hasOwnProperty(sWho)) { return ""; } return this._modifyStringWithSuffixCode(sVerb, this._dPatternConj[sTense][tTags[this._dTenseIdx.get(sTense)]][sWho]); }, _hasConjWithTags: function (tTags, sTense, sWho) { // returns false if no conjugation (also if empty) else true + if (sTense == ":Y") { + return true; + } if (this._dPatternConj[sTense][tTags[this._dTenseIdx.get(sTense)]].hasOwnProperty(sWho) && this._dPatternConj[sTense][tTags[this._dTenseIdx.get(sTense)]][sWho]) { return true; } return false; Index: gc_lang/fr/modules-js/gce_suggestions.js ================================================================== --- gc_lang/fr/modules-js/gce_suggestions.js +++ gc_lang/fr/modules-js/gce_suggestions.js @@ -160,11 +160,11 @@ function suggVerbFrom (sStem, sFlex, sWho="") { "conjugate according to (and eventually )" 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) ]; + let lTenses = [ ...sMorph.matchAll(/:(?:Y|I[pqsf]|S[pq]|K|P)/g) ]; if (sWho) { for (let [sTense, ] of lTenses) { if (conj.hasConj(sStem, sTense, sWho)) { aSugg.add(conj.getConj(sStem, sTense, sWho)); } Index: gc_lang/fr/modules/conj.py ================================================================== --- gc_lang/fr/modules/conj.py +++ gc_lang/fr/modules/conj.py @@ -39,18 +39,20 @@ def getConj (sVerb, sTense, sWho): "returns conjugation (can be an empty string)" if sVerb not in _dVerb: return None + if sTense == ":Y": + return sVerb return _modifyStringWithSuffixCode(sVerb, _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx[sTense]]].get(sWho, "")) def hasConj (sVerb, sTense, sWho): "returns False if no conjugation (also if empty) else True" if sVerb not in _dVerb: return False - if _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx[sTense]]].get(sWho, False): + if sTense == ":Y" or _dPatternConj[sTense][_lTags[_dVerb[sVerb][1]][_dTenseIdx[sTense]]].get(sWho, False): return True return False def getVtyp (sVerb): @@ -111,16 +113,18 @@ return _lTags[_dVerb[sVerb][1]] def _getConjWithTags (sVerb, tTags, sTense, sWho): "returns conjugation (can be an empty string)" + if sTense == ":Y": + return sVerb return _modifyStringWithSuffixCode(sVerb, _dPatternConj[sTense][tTags[_dTenseIdx[sTense]]].get(sWho, "")) def _hasConjWithTags (tTags, sTense, sWho): "returns False if no conjugation (also if empty) else True" - if _dPatternConj[sTense][tTags[_dTenseIdx[sTense]]].get(sWho, False): + if sTense == ":Y" or _dPatternConj[sTense][tTags[_dTenseIdx[sTense]]].get(sWho, False): return True return False def _modifyStringWithSuffixCode (sWord, sSfx): Index: gc_lang/fr/modules/gce_suggestions.py ================================================================== --- gc_lang/fr/modules/gce_suggestions.py +++ gc_lang/fr/modules/gce_suggestions.py @@ -127,11 +127,11 @@ def suggVerbFrom (sStem, sFlex, sWho=""): "conjugate according to (and eventually )" dSugg = {} for sMorph in _oSpellChecker.getMorph(sFlex): - lTenses = [ m.group(0) for m in re.finditer(":(?:Y|I[pqsf]|S[pq]|K|P|Q)", sMorph) ] + lTenses = [ m.group(0) for m in re.finditer(":(?:Y|I[pqsf]|S[pq]|K|P)", sMorph) ] if sWho: for sTense in lTenses: if conj.hasConj(sStem, sTense, sWho): dSugg[conj.getConj(sStem, sTense, sWho)] = "" else: Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -7095,20 +7095,20 @@ >descendre en bas <<- /pleo/ not value(>1, "|de|des|du|d’|") ->> \1 && Pléonasme. >choisir [le|un|ce|quel|mon|ton|son|notre|votre|leur] choix - <<- /pleo/ -1>> =suggVerbFrom(\1, "faire") && Pléonasme. + <<- /pleo/ -1>> =suggVerbFrom("faire", \1) && Pléonasme. [>efforcer|>essayer|>tâcher] de faire en sorte [de|d’] <<- /pleo/ ->> \1 \-1 && Pléonasme. >monter en haut <<- /pleo/ not value(>1, "|de|des|du|d’|") ->> \1 && Pléonasme. >opter pour [l’|une|cette|quelle] option - <<- /pleo/ -1:2>> =suggVerbFrom(\1, "choisir") && Pléonasme. + <<- /pleo/ -1:2>> =suggVerbFrom("choisir", \1) && Pléonasme. >sortir hors [de|d’] <<- /pleo/ -2:3>> \3 && Pléonasme. Exemple : « sortir de la maison », et non « sortir hors de la maison ». >suivre derrière