Index: CHANGELOG.txt ================================================================== --- CHANGELOG.txt +++ CHANGELOG.txt @@ -15,23 +15,30 @@ Text preprocessor between the two passes Error positioning (by group selection) ## 0.3 Multi-passes engine - Dictionary switcher - Text formatter - Lexicographer - French Conjugueur + [fr] Dictionary switcher + [fr] Text formatter + [fr] Lexicographer + [fr] French Conjugueur ## 0.4 - Suggestion mechanisms Simpler user options writing - Application Launcher - Author field edition + [fr] Suggestion mechanisms + [fr] Application Launcher + [fr] Author field edition ## 0.5 Grammalecte is an autonomous package, free from Hunspell and LibreOffice Indexable binary dictionary (DAWG-FSA) generator Disambiguator Multi-actions rules (bi-passes engine again) Simpler options for word boundaries Unit tests + New engine written in JavaScript + [fr] Extension for Firefox + [fr] Extension for Thunderbird + +## 0.6 + [fr] Extension for Firefox converted to WebExtension + [fr] Enumerator of words Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -4223,10 +4223,36 @@ (qu elles?) +(?!seule?s?)({w_2}) @@0,$ <<- morphex(\2, ":[NAQ]", ":(?:G|[123][sp]|W)") -1>> =\1.replace(" ", "") # Confusion probable. Ex : Quelle femme ! Je crois qu’elle réussira. TEST: {{qu’elle}} emmerdeuse. + +__[i]/conf(conf_qu_elle_verbe)__ + (quelles?) +({w_1}) @@0,$ + <<- \2.islower() and (morphex(\2, ":V|>(?:ne?|me?|te?|se?|[nv]ous|l(?:e|a|es|ui|leur|)|en|y) ", ":[NA].*:[fe]") or \2 == "t" or \2 == "s") >>> + <<- \1.endswith("e") and not morph(\2, ":V0e", False) -1>> qu’elle # Confusion. Le sujet “elle” doit être séparée de la conjonction “que”. 1 + <<- __else__ and \1.endswith("s") and not morph(\2, ":V0e", False) -1>> qu’elles # Confusion. Le sujet “elles” doit être séparée de la conjonction “que”. 2 + <<- __else__ and morph(\2, ":V0e", False) and morphex(word(1), ":[QA]", ":G", False) >>> + <<- \1.endswith("e") -1>> qu’elle # Confusion. Le sujet “elle” doit être séparée de la conjonction “que”. 3 + <<- __else__ and \1.endswith("s") -1>> qu’elles # Confusion. Le sujet “elles” doit être séparée de la conjonction “que”. 4 + +TEST: Je sais {{quelle}} est partie. +TEST: {{Quelle}} partit prendre son repas à la cantine, je n’en avais cure. +TEST: Il se plaint {{quelle}} ne nous dit rien. +TEST: {{Quelles}} sont intelligentes, ces filles-là. +TEST: {{Quelle}} a du répondant, cette gamine ! +TEST: {{Quelle}} y vienne, on verra ce qu’elle vaut. +TEST: Je veux {{quelles}} s’efforcent à y parvenir. +TEST: {{Quelle}} l’apprenne un jour, on n’y peut rien. +TEST: Je crois {{quelle}} n’en sait pas assez pour nous nuire. +TEST: {{Quelles}} t’arrivent seulement à la cheville, voilà qui serait étonnant. +TEST: {{Quelles}} m’engueulent encore une seule fois et elles vont le regretter. +TEST: Je crois {{quelle}} est partie. +TEST: il pense {{quelles}} sont devenues dangereuses. +TEST: Quelle est sa passion ? +TEST: Quelles sont leurs principales études ? + # savoir / ignorer __[i]/conf(être_pas_sans_savoir)__ ({etre}) pas sans (ignor(?:e[rz]|ée?s?|ai[st])) @@0,$ <<- morph(\1, ":V0e", False) @@ -10362,44 +10388,47 @@ __[i](p_les_avoir_fait_vinfi)__ les ({avoir}) +(fait) +(?:[mts](?:e +|’)|)({infi}) @@w,w,$ <<- morph(\1, ">avoir ", False) and morph(\3, ":Y", False) ~2>> _ __[i]/ppas(ppas_pronom_avoir)__ (?:j’|je |tu |ils? |elles? |on |et )(?:ne +|n’|l(?:ui|eur) +|)({avoir}) +({w_2}) @@w,$ - <<- not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \2) and morph(word(-1), ">puisque? ", False, True) + <<- not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \2) and morph(word(-1), ">(?:comme|et|lorsque?|mais|o[uù]|puisque?|qu(?:oique?|i|and)|si(?:non|)) ", False, True) and morph(\1, ":V0a", False) and not \2.isupper() and morphex(\2, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])") -2>> =suggMasSing(@) # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais TEST: ils leur avaient {{donnés}} du fil à retordre. TEST: il a {{affronte}} une bande de voleurs de bétail TEST: J’ai {{mettrai}} du sel. ->> mis TEST: J’ai {{lut}} son journal. ->> lu TEST: Ils avaient barre sur lui. +TEST: Si j’avais {{sut}}. __[i]/ppas(ppas_nous_vous_avoir)__ ([nv]ous) +(?:ne +|n’|l(?:ui|eur) +|)({avoir}) +({w_2}) @@0,w,$ <<- morph(\1, ":Os", False) - and not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \3) and morph(word(-1), ">puisque? ", False, True) + and not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \3) and morph(word(-1), ">(?:comme|et|lorsque?|mais|o[uù]|puisque?|qu(?:oique?|i|and)|si(?:non|)) ", False, True) and morph(\2, ":V0a", False) and not \3.isupper() and morphex(\3, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])") -3>> =suggMasSing(@) # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais TEST: Nous avons {{donne}} tout notre potentiel. +TEST: mais nous avons {{était}} surpris par cette annonce. TEST: D’un côté, le modèle occidental, […], nous a libérés de […] __[i]/ppas(ppas_det_nom_avoir)__ (l(?:’|es? |a |eurs )|ce(?:s|tte|t|rtaine?s|) |des |quelques |[mts](?:es|on|a) |[nv]o(?:s|tre) ) *({w_2}) +(?:ne +|n’|l(?:ui|eur) +|)({avoir}) +({w_2}) @@0,w,w,$ - <<- not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \4) and morph(word(-1), ">puisque? ", False, True) + <<- not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \4) and morph(word(-1), ">(?:comme|et|lorsque?|mais|o[uù]|puisque?|qu(?:oique?|i|and)|si(?:non|)) ", False, True) and not morph(\2, ":G", False) and morph(\3, ":V0a", False) and not \4.isupper() and morphex(\4, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])") and not (\3 == "avions" and morph(\4, ":3[sp]", False)) -4>> =suggMasSing(@) # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais TEST: Les femmes lui avait {{conseillées}} de se taire. TEST: le mur avait {{était}} détruit +TEST: Lorsque les femmes ont {{apprit}} la nouvelle… TEST: Certains les ont d’abord jugés trop lents. __[i]/ppas(ppas_les_avoir)__ les +({avoir}) +({w_1}(?:[éiut]e?|is|se)) @@w,$ Index: gc_lang/fr/webext/panel/main.html ================================================================== --- gc_lang/fr/webext/panel/main.html +++ gc_lang/fr/webext/panel/main.html @@ -32,11 +32,11 @@ Index: graphspell-js/char_player.js ================================================================== --- graphspell-js/char_player.js +++ graphspell-js/char_player.js @@ -237,10 +237,12 @@ ["AU", ["EAU", "O", "Ô"]], ["em", ["an", "am", "en"]], ["EM", ["AN", "AM", "EN"]], ["en", ["an", "am", "em"]], ["EN", ["AN", "AM", "EM"]], + ["ae", ["æ", "é"]], + ["AE", ["Æ", "É"]], ["ai", ["ei", "é", "è", "ê", "ë"]], ["AI", ["EI", "É", "È", "Ê", "Ë"]], ["ei", ["ai", "é", "è", "ê", "ë"]], ["EI", ["AI", "É", "È", "Ê", "Ë"]], ["ch", ["sh", "c", "ss"]], @@ -247,10 +249,12 @@ ["CH", ["SH", "C", "SS"]], ["ct", ["x", "cc"]], ["CT", ["X", "CC"]], ["oa", ["oi",]], ["OA", ["OI",]], + ["oe", ["œ",]], + ["OE", ["Œ",]], ["oi", ["oa", "oie"]], ["OI", ["OA", "OIE"]], ["ph", ["f",]], ["PH", ["F",]], ["qu", ["q", "cq", "ck", "c", "k"]], Index: graphspell/char_player.py ================================================================== --- graphspell/char_player.py +++ graphspell/char_player.py @@ -226,10 +226,12 @@ "AU": ("EAU", "O", "Ô"), "em": ("an", "am", "en"), "EM": ("AN", "AM", "EN"), "en": ("an", "am", "em"), "EN": ("AN", "AM", "EM"), + "ae": ("æ", "é"), + "AE": ("Æ", "É"), "ai": ("ei", "é", "è", "ê", "ë"), "AI": ("EI", "É", "È", "Ê", "Ë"), "ei": ("ai", "é", "è", "ê", "ë"), "EI": ("AI", "É", "È", "Ê", "Ë"), "ch": ("sh", "c", "ss"), @@ -236,10 +238,12 @@ "CH": ("SH", "C", "SS"), "ct": ("x", "cc"), "CT": ("X", "CC"), "oa": ("oi",), "OA": ("OI",), + "oe": ("œ",), + "OE": ("Œ",), "oi": ("oa", "oie"), "OI": ("OA", "OIE"), "ph": ("f",), "PH": ("F",), "qu": ("q", "cq", "ck", "c", "k"),