Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -1467,18 +1467,19 @@ ## Mots inconnus du dictionnaire __[s]/ocr(mots_composés_inconnus)__ \w+-\w+ - <<- not spell(\0) and not re.search("(?i)-(?:je|tu|on|nous|vous|ie?ls?|elles?|ce|là|ci|les?|la|leur|une?s|moi|toi)$", \0) + <<- not spell(\0) and not re.search("(?i)-(?:je|tu|on|nous|vous|ie?ls?|elles?|ce|là|ci|les?|la|leur|une?s|moi|toi|en|y)$", \0) ->> _ # Erreur de numérisation ? Mot composé inconnu du dictionnaire. TEST: __ocr__ c’est du {{base-bal}}] TEST: __ocr__ cet homme-là est corrompu. TEST: __ocr__ cette femme-là est revenue nous dire ce qu’elle pensait de nous. TEST: __ocr__ Est-ce le bon moment pour nous ennuyer avec ça ? TEST: __ocr__ Alors, dis-moi, comment triompher de tous les empires de la Terre ? +TEST: __ocr__ prenez-en. ## Trait d’union conditionnel __[i]/ocr(tu_trait_union_conditionnel)__ ({w1})‑({w1}) @@0,$ @@ -1517,10 +1518,22 @@ TEST: __ocr__ avec {{1e}} chien du policier TEST: __ocr__ il le jura sur {{1a}} tête de sa mère TEST: __ocr__ {{1c}} chat du voinsin est idiot TEST: __ocr__ {{[e}} chien a faim + +__[i]/conf(conf_1e_1a_1es)__ + [1[\]][ea]s? + <<- \0.endswith("e") and (morph(word(1), ":(?:N.*:[me]:[si]|V)", ":G") or morph(word(-1), ">ne/")) ->> le # Erreur de frappe ? + <<- \0.endswith("a") and (morph(word(1), ":(?:N.*:[fe]:[si]|V)", ":G") or morph(word(-1), ">ne/")) ->> la # Erreur de frappe ? + <<- \0.endswith("es") and (morph(word(1), ":(?:N.*:[pi]|V)", ":G") or morph(word(-1), ">ne/")) ->> les # Erreur de frappe ? + +TEST: {{1e}} marginal ->> le +TEST: {{1a}} venue des problèmes ->> la +TEST: {{1es}} enfants sont au lit ->> les +TEST: Je… ne {{1e}}… crois pas… + __[i]/ocr(ocr_les)__ [1[\]][ea]s <<- ->> les # Erreur de numérisation ? @@ -13396,10 +13409,11 @@ #, @¬:[NA] #[ne|n’|me|m’|te|t’|se|s’|le|la|l’|les|leur|leur|mon|ma|ta|sa|notre|votre|mes|tes|ses|ce|cet|cette|ces|je|j’|tu|il|on|nous|vous|ils|iels|ça|ceci|cela|c’|ç’|chaque] __simplication_substantifs__ + abus [de|d’] position dominante abus [de|d’] pouvoir >accusé [de|d’] reception >acte [de|d’] [baptême|caution|cautionnement|cession|contrition|licitation|mariage|naissance|notoriété|propriété|quittance|reconnaissance|répudiation|vente] >acte d’ [achat|engagement] >acte [de|d’] gestion ?courante¿ @@ -13446,10 +13460,11 @@ >bombe à rayonnement renforcé >bonnet [de|d’] nuit >bon à rien >boucle d’ >oreille bras d’ honneur + bras [de|d’] fer >brave ?d’¿ entre les braves >brosse à [>dent|reluire] >bureau [de|d’] [tabac|vote] >cabinet [de|d’] [toilette|travail] >camp [de|d’] [concentration|internement|rééducation|vacances] @@ -13494,29 +13509,23 @@ [composante+s] alpha >compte à rebours concours [de|d’] beauté >condamné à mort >conférence [de|d’] presse - >con comme la lune - >con comme un balai - >con comme une valise sans >poignée >conseiller d’ orientation [scolaire|professionnelle] >contrôle [de|d’] routine >convention [récepteur|générateur] >coque [de|d’] noix >corbeille à >pain - >corvéable à merci >coup [de|d’] [avance|balai|barre|bâton|bec|bélier|bite|blues|bol|botte|boule|boutoir|cœur|chaud|coude|couteau|dé|dent|déprime|éclat|épaule|épée|estoc|État|foudre|fil|froid|genou|grâce|>griffe|grisou|gueule|hache|hanche|jarnac|jeune|jus|klaxon|main|maître|maitre|marteau|massue|nostalgie|œil|patte|pied|poignard|poing|poker|pouce|pute|queue|rabot|rein|sabre|sabot|sang|savate|semonce|sifflet|soleil|surin|tête|théâtre|tonnerre|trique|torchon|vent|vieux] >coup [de|d’] baguette ?magique¿ >coup d’ épée dans l’ eau >coup d’ un soir >coup du sort >coureur [de|d’] >jupon >courroie [de|d’] transmission >course contre la montre - [cousu+ses] [main] - [cousu+ses] [de|d’] fil blanc >crayon à [lèvres|sourcils] >cour d’ assises [>coût|>cout] [de|d’] revient >couteau à cran d’ arrêt >crise de >nerf @@ -13530,11 +13539,10 @@ >digne [de|d’] [confiance|foi] >digne [de|d’] ce nom >don en nature >donneur [de|d’] >leçon >dossier [de|d’] presse - >droit comme un i >eau [de|d’] [bouleau|bleuet|chaux|coco|javel|jouvence|mer|parfum|pluie|seltz|source|vie] >eau [de|d’] noix [de|d’] coco >économie [de|d’] >bout [de|d’] >chandelle >éditeur [de|d’] presse >effet [de|d’] bord @@ -13595,11 +13603,10 @@ >grève [de|d’] la faim >groupe [de|d’] [discussion|parole|prière|pression|travail] >guerre éclair >hall d’ entrée >harcèlement [de|d’] rue - >haut comme [trois|3] pommes >heure [sup|sup’] >histoire à dormir debout >histoire avec un [grand|petit] h >homme [de|d’] [affaires|armes|confiance|exception|État|Église|honneur|lettres|loi|main|paille] >homme d’ âge mûr @@ -13619,12 +13626,14 @@ >langue [de|d’] bois >lame [de|d’] fond >lettre [de|d’] recommandation >lampe à [huile|pétrole] >lampe [de|d’] chevet + >langue [de|d’] bois >lavage [de|d’] cerveau >liaison sans lendemain + >ligne [de|d’] mire >lime à >ongle >liste d’ attente >lit à baldaquin >lit [de|d’] camp >livraison à domicile @@ -13666,22 +13675,17 @@ >moule à [>gaufre|>gâteau|brioche|manqué|savarin|charlotte|tarte] >moulin à [café|eau|paroles|poivre|prières|vent] noix [de|d’] [cajou|pécan|pecan|coco|lavage|muscade|veau|macadamia] >nounou à domicile >nourrice à domicile - >nu comme un ver - >nu comme des vers - >nul et non >avenu >occasion en or ?massif¿ >oiseau [de|d’] [malheur|nuit|proie] >oiseau [de|d’] mauvais augure >onde [de|d’] choc orge [perlé|mondé|carré] - >noir comme la nuit - >noir comme une nuit sans lune >nuit [de|d’] noces - >pain de mie + >pain [de|d’] mie >panier à linge >piano à queue >papier à [>lettre|musique] >parc d’ attractions >parole en l’ air @@ -13717,13 +13721,12 @@ >question [de|d’] vie ou [de|d’] mort >rapport [de|d’] force >rat [de|d’] bibliothèque >réaction en [chaîne|chaine] région Grand Est - [réglé+ses] comme du papier à musique >règlement [de|d’] comptes - [remis+es] à plat + >sourd comme un pot >requête en nullité >requête en non [conciliation|inscription|lieu] >requête en non révocation [de|d’] sursis >responsable qualité [>resto|>restau] u @@ -13739,12 +13742,10 @@ [>ru|>ruisseau] à sec >sac à [bandoulière|dos|main|langer|merde|foutre] >sac [de|d’] [couchage|sport|voyage] >salle à manger >salle [de|d’] [attente|>bain|conférence|lecture|séjour|vente] - >sain [de|d’] [corps|esprit] - >sain [de|d’] [corps|esprit] et [de|d’] [corps|esprit] >sclérose en plaques [secret+s] défense >sel [de|d’] [aluminium|ammonium|mer] >serpent à sonnette >service d’ ordre @@ -13753,11 +13754,10 @@ >silo à [>grains|blé] >soldat d’ élite >sonnette d’ alarme >sortie [de|d’] secours >soue à >cochonne - >sourd comme un pot >système d’ exploitation >système D >tableau [de|d’] chasse >table à repasser >table [de|d’] chevet @@ -13768,12 +13768,10 @@ >témoin à charge tenants et aboutissants >ténor du barreau >tête à claques >tête [de|d’] [linotte|déterré|déterrée|déterrés|déterrées|mule] - >têtu comme une [bourrique|mule] - >têtu comme un [âne|bourriquot|mulet] >terrain à découvert >tigre à dents [de|d’] sabre >tigre [de|d’] papier ?mâché¿ >tir [de|d’] barrage >tiret d’ incise @@ -13813,14 +13811,34 @@ >zone [de|d’] confort >zone [de|d’] transit ?principal¿ <<- ~2:0>> * <<- =>> =select(\1, ":N") + >brut [de|d’] décoffrage + >con comme la lune + >con comme un balai + >con comme une valise sans >poignée + >corvéable à merci >court sur pattes + [cousu+ses] [main] + [cousu+ses] [de|d’] fil blanc [daté+ses] du [1er|1ᵉʳ|1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12|13|14|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31] {mois} ?[prochain|passé|dernier|~^[0-9]{2,5}$]¿ + >droit comme un i >fou de rage ?[contenue|retenue]¿ + >haut comme [trois|3] pommes >mort de trouille + >nu comme un ver + >nu comme des vers + >nul et non >avenu + >noir comme la nuit + >noir comme une nuit sans lune + [réglé+ses] comme du papier à musique + [remis+es] à plat + >sain [de|d’] [corps|esprit] + >sain [de|d’] [corps|esprit] et [de|d’] [corps|esprit] + >têtu comme une [bourrique|mule] + >têtu comme un [âne|bourriquot|mulet] <<- ~2:0>> * [>homme|>femme|>cinéaste|>politicien|>acteur|>auteur|>sculpteur|>compositeur|>musicien|>groupe|>romancier|>peintre|>photographe|>sportif|>philosophe|>intellectuel|>polémiste] à succès [>homme|>femme] d’ >affaire à succès <<- ~-2:0>> * @@ -19706,10 +19724,11 @@ TEST: afin de leur {{percée}} une ouverture TEST: en train de {{percées}} TEST: elle tricha à seule fin d’{{allée}} à l’université TEST: ils sont à même de {{trouvé}} la bonne réponse +TEST: ces explications sont plus à même de les {{touchés}} TEST: Nous étions en train de {{trouvé}} une solution à ces soucis récurrents. TEST: il a l’air de {{pensée}} qu’on est des crétins TEST: tu avais raison de {{pensée}} ça TEST: nous eûmes la chance de la {{trouvée}} facilement TEST: avoir raison de la {{considérée}} ainsi @@ -23798,38 +23817,38 @@ [ne|n’] [lui|leur] en @:(?:[123][sp]|P|Y)¬:X <<- ~1:-2>> * __purge_proposition_subordonnée__ - [que|qu’] je ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ @:V[123].*:1s @:[123][sp] - [que|qu’] je ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:V[123].*:1s @:[123][sp] - [que|qu’] je ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:V[123].*:1s @:[123][sp] - [que|qu’] je ?[ne|n’]¿ [lui|leur|y] en @:V[123].*:1s @:[123][sp] - [que|qu’] tu ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ @:V[123].*:2s @:[123][sp] - [que|qu’] tu ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:V[123].*:2s @:[123][sp] - [que|qu’] tu ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:V[123].*:2s @:[123][sp] - [que|qu’] tu ?[ne|n’]¿ [lui|leur|y] en @:V[123].*:2s @:[123][sp] - [que|qu’] [il|elle|on|iel|$:M] ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ @:V[123].*:3s @:[123][sp] - [que|qu’] [il|elle|on|iel|$:M] ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:V[123].*:3s @:[123][sp] - [que|qu’] [il|elle|on|iel|$:M] ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:V[123].*:3s @:[123][sp] - [que|qu’] [il|elle|on|iel|$:M] ?[ne|n’]¿ [lui|leur|y] en @:V[123].*:3s @:[123][sp] - [que|qu’] nous ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ @:V[123].*:1p @:[123][sp] - [que|qu’] nous ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:V[123].*:1p @:[123][sp] - [que|qu’] nous ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:V[123].*:1p @:[123][sp] - [que|qu’] nous ?[ne|n’]¿ [lui|leur|y] en @:V[123].*:1p @:[123][sp] - [que|qu’] vous ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ @:V[123].*:2p @:[123][sp] - [que|qu’] vous ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:V[123].*:2p @:[123][sp] - [que|qu’] vous ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:V[123].*:2p @:[123][sp] - [que|qu’] vous ?[ne|n’]¿ [lui|leur|y] en @:V[123].*:2p @:[123][sp] - [que|qu’] [ils|elles|iels] ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ @:V[123].*:3p @:[123][sp] - [que|qu’] [ils|elles|iels] ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:V[123].*:3p @:[123][sp] - [que|qu’] [ils|elles|iels] ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:V[123].*:3p @:[123][sp] - [que|qu’] [ils|elles|iels] ?[ne|n’]¿ [lui|leur|y] en @:V[123].*:3p @:[123][sp] - [que|qu’] $:M et $:M ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ @:V[123].*:3p @:[123][sp] - [que|qu’] $:M et $:M ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:V[123].*:3p @:[123][sp] - [que|qu’] $:M et $:M ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:V[123].*:3p @:[123][sp] - [que|qu’] $:M et $:M ?[ne|n’]¿ [lui|leur|y] en @:V[123].*:3p @:[123][sp] + [que|qu’] je ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ $:1s @:[123][sp] + [que|qu’] je ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] $:1s @:[123][sp] + [que|qu’] je ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] $:1s @:[123][sp] + [que|qu’] je ?[ne|n’]¿ [lui|leur|y] en $:1s @:[123][sp] + [que|qu’] tu ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ $:2s @:[123][sp] + [que|qu’] tu ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] $:2s @:[123][sp] + [que|qu’] tu ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] $:2s @:[123][sp] + [que|qu’] tu ?[ne|n’]¿ [lui|leur|y] en $:2s @:[123][sp] + [que|qu’] [il|elle|on|iel|$:M] ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ $:3s @:[123][sp] + [que|qu’] [il|elle|on|iel|$:M] ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] $:3s @:[123][sp] + [que|qu’] [il|elle|on|iel|$:M] ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] $:3s @:[123][sp] + [que|qu’] [il|elle|on|iel|$:M] ?[ne|n’]¿ [lui|leur|y] en $:3s @:[123][sp] + [que|qu’] nous ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ $:1p @:[123][sp] + [que|qu’] nous ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] $:1p @:[123][sp] + [que|qu’] nous ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] $:1p @:[123][sp] + [que|qu’] nous ?[ne|n’]¿ [lui|leur|y] en $:1p @:[123][sp] + [que|qu’] vous ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ $:2p @:[123][sp] + [que|qu’] vous ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] $:2p @:[123][sp] + [que|qu’] vous ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] $:2p @:[123][sp] + [que|qu’] vous ?[ne|n’]¿ [lui|leur|y] en $:2p @:[123][sp] + [que|qu’] [ils|elles|iels] ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ $:3p @:[123][sp] + [que|qu’] [ils|elles|iels] ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] $:3p @:[123][sp] + [que|qu’] [ils|elles|iels] ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] $:3p @:[123][sp] + [que|qu’] [ils|elles|iels] ?[ne|n’]¿ [lui|leur|y] en $:3p @:[123][sp] + [que|qu’] $:M et $:M ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ $:3p @:[123][sp] + [que|qu’] $:M et $:M ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] $:3p @:[123][sp] + [que|qu’] $:M et $:M ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] $:3p @:[123][sp] + [que|qu’] $:M et $:M ?[ne|n’]¿ [lui|leur|y] en $:3p @:[123][sp] <<- morph(<1, ":N", ":V") ~1:-2>> * __tag_verbe_infinitif_sujet__ [|,|(] [ne|n’] ?[en|y]¿ ?presque¿ [pas|rien|guère|point|jamais|plus] @@ -24898,10 +24917,11 @@ TEST: certaines femmes {{danse}} beaucoup TEST: tu sais, certaines danses {{dérive}} d’autres TEST: certaines demandes qui {{donne}} le tournis. TEST: plusieurs personnes {{devienne}} des robots TEST: plusieurs pressions qui ne {{donne}} pas les résultats attendus. +TEST: les invités que tu as servis {{outrepasse}} leur droit TEST: l’écart entre les riches et les pauvres n’était pas si grand. TEST: Les grands hommes politiques TEST: les charmantes petites mines de toutes les jeunes filles TEST: Les pauvres petites dames sont folles TEST: Sauf que l’un comme l’autre avaient dû y renoncer. Index: gc_lang/fr/webext/background.js ================================================================== --- gc_lang/fr/webext/background.js +++ gc_lang/fr/webext/background.js @@ -340,12 +340,10 @@ // Tools browser.contextMenus.create({ id: "conjugueur_tab", title: "Conjugueur [onglet]", contexts: ["all"] }); browser.contextMenus.create({ id: "conjugueur_window", title: "Conjugueur [fenêtre]", contexts: ["all"] }); //browser.contextMenus.create({ id: "dictionaries", title: "Dictionnaires", contexts: ["all"] }); browser.contextMenus.create({ id: "lexicon_editor", title: "Éditeur lexical", contexts: ["all"] }); -// Rescan page -browser.contextMenus.create({ id: "separator_rescan", type: "separator", contexts: ["editable"] }); browser.contextMenus.onClicked.addListener(function (xInfo, xTab) { // xInfo = https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/contextMenus/OnClickData // xTab = https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/Tab Index: gc_lang/fr/webext/content_scripts/init.js ================================================================== --- gc_lang/fr/webext/content_scripts/init.js +++ gc_lang/fr/webext/content_scripts/init.js @@ -172,10 +172,23 @@ } catch (e) { showError(e); } }, + + findOriginEditableNode: function (xNode) { + if (!xNode) { + return null; + } + if (xNode.tagName == "TEXTAREA" || xNode.tagName == "INPUT" || xNode.tagName == "IFRAME") { + return xNode; + } + const findNode = function (xNode) { + return (!xNode.parentNode.isContentEditable) ? xNode : findNode(xNode.parentNode); + } + return findNode(xNode); + }, getCaretPosition: function (xElement) { // JS awfulness again. // recepie from https://stackoverflow.com/questions/4811822/get-a-ranges-start-and-end-offsets-relative-to-its-parent-container let nCaretOffsetStart = 0; @@ -276,10 +289,17 @@ sCommand: the action to perform oParam: parameters necessary for the execution of the action oInfo: all kind of informations that needs to be sent back (usually to know where to use the result) } */ + + checkConnection: function () { + if (!this.xConnect) { + this.xConnect = browser.runtime.connect({name: "content-script port"}); + } + }, + parseAndSpellcheck: function (sText, sDestination) { this.xConnect.postMessage({ sCommand: "parseAndSpellcheck", oParam: { sText: sText, sCountry: "FR", bDebug: false, bContext: false }, oInfo: { sDestination: sDestination } @@ -398,11 +418,12 @@ (Context menu are initialized in background) */ // Grammar checker commands case "grammar_checker_editable": if (oGrammalecte.xRightClickedNode !== null) { - oGrammalecte.startGCPanel(oGrammalecte.xRightClickedNode); + let xNode = oGrammalecte.findOriginEditableNode(oGrammalecte.xRightClickedNode); + oGrammalecte.startGCPanel(xNode); } else { oGrammalecte.showMessage("Erreur. Le node sur lequel vous avez cliqué n’a pas pu être identifié. Sélectionnez le texte à corriger et relancez le correcteur via le menu contextuel."); } break; case "grammar_checker_page": @@ -430,11 +451,11 @@ Other messages from background */ listen2: function () { browser.runtime.onMessage.addListener(function (oMessage) { let {sActionRequest} = oMessage; - let xActiveNode = document.activeElement; + let xActiveNode = oGrammalecte.findOriginEditableNode(document.activeElement); switch (sActionRequest) { /* Commands received from the keyboard (shortcuts) */ case "shortcutGrammarChecker": Index: gc_lang/fr/webext/content_scripts/menu.css ================================================================== --- gc_lang/fr/webext/content_scripts/menu.css +++ gc_lang/fr/webext/content_scripts/menu.css @@ -6,11 +6,11 @@ div.grammalecte_menu_main_button { all: initial; position: absolute; box-sizing: border-box; display: none; - margin: -12px 0 0 -12px; + margin: -10px 0 0 -18px; width: 16px; height: 16px; background-color: hsla(210, 80%, 95%, .5); border: 3px solid hsla(210, 80%, 50%, .9); border-top: 3px solid hsla(210, 80%, 90%, .9); Index: gc_lang/fr/webext/content_scripts/menu.js ================================================================== --- gc_lang/fr/webext/content_scripts/menu.js +++ gc_lang/fr/webext/content_scripts/menu.js @@ -36,43 +36,50 @@ this._bEditableNode = oOptions.ui_options.editablenode; } } examineNode (xNode) { - if (xNode && xNode instanceof HTMLElement) { - if (xNode === this.xTextNode) { - this.move(); - return; - } - if ( ( (xNode.tagName == "TEXTAREA" && this._bTextArea && xNode.getAttribute("spellcheck") !== "false") - || ( (xNode.tagName == "P" || xNode.tagName == "DIV") && xNode.isContentEditable && this._bEditableNode ) - || (xNode.tagName == "IFRAME" && this._bIframe) ) - && xNode.style.display !== "none" && xNode.style.visibility !== "hidden" - && !(xNode.dataset.grammalecte_button && xNode.dataset.grammalecte_button == "false") ) { - this.xTextNode = xNode; - this.show() - } - else { - this.xTextNode = null; - this.hide(); - } - } - else { - this.xTextNode = null; - this.hide(); - } - } - - show () { - if (this.xTextNode) { + if (!xNode || !xNode instanceof HTMLElement) { + // not a node + this.reject(); + return; + } + if (xNode === this.xTextNode) { + // same node -> possibly click for resizing -> move it + this.move(); + return; + } + if ( ( (xNode.tagName == "TEXTAREA" && this._bTextArea && xNode.getAttribute("spellcheck") !== "false") + || (xNode.tagName == "IFRAME" && this._bIframe) ) + && !(xNode.dataset.grammalecte_button && xNode.dataset.grammalecte_button == "false") ) { + // textarea or iframe + this.accept(xNode) + } + else if (xNode.isContentEditable && this._bEditableNode) { + // editable node + xNode = oGrammalecte.findOriginEditableNode(xNode); + if ((xNode.tagName == "P" || xNode.tagName == "DIV") && !(xNode.dataset.grammalecte_button && xNode.dataset.grammalecte_button == "false")) { + this.accept(xNode); + } else { + this.reject(); + } + } else { + this.reject(); + } + } + + accept (xNode=null) { + if (xNode) { + this.xTextNode = xNode; this.xButton.style.display = "none"; // we hide it before showing it again to relaunch the animation this.move(); this.xButton.style.display = "block"; } } - hide () { + reject () { + this.xTextNode = null; this.xButton.style.display = "none"; } move () { if (this.xTextNode) { Index: gc_lang/fr/webext/content_scripts/panel_gc.js ================================================================== --- gc_lang/fr/webext/content_scripts/panel_gc.js +++ gc_lang/fr/webext/content_scripts/panel_gc.js @@ -1050,32 +1050,30 @@ write () { if (this.xNode !== null) { if (this.bResultInEvent) { const xEvent = new CustomEvent("GrammalecteResult", { detail: JSON.stringify({ sType: "text", sText: this.getText() }) }); this.xNode.dispatchEvent(xEvent); - console.log("[Grammalecte debug] Text sent to xNode via event:", xEvent.detail); + //console.log("[Grammalecte debug] Text sent to xNode via event:", xEvent.detail); } else if (this.bTextArea) { this.xNode.value = this.getText(); - console.log("[Grammalecte debug] text written in textarea:", this.getText()); + //console.log("[Grammalecte debug] text written in textarea:", this.getText()); } else if (this.bIframe) { //console.log(this.getText()); } else { - let sText = ""; this.eraseNodeContent(); this.dParagraph.forEach((val, key) => { this.xNode.appendChild(document.createTextNode(val.normalize("NFC"))); this.xNode.appendChild(document.createElement("br")); - sText += val.normalize("NFC") + "\n"; }); - console.log("[Grammalecte debug] text written in editable node:", sText); + //console.log("[Grammalecte debug] text written in editable node:", this.getText()); } } else if (this.xResultNode !== null) { const xEvent = new CustomEvent("GrammalecteResult", { detail: JSON.stringify({ sType: "text", sText: this.getText() }) }); this.xResultNode.dispatchEvent(xEvent); - console.log("[Grammalecte debug] Text sent to xResultNode via event:", xEvent.detail); + //console.log("[Grammalecte debug] Text sent to xResultNode via event:", xEvent.detail); } } } Index: graphspell-js/char_player.js ================================================================== --- graphspell-js/char_player.js +++ graphspell-js/char_player.js @@ -66,20 +66,20 @@ // Similar chars d1to1: new Map([ - ["1", "1liîLIÎ"], - ["2", "2zZ"], - ["3", "3eéèêEÉÈÊ"], - ["4", "4aàâAÀÂ"], - ["5", "5sgSG"], - ["6", "6bdgBDG"], - ["7", "7ltLT"], - ["8", "8bB"], - ["9", "9gbdGBD"], - ["0", "0oôOÔ"], + ["1", "1₁liîLIÎ"], + ["2", "2₂zZ"], + ["3", "3₃eéèêEÉÈÊ"], + ["4", "4₄aàâAÀÂ"], + ["5", "5₅sgSG"], + ["6", "6₆bdgBDG"], + ["7", "7₇ltLT"], + ["8", "8₈bB"], + ["9", "9₉gbdGBD"], + ["0", "0₀oôOÔ"], ["a", "aAàÀâÂáÁäÄāĀæÆ"], ["A", "AaÀàÂâÁáÄäĀāÆæ"], ["à", "aAàÀâÂáÁäÄāĀæÆ"], ["À", "AaÀàÂâÁáÄäĀāÆæ"], Index: graphspell-js/lexgraph_fr.js ================================================================== --- graphspell-js/lexgraph_fr.js +++ graphspell-js/lexgraph_fr.js @@ -15,10 +15,12 @@ ["cad", "c’est-à-dire"], ["cb", "combien|CB"], ["cdlt", "cordialement"], ["construirent", "construire|construisirent|construisent|construiront"], ["càd", "c’est-à-dire"], + ["chai", "j’sais|je sais"], + ["chais", "j’sais|je sais"], ["chui", "j’suis|je suis"], ["chuis", "j’suis|je suis"], ["dc", "de|donc"], ["done", "donc|donne"], ["email", "courriel|e-mail|émail"], Index: graphspell/char_player.py ================================================================== --- graphspell/char_player.py +++ graphspell/char_player.py @@ -53,20 +53,20 @@ # Similar chars d1to1 = { - "1": "1liîLIÎ", - "2": "2zZ", - "3": "3eéèêEÉÈÊ", - "4": "4aàâAÀÂ", - "5": "5sgSG", - "6": "6bdgBDG", - "7": "7ltLT", - "8": "8bB", - "9": "9gbdGBD", - "0": "0oôOÔ", + "1": "1₁liîLIÎ", + "2": "2₂zZ", + "3": "3₃eéèêEÉÈÊ", + "4": "4₄aàâAÀÂ", + "5": "5₅sgSG", + "6": "6₆bdgBDG", + "7": "7₇ltLT", + "8": "8₈bB", + "9": "9₉gbdGBD", + "0": "0₀oôOÔ", "a": "aAàÀâÂáÁäÄāĀæÆ", "A": "AaÀàÂâÁáÄäĀāÆæ", "à": "aAàÀâÂáÁäÄāĀæÆ", "À": "AaÀàÂâÁáÄäĀāÆæ", Index: graphspell/lexgraph_fr.py ================================================================== --- graphspell/lexgraph_fr.py +++ graphspell/lexgraph_fr.py @@ -22,10 +22,12 @@ "cad": "c’est-à-dire", "cb": "combien|CB", "cdlt": "cordialement", "construirent": "construire|construisirent|construisent|construiront", "càd": "c’est-à-dire", + "chai": "j’sais|je sais", + "chais": "j’sais|je sais", "chui": "j’suis|je suis", "chuis": "j’suis|je suis", "done": "donc|donne", "dc": "de|donc", "email": "courriel|e-mail|émail",