Index: compile_rules.py ================================================================== --- compile_rules.py +++ compile_rules.py @@ -6,10 +6,11 @@ import os import traceback import json import colorsys import time +import hashlib import compile_rules_js_convert as jsconv import compile_rules_graph as crg @@ -469,35 +470,48 @@ def make (spLang, sLang, bUseCache=False): "compile rules, returns a dictionary of values" # for clarity purpose, don’t create any file here - if bUseCache and os.path.isfile("_build/data_cache.json"): - print("> don’t rebuild rules, use cache...") + dCacheVars = None + + if os.path.isfile("_build/data_cache.json"): + print("> data cache found") sJSON = open("_build/data_cache.json", "r", encoding="utf-8").read() dCacheVars = json.loads(sJSON) - print(" build made at: " + time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(dCacheVars.get("fBuildTime", 0)))) - return dCacheVars - - fBuildTime = time.time() + sBuildDate = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(dCacheVars.get("fBuildTime", 0))) + if bUseCache: + print("> use cache (no rebuild asked)") + print(" build made at: " + sBuildDate) + return dCacheVars print("> read rules file...") try: - lRules = open(spLang + "/rules.grx", 'r', encoding="utf-8").readlines() + sFileContent = open(spLang + "/rules.grx", 'r', encoding="utf-8").read() except OSError: print("Error. Rules file in project [" + sLang + "] not found.") exit() + + xHasher = hashlib.new("sha3_512") + xHasher.update(sFileContent.encode("utf-8")) + sFileHash = xHasher.hexdigest() + + if dCacheVars and sFileHash == dCacheVars.get("sFileHash", ""): + print("> cache hash identical to file hash, use cache") + print(" build made at: " + sBuildDate) + return dCacheVars # removing comments, zeroing empty lines, creating definitions, storing tests, merging rule lines print(" parsing rules...") + fBuildTime = time.time() lRuleLine = [] lTest = [] lOpt = [] bGraph = False lGraphRule = [] - for i, sLine in enumerate(lRules, 1): + for i, sLine in enumerate(sFileContent.split("\n"), 1): if sLine.startswith('#END'): # arbitrary end printBookmark(0, "BREAK BY #END", i) break elif sLine.startswith("#"): @@ -626,10 +640,11 @@ displayStats(lParagraphRules, lSentenceRules) dVars = { "fBuildTime": fBuildTime, + "sFileHash": sFileHash, "callables": sPyCallables, "callablesJS": sJSCallables, "gctests": sGCTests, "gctestsJS": sGCTestsJS, "paragraph_rules": mergeRulesByOption(lParagraphRules), Index: compile_rules_graph.py ================================================================== --- compile_rules_graph.py +++ compile_rules_graph.py @@ -455,11 +455,11 @@ def make (lRule, sLang, dDef, dDecl, dOptPriority): "compile rules, returns a dictionary of values" # for clarity purpose, don’t create any file here # removing comments, zeroing empty lines, creating definitions, storing tests, merging rule lines - print(" parsing rules...") + print(" parsing graph rules...") lTokenLine = [] lActions = [] bActionBlock = False nPriority = -1 dAllGraph = {} @@ -543,11 +543,11 @@ else: print("Unknown line at:", iLine) print(sLine) # processing rules - print(" processing rules...") + print(" processing graph rules...") initProcessPoolExecutor() fStartTimer = time.time() # build graph lResult = [] nRule = 0 Index: gc_lang/fr/data/phonet_simil.txt ================================================================== --- gc_lang/fr/data/phonet_simil.txt +++ gc_lang/fr/data/phonet_simil.txt @@ -820,10 +820,11 @@ val vals valent valet valets valais valait valaient valez vallée vallées vallon vallons valons vaux vaut vau veau veaux vos vent vents vend vends van vans +vente ventes vante vantes vantent ver vers verre verres vert verts vair vernis vernit verrat verrats verra verras verset versets verser veule veules veulent Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -427,11 +427,12 @@ TEST: Il a fini{{ .}} Va te faire foutre, connard. TEST: Merde{{ .}}Ça m’emmerde, ces trucs. # Trois points et espaces -__/typo(typo_3points_après_espace)__ \w+([  ]…) @@$ <<- -1>> … # Pas d’espace avant le signe “…”. +__/typo(typo_points_suspension_après_espace)__ + \w+([  ]…) @@$ <<- -1>> … # Pas d’espace avant le signe “…”. TEST: J’en ai marre{{ …}} c’est ça. ->> … TEST: ça va… @@ -912,11 +913,12 @@ __[s>/typo(typo_espace_manquant_après3)__ {w_1}[.]({w_1}|[({[]) @@$ <<- (\1.__len__() > 1 and not \1[0:1].isdigit() and spell(\1)) or after("^’") -1>> " \1" # Il manque un espace. __[s>/typo(typo_espace_manquant_après4)__ {w_2}[…]({w_1}|[({[]) @@$ - <<- \1.__len__() == 1 or \1[0:1].isupper() -1>> " \1" # Il manque un espace. + <<- \1[0:1].isupper() or \1.__len__() > 5 or not \1.isalpha() + or (\1.__len__() > 1 and spell(\1)) -1>> " \1" # Il manque un espace. TEST: J’en ai marre,{{ça}} suffit. ->> " ça" TEST: elle est délirante.{{Devine}} ce qu’elle a dit. ->> " Devine" TEST: Voilà,{{il}} manque un espace. ->> " il" TEST: Dernier essai.{{Voilà}}, c’est ça. ->> " Voilà" @@ -931,10 +933,12 @@ TEST: C’est bien.{{Les}} invités seront contents. ->> " Les" TEST: qui ont refusé.{{de}} se sauver ->> " de" TEST: Y parvenir quoi qu’il en soit.{{Le}} sort en est jeté. ->> " Le" TEST: merde…{{Ça}} suffit ->> " Ça" TEST: merde…{{(}}je suis fatigué) ->> " (" +TEST: ça deviendra…{{compliqué}} ->> " compliqué" +TEST: ça se croit…{{fort}}… n’est-ce pas ? ->> " fort" TEST: pic.twitter.com/PICNAME !! !! @@ -3868,15 +3872,22 @@ TEST: Ce fut là en fait une appellation fautive ### Préfixes __tu_préfixe_ex__ - ex $:N¬* - <<- /tu/ not value(\2, "|aequo|nihilo|cathedra|absurdo|abrupto|") - ->> ex-\2 # S’il s’agit d’un seul mot, il manque un trait d’union. + l’ ex @:[NT]¬* + <<- /tu/ not value(\3, "|aequo|nihilo|cathedra|absurdo|abrupto|") + -2:3>> \2-\3 # S’il s’agit d’un seul mot, il manque un trait d’union. + ex [>ami|>patron|>locataire] + ex @:N¬:[AGWMV] + <<- /tu/ not value(\2, "|aequo|nihilo|cathedra|absurdo|abrupto|") and not value(<1, "|l’|") + ->> \1-\2 # S’il s’agit d’un seul mot, il manque un trait d’union. + +TEST: l’{{ex fournisseur}} de ce produit TEST: Son {{ex ami}} est un vrai cauchemar. +TEST: Mon ex alcoolique TEST: Ton ex donne du fil à retordre. __tu_préfixe_in__ in [dix-huit|douze|seize|folio|octavo|quarto|plano] @@ -9284,11 +9295,11 @@ >être ?$:W¿ dans [une|cette|la] situation ou [vient|vint|viendra|viendrait] un temps ou <<- /conf/ --1>> où # Confusion probable. La conjonction “ou” signale une alternative. Pour évoquer un lieu, un temps ou une situation, écrivez “où”. - là ou le vent + [là|>aller] ou le vent <<- /conf/ -2>> où # Confusion. La conjonction “ou” signale une alternative. Pour évoquer un lieu, un temps ou une situation, écrivez “où”. TEST: {{Ou}} sont tes affaires ? ->> Où TEST: au moment {{ou}} elle allait enfin réussir ->> où TEST: je ne sais même pas par {{ou}} commencer ->> où @@ -9794,12 +9805,13 @@ TEST: collait au millimètre près à la réalité # prix / pris __conf_prix_pris__ - [à|a] n’importe quel pris + [à|a] n’importe [quel+s] pris quel est [le|mon|ton|son|notre|votre|leur|leurs] pris + à [quel+s] pris <<- /conf/ --1>> prix # Confusion : pour évoquer la valeur d’une chose, écrivez “prix”.|https://fr.wiktionary.org/wiki/prix prix dans [la|une|cette] [tourmente|tempête|tornade] prix dans [la|une|cette] coulée de [boue|lave] prix dans l’ [orage|ouragan] @@ -10339,13 +10351,13 @@ TEST: Méfiez-vous de cette {{soit-disant}} sorcière. TEST: Méfiez-vous de cette {{soi disant}} sorcière. __conf_soi_soit_soie__ - [chez|sur|avec|pour] soit - don de soit - estime de soit + [chez|sur|avec|pour] [soit|sois] + don de [soit|sois] + estime de [soit|sois] <<- /conf/ not after(" soit ") --1>> soi # Confusion probable. [ça|cela|ceci] >aller ?$:W¿ de soit <<- /conf/ not after(" soit ") --1>> soi # Confusion probable.|https://fr.wiktionary.org/wiki/aller_de_soi @@ -10358,19 +10370,31 @@ [sois-même|soit-même|soie-même|soies-même|soi-mêmes|sois-mêmes|soit-mêmes|soie-mêmes|soies-mêmes] <<- /conf/ ->> soi-même # Confusion : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes. que sa soi @:[WXAQ] - <<- /conf/ -3>> soit|soie # Confusion. Pour le verbe être au subjonctif, écrivez “soit”. Pour la fibre servant à la confection de textile, écrivez “soie”. + <<- /conf/ -3>> soit|soie # Confusion. Pour le verbe être au subjonctif, écrivez “soit”. Pour la fibre servant à la confection de textile, écrivez “soie”. + + >être [soi+s|>soie] [moi|toi|lui|elle|nous|vous|eux|iel|iels] ?,¿ [soit|soi+s|>soie] + >être [soi+s|>soie] [moi|toi|lui|elle|nous|vous|eux|iel|iels] ?,¿ [soit|soi+s|>soie] + >être [soi+s|>soie] $:D $:N ?,¿ [soit|soi+s|>soie] + <<- /conf/ morph(\1, "[123][sp]") -2>> soit # Pour évoquer une possibilité, écrivez “soit”.|https://fr.wiktionary.org/wiki/soit#Conjonction + + >être soit [moi|toi|lui|elle|nous|vous|eux|iel|iels] ?,¿ [soit|soi+s|>soie] + >être soit [moi|toi|lui|elle|nous|vous|eux|iel|iels] ?,¿ [soit|soi+s|>soie] + >être soit $:D $:N ?,¿ [soit|soi+s|>soie] + <<- /conf/ morph(\1, "[123][sp]") --1>> soit # Pour évoquer une possibilité, écrivez “soit”.|https://fr.wiktionary.org/wiki/soit#Conjonction TEST: chez {{soit}}, c’est presque toujours mieux. TEST: ce n’est pas la philosophie en {{soit}} qui est problématique TEST: quel que {{soie}} sa pensée, je refuse d’y accorder de l’attention. TEST: Penser par {{soit même}}… TEST: S’aimer {{soit-même}}, c’est le début d’une grande histoire d’amour. (Oscar Wilde) TEST: pas sûr que {{sa}} {{soi}} terminé avant demain TEST: Cela va presque de {{soit}} +TEST: c’est {{soi}} lui, soit moi ->> soit +TEST: ce serait soit elle, {{soie}} une inconnue ->> soit TEST: Je regrette que l’on en soit encore à des considérations que je croyais dépassées TEST: Quoi qu’il en soit TEST: À moins qu’elle n’en soit la victime. TEST: Je doute qu’il s’en soit sorti si aisément. TEST: Je refuse, quoi qu’il en soit. @@ -10652,15 +10676,13 @@ TEST: sous son {{toi}}, c’est sa loi qui prime. # tour à tour __conf_tour_à_tour__ - >tourd [à|a] >tourd - tours [à|a] tours - tour a tour + !! tour à tour ¡¡ + [tour+s|>tourd] [à|a] [tour+s|>tourd] <<- /conf/ ->> tour à tour # Locution adverbiale invariable. Écrivez “tour à tour”.|https://fr.wiktionary.org/wiki/tour_%C3%A0_tour - <<- ~>> * TEST: ils sont {{tours à tours}} fâchés. # tout à coup @@ -10683,11 +10705,27 @@ TEST: {{Toutes choses égales part ailleurs}}. TEST: ce serait, toutes choses égales par ailleurs, la meilleure solution possible. -__conf_un_tant_soit_peut__ +# très / trait +__conf_très_trait__ + [un|le|ce|mon|ton|son|notre|votre|leur] [trait|traits|trais|traie|traies|traient] @:A.*:[me]:[si]¬:G @:N.*:[me]:[si]¬:(?:G|3[sp]) + <<- /conf/ -2>> très # Confusion possible. Si “\3” est bien l’adjectif de “\4” et que vous voulez que le “\4” est beaucoup “\3”, utilisez l’adverbe “très”.|https://fr.wiktionary.org/wiki/tr%C3%A8s + + [des|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs] [trait|traits|trais|traie|traies|traient] @:A.*:[me]:[pi]¬:G @:N.*:[me]:[pi]¬:(?:G|3[sp]) + <<- /conf/ -2>> très # Confusion possible. Si “\3” est bien l’adjectif de “\4” et que vous voulez que les “\4” sont beaucoup “\3”, utilisez l’adverbe “très”.|https://fr.wiktionary.org/wiki/tr%C3%A8s + +TEST: un {{trait}} petit homme +TEST: les {{traits}} mauvais choix du patron nous ont conduits à la ruine. +TEST: je ne les trais pas, mais il le faudrait. +TEST: un trait mal dessiné +TEST: je lui lançais un trait bien piquant + + +# un tant soit peu +__conf_un_tant_soit_peu__ !! un tant soit peu ¡¡ [un|1] [temps|>tan|tant] [soi|sois|>soie|soit] [peu|peux|peut] <<- /conf/ ->> un tant soit peu # Confusion. Écrivez “un tant soit peu”.|https://fr.wiktionary.org/wiki/tant_soit_peu TEST: {{un temps soit peu}} perdu dans cette affaire. @@ -12391,17 +12429,19 @@ d’ abord d’ affilée d’ ailleurs d’ alors d’ année en année - d’ aujourd’hui d’ antan - d’ autant [plus|moins] - d’ [autrefois|part] - d’ autres fois + d’ après-guerre d’ [arrache-pied|arrachepied] d’ arrière en avant + d’ aujourd’hui + d’ autant [plus|moins] + d’ autre part + d’ autrefois + d’ autres fois d’ avant en arrière d’ à côté d’ âge mûr d’ emblée d’ empoigne @@ -12526,10 +12566,11 @@ [de|d’] seconde [catégorie|importance|main|zone] [de|d’] semaine en semaine [de|d’] si bon matin [de|d’] si bonne heure [de|d’] siècle en siècle + [de|d’] sinistre mémoire [de|d’] source sûre [de|d’] taille moyenne [de|d’] telle sorte [de|d’] temps à autre [de|d’] temps en temps @@ -13692,11 +13733,11 @@ #@:[VR]¬[NAP] #, @¬:[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__ +__substantifs_multi_mots__ 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] @@ -13791,10 +13832,11 @@ [>clé|>clef] à molette >clin d’ œil >clause [de|d’] [confidentialité|non-concurrence] >clause [de|d’] non concurrence >code [de|d’] ?bonne¿ conduite + >colosse aux pieds d’ argile >commis d’ office >compagne [de|d’] route >compagnon [de|d’] route >complémentaire santé [composante+s] alpha @@ -13827,12 +13869,10 @@ >délai [de|d’] [attente|carence|connexion|prescription|préavis|rétraction|rigueur] >demande d’ asile >descente aux [enfers|flambeaux] dieu tout-puissant [>dîner|>diner] aux chandelles - >digne [de|d’] [confiance|foi] - >digne [de|d’] ce nom >don en nature >donneur [de|d’] >leçon >dossier d’ inscription ?[administrative|scolaire]¿ >dossier [de|d’] presse >eau [de|d’] [bouleau|bleuet|chaux|coco|javel|jouvence|mer|parfum|pluie|seltz|source|vie] @@ -13894,10 +13934,11 @@ >fusil à pompe >garde à vue >garde du corps gaz à >effet [de|d’] serre >gilet [de|d’] sauvetage + >gouvernement d’ union nationale >grain [de|d’] [blé|maïs|sable] >grève [de|d’] la faim >groupe [de|d’] [discussion|parole|prière|pression|travail] >guerre éclair >hall d’ entrée @@ -14014,11 +14055,11 @@ >pomme [de|d’] [discorde|terre|reinette|pin|Adam|api|amour|ambre|eau|or] >pompe à [chaleur|essence|fric] >port [de|d’] plaisance >porte [de|d’] [entrée|service|garage|sortie] >porte d’ entrée - >pot [de|d’] [chambre|colle] + >pot [de|d’] [chambre|colle|départ] >poudre aux yeux >pouvoir d’ achat >presse à >scandale preuve ?suffisante¿ du contraire preuves ?suffisantes¿ du contraire @@ -14030,11 +14071,11 @@ >rat [de|d’] bibliothèque >rayon [de|d’] soleil >réaction en [chaîne|chaine] région Grand Est >règlement [de|d’] comptes - >sourd comme un pot + >sujet [de|d’] préoccupation >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 @@ -14138,10 +14179,12 @@ >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}$]¿ + >digne [de|d’] [confiance|foi] + >digne [de|d’] ce nom >droit comme un i >fort en gueule >fou de rage ?[contenue|retenue]¿ >élu à la majarité absolue >haut comme [trois|3] pommes @@ -14156,10 +14199,11 @@ >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] + >sourd comme un pot >têtu comme une [bourrique|mule] >têtu comme un [âne|bourriquot|mulet] <<- ~2:0>> * flambant >neuf @@ -14716,10 +14760,14 @@ <<- ~1:3>> * à répétition @¬:A.*:[fe]:[si] à répétition [|,|)] <<- ~1:2>> * + + au bout d’ un moment @:¬:A.*:[me]:[si] + au bout d’ un moment [|,|)] + <<- ~1:5>> * au [départ|quotidien] @:¬:A.*:[me]:[si] au [départ|quotidien] [|,|)] <<- ~1:2>> * @@ -14859,10 +14907,14 @@ <<- ~>> * le plus clair [de|d’] [mon|ton|son|notre|votre|leur] temps @:¬:A:[me]:[si]|>d[e’]/ le plus clair [de|d’] [mon|ton|son|notre|votre|leur] temps [|,|)] <<- ~1:6>> * + + pour de bon @:¬:[NA].*:m:s + pour de bon [|,|)] + <<- ~1:3>> * pour partie @:¬:A.*:f:s pour partie [|,|)] <<- ~1:2>> * @@ -15003,10 +15055,11 @@ >faire bon accueil >faire bonne figure >faire chou blanc >faire copain copain >faire de [mon|ton|son|notre|votre|leur] mieux + >faire faux bond >faire figure d’ exception >faire front commun >faire grise mine >faire grand [bruit|cas] >faire ?[bonne|excellente|grande|mauvaise]¿ impression @@ -15066,10 +15119,11 @@ >prendre d’ assaut >prendre [de|d’] [court|vitesse] >prendre ?[ça|cela|ceci]¿ en charge >prendre ?[ça|cela|ceci]¿ pour argent comptant >prendre par surprise + >prendre pour argent comptant >prêter à confusion >prêter main forte >prêter main-forte >rebrousser chemin >réduire à néant @@ -17016,10 +17070,24 @@ TEST: {{Vues}} les idioties qu’on entend, normal qu’on perde la tête. TEST: {{Passées}} les premières heures du jour… TEST: Il faut même être indulgent pour accorder une place à cette dernière, vu qu’elle a pour condition le mensonge des instincts TEST: Vu la dureté extrême des conditions de survie… + +#### ce + sont / étaient + +__conf_ce_être_pluriel__ + ce [sont|seront|seraient|furent] [de|d’] @:A.*:s¬:[Gpi] @:N¬:G + c’ étaient [de|d’] @:A.*:s¬:[Gpi] @:N¬:G + [c’|ç’] avaient été [de|d’] @:A.*:s¬:[Gpi] @:N¬:G + <<- /sgpl/ --2>> =suggPlur(\-2) # Après “ce sont”, il est vraisemblable que ce qui est évoqué soit au pluriel. + +TEST: ce sont de {{beau}} jouet ->> beaux +TEST: ç’avaient été de {{belle}} festivité +TEST: ce furent de {{large}} étude sur plusieurs années +TEST: ce sont d’autre part des petits malins. + #### Nombres cardinaux # vingt __sgpl_vingt__ @@ -17609,12 +17677,12 @@ >chauffer a blanc >fermer a [>clé|>clef] [>gonfler|>regonfler] a bloc >jeter a terre [>mettre|>remettre] a [bas|>flot|>jour|>niveau|>nu|>plat|>table|>terre] - >naviguer a [vu+ses] [>mettre|>remettre] a l’ [écart|épreuve] + >naviguer a [vu+ses] >parer a toute éventualité >passer a tabac >percer a jour >prendre a la légère >prêter a >confusion @@ -17639,25 +17707,27 @@ en être [réduit+ses] a en proie a >laisser libre cours a >parvenir a >prêter attention a - <<- /conf/ \-1 != "A" and not tag_before(\1, "_àCOI_") --1>> à # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0 + <<- /conf/ \-1 != "A" and not tag_before(\1, "_àCOI_") and not value(>1, "|été|") + --1>> à # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0 >appeler a >avoir du mal a >commencer a >condamner a >dire [adieu|merde] a >faire confiance a + >faire faux bond a >mentir a >préparer a >prêter serment a >rendre service a >réussir a >viser a - <<- /conf/ not tag_before(\1, "_propsub_") and not morph(\1, ":Y") + <<- /conf/ not tag_before(\1, "_propsub_") and not morph(\1, ":Y") and not value(>1, "|été|") --1>> à # Confusion probable : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0 @:V¬:[YGNAWM] a <<- /conf/ \-1 != "A" and not tag_before(\1, "_propsub_") and not morph(>1, ":Q") --1>> à # Confusion probable : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0 @@ -18141,11 +18211,11 @@ __conf_ce_se_verbe__ [|,|(] se [ne|n’] [>être|>devoir|>pouvoir] [|,|(] se [sera|serait|seraient|sont|seront|fut|fût|furent|fussent] $:D [|,|(] se >devoir être [|,|(] se >pouvoir être - <<- /conf/ -2>> ce # Confusion probable. Si vous voulez dire, “ceci”, “cela” ou “ça”, écrivez “c’”.||http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=2440 + <<- /conf/ -2>> ce # Confusion probable. Si vous voulez dire, “ceci”, “cela” ou “ça”, écrivez “c’”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=2440 TEST: {{se}} n’est pas pour cette raison que j’ai abandonné mes études. TEST: grâce à quoi, {{se}} put être fait dans les règles. TEST: {{se}} serait les pires vacances de sa vie TEST: des pans entiers de l’univers — pour reprendre l’expression d’Orwell — se sont d’ores et déjà volatilisés @@ -18391,11 +18461,11 @@ >datte de l’ [accouchement|actualisation|achat|adhésion|anniversaire|apparition|échéance|édition|émission|engagement|entrée|envoi|examen|exécution|expédition|expiration|immatriculation|imputation|inscription|origine|ouverture|ovulation] >datte du /NUM [janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre] <<- /conf/ -1>> =\1.replace("tt", "t").replace("TT", "T") # Confusion probable. La datte est un fruit. Pour évoquer un jour dans l’année, écrivez “date”.|https://fr.wiktionary.org/wiki/date >dernier en >datte - <<- /conf/ -3>> date # Confusion probable. La datte est un fruit. Pour évoquer un jour dans l’année, écrivez “date”.||https://fr.wiktionary.org/wiki/date + <<- /conf/ -3>> date # Confusion probable. La datte est un fruit. Pour évoquer un jour dans l’année, écrivez “date”.|https://fr.wiktionary.org/wiki/date TEST: il va faire un cake aux {{dates}}. TEST: elle a fait de la confiture de {{dates}} TEST: Des {{dates}} fraîches. TEST: des {{dates}} dénoyautées. @@ -19832,11 +19902,12 @@ il >être [tant|>tan] [de|d’] $:Y <<- /conf/ -3>> temps # Confusion. Si vous voulez dire “c’est le moment de”, écrivez “temps”.|https://fr.wiktionary.org/wiki/il_est_temps [>avoir|>prendre||,|(] du bon [tant|>tan] c’ >être [le|l’] bon ?vieux¿ [tant|>tan] - <<- /conf/ --1>> temps # Confusion. Pour parler d’un période heureuse, écrivez “temps”. + au bon vieux [tant|>tan] + <<- /conf/ --1>> temps # Confusion. Pour parler d’un période heureuse, écrivez “temps”.|https://fr.wiktionary.org/wiki/temps TEST: en {{tan}} que meneuse intrépide, elle a toujours fait preuve d’une grande imagination. TEST: il est bien évidemment {{tant}} d’en finir avec ça. TEST: c’était le bon {{tan}} TEST: elle sait prendre du bon {{tant}} @@ -25341,10 +25412,11 @@ TEST: vos filles {{passes}} ce matin TEST: ces travaux qui {{demande}} tant d’efforts. TEST: vos questions ne {{réclame}} aucune réflexion. TEST: Ces attaques à main armée {{donne}} la chair de poule. TEST: Ces marchands {{passe}} leur temps à se quereller. +TEST: maints hommes {{oublie}} leurs origines pour mieux se construire un passé glorieux TEST: le lien entre les agences de renseignement et ces mêmes entreprises pouvait reposer sur des activités de surveillance à proprement parler. TEST: trier les cons et les connes expose à un violent coup de boomerang TEST: Tu penses que quelqu’un qui frappe sa femme et ses enfants est un bon père ? Index: gc_lang/fr/webext/content_scripts/panel_gc.css ================================================================== --- gc_lang/fr/webext/content_scripts/panel_gc.css +++ gc_lang/fr/webext/content_scripts/panel_gc.css @@ -102,10 +102,12 @@ padding: 5px 10px 5px 10px; background-color: hsl(210, 50%, 30%); color: hsl(210, 50%, 96%); } div#grammalecte_tooltip_actions { + display: flex; + justify-content: space-between; margin: 0; padding: 7px 10px 5px 10px; background-color: hsl(210, 50%, 30%); color: hsl(210, 50%, 96%); } @@ -142,11 +144,11 @@ div#grammalecte_tooltip_ignore:hover { background-color: hsl(30, 30%, 50%); color: hsla(0, 0%, 100%, 1); text-shadow: 0 0 3px hsl(30, 30%, 60%); } -div#grammalecte_tooltip_url, div#grammalecte_tooltip_db_search { +div#grammalecte_tooltip_url { display: inline-block; margin-left: 10px; padding: 1px 5px; background-color: hsl(210, 50%, 50%); color: hsla(210, 0%, 96%, 1); @@ -154,15 +156,32 @@ cursor: pointer; font-family: Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif; font-size: 12px; text-decoration: none; } -div#grammalecte_tooltip_url:hover, div#grammalecte_tooltip_db_search:hover { +div#grammalecte_tooltip_url:hover { background-color: hsl(210, 50%, 60%); color: hsla(0, 0%, 100%, 1); text-shadow: 0 0 3px hsl(210, 30%, 60%); } +div#grammalecte_tooltip_db_search { + display: inline-block; + margin-left: 10px; + padding: 1px 5px; + /*background-color: hsl(210, 50%, 50%);*/ + color: hsla(210, 0%, 96%, .1); + border-radius: 2px; + cursor: pointer; + font-family: Tahoma, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", sans-serif; + font-size: 12px; + text-decoration: none; +} +div#grammalecte_tooltip_db_search:hover { + background-color: hsla(210, 50%, 50%, .1); + color: hsla(0, 0%, 100%, .2); + text-shadow: 0 0 3px hsla(210, 30%, 60%, .2); +} div#grammalecte_tooltip_sugg_title { padding: 0 10px; background-color: hsl(210, 10%, 90%); color: hsl(210, 50%, 30%); 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 @@ -792,11 +792,10 @@ class GrammalecteTooltip { constructor (xParent, xGCPanelContent) { this.xParent = xParent; this.sErrorId = null; - this.bDebug = false; this.xTooltip = oGrammalecte.createNode("div", {id: "grammalecte_tooltip"}); this.xTooltipArrow = oGrammalecte.createNode("img", { id: "grammalecte_tooltip_arrow", src: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwAAADsABataJCQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xNzNun2MAAAAnSURBVChTY/j//z8cq/kW/wdhZDEMSXRFWCVhGKwAmwQyHngFxf8B5fOGYfeFpYoAAAAASUVORK5CYII=", alt: "^", @@ -812,11 +811,11 @@ this.xTooltip.appendChild(this.xTooltipSuggBlock); // actions let xActions = oGrammalecte.createNode("div", {id: "grammalecte_tooltip_actions"}); xActions.appendChild(oGrammalecte.createNode("div", {id: "grammalecte_tooltip_ignore", textContent: "Ignorer"})); xActions.appendChild(oGrammalecte.createNode("div", {id: "grammalecte_tooltip_url", textContent: "Voulez-vous en savoir plus ?…"}, {url: ""})); - xActions.appendChild(oGrammalecte.createNode("div", {id: "grammalecte_tooltip_db_search", textContent: " ››› base de données"}, {url: ""})); + xActions.appendChild(oGrammalecte.createNode("div", {id: "grammalecte_tooltip_db_search", textContent: "››"}, {url: ""})); this.xTooltip.appendChild(xActions); // add tooltip to the page xGCPanelContent.appendChild(this.xTooltip); xGCPanelContent.appendChild(this.xTooltipArrow); } @@ -835,20 +834,17 @@ this.xTooltipArrow.style.left = (xNodeErr.offsetLeft + Math.floor((nUsefulErrorWidth / 2)) - 4) + "px"; // 4 is half the width of the arrow. this.xTooltip.style.top = (xNodeErr.offsetTop + 20) + "px"; this.xTooltip.style.left = (xNodeErr.offsetLeft > nTooltipLeftLimit) ? nTooltipLeftLimit + "px" : xNodeErr.offsetLeft + "px"; if (xNodeErr.dataset.error_type === "grammar") { // grammar error - this.xParent.getElementById("grammalecte_tooltip_db_search").style.display = "none"; if (xNodeErr.dataset.gc_message.includes(" ##")) { - this.bDebug = true; // display rule id let n = xNodeErr.dataset.gc_message.indexOf(" ##"); this.xParent.getElementById("grammalecte_tooltip_message").textContent = xNodeErr.dataset.gc_message.slice(0, n); this.xParent.getElementById("grammalecte_tooltip_rule_id").textContent = "Règle : " + xNodeErr.dataset.gc_message.slice(n+2); this.xParent.getElementById("grammalecte_tooltip_rule_id").style.display = "block"; } else { - this.bDebug = false; this.xParent.getElementById("grammalecte_tooltip_message").textContent = xNodeErr.dataset.gc_message; this.xParent.getElementById("grammalecte_tooltip_rule_id").style.display = "none"; } if (xNodeErr.dataset.gc_url != "") { this.xParent.getElementById("grammalecte_tooltip_url").dataset.url = xNodeErr.dataset.gc_url; @@ -855,10 +851,11 @@ this.xParent.getElementById("grammalecte_tooltip_url").style.display = "inline"; } else { this.xParent.getElementById("grammalecte_tooltip_url").dataset.url = ""; this.xParent.getElementById("grammalecte_tooltip_url").style.display = "none"; } + this.xParent.getElementById("grammalecte_tooltip_db_search").style.display = "none"; this.xParent.getElementById("grammalecte_tooltip_ignore").dataset.error_id = xNodeErr.dataset.error_id; let iSugg = 0; this.clearSuggestionBlock(); if (xNodeErr.dataset.suggestions.length > 0) { for (let sSugg of xNodeErr.dataset.suggestions.split("|")) { @@ -875,16 +872,12 @@ this.xParent.getElementById("grammalecte_tooltip_message").textContent = "Mot inconnu du dictionnaire."; this.xParent.getElementById("grammalecte_tooltip_ignore").dataset.error_id = xNodeErr.dataset.error_id; this.xParent.getElementById("grammalecte_tooltip_rule_id").style.display = "none"; this.xParent.getElementById("grammalecte_tooltip_url").dataset.url = ""; this.xParent.getElementById("grammalecte_tooltip_url").style.display = "none"; - if (this.bDebug) { - this.xParent.getElementById("grammalecte_tooltip_db_search").style.display = "inline"; - this.xParent.getElementById("grammalecte_tooltip_db_search").dataset.url = "https://grammalecte.net/dictionary.php?prj=fr&lemma="+xNodeErr.textContent; - } else { - this.xParent.getElementById("grammalecte_tooltip_db_search").style.display = "none"; - } + this.xParent.getElementById("grammalecte_tooltip_db_search").style.display = "inline-block"; + this.xParent.getElementById("grammalecte_tooltip_db_search").dataset.url = "https://grammalecte.net/dictionary.php?prj=fr&lemma="+xNodeErr.textContent; this.clearSuggestionBlock(); this.xTooltipSuggBlock.textContent = "Recherche de graphies possibles…"; oGrammalecteBackgroundPort.getSpellSuggestions(xNodeErr.textContent, "__GrammalectePanel__", xNodeErr.dataset.error_id); } this.xTooltipArrow.style.display = "block"; @@ -899,14 +892,10 @@ while (this.xTooltipSuggBlock.firstChild) { this.xTooltipSuggBlock.removeChild(this.xTooltipSuggBlock.firstChild); } } - setTooltipColor () { - // todo - } - hide () { this.xTooltipArrow.style.display = "none"; this.xTooltip.style.display = "none"; }