Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -51,11 +51,11 @@ !! !! Options !! !! !! -OPTGROUP/basic: typo apos, esp tab, nbsp unit, tu maj, num virg, nf chim, ocr mapos, liga +OPTGROUP/basic: typo apos, esp tab, nbsp unit, tu maj, num virg, nf poncfin, ocr chim, liga mapos OPTGROUP/gramm: conf sgpl gn OPTGROUP/verbs: infi conj ppas, imp inte vmode OPTGROUP/style: bs pleo, redon1 redon2, neg OPTGROUP/misc: date mc OPTGROUP/debug: idrule @@ -69,10 +69,11 @@ OPT/nbsp: True True True False False False OPT/tu: True True True True True True OPT/maj: True True True True True True OPT/num: True True True True True True OPT/virg: True True True True True True +OPT/poncfin: False False False False False False OPT/unit: True True True False False False OPT/nf: True True True True True True OPT/liga: False False False False False False OPT/mapos: False False False False False False OPT/chim: False False False False False False @@ -119,10 +120,11 @@ OPTCOLOR/nbsp: orange orange OPTCOLOR/tu: orange orange OPTCOLOR/maj: orange orange OPTCOLOR/num: orange orange OPTCOLOR/virg: orange orange +OPTCOLOR/poncfin: orange orange OPTCOLOR/unit: orange orange OPTCOLOR/nf: orange orange OPTCOLOR/liga: orange orange OPTCOLOR/mapos: orange orange OPTCOLOR/chim: orange orange @@ -155,10 +157,11 @@ OPTLABEL/esp: Espaces surnuméraires|Signale les espaces inutiles entre les mots, en début et en fin de ligne. OPTLABEL/tab: Tabulations surnuméraires|Signale les tabulations inutiles en début et en fin de ligne. OPTLABEL/nbsp: Espaces insécables|Vérifie les espaces insécables avec les ponctuations « ! ? : ; » (à désactiver si vous utilisez une police Graphite) OPTLABEL/maj: Majuscules|Vérifie l’utilisation des majuscules et des minuscules (par exemple, « la raison d’État », « les Européens »). OPTLABEL/virg: Virgules|Virgules manquantes avant “mais”, “car” et “etc.”. +OPTLABEL/poncfin: Ponctuation finale [!]|Vérifie s’il manque une ponctuation finale au paragraphe (seulement pour les paragraphes constitués de plusieurs phrases). OPTLABEL/tu: Traits d’union|Cherche les traits d’union manquants ou inutiles. OPTLABEL/num: Nombres|Espaces insécables sur les grands nombres (> 10 000). Vérifie la présence de « O » au lieu de « 0 ». OPTLABEL/unit: Espaces insécables avant unités de mesure OPTLABEL/nf: Normes françaises OPTLABEL/liga: Signaler ligatures typographiques|Ligatures de fi, fl, ff, ffi, ffl, ft, st. @@ -201,10 +204,11 @@ OPTLABEL/esp: Useless spaces|Checks spaces within words and at the beginning and the end of lines. OPTLABEL/tab: Useless tabulations|Checks tabulations at the beginning and the end of lines. OPTLABEL/nbsp: Non-breakable spaces|Checks the use of non-breakable spaces with the following punctuation marks: « ! ? : ; » (deactivate it if you use a Graphite font). OPTLABEL/maj: Capitals|Checks the use of uppercase and lowercase letters (i.e. « la raison d’État », « les Européens »). OPTLABEL/virg: Commas|Missing commas before “mais”, “car” and “etc.”. +OPTLABEL/poncfin: Ending punctuation [!]|Checks if an ending punctuation is missing on paragraphs (only for multi-sentences paragraphs). OPTLABEL/tu: Hyphens|Checks missing or useless hyphens. OPTLABEL/num: Numbers|Large numbers and « O » instead of « 0 ». OPTLABEL/unit: Non-breaking spaces before units of measurement OPTLABEL/nf: French standards OPTLABEL/liga: Report typographical ligatures|Ligatures of fi, fl, ff, ffi, ffl, ft, st. @@ -709,14 +713,29 @@ TEST: Je suis là. {{viens}}. ->> Viens TEST: Ils sont devenus idiots. {{c}}’est peine perdue. __[s]/maj(majuscule_en_début_phrase)__ ^ *([a-zéèâàô][\w-]+) @@$ - <<- after("\\w\\w[.] +\\w+") -1>> =\1.capitalize() # Majuscule en début de phrase, sauf éventuellement lors d’une énumération. + <<- after("\\w\\w[.] +\\w+") -1>> =\1.capitalize() # Majuscule en début de phrase, sauf éventuellement lors d’une énumération. TEST: {{je}} suis disponible quand tu veux. Mais pas aujourd’hui. + +!! +!! +!!!! Ponctuation de fin de paragraphe !! +!! +!! + +__[i>/poncfin__ + ({w_1}) *$ @@0 + <<- before("\\w+(?:[.]|[   ][!?]) +([A-ZÉÈÎ]\w+|[ÀÔ])") -1>> \1.|\1 !|\1 ? # Il semble manquer une ponctuation finale (s’il s’agit d’un titre, le point final n’est pas requis). + +TEST: __poncfin__ Vraiment. Quel {{ennui}} +TEST: Internet : le nouvel eldorado +TEST: OMC-FMI : Les nouveaux maîtres du monde + !! !! !!!! Virgules !! !! @@ -4374,25 +4393,14 @@ !! !!!! Tournures de langage !! !! !! -__faire_plaisir__ - >faire plaisirs - <<- /sgpl/ -2>> plaisir # Faire plaisir : dans cette locution, “plaisir” doit être au singulier. - <<- ~2>> * - -TEST: Ça me fait {{plaisirs}}. - - -# ayants droit -__sgpl_ayants_droit__ - [les|des|ces|ses|nos|vos|leurs] ayant [droit|droits] - <<- /gn/ -2:3>> ayants droit # Au singulier : « un ayant droit ». Au pluriel : « des ayants droit ». - -TEST: Comment lutter contre la cupidité des {{ayant droits}} -# Note: À supprimer? Graphie qui tend vers la soudure et le pluriel régulier (ayant-droit(s)) + + + + # Mon, ton, son : euphonie __gn_mon_ton_son_euphonie__ [ma|ta|sa] @>[aâeéèêiîoôuûyœæ].+:[NAQ].*:f¬:[eGW] @@ -6442,12 +6450,12 @@ -1>> dès # Confusion probable. Pour la préposition, écrivez “dès”.|https://fr.wiktionary.org/wiki/pr%C3%A8s [dés|des] [à|a] présent <<- /conf/ not morph(<1, ":D.*:p") -1>> dès # Confusion probable. Pour la préposition, écrivez “dès”.|https://fr.wiktionary.org/wiki/pr%C3%A8s - des ~\d{2,5} [|,] - des ~\d{2,5} @:¬:[NA].*:[ip]|>(?:à|et|ou)/ + des ~^\d{2,5}$ [|,] + des ~^\d{2,5}$ @:¬:[NA].*:[ip]|>(?:à|et|ou)/ <<- /conf/ not value(<1, "|%|") and not morph(<1, ">(?:pourcent|cent|barre|seuil)/") -1>> dès # Confusion probable. Pour la préposition, écrivez “dès”.|https://fr.wiktionary.org/wiki/pr%C3%A8s [dés|des] *NUM [ans|heures] [dés|des] @:B [ans|heures] [dés|des] [un|une] [an|heure] @@ -6499,10 +6507,11 @@ TEST: les moins de 20 ans peuvent ne pas connaître le premier album du groupe TEST: au lieu des 20 heures réglementaires. TEST: celle des 20 ans. TEST: sous le seuil des 10 % TEST: notre revue des 24 et 25 décembre +TEST: J’ai des X230. # diagnostic / diagnotique // pronostic / pronostique __conf_diagnostic_pronostique__ [ce|un|du|mon|notre|votre|quel] diagnostique @@ -6993,11 +7002,11 @@ [celle|celles|celui|ceux] la <<- /conf/ ->> \1-là # Écrivez “là” et non “la”. /-là <<- /conf/ morph(\1, ":V", ":[NA]", 0, -3) - -1>> =\1[:-2]+"-la|" + \1[:-2]+" là" # Confusion. Pour un COD, utilisez “la”. Ou, si ce “là” signifie “ici”, ne mettez pas de trait d’union. + -1>> =\1[:-3]+"-la|" + \1[:-3]+" là" # Confusion. Pour un COD, utilisez “la”. Ou, si ce “là” signifie “ici”, ne mettez pas de trait d’union. /-la <<- /conf/ morph(\1, ":[NA]", ":[123][sp]", 0, -3) -1>> =\1[:-2]+"là" # Confusion : “\1” n’est pas un verbe. @@ -7238,10 +7247,11 @@ TEST: Qu’importe, {{ont}} leur {{prend}} tout TEST: Qui {{on}} {{tant}} de malheurs ! TEST: {{peut-ont}} y arriver avec si peu de moyens ? TEST: {{peut ont}} y arriver ? TEST: comme ce que l’{{ont}} {{voit}} dans le lien entre polygynie et guerre. +TEST: Tout à fait, {{ont}} peut même dire qu’à l’adolescence, ce sont les problèmes de l’enfance qui ressortent. TEST: les politiques de l’offre ont échoué. TEST: qui on blâme, ce soir ? TEST: qui n’ont somme toute que le désir de vivre paisiblement TEST: ces textes, quoi qu’on en pense, ont force de loi. TEST: s’ils n’ont ne serait-ce qu’un peu de jugeotte, on ne les reverra plus. @@ -8290,10 +8300,42 @@ TEST: c’est un {{vieux}} imbécile. TEST: Le {{vieux}} homme était parti. ->> vieil + +# ayants droit +__sgpl_ayants_droit__ + [les|des|ces|ses|nos|vos|leurs] ayant [droit|droits] + <<- /sgpl/ -2:3>> ayants droit # Au singulier : “un ayant droit”. Au pluriel : “des ayants droit”. + +TEST: Comment lutter contre la cupidité des {{ayant droits}} +# Note: À supprimer? Graphie qui tend vers la soudure et le pluriel régulier (ayant-droit(s)) + + +# termes +__sgpl_en_termes_de__ + en terme [de|d’] + <<- /sgpl/ -2>> termes # Dans la locution “en termes de”, mettez “terme” au pluriel. + +TEST: en {{terme}} de communication, c’est une véritable catastrophe + + +# tous / tout / toutes +__sgpl_tous_azimuts__ + tout [azimut|azimuts] + <<- /sgpl/ ->> tous azimuts # « Tous azimuts » signifie « dans toutes les directions ». + +__sgpl_une_bonne_fois_pour_toutes__ + une fois pour (toute) + une bonne fois pour (toute) + <<- /sgpl/ -1>> toutes # Mettez “toute” au pluriel. Sous-entendu : une fois pour toutes les autres fois. + +TEST: ils lancent des attaques {{tout azimut}}. +TEST: une bonne fois pour {{toute}} +TEST: ce sera réglé une fois pour {{toute}} quand il sera capturé. + # vu de ses yeux vu __sgpl_vu_de_ses_yeux_vu__ [vu|vue|vus|vues] de [mes|tes|ses|nos|vos|leurs] yeux [vu|vue|vus|vues] <<- /sgpl/ \1.lower() != \-1.lower() --1>> \1 # Accord avec “\1”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4532 @@ -8642,31 +8684,31 @@ tout @:N.*:[fp]¬:(?:A|W|G|M|Y|[me]:[is]|3s) <<- /gn/ morph(<1, ":R", ":D.*:p") -2>> =suggMasSing(\2, True) # Accord avec “tout” : “\2” devrait être au masculin singulier. __toute_nom__ - [|,] toute @:[NA].*:[mp]¬:(?:W|G|M|[fe]:[is]) - de toute @:[NA].*:[mp]¬:(?:W|G|M|Y|[fe]:[is]) + [|,] toute @:[NA].*:[mp]¬:(?:W|P|G|M|[fe]:[is]) + de toute @:[NA].*:[mp]¬:(?:W|P|G|M|Y|[fe]:[is]) <<- /gn/ -3>> =suggFemSing(\3, True) # Accord avec “toute” : “\3” devrait être au féminin singulie - toute @:[NA].*:[mp]¬:(?:W|G|M|Y|[fe]:[is]) + toute @:[NA].*:[mp]¬:(?:W|G|M|Y|P|[fe]:[is]) <<- /gn/ morph(<1, ":R") -2>> =suggFemSing(\2, True) # Accord avec “toute” : “\2” devrait être au féminin singulier. __tous_nom__ - [|,] tous @:[NA].*:[fs]¬:(?:W|G|M|[me]:[ip]|3p) - de tous @:[NA].*:[fs]¬:(?:W|G|M|Y|[me]:[ip]|3[sp]) + [|,] tous @:[NA].*:[fs]¬:(?:W|P|G|M|[me]:[ip]|3p) + de tous @:[NA].*:[fs]¬:(?:W|P|G|M|Y|[me]:[ip]|3[sp]) <<- /gn/ -3>> =suggMasPlur(\3, True) # Accord avec “tous” : “\3” devrait être au masculin pluriel. - tous @:[NA].*:[fs]¬:(?:W|G|M|Y|3[sp]|[me]:[ip]) + tous @:[NA].*:[fs]¬:(?:W|G|M|Y|P|3[sp]|[me]:[ip]) <<- /gn/ morph(<1, ":R") -2>> =suggMasPlur(\2, True) # Accord avec “tous” : “\2” devrait être au masculin pluriel. __toutes_nom__ [|,] toutes @:[NA].*:[ms]¬:(?:W|G|M|[fe]:[ip]) de toutes @:[NA].*:[ms]¬:(?:W|G|M|Y|[fe]:[ip]) <<- /gn/ -3>> =suggFemPlur(\3, True) # Accord avec “toutes” : “\3” devrait être au féminin pluriel. - toutes @:[NA].*:[ms]¬:(?:W|G|M|Y|[fe]:[ip]) + toutes @:[NA].*:[ms]¬:(?:W|G|M|Y|P|[fe]:[ip]) <<- /gn/ morph(<1, ":R") -2>> =suggFemPlur(\2, True) # Accord avec “toutes” : “\2” devrait être au féminin pluriel. TEST: Tout {{hommes}} TEST: De tous {{âge}} ! TEST: avec toutes {{femme}} ->> femmes @@ -8678,10 +8720,11 @@ TEST: vos tout débuts furent difficiles TEST: aux tout débuts, il y eut bien des erreurs TEST: comment les inégalités sociales impactent la santé des tout petits TEST: l’existence d’un enseignement supérieur public, peu onéreux et ouvert à tous est d’une importance cruciale. TEST: la survie de tous est plus importante que les profits de quelques-uns +TEST: tous ayant souffert du supplice de séjourner derrière les barreaux !! !! @@ -11281,10 +11324,14 @@ >prendre a la légère >saigner a blanc >tenir a distance >venir a point <<- /conf/ -2>> à # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”. + + >faire plaisirs + <<- /sgpl/ -2>> plaisir # Faire plaisir : dans cette locution, “plaisir” doit être au singulier. + <<- ~2>> * >laisser pour [comte|comtes|>conte] <<- /conf/ -3>> compte # Confusion. Locution “laisser pour compte”.|https://fr.wiktionary.org/wiki/laisser_pour_compte [>mourir|>paraître|>paraitre|>rester|>sembler] >jeûne @@ -11311,10 +11358,11 @@ TEST: il faut rendre {{comte}} de la sitation désastreuse dans laquelle nous sommes tombés. TEST: il faut tenir {{comtes}} des aléas de la météo. TEST: Elle est restée {{jeûne}}. TEST: Mourir {{jeûne}} ne lui faisait pas peur. TEST: Elles semblent {{jeûnes}}. +TEST: Ça me fait {{plaisirs}}. # Autres tests contre les faux positifs TEST: pourquoi faire compliqué quand on peut faire simple TEST: Pour ceux et celles qui étaient présents à la cérémonie @@ -11583,11 +11631,11 @@ <<- /gn/ morph(\2, ":D") >>> <<- /gn/ morph(\3, ":[NA].*:m", ":(?:e|f|P|G|W|[1-3][sp]|Y)") or ( morph(\3, ":[NA].*:m", ":[fe]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":(?:Rv|C)") and morph(\3, ":Y")) ) -2>> le # Accord de genre erroné : « \3 » est masculin. <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemSing(\3, True) # Accord de genre erroné : « \2 » est un déterminant féminin. - <<- /gn/ __else__ and morph(\3, ":[NA].*:p") + <<- /gn/ __else__ and morph(\3, ":[NA].*:p", "*") or ( morph(\3, ":[NA].*:p", ":[si]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) ) -3>> =suggFemSing(\3) # Accord de nombre erroné : « \3 » devrait être au singulier. la *WORD <<- /gn/ morph(\3, ":[NA].*:m", ":[efPGWY]") -2>> le # Accord de genre erroné : « \3 » est masculin. @@ -11601,10 +11649,12 @@ TEST: dans la {{parties}} ->> partie TEST: de {{la}} vin ->> le TEST: {{la}} {{véhicule}} TEST: {{La}} {{pris}} TEST: la force de la {{formes}} parfaite +TEST: à ne plus se laisser faire la fois d’après +TEST: il pense à la fois où nous avons eu cet accident idiot. __gn_la_2m__ la *WORD *WORD <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>> @@ -13088,11 +13138,10 @@ <<- /sgpl/ -2:3>> leur dévolu # Jeter son dévolu, leur dévolu : au singulier. TEST: Ces gens qui jettent {{leurs dévolus}} sur n’importe qui, c’est d’une indécence. - # escalier __sgpl_cage_d_escalier__ >cage d’ escaliers <<- /sgpl/ -3>> escalier # Usuellement, pas de “s” à escalier. @@ -13277,32 +13326,10 @@ <<- /sgpl/ -2>> bon # Dans la locution “sentir bon”, “bon” est un adverbe, donc invariable. TEST: Ces fleurs sentent {{bons}}. TEST: Ça sent bon. - -# termes -__sgpl_en_termes_de__ - en terme [de|d’] - <<- /sgpl/ -2>> termes # Dans la locution “en termes de”, mettez “terme” au pluriel. - -TEST: en {{terme}} de communication, c’est une véritable catastrophe - - -# tous / tout / toutes -__sgpl_tous_azimuts__ - tout [azimut|azimuts] - <<- /sgpl/ ->> tous azimuts # « Tous azimuts » signifie « dans toutes les directions ». - -__sgpl_une_bonne_fois_pour_toutes__ - une fois pour (toute) - une bonne fois pour (toute) - <<- /sgpl/ -1>> toutes # Mettez “toute” au pluriel. Sous-entendu : une fois pour toutes les autres fois. - -TEST: ils lancent des attaques {{tout azimut}}. -TEST: une bonne fois pour {{toute}} - # vacances __sgpl_bonnes_vacances__ bonne vacance <<- /sgpl/ not morph(<1, ":D.*:f:s") ->> bonnes vacances # Les vacances. Au pluriel. @@ -17726,23 +17753,22 @@ TEST: Allez les chercher. TEST: Soyez les plus gentils qu’on puisse imaginer. __imp_union_le_la_leur__ - *WORD [le|la|leur|en] + *WORD [le|la|leur] <<- /imp/ space_after(\1, 1, 1) and morph(\1, ":E", ":[GM]|>(?:venir|aller|partir)") and morph(>1, ":||>,", ":(?:N|A|Q|Y|MP|H|T)|>(?:pour|plus|moins|mieux|peu|plupart|trop|très|une?)/") and morph(<1, ":Cc||>,") ->> \1-\2 # S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206 - , *WORD [le|la|leur|en] + , *WORD [le|la|leur] <<- /imp/ space_after(\1, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)") and morph(>1, ":||>,", ":(?:N|A|Y|B|3[sp]|>(?:pour|plus|moins|mieux|peu|trop|très|en|y))") -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-"+\3 # S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206 TEST: {{Prends le}} avec toi. TEST: {{Dites leur}} que nous sommes là. -TEST: {{restons en}} là. TEST: j’en ai plus qu’assez, {{apprend le}}. TEST: un sujet si extrêmement politique et polémique lui a donné un accès TEST: Les États d’ores et déjà très affaiblis le seraient encore plus TEST: « C’est ainsi », résume la cyptologue (erreur orthographique délibérée sur “cyptologue” pour empêcher certains faux positifs) TEST: Notez le peu de cas qui en est fait en général dans les médias @@ -17750,10 +17776,25 @@ TEST: Pesons le pour et le contre. TEST: Va la demander au concierge. TEST: Allons le questionner encore une fois. TEST: Sois le pire des salopards. + +__imp_union_le_la_leur__ + *WORD en + <<- /imp/ space_after(\1, 1, 1) + and morph(\1, ":E", ":[GM]|>(?:venir|aller|partir)") and morph(>1, ":||>,", ":(?:N|A|Q|Y|MP|H|T|D)|>(?:pour|plus|moins|mieux|peu|plupart|trop|très|une?)/") and morph(<1, ":Cc||>,") + ->> \1-\2 # S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206 + + , *WORD en + <<- /imp/ space_after(\1, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)") + and morph(>1, ":||>,", ":(?:N|A|Y|B|3[sp]|D|>(?:pour|plus|moins|mieux|peu|trop|très|en|y))") + -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-"+\3 # S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206 + +TEST: {{restons en}} là. +TEST: Intercède en ma faveur + __imp_laisser_le_la_les_infi__ >laisser [le|la|les] *WORD <<- /imp/ space_after(\1, 1, 1) and morph(\1, ":E") and morph(\3, ":(?:Y|X|Oo)", ":[NAB]") -1:2>> \1-\2 # S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206 @@ -19708,12 +19749,12 @@ TEST: Maria, avance devant toi. __conj_det_nom_sing_virgule__ [un|le|la|l’|ce|cet|cette|mon|ton|son|ma|ta|sa] @:[NA] , @:3s¬:[NAGEM] - <<- /conj/ space_after(\3, 0, 0) and space_after(\4, 1, 10) -3:4>> \3 # Soit la virgule est superflue (on ne sépare pas le verbe du sujet), soit “\4” devrait être à l’impératif. - <<- /conj/ __also__ -5>> =suggVerbTense(\5, ":E", ":2s") # Soit la virgule après “\2 \3” est superflue (on ne sépare pas le verbe du sujet), soit “\4” devrait être à l’impératif. + <<- /conj/ space_after(\3, 0, 0) and space_after(\4, 1, 10) -3:4>> \3 # Soit la virgule est superflue (on ne sépare pas le verbe du sujet), soit “\5” devrait être à l’impératif. + <<- /conj/ __also__ -5>> =suggVerbTense(\5, ":E", ":2s") # Soit la virgule après “\2 \3” est superflue (on ne sépare pas le verbe du sujet), soit “\5” devrait être à l’impératif. TEST: l’{{homme,}} {{devient}} difficile. ->> homme|||deviens TEST: ce matin, viens me voir. TEST: l’Angola, Cuba et l’Afrique du Sud signent à New York, sous l’égide des Soviétiques et des Américains, un accord aboutissant au retrait des troupes cubaines d’Angola. Index: graphspell-js/ibdawg.js ================================================================== --- graphspell-js/ibdawg.js +++ graphspell-js/ibdawg.js @@ -364,11 +364,11 @@ for (let sTail of this._getTails(iAddr)) { oSuggResult.addSugg(sNewWord+sTail); } return; } - else if (this.isValid(sRemain)) { + else if (this.isValid(sRemain) && oSuggResult.sWord.startsWith(sNewWord)) { oSuggResult.addSugg(sNewWord+" "+sRemain); } } if (nDist > oSuggResult.nDistLimit) { return; Index: graphspell/ibdawg.py ================================================================== --- graphspell/ibdawg.py +++ graphspell/ibdawg.py @@ -327,11 +327,11 @@ if not sRemain: oSuggResult.addSugg(sNewWord, nDeep) for sTail in self._getTails(iAddr): oSuggResult.addSugg(sNewWord+sTail, nDeep) return - elif self.isValid(sRemain): + elif self.isValid(sRemain) and oSuggResult.sWord.startswith(sNewWord): oSuggResult.addSugg(sNewWord+" "+sRemain) if nDist > oSuggResult.nDistLimit: return cCurrent = sRemain[0:1] for cChar, jAddr in self._getCharArcs(iAddr):