Grammalecte  Check-in [fb270e0f3b]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:merge trunk
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | tbme
Files: files | file ages | folders
SHA3-256:fb270e0f3bcdd2db82ad80bb00e799c8277a640fb307b582f679ff5040a72f5d
User & Date: olr 2019-09-30 07:26:25
Context
2019-09-30
07:26
merge trunk Leaf check-in: fb270e0f3b user: olr tags: tbme
07:15
[fr] faux positif check-in: 65265d55cd user: olr tags: fr, trunk, v1.5.0
2019-09-06
16:32
merge trunk check-in: 3bec30b855 user: olr tags: tbme
Changes

Changes to compile_rules_graph.py.

   429    429                   lTokenLine.append([i, sLine])
   430    430           else:
   431    431               print("Unknown line:")
   432    432               print(sLine)
   433    433   
   434    434       # processing rules
   435    435       print("  preparing rules...")
          436  +    nRule = 0
   436    437       for sGraphName, lRuleLine in dAllGraph.items():
   437    438           print("{:>8,} rules in {:<24} ".format(len(lRuleLine), "<"+sGraphName+">"), end="")
   438    439           lPreparedRule = []
   439    440           for i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority in lRuleLine:
   440    441               for aRule in createRule(i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority, dOptPriority, dDef, dDecl):
   441    442                   lPreparedRule.append(aRule)
          443  +        nRule += len(lRuleLine)
   442    444           # Graph creation
   443    445           oDARG = darg.DARG(lPreparedRule, sLang)
   444    446           dAllGraph[sGraphName] = oDARG.createGraph()
   445    447           # Debugging
   446    448           if False:
   447    449               print("\nRULES:")
   448    450               for e in lPreparedRule:
   449    451                   if e[-2] == "##2211":
   450    452                       print(e)
   451    453           if False:
   452    454               print("\nGRAPH:", sGraphName)
   453    455               for k, v in dAllGraph[sGraphName].items():
   454    456                   print(k, "\t", v)
          457  +    print("  Total: ", nRule, "rules")
   455    458   
   456    459       # creating file with all functions callable by rules
   457    460       print("  creating callables for graph rules...")
   458    461       sPyCallables = ""
   459    462       sJSCallables = ""
   460    463       for sFuncName, sReturn in dFUNCTIONS.items():
   461    464           if sFuncName.startswith("_g_cond_"): # condition

Changes to gc_core/py/oxt/OptionsDialog.xcs.

    30     30               <prop oor:name="community_dic" oor:type="xs:string"><value></value></prop>
    31     31               <prop oor:name="personal_dic" oor:type="xs:string"><value></value></prop>
    32     32               <!-- graphic options -->
    33     33               <prop oor:name="line_multicolor" oor:type="xs:int"><value>1</value></prop>
    34     34               <prop oor:name="line_type" oor:type="xs:string"><value>BOLDWAVE</value></prop>
    35     35               <!-- misc options -->
    36     36               <prop oor:name="start_console" oor:type="xs:int"><value>0</value></prop>
           37  +            <prop oor:name="tf_options" oor:type="xs:string"><value></value></prop>
    37     38           </group>
    38     39       </templates>
    39     40   
    40     41       <component>
    41     42           <group oor:name="Leaves">
    42     43               <node-ref oor:name="${lang}" oor:node-type="${lang}" />
    43     44           </group>

Changes to gc_lang/fr/config.ini.

     2      2   lang = fr
     3      3   lang_name = French
     4      4   locales = fr_FR fr_BE fr_CA fr_CH fr_LU fr_BF fr_BJ fr_CD fr_CI fr_CM fr_MA fr_ML fr_MU fr_NE fr_RE fr_SN fr_TG
     5      5   country_default = FR
     6      6   name = Grammalecte
     7      7   implname = grammalecte
     8      8   # always use 3 numbers for version: x.y.z
     9         -version = 1.4.0
            9  +version = 1.5.0
    10     10   author = Olivier R.
    11     11   provider = Grammalecte.net
    12     12   link = https://grammalecte.net
    13     13   description = Correcteur grammatical, orthographique et typographique pour le français.
    14     14   extras = README_fr.txt
    15     15   logo = logo.png
    16     16   

Changes to gc_lang/fr/modules-js/gce_suggestions.js.

   222    222           return Array.from(aSugg).join("|");
   223    223       }
   224    224       return "";
   225    225   }
   226    226   
   227    227   //// Nouns and adjectives
   228    228   
   229         -function suggPlur (sFlex, sWordToAgree=null) {
          229  +function suggPlur (sFlex, sWordToAgree=null, bSelfSugg=false) {
   230    230       // returns plural forms assuming sFlex is singular
   231    231       if (sWordToAgree) {
   232    232           let lMorph = _oSpellChecker.getMorph(sWordToAgree);
   233    233           if (lMorph.length === 0) {
   234    234               return "";
   235    235           }
   236    236           let sGender = cregex.getGender(lMorph);
................................................................................
   244    244       if (sFlex.endsWith("l")) {
   245    245           if (sFlex.endsWith("al") && sFlex.length > 2 && _oSpellChecker.isValid(sFlex.slice(0,-1)+"ux")) {
   246    246               aSugg.add(sFlex.slice(0,-1)+"ux");
   247    247           }
   248    248           if (sFlex.endsWith("ail") && sFlex.length > 3 && _oSpellChecker.isValid(sFlex.slice(0,-2)+"ux")) {
   249    249               aSugg.add(sFlex.slice(0,-2)+"ux");
   250    250           }
          251  +    }
          252  +    if (sFlex.endsWith("L")) {
          253  +        if (sFlex.endsWith("AL") && sFlex.length > 2 && _oSpellChecker.isValid(sFlex.slice(0,-1)+"UX")) {
          254  +            aSugg.add(sFlex.slice(0,-1)+"UX");
          255  +        }
          256  +        if (sFlex.endsWith("AIL") && sFlex.length > 3 && _oSpellChecker.isValid(sFlex.slice(0,-2)+"UX")) {
          257  +            aSugg.add(sFlex.slice(0,-2)+"UX");
          258  +        }
   251    259       }
   252    260       if (_oSpellChecker.isValid(sFlex+"s")) {
   253    261           aSugg.add(sFlex+"s");
   254    262       }
   255    263       if (_oSpellChecker.isValid(sFlex+"x")) {
   256    264           aSugg.add(sFlex+"x");
   257    265       }
   258    266       if (mfsp.hasMiscPlural(sFlex)) {
   259    267           mfsp.getMiscPlural(sFlex).forEach(function(x) { aSugg.add(x); });
   260    268       }
          269  +    if (aSugg.size == 0 && bSelfSugg && (sFlex.endsWith("s") || sFlex.endsWith("x") || sFlex.endsWith("S") || sFlex.endsWith("X"))) {
          270  +        aSugg.add(sFlex);
          271  +    }
   261    272       if (aSugg.size > 0) {
   262    273           return Array.from(aSugg).join("|");
   263    274       }
   264    275       return "";
   265    276   }
   266    277   
   267         -function suggSing (sFlex) {
          278  +function suggSing (sFlex, bSelfSugg=false) {
   268    279       // returns singular forms assuming sFlex is plural
   269    280       let aSugg = new Set();
   270    281       if (sFlex.endsWith("ux")) {
   271    282           if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"l")) {
   272    283               aSugg.add(sFlex.slice(0,-2)+"l");
   273    284           }
   274    285           if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"il")) {
   275    286               aSugg.add(sFlex.slice(0,-2)+"il");
   276    287           }
   277    288       }
   278         -    if (_oSpellChecker.isValid(sFlex.slice(0,-1))) {
          289  +    if (sFlex.endsWith("UX")) {
          290  +        if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"L")) {
          291  +            aSugg.add(sFlex.slice(0,-2)+"L");
          292  +        }
          293  +        if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"IL")) {
          294  +            aSugg.add(sFlex.slice(0,-2)+"IL");
          295  +        }
          296  +    }
          297  +    if ((sFlex.endsWith("s") || sFlex.endsWith("x") || sFlex.endsWith("S") || sFlex.endsWith("X")) && _oSpellChecker.isValid(sFlex.slice(0,-1))) {
   279    298           aSugg.add(sFlex.slice(0,-1));
          299  +    }
          300  +    if (bSelfSugg && aSugg.size == 0) {
          301  +        aSugg.add(sFlex);
   280    302       }
   281    303       if (aSugg.size > 0) {
   282    304           return Array.from(aSugg).join("|");
   283    305       }
   284    306       return "";
   285    307   }
   286    308   

Changes to gc_lang/fr/modules/gce_suggestions.py.

   168    168       if aSugg:
   169    169           return "|".join(aSugg)
   170    170       return ""
   171    171   
   172    172   
   173    173   ## Nouns and adjectives
   174    174   
   175         -def suggPlur (sFlex, sWordToAgree=None):
          175  +def suggPlur (sFlex, sWordToAgree=None, bSelfSugg=False):
   176    176       "returns plural forms assuming sFlex is singular"
   177    177       if sWordToAgree:
   178    178           lMorph = _oSpellChecker.getMorph(sFlex)
   179    179           if not lMorph:
   180    180               return ""
   181    181           sGender = cr.getGender(lMorph)
   182    182           if sGender == ":m":
................................................................................
   185    185               return suggFemPlur(sFlex)
   186    186       aSugg = set()
   187    187       if sFlex.endswith("l"):
   188    188           if sFlex.endswith("al") and len(sFlex) > 2 and _oSpellChecker.isValid(sFlex[:-1]+"ux"):
   189    189               aSugg.add(sFlex[:-1]+"ux")
   190    190           if sFlex.endswith("ail") and len(sFlex) > 3 and _oSpellChecker.isValid(sFlex[:-2]+"ux"):
   191    191               aSugg.add(sFlex[:-2]+"ux")
          192  +    if sFlex.endswith("L"):
          193  +        if sFlex.endswith("AL") and len(sFlex) > 2 and _oSpellChecker.isValid(sFlex[:-1]+"UX"):
          194  +            aSugg.add(sFlex[:-1]+"UX")
          195  +        if sFlex.endswith("AIL") and len(sFlex) > 3 and _oSpellChecker.isValid(sFlex[:-2]+"UX"):
          196  +            aSugg.add(sFlex[:-2]+"UX")
   192    197       if _oSpellChecker.isValid(sFlex+"s"):
   193    198           aSugg.add(sFlex+"s")
   194    199       if _oSpellChecker.isValid(sFlex+"x"):
   195    200           aSugg.add(sFlex+"x")
   196    201       if mfsp.hasMiscPlural(sFlex):
   197    202           aSugg.update(mfsp.getMiscPlural(sFlex))
          203  +    if not aSugg and bSelfSugg and sFlex.endswith(("s", "x", "S", "X")):
          204  +        aSugg.add(sFlex)
   198    205       if aSugg:
   199    206           return "|".join(aSugg)
   200    207       return ""
   201    208   
   202    209   
   203         -def suggSing (sFlex):
          210  +def suggSing (sFlex, bSelfSugg=True):
   204    211       "returns singular forms assuming sFlex is plural"
   205    212       aSugg = set()
   206    213       if sFlex.endswith("ux"):
   207    214           if _oSpellChecker.isValid(sFlex[:-2]+"l"):
   208    215               aSugg.add(sFlex[:-2]+"l")
   209    216           if _oSpellChecker.isValid(sFlex[:-2]+"il"):
   210    217               aSugg.add(sFlex[:-2]+"il")
   211         -    if _oSpellChecker.isValid(sFlex[:-1]):
          218  +    if sFlex.endswith("UX"):
          219  +        if _oSpellChecker.isValid(sFlex[:-2]+"L"):
          220  +            aSugg.add(sFlex[:-2]+"L")
          221  +        if _oSpellChecker.isValid(sFlex[:-2]+"IL"):
          222  +            aSugg.add(sFlex[:-2]+"IL")
          223  +    if sFlex.endswith(("s", "x", "S", "X")) and _oSpellChecker.isValid(sFlex[:-1]):
   212    224           aSugg.add(sFlex[:-1])
          225  +    if bSelfSugg and not aSugg:
          226  +        aSugg.add(sFlex)
   213    227       if aSugg:
   214    228           return "|".join(aSugg)
   215    229       return ""
   216    230   
   217    231   
   218    232   def suggMasSing (sFlex, bSuggSimil=False):
   219    233       "returns masculine singular forms"

Changes to gc_lang/fr/oxt/About/About.py.

     1         -# -*- coding: utf8 -*-
     2      1   # About dialog
     3      2   # by Olivier R.
     4      3   # License: MPL 2
     5      4   
     6      5   import unohelper
     7      6   import uno
     8      7   import traceback

Changes to gc_lang/fr/oxt/About/ab_strings.py.

     1         -# -*- encoding: UTF-8 -*-
            1  +# About strings
     2      2   
     3      3   def getUI (sLang):
     4      4       if sLang in dStrings:
     5      5           return dStrings[sLang]
     6      6       return dStrings["fr"]
     7      7   
     8      8   dStrings = {

Changes to gc_lang/fr/oxt/DictOptions/LexiconEditor.py.

   369    369           else:
   370    370               self.xNumLex.Label = 0
   371    371               self.xNumDic.Label = 0
   372    372               self.xDateDic.Label = self.dUI.get("void", "#err")
   373    373   
   374    374       @_waitPointer
   375    375       def importDictionary (self):
   376         -        # FilePicker doesn’t work at all…
   377         -        #xFilePicker = self.xSvMgr.createInstanceWithContext('com.sun.star.ui.dialogs.FilePicker', self.ctx)  # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
   378         -        #xFilePicker.initialize([uno.getConstantByName("com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE")]) # seems useless
   379         -        #xFilePicker.appendFilter("Supported files", "*.json; *.bdic")
   380         -        #xFilePicker.setDefaultName("fr.personal.json") # useless, doesn’t work
   381         -        #xFilePicker.setDisplayDirectory("")
   382         -        #xFilePicker.setMultiSelectionMode(False)
   383         -        #nResult = xFilePicker.execute()
   384         -        #if nResult == 1:
   385         -        #    lFile = xFilePicker.getSelectedFiles()
   386         -        #    lFile = xFilePicker.getFiles()
   387         -        #    print(lFile)
   388         -        #    MessageBox(self.xDocument, "File(s): " + str(lFile), "DEBUG", INFOBOX)
   389         -        # workaround
   390         -        spfImported = os.path.join(os.path.expanduser("~"), "fr.personal.json")
   391         -        if os.path.isfile(spfImported):
          376  +        spfImported = ""
          377  +        try:
          378  +            xFilePicker = self.xSvMgr.createInstanceWithContext('com.sun.star.ui.dialogs.FilePicker', self.ctx)  # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
          379  +            xFilePicker.initialize([uno.getConstantByName("com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE")]) # seems useless
          380  +            xFilePicker.appendFilter("Supported files", "*.json; *.bdic")
          381  +            xFilePicker.setDefaultName("fr.__personal__.json") # useless, doesn’t work
          382  +            xFilePicker.setDisplayDirectory("")
          383  +            xFilePicker.setMultiSelectionMode(False)
          384  +            nResult = xFilePicker.execute()
          385  +            if nResult == 1:
          386  +                # lFile = xFilePicker.getSelectedFiles()
          387  +                lFile = xFilePicker.getFiles()
          388  +                #print(lFile)
          389  +                #MessageBox(self.xDocument, "File(s): " + str(lFile), "DEBUG", INFOBOX)
          390  +                spfImported = lFile[0][8:] # remove file:///
          391  +        except:
          392  +            spfImported = os.path.join(os.path.expanduser("~"), "fr.personal.json") # workaround
          393  +        if spfImported and os.path.isfile(spfImported):
   392    394               with open(spfImported, "r", encoding="utf-8") as hDst:
   393    395                   sJSON = hDst.read()
   394    396                   try:
   395    397                       sTest = json.loads(sJSON)
   396    398                   except:
   397    399                       sMessage = self.dUI.get('wrong_json', "#err_msg: %s") % spfImported
   398    400                       MessageBox(self.xDocument, sMessage, self.dUI.get('import_title', "#err"), ERRORBOX)
................................................................................
   422    424               self.xSettingNode.commitChanges()
   423    425               self.xNumDic.Label = "0"
   424    426               self.xDateDic.Label = self.dUI.get("void", "#err")
   425    427           MessageBox(self.xDocument, self.dUI.get('save_message', "#err"), self.dUI.get('save_title', "#err"))
   426    428   
   427    429       def exportDictionary (self):
   428    430           try:
   429         -            spfExported = os.path.join(os.path.expanduser("~"), "fr.personal.json")
   430         -            sJSON = self.xOptionNode.getPropertyValue("personal_dic")
   431         -            if sJSON:
   432         -                with open(spfExported, "w", encoding="utf-8") as hDst:
   433         -                    hDst.write(sJSON)
   434         -                sMessage = self.dUI.get('export_message', "#err_msg: %s") % spfExported
   435         -            else:
   436         -                sMessage = self.dUI.get('empty_dictionary', "#err")
   437         -            MessageBox(self.xDocument, sMessage, self.dUI.get('export_title', "#err"))
          431  +            xFilePicker = self.xSvMgr.createInstanceWithContext('com.sun.star.ui.dialogs.FilePicker', self.ctx)  # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
          432  +            xFilePicker.initialize([uno.getConstantByName("com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE")]) # seems useless
          433  +            xFilePicker.appendFilter("Supported files", "*.json; *.bdic")
          434  +            xFilePicker.setDefaultName("fr.__personal__.json") # useless, doesn’t work
          435  +            xFilePicker.setDisplayDirectory("")
          436  +            xFilePicker.setMultiSelectionMode(False)
          437  +            nResult = xFilePicker.execute()
          438  +            if nResult == 1:
          439  +                # lFile = xFilePicker.getSelectedFiles()
          440  +                lFile = xFilePicker.getFiles()
          441  +                spfExported = lFile[0][8:] # remove file:///
          442  +                #spfExported = os.path.join(os.path.expanduser("~"), "fr.personal.json")
          443  +                sJSON = self.xOptionNode.getPropertyValue("personal_dic")
          444  +                if sJSON:
          445  +                    with open(spfExported, "w", encoding="utf-8") as hDst:
          446  +                        hDst.write(sJSON)
          447  +                    sMessage = self.dUI.get('export_message', "#err_msg: %s") % spfExported
          448  +                else:
          449  +                    sMessage = self.dUI.get('empty_dictionary', "#err")
          450  +                MessageBox(self.xDocument, sMessage, self.dUI.get('export_title', "#err"))
   438    451           except:
   439    452               sMessage = traceback.format_exc()
   440    453               MessageBox(self.xDocument, sMessage, self.dUI.get('export_title', "#err"), ERRORBOX)
   441    454   
   442    455       def _getRadioValue (self, *args):
   443    456           for x in args:
   444    457               if x.State:

Changes to gc_lang/fr/oxt/Lexicographer/Enumerator.py.

   100    100           self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
   101    101   
   102    102           # fonts
   103    103           xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
   104    104           xFDTitle.Height = 9
   105    105           xFDTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
   106    106           xFDTitle.Name = "Verdana"
   107         -        
          107  +
   108    108           xFDSubTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
   109    109           xFDSubTitle.Height = 8
   110    110           xFDSubTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
   111    111           xFDSubTitle.Name = "Verdana"
   112    112   
   113    113           # widget
   114    114           nX = 10
................................................................................
   124    124           self._addWidget('count2_button', 'Button', nX+75, nY1+12, 70, 11, Label = self.dUI.get('count2_button', "#err"))
   125    125           self._addWidget('unknown_button', 'Button', nX+150, nY1+12, 70, 11, Label = self.dUI.get('unknown_button', "#err"))
   126    126           self.xGridModel = self._addGrid("list_grid", nX, nY1+25, nWidth, 181, \
   127    127               [ {"Title": self.dUI.get("words", "#err"), "ColumnWidth": 175}, {"Title": "Occurrences", "ColumnWidth": 45} ], \
   128    128               SelectionModel = uno.Enum("com.sun.star.view.SelectionType", "MULTI") \
   129    129           )
   130    130           self._addWidget('num_of_entries', 'FixedText', nX, nY1+210, 60, nHeight, Label = self.dUI.get('num_of_entries', "#err"), Align = 2)
   131         -        self.xNumWord = self._addWidget('num_of_entries_res', 'FixedText', nX+65, nY1+210, 30, nHeight, Label = "—")
   132         -        self._addWidget('tot_of_entries', 'FixedText', nX+100, nY1+210, 60, nHeight, Label = self.dUI.get('tot_of_entries', "#err"), Align = 2)
   133         -        self.xTotWord = self._addWidget('tot_of_entries_res', 'FixedText', nX+165, nY1+210, 30, nHeight, Label = "—")
   134         -        
          131  +        self.xNumWord = self._addWidget('num_of_entries_res', 'FixedText', nX+65, nY1+210, 25, nHeight, Label = "—")
          132  +        self._addWidget('tot_of_entries', 'FixedText', nX+90, nY1+210, 60, nHeight, Label = self.dUI.get('tot_of_entries', "#err"), Align = 2)
          133  +        self.xTotWord = self._addWidget('tot_of_entries_res', 'FixedText', nX+155, nY1+210, 30, nHeight, Label = "—")
          134  +        self.xSearch = self._addWidget('search_button', 'Button', nX+190, nY1+210, 30, nHeight, Label = ">>>", Enabled = False)
          135  +
   135    136           # Tag
   136    137           # Note: the only way to group RadioButtons is to create them successively
   137         -        self._addWidget("dformat_section", 'FixedLine', nX, nY2, 90, nHeight, Label = self.dUI.get("dformat_section", "#err"), FontDescriptor = xFDTitle)
   138         -        self._addWidget("charstyle_section", 'FixedLine', nX+100, nY2, 90, nHeight, Label = self.dUI.get("charstyle_section", "#err"), FontDescriptor = xFDTitle)
   139         -        self.xUnderline = self._addWidget('underline', 'RadioButton', nX, nY2+12, 40, nHeight, Label = self.dUI.get('underline', "#err"))
   140         -        self.xNoUnderline = self._addWidget('nounderline', 'RadioButton', nX+50, nY2+12, 40, nHeight, Label = self.dUI.get('nounderline', "#err"))
   141         -        self.xAccent = self._addWidget('accentuation', 'RadioButton', nX+100, nY2+12, 50, nHeight, Label = self.dUI.get('accentuation', "#err"))
   142         -        self.xNoAccent = self._addWidget('noaccentuation', 'RadioButton', nX+155, nY2+12, 40, nHeight, Label = self.dUI.get('noaccentuation', "#err"))
          138  +        self._addWidget("charstyle_section", 'FixedLine', nX, nY2, 200, nHeight, Label = self.dUI.get("charstyle_section", "#err"), FontDescriptor = xFDTitle)
          139  +        self.xAccent = self._addWidget('emphasis', 'RadioButton', nX, nY2+12, 55, nHeight, Label = self.dUI.get('emphasis', "#err"))
          140  +        self.xStrongAccent = self._addWidget('strong_emphasis', 'RadioButton', nX+60, nY2+12, 70, nHeight, Label = self.dUI.get('strong_emphasis', "#err"))
          141  +        self.xNoAccent = self._addWidget('nostyle', 'RadioButton', nX+140, nY2+12, 45, nHeight, Label = self.dUI.get('nostyle', "#err"))
   143    142   
   144         -        self.xTag = self._addWidget('tag_button', 'Button', self.xDialog.Width-40, nY2+10, 30, 11, Label = self.dUI.get('tag_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x005500)
   145         -        
          143  +        self.xTag = self._addWidget('tag_button', 'Button', self.xDialog.Width-40, nY2+10, 30, 11, Label = self.dUI.get('tag_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x005500, Enabled=False)
          144  +
   146    145           # Progress bar
   147    146           self.xProgressBar = self._addWidget('progress_bar', 'ProgressBar', nX, self.xDialog.Height-25, 160, 14)
   148    147           self.xProgressBar.ProgressValueMin = 0
   149    148           self.xProgressBar.ProgressValueMax = 1 # to calculate later
   150    149   
   151    150           # Close
   152    151           self._addWidget('close_button', 'Button', self.xDialog.Width-60, self.xDialog.Height-25, 50, 14, Label = self.dUI.get('close_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x550000)
................................................................................
   157    156           self.xGridControl = self.xContainer.getControl('list_grid')
   158    157           self.xContainer.getControl('count_button').addActionListener(self)
   159    158           self.xContainer.getControl('count_button').setActionCommand('Count')
   160    159           self.xContainer.getControl('count2_button').addActionListener(self)
   161    160           self.xContainer.getControl('count2_button').setActionCommand('CountByLemma')
   162    161           self.xContainer.getControl('unknown_button').addActionListener(self)
   163    162           self.xContainer.getControl('unknown_button').setActionCommand('UnknownWords')
          163  +        self.xContainer.getControl('search_button').addActionListener(self)
          164  +        self.xContainer.getControl('search_button').setActionCommand('Search')
   164    165           self.xContainer.getControl('tag_button').addActionListener(self)
   165    166           self.xContainer.getControl('tag_button').setActionCommand('Tag')
   166    167           self.xContainer.getControl('close_button').addActionListener(self)
   167    168           self.xContainer.getControl('close_button').setActionCommand('Close')
   168         -        self.xContainer.setVisible(False)
          169  +        self.xContainer.setVisible(True)    # True for non modal dialog
   169    170           xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
   170    171           self.xContainer.createPeer(xToolkit, None)
   171         -        self.xContainer.execute()
          172  +        #self.xContainer.execute()          # Don’t excute for non modal dialog
   172    173   
   173    174       # XActionListener
   174    175       def actionPerformed (self, xActionEvent):
   175    176           try:
   176    177               if xActionEvent.ActionCommand == "Count":
   177    178                   self.count(self.dUI.get("words", "#err"))
   178    179                   self.xTag.Enabled = True
          180  +                self.xSearch.Enabled = True
   179    181               elif xActionEvent.ActionCommand == "CountByLemma":
   180    182                   self.count(self.dUI.get("lemmas", "#err"), bByLemma=True)
   181    183                   self.xTag.Enabled = False
          184  +                self.xSearch.Enabled = False
   182    185               elif xActionEvent.ActionCommand == "UnknownWords":
   183    186                   self.count(self.dUI.get("unknown_words", "#err"), bOnlyUnknownWords=True)
   184    187                   self.xTag.Enabled = True
          188  +                self.xSearch.Enabled = True
          189  +            elif xActionEvent.ActionCommand == "Search":
          190  +                if not self.xGridControl.hasSelectedRows():
          191  +                    return
          192  +                lRow = self.xGridControl.getSelectedRows()
          193  +                aWord = set([ self.xGridModel.GridDataModel.getCellData(0, n)  for n in lRow ])
          194  +                self.gotoWord(aWord)
   185    195               elif xActionEvent.ActionCommand == "Tag":
   186    196                   if not self.xGridControl.hasSelectedRows():
   187    197                       return
   188    198                   lRow = self.xGridControl.getSelectedRows()
   189    199                   aWord = set([ self.xGridModel.GridDataModel.getCellData(0, n)  for n in lRow ])
   190    200                   sAction = ""
   191         -                if self.xUnderline.State:
   192         -                    sAction = "underline"
   193         -                elif self.xNoUnderline.State:
   194         -                    sAction = "nounderline"
   195         -                elif self.xAccent.State:
   196         -                    sAction = "accentuation"
          201  +                if self.xAccent.State:
          202  +                    sAction = "emphasis"
          203  +                elif self.xStrongAccent.State:
          204  +                    sAction = "strong_emphasis"
   197    205                   elif self.xNoAccent.State:
   198         -                    sAction = "noaccentuation"
          206  +                    sAction = "nostyle"
   199    207                   self.tagText(aWord, sAction)
   200    208               elif xActionEvent.ActionCommand == "Close":
   201         -                self.xContainer.endExecute()
          209  +                self.xContainer.dispose()           # Non modal dialog
          210  +                #self.xContainer.endExecute()       # Modal dialog
   202    211           except:
   203    212               traceback.print_exc()
   204         -    
          213  +
   205    214       # XJobExecutor
   206    215       def trigger (self, args):
   207    216           try:
   208    217               xDialog = Enumerator(self.ctx)
   209    218               xDialog.run()
   210    219           except:
   211    220               traceback.print_exc()
................................................................................
   280    289           xCursor.gotoStartOfParagraph(False)
   281    290           nPos = 0
   282    291           for dToken in self.oTokenizer.genTokens(sParagraph):
   283    292               if dToken["sValue"] in aWord:
   284    293                   xCursor.goRight(dToken["nStart"]-nPos, False) # start of token
   285    294                   nPos = dToken["nEnd"]
   286    295                   xCursor.goRight(nPos-dToken["nStart"], True) # end of token
   287         -                if sAction == "underline":
   288         -                    xCursor.CharBackColor = hexToRBG("AA0000")
   289         -                elif sAction == "nounderline":
   290         -                    xCursor.CharBackColor = hexToRBG("FFFFFF")
   291         -                elif sAction == "accentuation":
          296  +                # if sAction == "underline":
          297  +                #     xCursor.CharBackColor = hexToRBG("AA0000")
          298  +                # elif sAction == "nounderline":
          299  +                #     xCursor.CharBackColor = hexToRBG("FFFFFF")
          300  +                if sAction == "emphasis":
   292    301                       xCursor.CharStyleName = "Emphasis"
   293         -                elif sAction == "noaccentuation":
          302  +                elif sAction == "strong_emphasis":
          303  +                    xCursor.CharStyleName = "Strong Emphasis"
          304  +                elif sAction == "nostyle":
   294    305                       #xCursor.CharStyleName = "Default Style"     # doesn’t work
   295    306                       xCursor.setPropertyToDefault("CharStyleName")
   296    307           self.xProgressBar.ProgressValue += 1
   297    308   
          309  +    @_waitPointer
          310  +    def gotoWord (self, aWord):
          311  +        try:
          312  +            if not aWord:
          313  +                return
          314  +            if not self.oTokenizer:
          315  +                self.oTokenizer = self.oSpellChecker.getTokenizer()
          316  +            xViewCursor = self.xDocument.CurrentController.ViewCursor
          317  +            if not xViewCursor.isCollapsed():
          318  +                xViewCursor.collapseToEnd()
          319  +            xRange = xViewCursor.getStart()
          320  +            xCursor = self.xDocument.Text.createTextCursor()
          321  +            xCursor.gotoRange(xRange, False)
          322  +            #xCursor.gotoEndOfWord(False)
          323  +            xCursor.gotoEndOfParagraph(True)
          324  +            sParagraph = xCursor.getString()
          325  +            xCursor.gotoRange(xRange, False)
          326  +            tPos = self._searchWordsInText(aWord, sParagraph)
          327  +            if not tPos:
          328  +                while xCursor.gotoNextParagraph(False):
          329  +                    xCursor.gotoEndOfParagraph(True)
          330  +                    sParagraph = xCursor.getString()
          331  +                    xCursor.gotoStartOfParagraph(False)
          332  +                    tPos = self._searchWordsInText(aWord, sParagraph)
          333  +                    if tPos:
          334  +                        break
          335  +            if not tPos:
          336  +                xCursor.gotoStart(False)
          337  +                xCursor.gotoEndOfParagraph(True)
          338  +                sParagraph = xCursor.getString()
          339  +                xCursor.gotoStartOfParagraph(True)
          340  +                tPos = self._searchWordsInText(aWord, sParagraph)
          341  +                while xCursor.gotoNextParagraph(False):
          342  +                    xCursor.gotoEndOfParagraph(True)
          343  +                    sParagraph = xCursor.getString()
          344  +                    xCursor.gotoStartOfParagraph(False)
          345  +                    tPos = self._searchWordsInText(aWord, sParagraph)
          346  +                    if tPos:
          347  +                        break
          348  +            if tPos:
          349  +                xCursor.goRight(tPos[0], False)
          350  +                xRange = xCursor.getStart()
          351  +                xViewCursor.gotoRange(xRange, False)
          352  +                xViewCursor.goRight(tPos[1], True)
          353  +        except:
          354  +            traceback.print_exc()
          355  +
          356  +    def _searchWordsInText (self, aWord, sText):
          357  +        for dToken in self.oTokenizer.genTokens(sText):
          358  +            if dToken["sValue"] in aWord:
          359  +                return (dToken["nStart"], dToken["nEnd"]-dToken["nStart"])
          360  +        return None
   298    361   
   299    362   #g_ImplementationHelper = unohelper.ImplementationHelper()
   300    363   #g_ImplementationHelper.addImplementation(Enumerator, 'net.grammalecte.enumerator', ('com.sun.star.task.Job',))

Changes to gc_lang/fr/oxt/Lexicographer/enum_strings.py.

     2      2       if sLang in dStrings:
     3      3           return dStrings[sLang]
     4      4       return dStrings["fr"]
     5      5   
     6      6   dStrings = {
     7      7       "fr": {
     8      8           "title": "Grammalecte · Recenseur de mots",
     9         -        
            9  +
    10     10           "list_section": "Énumération des occurrences",
    11     11           "count_button": "Compter tout",
    12     12           "count2_button": "Compter par lemme",
    13     13           "unknown_button": "Mots inconnus",
    14     14           "num_of_entries": "Nombre d’entrées :",
    15     15           "tot_of_entries": "Total des entrées :",
    16     16   
................................................................................
    18     18           "lemmas": "Lemmes",
    19     19           "unknown_words": "Mots inconnus",
    20     20   
    21     21           "dformat_section": "Formatage direct",
    22     22           "charstyle_section": "Style de caractères",
    23     23           "underline": "Surligner",
    24     24           "nounderline": "Effacer",
    25         -        "accentuation": "Accentuation",
    26         -        "noaccentuation": "Aucun",
           25  +        "emphasis": "Accentuation",
           26  +        "strong_emphasis": "Accentuation forte",
           27  +        "nostyle": "Aucun",
    27     28           "tag_button": "Taguer",
    28     29   
    29     30           "close_button": "Fermer",
    30     31       },
    31     32       "en": {
    32     33           "title": "Grammalecte · Enumerator of words",
    33     34   
................................................................................
    42     43           "lemmas": "Lemmas",
    43     44           "unknown_words": "Unknown words",
    44     45   
    45     46           "dformat_section": "Direct format",
    46     47           "charstyle_section": "Character style",
    47     48           "underline": "Underline",
    48     49           "nounderline": "Erase",
    49         -        "accentuation": "Accentuation",
    50         -        "noaccentuation": "None",
           50  +        "emphasis": "Emphasis",
           51  +        "strong_emphasis": "Strong emphasis",
           52  +        "nostyle": "None",
    51     53           "tag_button": "Tag",
    52     54   
    53     55           "close_button": "Close",
    54     56       },
    55     57   }

Changes to gc_lang/fr/oxt/TextFormatter/TextFormatter.py.

     1         -# -*- coding: utf8 -*-
     2      1   # Text Formatter
     3      2   # by Olivier R.
     4      3   # License: MPL 2
     5      4   
     6      5   import unohelper
     7      6   import uno
     8         -import sys
     9         -import os
            7  +
    10      8   import traceback
    11      9   import time
    12         -
    13         -if sys.version_info.major == 3:
    14         -    import imp
           10  +import json
    15     11   
    16     12   import tf_strings
    17     13   import tf_options
    18     14   import tf_tabrep
    19     15   import helpers
    20     16   
    21     17   
................................................................................
   264    260           #self.bsel = self._addWidget('bsel', 'CheckBox', x2, self.xDialog.Height-40, nWidth-55, nHeight, Label = self.dUI.get('bsel', "#err"))
   265    261           self.bapply = self._addWidget('apply', 'Button', self.xDialog.Width-55, self.xDialog.Height-19, 50, 15, Label = self.dUI.get('apply', "#err"), \
   266    262                                         FontDescriptor = xFD2, TextColor = 0x004400)
   267    263           self.binfo = self._addWidget('info', 'Button', self.xDialog.Width-15, 0, 10, 9, Label = self.dUI.get('info', "#err"), \
   268    264                                        HelpText = self.dUI.get('infotitle', "#err"), FontDescriptor = xFDsmall, TextColor = 0x444444)
   269    265   
   270    266           # load configuration
   271         -        self._loadConfig()
          267  +        self.xGLOptionNode = helpers.getConfigSetting("/org.openoffice.Lightproof_${implname}/Other/", True)
          268  +        self._loadConfig("${lang}")
   272    269   
   273    270           ## container
   274    271           self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
   275    272           self.xContainer.setModel(self.xDialog)
   276    273           self.xContainer.setVisible(False)
   277    274           self.xContainer.getControl('info').addActionListener(self)
   278    275           self.xContainer.getControl('info').setActionCommand('Info')
................................................................................
   307    304                   else:
   308    305                       xDesktop = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
   309    306                       xElem = xDesktop.getCurrentComponent()
   310    307   
   311    308                       # Writer
   312    309                       if True:
   313    310                           # no selection
   314         -                        self._saveConfig()
          311  +                        self._saveConfig("${lang}")
   315    312                           self._replaceAll(xElem)
   316    313                       else:
   317    314                           # modify selected text only
   318    315                           pass
   319    316                           #xSelecList = xDoc.getCurrentSelection()
   320    317                           #xSel = xSelecList.getByIndex(0)
   321    318   
................................................................................
   358    355                   xWindow = xDoc.CurrentController.Frame.ContainerWindow
   359    356                   MessageBox (xWindow, self.dUI.get('infomsg', "#err"), self.dUI.get('infotitle', "#err"))
   360    357               else:
   361    358                   print("Wrong command: " + xActionEvent.ActionCommand)
   362    359           except:
   363    360               traceback.print_exc()
   364    361   
   365         -    def _loadConfig (self):
          362  +    def _loadConfig (self, sLang):
   366    363           try:
   367         -            if sys.version_info.major == 3:
   368         -                imp.reload(tf_options)
   369         -            else:
   370         -                reload(tf_options)
   371         -            self._setConfig(tf_options.dOpt)
          364  +            dOpt = tf_options.dDefaultOpt.copy()
          365  +            xChild = self.xGLOptionNode.getByName("o_"+sLang)
          366  +            sTFOptionsJSON = xChild.getPropertyValue("tf_options")
          367  +            if sTFOptionsJSON:
          368  +                dOpt.update(json.loads(sTFOptionsJSON))
          369  +            self._setConfig(dOpt)
   372    370           except:
   373    371               traceback.print_exc()
          372  +            self._setConfig(tf_options.dDefaultOpt)
   374    373   
   375         -    def _setConfig (self, d):
   376         -        try:
   377         -            for key, val in d.items():
   378         -                w = getattr(self, key)
   379         -                w.State = val
   380         -                if key in self.dCheckboxWidgets:
   381         -                    self._switchCheckBox(w)
   382         -        except:
   383         -            raise
          374  +    def _setConfig (self, dOpt):
          375  +        for sKey, val in dOpt.items():
          376  +            try:
          377  +                w = getattr(self, sKey)
          378  +                if w:
          379  +                    w.State = val
          380  +                    if sKey in self.dCheckboxWidgets:
          381  +                        self._switchCheckBox(w)
          382  +            except:
          383  +                traceback.print_exc()
          384  +                print("option", sKey, "not set.")
   384    385   
   385         -    def _saveConfig (self):
          386  +    def _saveConfig (self, sLang):
          387  +        "save options in LibreOffice profile"
   386    388           try:
   387    389               # create options dictionary
   388    390               dOpt = {}
   389         -            for key, lWidget in self.dCheckboxWidgets.items():
   390         -                w = getattr(self, key)
          391  +            for sKey, lWidget in self.dCheckboxWidgets.items():
          392  +                w = getattr(self, sKey)
   391    393                   dOpt[w.Name] = w.State
   392    394                   for w in lWidget:
   393    395                       dOpt[w.Name] = w.State
   394         -            # write file
   395         -            sExtPath = helpers.getAbsolutePathOf("/pythonpath/tf_options.py")
   396         -            if os.path.isfile(sExtPath):
   397         -                hOpt = open(sExtPath, "w")
   398         -                hOpt.write("dDefaultOpt = " + str(tf_options.dDefaultOpt) + "\n")
   399         -                hOpt.write("dOpt = " + str(dOpt))
   400         -                hOpt.close()
          396  +            # save option to LO profile as JSON string
          397  +            xChild = self.xGLOptionNode.getByName("o_"+sLang)
          398  +            xChild.setPropertyValue("tf_options", json.dumps(dOpt))
          399  +            self.xGLOptionNode.commitChanges()
   401    400           except:
   402    401               traceback.print_exc()
   403    402   
   404    403       def _switchCheckBox (self, wGroupCheckbox):
   405    404           for w in self.dCheckboxWidgets.get(wGroupCheckbox.Name, []):
   406    405               w.Enabled = wGroupCheckbox.State
   407    406   
................................................................................
   684    683           try:
   685    684               for sPattern, sRepl, bRegex, bCaseSensitive in tf_tabrep.dTableRepl[sList]:
   686    685                   n += self._replaceText(xElem, sPattern, sRepl, bRegex, bCaseSensitive)
   687    686           except:
   688    687               print("# Error with "+sList)
   689    688               traceback.print_exc()
   690    689           return n
   691         -
   692    690   
   693    691       def _replaceText (self, xElem, sPattern, sRepl, bRegex, bCaseSensitive=False):
   694    692           try:
   695    693               xRD = xElem.createReplaceDescriptor()
   696    694               xRD.SearchString = sPattern
   697    695               xRD.ReplaceString = sRepl
   698    696               xRD.SearchRegularExpression = bRegex

Changes to gc_lang/fr/oxt/TextFormatter/tf_options.py.

            1  +# text formatter options
            2  +
     1      3   dDefaultOpt = {
     2         -    'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1, 
     3         -    'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nbsp6': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0,
     4         -    'space': 1, 'space1': 1, 'space2': 1,
     5         -    'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0,
     6         -    'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1,
     7         -    'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0,
     8         -    'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0,
     9         -}
    10         -dOpt = {
    11         -    'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1, 
            4  +    'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1,
    12      5       'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nbsp6': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0,
    13      6       'space': 1, 'space1': 1, 'space2': 1,
    14      7       'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0,
    15      8       'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1,
    16      9       'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0,
    17     10       'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0,
    18     11   }

Changes to gc_lang/fr/rules.grx.

  1949   1949       l’ [un|une]  *WORD
  1950   1950           <<- not value(\3, "|plus|") =>> select(\3, ":[123][sp]")
  1951   1951   
  1952   1952       [des|chaque|quelque|quelques|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs|aucun|aucune]  *WORD
  1953   1953           <<- =>> exclude(\2, ":V")
  1954   1954   
  1955   1955       [un|une]  *WORD
  1956         -        <<- not value(<1, "|l’|quelqu’|quelqu|") and not value(\2, "|a|fut|fût|est|") and not morph(\2, ":P") =>> exclude(\2, ":V")
         1956  +        <<- not value(<1, "|l’|quelqu’|quelqu|") and not value(\2, "|a|fut|fût|est|fait|") and not morph(\2, ":P") =>> exclude(\2, ":V")
  1957   1957   
  1958   1958       [une|le|la|les|des|chaque|quelque|quelques|cet|cette|ces|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs] personne
  1959   1959           <<- =>> select(\-1, ":N")
  1960   1960   
  1961   1961       de  [la|l’]  $:¬:Y
  1962   1962           <<- not value(<1, "|semblant|") =>> exclude(\3, ":V")
  1963   1963   
................................................................................
  2003   2003   TEST: en tant que président du conseil
  2004   2004   TEST: les bac +2 sont trop nombreux.
  2005   2005   TEST: c’est à n’y plus rien comprendre.
  2006   2006   TEST: Elle était tout feu, tout flamme.
  2007   2007   TEST: Ses rencards finissent par devenir lassants
  2008   2008   TEST: trois espèces de chauve-souris dont une est éteinte
  2009   2009   TEST: Ils sont source de conflits
         2010  +TEST: Votre question fait référence à un fait divers déroutant
  2010   2011   
  2011   2012   
  2012   2013   
  2013   2014   !!!
  2014   2015   !!!
  2015   2016   !!! Étiquettes                                                                                    !!
  2016   2017   !!!
................................................................................
  4458   4459       grand’ville
  4459   4460           <<- /tu/ ->> =\1.replace("’", "-")                                      # Graphie désuète. Au lieu d’une apostrophe, employez plutôt un trait d’union.
  4460   4461           <<- ~>> =\1.replace("’", "-")
  4461   4462   
  4462   4463   TEST: je suis allé dans la {{grand’rue}}.                           ->> grand-rue
  4463   4464   
  4464   4465   
         4466  +!!!! Trait d’union : formes interrogative (nous/vous)                                             !!
         4467  +__inte_union_nous1!7__
         4468  +    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~ons$  nous
         4469  +    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~ons$  nous
         4470  +    [ne|n’]  [le|la|l’|les]                  [lui|leur|en|y]             ~ons$  nous
         4471  +    [ne|n’]  [lui|leur|y]                    en                          ~ons$  nous
         4472  +        <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:1p", ":[GW]") --2:-1>> \-2-\-1       # Forme interrogative ? Mettez un trait d’union.
         4473  +
         4474  +    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons$  nous  [<end>|,]
         4475  +    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons$  nous  @:¬:(?:1p|Y)
         4476  +        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
         4477  +        -2:3>> \2-\3                                                                                # Forme interrogative ? Mettez un trait d’union.
         4478  +
         4479  +TEST: n’y {{retrouverons nous}} jamais la tranquilité ?
         4480  +TEST: pourquoi n’en {{entendons nous}} jamais parler ?
         4481  +TEST: que {{pouvons nous}} dans cette vie
         4482  +TEST: Sachons nous conformer à ces restrictions et faisons notre travail.
         4483  +
         4484  +
         4485  +__inte_union_vous1!7__
         4486  +    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~ez$  vous
         4487  +    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~ez$  vous
         4488  +    [ne|n’]  [le|la|l’|les]                  [lui|leur|en|y]             ~ez$  vous
         4489  +    [ne|n’]  [lui|leur|y]                    en                          ~ez$  vous
         4490  +        <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:2p", ":[GW]") --2:-1>> \-2-\-1       # Forme interrogative ? Mettez un trait d’union.
         4491  +
         4492  +    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ez$  vous  [<end>|,]
         4493  +    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ez$  vous  @:¬:(?:2p|Y)
         4494  +        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
         4495  +        -2:3>> \2-\3                                                                                # Forme interrogative ? Mettez un trait d’union.
         4496  +
         4497  +TEST: ne {{soutiendrez vous}} pas cette proposition ?
         4498  +TEST: n’en {{voulez vous}} jamais à ces gens ?
         4499  +TEST: comment {{pensez vous}} y parvenir
         4500  +TEST: veuillez vous adresser à notre secretaire pour prendre rendez-vous.
         4501  +
         4502  +
  4465   4503   
  4466   4504   !!!! Virgules                                                                                     !!
  4467   4505   
  4468   4506   __virg_dialogue_après_nom_propre__
  4469   4507       [<start>|,]  $:M¬:G  [/-je|/-tu|/-on|/-nous|/-vous|/-ils|/-elles|/VCimp]
  4470   4508           <<- /virg/ -2>> \2,                                                                         # Dialogue ? Ajoutez une virgule pour mettre en incise la personne à qui s’adresse la réplique.
  4471   4509   
................................................................................
  4753   4791   __bs_pour_ne_pas_que__
  4754   4792       pour ne pas [que|qu’]
  4755   4793           <<- /bs/ ->> _
  4756   4794           # Tournure familière. Par exemple, écrivez “pour qu’il ne vienne pas” plutôt que “pour ne pas qu’il vienne.”|http://www.academie-francaise.fr/pour-pas-que-au-lieu-de-pour-que-ne-pas
  4757   4795   
  4758   4796   TEST: Nous y sommes allés {{pour ne pas qu’}}elle se sente seule.
  4759   4797   
         4798  +
         4799  +# silence assourdissant
         4800  +__bs_silence_assourdissant__
         4801  +    silence assourdissant
         4802  +    silences assourdissants
         4803  +        <<- /bs/ ->> _                                                                              # Cliché. Locution oxymorique employée à tort et à travers.
         4804  +
         4805  +TEST: dans un {{silence assourdissant}}
         4806  +
  4760   4807   
  4761   4808   # très / trop
  4762   4809   __bs_très_trop_superflu__
  4763   4810       [très|trop] [beaucoup|assez|mieux|pire|meilleur|délicieux|plus|moins]
  4764   4811           <<- /bs/ ->> \2                                                                             # Avec “\2”, “\1” est superflu.
  4765   4812   
  4766   4813   TEST: Je l’aime {{très beaucoup}}.
................................................................................
  5093   5140       [>ajourner|>différer|>reporter] à date ultérieure
  5094   5141       [>ajourner|>différer|>reporter] à une date ultérieure
  5095   5142           <<- /pleo/ ->> \1                                                                           # Pléonasme.
  5096   5143   
  5097   5144   TEST: {{Ajourner à une date ultérieure}}        ->> Ajourner
  5098   5145   TEST: {{différer à une date ultérieure}}        ->> différer
  5099   5146   TEST: {{reporter à plus tard}}                  ->> reporter
  5100         -
  5101   5147   
  5102   5148   
  5103   5149   
  5104   5150   !!
  5105   5151   !!
  5106   5152   !!!! Tournures de langage                                                                         !!
  5107   5153   !!
................................................................................
  5835   5881           <<- /conf/ \2.islower()
  5836   5882           -2>> =suggSimil(\2, ":[NA]:.:[si]", True)                                                   # Incohérence avec “\1” : “\2” est un verbe.
  5837   5883   
  5838   5884       [<start>|,]  [ton|son|audit]  @:(?:Y|[123][sp])¬:[NAQ]
  5839   5885           <<- /conf/ \3.islower()
  5840   5886           -3>> =suggSimil(\3, ":[NA]:[me]:[si]", True)                                                # Incohérence avec “\2” : “\3” est un verbe.
  5841   5887   
  5842         -    [un|une]  @:(?:Y|[123][sp])¬:[GNA]  ?@:W¿  @:A¬:[GM]
         5888  +    [un|une]  @:(?:Y|[123][sp])¬:[GNA]  ?$:W¿  @:A¬:[GM]
  5843   5889           <<- /conf/ not value(<1, "|dont|l’|d’|sauf|excepté|") and not before("(?i)\\bun à +$")
  5844   5890           -2>> =suggSimil(\2, ":[NAQ]:[me]:[si]", True)                                               # Incohérence avec “\1” : “\2” est une forme verbale conjuguée.
  5845   5891   
  5846   5892   TEST: un {{maintient}} difficile.
  5847   5893   TEST: quelqu’un arrive.
  5848   5894   TEST: cet {{plaît}} est infectée.
  5849   5895   TEST: {{ce}} {{rappelle}} n’en finit pas.
................................................................................
  6303   6349           <<- /conf/ -1:2>> a les|aux
  6304   6350           # Confusion. Ou vous confondez “à” (préposition) avec “a” (avoir), ou vous devez employer “aux”. Exemple : Elle _a_ donné du travail _aux_ employés _à_ profusion.
  6305   6351   
  6306   6352   TEST: Celui qui y croit {{à les}} moyens d’y parvenir.
  6307   6353   
  6308   6354   
  6309   6355       à  *WORD
  6310         -        <<- /conf/ \2.islower() and not value(\2, "|coté|") >>>
         6356  +        <<- /conf/ \2.islower() and not value(\2, "|coté|sont|") >>>
  6311   6357           <<- /conf/ morph(\2, ":(?:V.......[_z][az].*:Q|V1.*:Ip:2p)", ":[MGWNY]") -1>> a             # Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez “a”.
  6312   6358           <<- /conf/ __also__ and morph(\2, "V1.*:(?:Ip:2p|Q)", "*") and not value(<1, "|il|elle|on|n’|les|l’|m’|t’|s’|d’|en|y|lui|nous|vous|leur|")
  6313   6359           -2>> =suggVerbInfi(\2)                                                                      # Le verbe devrait être à l’infinitif.
  6314   6360           <<- /conf/ __else__ and morph(\2, ":[123][sp]", "*") and not value(\2, "|tord|tords|") >>>
  6315   6361           <<- /conf/ morph(\2, ":V2.*:I[ps]:3s", "*") -2>> =suggVerbPpas(\2, ":m:s")                  # Incohérence : “\1” est une préposition. “\2” est un verbe conjugué.
  6316   6362           <<- /conf/ __also__ -1>> a                                                                  # Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez “a”.
  6317   6363           <<- /conf/ __else__ -2>> _                                                                  # Incohérence : “\1” est une préposition. “\2” est un verbe conjugué.
................................................................................
  6340   6386           -1>> à                                                      # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0
  6341   6387   
  6342   6388   TEST: scrupuleux {{a}} n’en toucher qu’une part infime.
  6343   6389   TEST: Ne pas hésiter {{a}} {{demander}} des conseils.
  6344   6390   TEST: Sébastien {{a}} {{demander}} des conseils.
  6345   6391   TEST: {{A}} vous lire, on ne sait plus que penser de toutes ces histoires
  6346   6392   
         6393  +
         6394  +__conf_à_qui_infinitif__
         6395  +    *WORD  a  qui  @:(?:Y|Os)
         6396  +        <<- /conf/ morph(\1, ":N", ":Ov") -2>> à                    # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0
         6397  +
         6398  +TEST: il n’y avait personne {{a}} qui parler de nos problèmes       ->> à
         6399  +TEST: des gens {{a}} qui offrir ça                                  ->> à
         6400  +
  6347   6401   
  6348   6402   __conf_à_a__
  6349   6403       [<start>|,] a moins [que|qu’]
  6350   6404           <<- /conf/ -2>> à                                           # Confusion probable : « à moins que » pour dire « sauf si ».
  6351   6405   
  6352   6406       a part @:(?:M[12]|D|Oo)
  6353   6407           <<- /conf/ -1>> à                                           # Confusion probable : “a” est une forme conjugée de “avoir”. Pour la préposition, écrivez “à”.
................................................................................
  6540   6594   TEST: tout part {{à veau l’eau}}
  6541   6595   TEST: On décida de tout laisser partir {{à vau l’o}}
  6542   6596   TEST: une dérive à vau-l’eau.
  6543   6597   
  6544   6598   
  6545   6599   __conf_à_a_locutions__
  6546   6600       a ?seulement¿ [*NUM|$:B|quelques|plusieurs] [millimètres|centimètres|décamètres|mètres|kilomètres|verstes|lieues|UA|parsecs|années-lumière] de distance
  6547         -    a [califourchon|contrecœur|contre-cœur|contrejour|contre-jour|contretemps|contre-temps|demi-mot|gogo|distance|nouveau|peine|présent|rebrousse-poil|regret|travers|tout-va|confesse|midi|minuit|rallonge|reculons|risque|sec|tâtons|vélo|vif]
         6601  +    a [califourchon|contrecœur|contre-cœur|contrejour|contre-jour|contretemps|contre-temps|demi-mot|gogo|distance|nouveau|présent|rebrousse-poil|regret|travers|tout-va|confesse|midi|minuit|rallonge|reculons|risque|sec|tâtons|vélo|vif]
         6602  +    a [mi-chemin|mi-mandat|mi-mot+s|mi-parcours|mi-temps|mi-voix]
  6548   6603       a air comprimé
  6549   6604       a armes égales
  6550   6605       a aucun prix
  6551   6606       a autrui
  6552   6607       a autre chose
  6553   6608       a bas [>coût|>cout]
  6554   6609       a bâbord
................................................................................
  6763   6818   TEST: Il l’a fait {{a}} cause de toi.
  6764   6819   TEST: Je tenais à le lui faire savoir.
  6765   6820   TEST: il va falloir songer à les leur donner
  6766   6821   TEST: le coût est estimé à au moins 1000 milliards de dollars
  6767   6822   TEST: elle à qui nous avons donné notre cœur et pour laquelle nous avons tout tenté pour la faire aimer de nos concitoyens.
  6768   6823   TEST: jusqu’à parfois se mettre en danger
  6769   6824   TEST: les méthodes de l’à-peu-près ne suffisent pas.
         6825  +TEST: Celui qui a peine à paraître ne doit pas être mis subitement en lumière
  6770   6826   
  6771   6827   
  6772   6828   ## substantifs
  6773   6829   
  6774   6830   __conf_substantif_à_substantif!3__
  6775   6831       *WORD  a  @:N¬*
  6776         -        <<- /conf/ \2.islower() and not value(\3, "|beau|besoin|confiance|connaissance|conscience|crainte|envie|été|faim|hâte|honte|lieu|peur|raison|rapport|recours|soif|tendance|tort|vent|") and morph(\1, ":N", "*")
         6832  +        <<- /conf/ \2.islower() and not value(\3, "|beau|besoin|charge|confiance|connaissance|conscience|crainte|envie|été|faim|hâte|honte|lieu|peine|peur|raison|rapport|recours|soif|tendance|tort|vent|")
         6833  +            and morph(\1, ":N", "*")
  6777   6834           -2>> à              # Confusion probable : “a” est une forme conjuguée du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0
  6778   6835   
  6779   6836   TEST: les bobos {{a}} trottinette
  6780   6837   TEST: la lettre A est la première lettre de l’alphabet
  6781   6838   TEST: la lettre a est la première lettre de l’alphabet
  6782   6839   TEST: cette femme a raison
  6783   6840   TEST: l’homme a beau se démener, rien n’y fait.
  6784   6841   TEST: elle a tendance à n’en faire qu’à sa tête.
  6785   6842   TEST: Ce travail a lieu dans le désert.
         6843  +TEST: cette injonction a force de loi
  6786   6844   
  6787   6845   
  6788   6846   __conf_a_à_substantifs__
  6789   6847       >arc a >poulie
  6790   6848       >arme a >feu
  6791   6849       >armoire a [>glace|>pharmacie]
  6792   6850       >attaque a main armée
................................................................................
  6914   6972   
  6915   6973   TEST: Mener {{a}} bien cette guerre sera plus difficile qu’on le pense.
  6916   6974   TEST: Je peux mener {{a}} bien cette opération.
  6917   6975   TEST: Cette coalition que tu penses mener a bien l’intention de te trahir.
  6918   6976   
  6919   6977   
  6920   6978   __conf_à_a_après_verbes__
  6921         -    @:V¬:[YGNAWM]  ?@:W¿  a
         6979  +    @:V¬:[YGNAWM]  ?$:W¿  a
  6922   6980           <<- /conf/ \-1 != "A" and not tag_before(\1, "que") and not tag_before(\1, "dont") and not tag_before(\1, "qui") and not morph(>1, ":Q")
  6923   6981           --1>> à                                                 # Confusion probable : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0
  6924   6982   
  6925         -    [/VCint|/VCimp]  ?@:W¿  a
         6983  +    [/VCint|/VCimp]  ?$:W¿  a
  6926   6984           <<- /conf/ not value(\1, "|rendez-vous|") --1>> à       # Confusion : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0
  6927   6985   
  6928   6986   TEST: Vient-on {{a}} la maison demain ?
  6929   6987   TEST: Arrivait-elle {{a}} le manger ?
  6930   6988   TEST: Dis-moi {{a}} quelle heure on mange.
  6931   6989   TEST: Offrez-vous {{a}} Dieu et taisez-vous.
  6932   6990   TEST: dans tous les cas de figure il pense souvent {{a}} sa fille.
................................................................................
  6933   6991   TEST: Qu’y a-t-il {{a}} cette place qui mérite que je prenne tant de risques.
  6934   6992   TEST: cet homme mange bien {{a}} la maison ?
  6935   6993   TEST: Ce que je mange a un goût de surgelé.
  6936   6994   TEST: celui qui conduisait a décidé de faire un tour du quartier avec la voiture.
  6937   6995   TEST: Un rendez-vous a bousculé ses plans
  6938   6996   TEST: Maria Butina a également rencontré des républicains tels que Donald Trump
  6939   6997   
         6998  +
         6999  +__conf_à_en_juger_par__
         7000  +    !! à en juger par ¡¡
         7001  +    [à|a] [en|>an] [juger|jugé+ses|jugeait|jugeais] [par|pare+s|>part]
         7002  +        <<- /conf/ ->> à en juger par       # Confusion : “à en juger par” c’est-à-dire “selon le jugement qu’on se faire avec”.
         7003  +
         7004  +TEST: {{a en jugé part}} cet article, c’est bientôt la fin.
         7005  +TEST: ils sont à en juger par leurs résultats les prochains champions.
         7006  +
  6940   7007   
  6941   7008   __conf_celui_celle_à_qui__
  6942   7009       [celui|celle|ceux|celles]  a  qui
  6943   7010           <<- /conf/ -2>> à                   # Confusion. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0
  6944   7011   
  6945   7012   TEST: Ceux {{a}} qui nous avons notifié le problème sont partis.
  6946   7013   TEST: Il y a qui au dîner ce soir ?
................................................................................
  7301   7368   
  7302   7369       c’ est  @:N.*:p¬:(?:G|W|M|A.*:[si])
  7303   7370           <<- /conf/ -1:2>> ces|ses                                           # Confusion. Exemples : c’est facile ; ces chats (désignation) ; ses chats (possession)…
  7304   7371   
  7305   7372       ses  /-là
  7306   7373           <<- /conf/ -1>> ces                 # Confusion : “ses” est un déterminant possessif ; si vous voulez désigner des éléments en particulier, vous devriez utiliser le déterminant démonstratif “ces”.
  7307   7374   
         7375  +    c’ est n’ [est|était]
         7376  +    c’ est ne [serait|sera]
         7377  +        <<- /conf/ not value(<1, "|que|qu’|") -1:2>> ce                     # Confusion probable.
         7378  +
  7308   7379   TEST: {{ses}} au-dessus de ses forces.
  7309   7380   TEST: {{ces}} comme la peste
  7310   7381   TEST: car {{ses}} d’autre part
  7311   7382   TEST: {{ces}} qu’il y a tant de pertes
  7312   7383   TEST: {{ces}} jamais une bonne idée.
  7313   7384   TEST: {{c’est}} {{délires}} nous ennuient
  7314   7385   TEST: {{ses}} gens-là sont des salopards
         7386  +TEST: {{c’est}} n’est pas ça.                                               ->> ce
  7315   7387   TEST: En 2015, c’est Paris et son agglomération qui…
  7316   7388   TEST: Ses pas de danse.
  7317   7389   TEST: Avec ces quelques mots, que veux-tu dire ?
  7318   7390   TEST: Avec ces quelque 70 millions d’euros de cash disponible
  7319   7391   TEST: négocier séparément avec ces divers sous-groupes
  7320   7392   TEST: L’ensemble de ces divers points de vue émergeant de plusieurs horizons permettaient de construire un projet, riche et acceptable par toutes les parties prenantes.
  7321   7393   
................................................................................
  7869   7941   # en général
  7870   7942   __conf_en_général__
  7871   7943       en générale
  7872   7944           <<- /conf/ ->> en général                               # Dans cette locution, “général” est toujours au masculin singulier.|https://fr.wiktionary.org/wiki/en_g%C3%A9n%C3%A9ral
  7873   7945   
  7874   7946   TEST: On n’en sait {{en générale}} pas assez.
  7875   7947   
         7948  +
         7949  +# emballé, c’est pesé
         7950  +__conf_emballé_c_est_pesé__
         7951  +    >emballer [c|sais|sait] >peser
         7952  +        <<- /conf/ ->> emballé, c’est pesé      # Confusion. Locution “emballé, c’est pesé”.|https://fr.wiktionary.org/wiki/emball%C3%A9,_c%E2%80%99est_pes%C3%A9
         7953  +
         7954  +    >emballer ?,¿ c’ est >peser
         7955  +        <<- /conf/ not (value(\1, "|emballé|") and value(\-1, "|pesé|")) and morph(<1, ":C|<start>|>,")
         7956  +        ->> emballé, c’est pesé                 # Confusion. Locution “emballé, c’est pesé”.|https://fr.wiktionary.org/wiki/emball%C3%A9,_c%E2%80%99est_pes%C3%A9
         7957  +
         7958  +TEST: {{emballait c pesé}}
         7959  +TEST: {{emballer c’est peser}}
         7960  +TEST: Tu peux emballer, c’est pesé.
         7961  +TEST: il faut emballer, c’est pesé
         7962  +TEST: c’est emballé, c’est pesé.
         7963  +
  7876   7964   
  7877   7965   # évidement / évidemment
  7878   7966   __conf_évidemment_évidement__
  7879   7967       [/VCint|/VCimp]  ?[pas|plus|jamais|guère]¿  évidement
  7880   7968       [pas|plus] évidement
  7881   7969           <<- /conf/ --1>> évidemment                         # Confusion probable : l’évidement est l’action de vider quelque chose. L’adverbe s’écrit “évidemment”.|https://fr.wiktionary.org/wiki/évidemment
  7882   7970   
................................................................................
  8162   8250   
  8163   8251       hors [je|j’|tu|il|ils|on|parce|quel|quels|quelle|quelles|pourquoi|qui|que]
  8164   8252           <<- /conf/ -1>> or,
  8165   8253           # Confusion probable. Écrivez “or” pour dire “néanmoins”. La préposition “hors” sert à dire “en dehors de” ou “excepté”.|https://fr.wiktionary.org/wiki/hors
  8166   8254   
  8167   8255       >or du commun
  8168   8256       >or de ?[ma|ta|sa|notre|votre|leur]¿ [compréhension|perception|portée|vue]
         8257  +    >or de question [que|qu’]
  8169   8258           <<- not morph(<1, ":D.*:[me]") -1>> hors
  8170   8259           # Confusion probable. Si vous voulez dire “en dehors de”, écrivez “hors”.|https://fr.wiktionary.org/wiki/hors
  8171   8260   
  8172   8261   TEST: {{hors}}, nous y coryons malgré tout ce qu’on peut en dire.
  8173   8262   TEST: {{Hors}} il y a tant à faire depuis que nous sommes arrivés en ces lieux.
  8174   8263   TEST: Des femmes {{or}} du commun
  8175   8264   TEST: Hors nous, personne ne sait ce qui s’est passé là-bas.
................................................................................
  8539   8628   TEST: qui on blâme, ce soir ?
  8540   8629   
  8541   8630   
  8542   8631   __conf_on_ont__
  8543   8632       [<start>|,|$:Cs] ?l’¿ (ont) [ne|n’|me|m’|te|se|s’]
  8544   8633       [<start>|,|$:Cs] ?l’¿ (ont) [lui|nous|vous] @:[123][sp]¬:G
  8545   8634       [<start>|,|$:Cs] ?l’¿ (ont) [leur|le|la|l’] @:[123][sp]¬:(?:G|[NA].*:[si])
  8546         -    [<start>|,|$:Cs] ?l’¿ (ont) @:[123][sp]¬:[GQ]|>(?:envie|peine|affaire|hâte|force|recours|somme)/
         8635  +    [<start>|,|$:Cs] ?l’¿ (ont) @:[123][sp]¬:[GQ]|>(?:envie|charge|peine|affaire|hâte|force|recours|somme)/
  8547   8636           <<- /conf/ -1>> on                                          # Confusion probable : “ont” est une conjugaison du verbe avoir.
  8548   8637   
  8549   8638       [<start>|,|$:Cs] ?l’¿ ont t’
  8550   8639           <<- /conf/ not value(>1, "|il|ils|elle|elles|") --2>> on    # Confusion probable : “ont” est une conjugaison du verbe avoir.
  8551   8640   
  8552   8641       ~-ont$
  8553   8642           <<- /conf/ ->> =\1[:-1]                                     # Incohérence : “ont” est une forme conjuguée du verbe “avoir” (par exemple: “ils ont”). Pour le pronom personnel, écrivez “on”.
................................................................................
  8711   8800   
  8712   8801   TEST: je ne sais {{pa}}                                                     ->> pas
  8713   8802   TEST: Il ne le deviendra {{par}}.                                           ->> pas
  8714   8803   TEST: ne viens {{par}}, c’est dangereux.
  8715   8804   TEST: il ne tient par contre que grâce à nous
  8716   8805   TEST: elle ne savait par qui passer pour arriver à ses fins.
  8717   8806   
         8807  +
         8808  +# par le bout du nez
         8809  +__conf_par_le_bout_du_nez__
         8810  +    !! par le bout du nez ¡¡
         8811  +    [par|>part|pare+s] [le|l’] [bout|bous] du [né|nez]
         8812  +        <<- /conf/ ->> par le bout du nez                                   # Confusion. Locution “par le bout du nez”.
         8813  +
         8814  +TEST: se faire mener {{par le bout du né}}.
         8815  +
         8816  +
         8817  +# par les temps qui courent
         8818  +__conf_par_les_temps_qui_courent__
         8819  +    !! par les temps qui courent ¡¡
         8820  +    [par|>part|pare+s] les [>tan|tant|temps] qui [courent|court+s|>cour|coure+s|courre]
         8821  +        <<- /conf/ ->> par les temps qui courent                            # Confusion: Locution “par les temps qui courent”.
         8822  +
         8823  +TEST: {{part les tan qui court}}
         8824  +TEST: par les temps qui courent, impossible de passer inaperçu.
         8825  +
  8718   8826   
  8719   8827   # pause /pose
  8720   8828   __conf_pause_pose__
  8721   8829       >pose [gourmande|café|carrière|crédit|déjeuner|détente|dîner|pipi|repas|thé]
  8722   8830       >pose du [matin|soir]
  8723   8831       >pose de midi
  8724   8832       >pose de l’ après-midi
................................................................................
  9182   9290       quelque fois
  9183   9291           <<- /conf/ ->> quelquefois|quelques fois
  9184   9292           # Confusion. Utilisez “quelquefois” si vous voulez dire “parfois”. Utilisez “quelques fois” pour évoquer ce qui est advenu ou adviendra plusieurs fois.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4334
  9185   9293   
  9186   9294       les quelquefois [ou|où|que|qu’]
  9187   9295           <<- /conf/ -2>> quelques fois                                       # Confusion : “quelquefois” signifie “parfois”.|https://fr.wiktionary.org/wiki/quelquefois
  9188   9296   
  9189         -    >être  quelques fois  ?@:W¿  @:A  [de|d’]
         9297  +    >être  quelques fois  ?$:W¿  @:A  [de|d’]
  9190   9298           <<- /conf/ -2:3>> quelquefois                                       # Confusion possible. Si vous voulez dire “parfois”, écrivez “quelquefois”.
  9191   9299   
  9192   9300   TEST: {{Quelles que fois}}, on y comprend plus rien.
  9193   9301   TEST: {{Qu’elle que fois}}, on y comprend plus rien.
  9194   9302   TEST: Il y va {{quelque fois}} par an.
  9195   9303   TEST: les {{quelquefois}} où nous y sommes allés, nous avons été très mal reçus.
  9196   9304   TEST: c’est {{quelques fois}} vraiment difficile de savoir quoi faire.
................................................................................
  9280   9388   TEST: Quelles ont été, pour vous, les plus gros mensonges ?
  9281   9389   TEST: Quelle peut encore être l’influence de cet artiste de nos jours ?
  9282   9390   TEST: Quelle peut bien être l’influence de cet artiste de nos jours ?
  9283   9391   
  9284   9392   
  9285   9393   # quoi que / quoique
  9286   9394   __conf_quoique_quoi_que__
  9287         -    quoiqu’ il se soit ?@:W¿ passé
         9395  +    quoiqu’ il se soit ?$:W¿ passé
  9288   9396       [quoique|quoiqu’] [je|j’|tu|il|elle|on|nous|vous|ils|elles] en >penser
  9289   9397       [quoique|quoiqu’] [je|j’|tu|il|elle|on|nous|vous|ils|elles] >avoir pu faire
  9290   9398           <<- /conf/ -1>> quoi que|quoi qu’                       # Confusion probable.|https://fr.wiktionary.org/wiki/quoi_que
  9291   9399   
  9292   9400   TEST: mais {{quoique}} tu en penses, c’est comme ça que ça fonctionne.
  9293   9401   TEST: {{Quoiqu’}}il se soit passé réellement passé, je vais lui faire la peau.
  9294   9402   TEST: {{quoique}} vous ayez pu faire, ça a donné les résultats escomptés.
................................................................................
  9538   9646   TEST: Ces chiens me {{son}} odieux.
  9539   9647   TEST: ces gens qui {{son}}, dans le meilleur des cas, des imbéciles ne peuvent nous aider.
  9540   9648   TEST: {{sont}} {{pain}}
  9541   9649   TEST: en {{sont}} {{absence}}
  9542   9650   TEST: qui {{son}} ces gens ?
  9543   9651   TEST: chez {{sont}} amis
  9544   9652   TEST: il a perdu {{sont}} {{ami}}
  9545         -TEST: ces gens {{son}} ceux qui nous mettent constamment dans la merde
         9653  +TEST: ces gens {{son}} ceux qui nous mettent constamment dans la merde          ->> sont
         9654  +TEST: à {{sont}} précis de mathématiques                                        ->> son
  9546   9655   TEST: elles s’en sont mal portées
  9547   9656   TEST: ils en sont reconnaissants
  9548   9657   TEST: sont loin, ces gens…
  9549   9658   TEST: Il ne sait pas vraiment ce que sont la peur et la souffrance.
  9550   9659   TEST: avec le mur du son ceux qui l’entendent.
  9551   9660   TEST: Que sont nos valeurs profondes ?
  9552   9661   TEST: comment sont la petite et son frère ?
................................................................................
  9628   9737   __conf_tant_temps_tan_1__
  9629   9738       en [tant|>tan] [de|d’] [guerre|paix|crise|doute|pluie]
  9630   9739           <<- /conf/ -2>> temps                               # Confusion. Écrivez « en temps de » si vous évoquez une période de temps.
  9631   9740   
  9632   9741       de [tant|>tan] en [tant|>tan]
  9633   9742           <<- /conf/ ->> de temps en temps                    # Confusion. Écrivez « de temps en temps ».
  9634   9743   
         9744  +    depuis la [nui|nuit] des [>tan|tant]
         9745  +        <<- /conf/ --1>> temps                              # Confusion. Locution “depuis la nuit des temps”.|
         9746  +
  9635   9747       [après|avec] [temps|>tan] [de|d’]
  9636   9748           <<- /conf/ -2>> tant                                # Confusion. Écrivez “tant” pour évoquer une quantité de quelque chose.|http://fr.wiktionary.org/wiki/tant
  9637   9749   
  9638   9750       [à|a] [>tan|tant] [partiel|partiels|plein|pleins]
  9639   9751           <<- /conf/ -2>> temps                               # Confusion. Pour ce qui est temporel, écrivez “temps”.
  9640   9752   
  9641   9753       en [même|mêmes] [tant|>tan]
................................................................................
  9649   9761   
  9650   9762   TEST: en {{tant}} de guerre, il faut savoir faire face et ne pas faiblir face à l’adversité.
  9651   9763   TEST: ils vont {{de tan en tan}} au restaurant
  9652   9764   TEST: après {{temps}} de souffrance, il faut savoir lâcher prise.
  9653   9765   TEST: il travaille à {{tant}} partiel
  9654   9766   TEST: {{en même tant}}, on s’en moque, de toutes ces histoires ennuyeuses.
  9655   9767   TEST: en {{tan}} que telle, cette méthode n’est pas parfaite, mais avec de l’intuition
         9768  +TEST: depuis la nuit des {{tans}}
  9656   9769   TEST: ce sera fait en {{tant}} et en heure
  9657   9770   TEST: ce qui a commencé en 2011 en tant d’endroits du pourtour méditerranéen
  9658   9771   TEST: elle est allée en tant de lieux qu’il est difficile de suivre son trajet.
  9659   9772   
  9660   9773   
  9661   9774   # teint / tain / thym
  9662   9775   __conf_tain_teint_thym__
................................................................................
  9665   9778   
  9666   9779       >fond de [>tain|teints|>thym]
  9667   9780           <<- /conf/ -3>> teint                                       # Confusion.|https://fr.wiktionary.org/wiki/fond_de_teint
  9668   9781   
  9669   9782   TEST: Elle l’a observé par un miroir sans {{teint}}.
  9670   9783   TEST: Elle a acheté un nouveau fond de {{tain}}.
  9671   9784   
         9785  +
         9786  +__conf_taule_tôle1__
         9787  +    [>taule] [de|d’|en] [>acier|>alu|>aluminium|>bardage|>cuivre|>étanchéité|>fer|>festonnage|inox|>laiton|>métal|>trapèze|>zinc|>éverite|>fibrociment|>fibro-ciment|>plastique|>polycarbonate|PVC]
         9788  +        <<- /conf/ -1>> =\1.replace("au", "ô").replace("AU", "Ô")   # Confusion. La taule est la forme argotique pour évoquer la prison, le bordel ou toute forme d’habitation.
         9789  +
         9790  +TEST: une {{taule}} en acier
         9791  +
  9672   9792   
  9673   9793   # tête / tète
  9674   9794   __conf_tête_tète!6__
  9675   9795       [tète|tètes] [baissée|baissées|baissé|baissés]
  9676   9796       [tète|tètes] [haute|hautes|basse|basses]
  9677   9797       [tète|tètes] de [mule|linotte]
  9678   9798           <<- /conf/ -1>> =\1.replace("è", "ê").replace("È", "Ê")     # Confusion : “tète” est une forme conjuguée de “téter”. Pour la partie supérieure d’un corps, écrivez “tête”.
................................................................................
 10781  10901   
 10782  10902   __purge_locutions__
 10783  10903       , [oui|non] ,
 10784  10904       , entre autres ?choses¿ ,
 10785  10905       à *NUM  %
 10786  10906       à ?seulement¿ [*NUM|$:B|quelques|plusieurs] [millimètres|centimètres|décamètres|mètres|kilomètres|verstes|lieues|UA|parsecs|années-lumière] de distance
 10787  10907       à [autrui|bâbord|califourchon|chacun|confesse|contrecœur|contre-cœur|contretemps|>demi-mot|foison|grand-peine|jamais|gogo|loisir|merveille|moitié|nouveau|outrance|peine|perpétuité|présent|raison|rallonge|rebrousse-poil|reculons|regret|renverse|risque|sec|tâtons|tire-d’aile|tire-larigot|tort|tribord|tout-va|vif]
        10908  +    à [mi-chemin|mi-mandat|mi-mot+s|mi-parcours|mi-temps|mi-voix]
 10788  10909       à air comprimé
 10789  10910       à angle droit
 10790  10911       à armes égales
 10791  10912       à aucun prix
 10792  10913       à autre chose
 10793  10914       à bas [cout|coût|prix]
 10794  10915       à bâtons rompus
................................................................................
 10885  11006       à l’ ordre du jour
 10886  11007       à l’ un d’ entre eux
 10887  11008       à l’ unanimité
 10888  11009       à l’ unisson
 10889  11010       à l’ une d’ entre elles
 10890  11011       à l’ échelle [nationale|mondiale|régionale|départementale|cantonale|locale|galactique|universelle]
 10891  11012       à l’ étouffée
        11013  +    à l’ exclusion de toute autre chose
 10892  11014       à l’ évidence
 10893  11015       à l’ œil nu
 10894  11016       à l’ [un|une] des leurs
 10895  11017       à la [bourre|con|coule|dérobée|diable|fois|leur|manque|mords-moi-le-nœud|papa|ramasse|renverse|redresse|rescousse|sauvette|volée]
 10896  11018       à la bonne franquette
 10897  11019       à la limite du supportable
 10898  11020       à la lumière de tout [ceci|cela|ça]
................................................................................
 10931  11053       à [ma|ta|sa|notre|votre|leur] juste mesure
 10932  11054       à [mon|ton|son|notre|votre|leur] [avis|détriment|encontre|égard|insu|sujet|tour]
 10933  11055       à [mon|ton|son|notre|votre|leur] [cœur|corps] défendant
 10934  11056       à [mon|ton|son|notre|votre|leur] grand [désarroi|soulagement]
 10935  11057       à n’ en [pas|point] douter
 10936  11058       à n’ en plus finir
 10937  11059       à n’ importe quel prix
 10938         -    à parler franc
        11060  +    à n’ importe quelle heure du jour et de la nuit
        11061  +    à parler [franc|franchement|strictement]
 10939  11062       à part [entière|ça|cela|ceci]
 10940  11063       à parts égales
 10941  11064       à partir [de|d’]  {pronom_obj}
 10942  11065       à partir [de|d’]  [aujourd’hui|ici|là|maintenant|rien]
 10943  11066       à partir [de|d’]  [demain|hier]  ?[matin|midi|soir]¿
 10944  11067       à pas de [géant|loup|tortue|velours]
 10945  11068       à personne en danger
................................................................................
 10974  11097       à ras de terre
 10975  11098       à ras [bord|bords]
 10976  11099       à ras [le|du] sol
 10977  11100       à rude épreuve
 10978  11101       à s’ y méprendre
 10979  11102       à somme nulle
 10980  11103       à spectre ?[très|si]¿ large
        11104  +    à strictement parler
 10981  11105       à tarif réduit
 10982  11106       à tarifs réduits
 10983  11107       à tel point
 10984  11108       à temps  [plein|partiel|complet]
 10985  11109       à tête reposée
 10986  11110       à tire d’ [aile|ailes]
 10987  11111       à [tire-d’aile|tire-d’ailes]
................................................................................
 11111  11235       avant toute chose
 11112  11236       avant toutes choses
 11113  11237       avant d’ aller plus loin
 11114  11238       avant J.-C.
 11115  11239       avant Jésus-Christ
 11116  11240       avant d’ en arriver là
 11117  11241       avant de faire quoi que ce soit
 11118         -    avant de faire quoi que ce soit [de|d’] ?@:W¿ [absurde|stupide|crétin|con|idiot|inconsidéré]
        11242  +    avant de faire quoi que ce soit [de|d’] ?$:W¿ [absurde|stupide|crétin|con|idiot|inconsidéré]
 11119  11243       avant qu’ il ne soit trop tard
 11120  11244       avant un bon bout de temps
 11121  11245       avec [brio|constance|joie|légèreté|insistance|peine]
 11122  11246       avec autre chose
 11123  11247       avec le plus grand soin
 11124  11248       avec pertes et fracas
 11125  11249       avec un peu de chance
................................................................................
 11140  11264       bon gré ?,¿ mal gré
 11141  11265       bras dessus ?,¿ bras dessous
 11142  11266       çà et là
 11143  11267       ce faisant
 11144  11268       cependant
 11145  11269       [cela|ça|ceci] mis à part
 11146  11270       [cela|ça|ceci] va sans dire
        11271  +    [cela|ceci] étant dit
 11147  11272       certes
 11148  11273       ces derniers temps
 11149  11274       cette [fois|fois-là|fois-ci]
 11150  11275       chaque fois
 11151  11276       ci-dessous
 11152  11277       ci-dessus
        11278  +    chose promise ?,¿ chose due
 11153  11279       comme avant
 11154  11280       comme autrefois
 11155  11281       comme d’ habitude
 11156  11282       comme toujours
 11157  11283       comme de juste
 11158  11284       comme bon [me|te|lui|leur|nous|vous] semble
 11159  11285       comme au bon vieux temps
 11160  11286       comme cul et chemise
 11161         -    comme [frappé|frappée|frappés|frappées] par la foudre
        11287  +    comme [frappé+ses] par la foudre
 11162  11288       comme n’ importe où ?ailleurs¿
 11163  11289       comme par [enchantement|magie]
 11164  11290       comme par un fait exprès
 11165  11291       comme pas deux
 11166  11292       comme peau de chagrin
 11167  11293       comme promis
 11168  11294       comme qui dirait
................................................................................
 11185  11311       dans la mesure du possible
 11186  11312       dans leur globalité
 11187  11313       dans leur grande majorité
 11188  11314       dans les années ~^\d{2,5}$
 11189  11315       dans les [secondes|minutes|heures|jours|semaines|mois|trimestres|semestres|années|décennies|siècles|millénaires] à venir
 11190  11316       dans peu de temps
 11191  11317       dans tout [cela|ça|ceci]
        11318  +    dans [ma|ta|sa|notre|votre|leur] prime jeunesse
 11192  11319       dans très peu de temps
 11193  11320       dans un cas comme dans l’autre
 11194  11321       dans une [certaine|large|moindre] mesure
 11195  11322       début {mois} ~^\d{2,5}$
 11196  11323       au début {mois} ~^\d{2,5}$
 11197  11324       en ce début {mois} ~^\d{2,5}$
 11198  11325       d’ abord
................................................................................
 11380  11507       désormais
 11381  11508       depuis $:B [ans|années|mois|semaines|jours|heures|minutes|secondes]
 11382  11509       depuis *NUM [ans|années|mois|semaines|jours|heures|minutes|secondes]
 11383  11510       depuis belle lurette
 11384  11511       depuis bien longtemps
 11385  11512       depuis [de|d’] ?[assez|très]¿ longues années
 11386  11513       depuis des lustres
        11514  +    depuis la nuit des temps
 11387  11515       depuis la [première|dernière|~ième$] fois
 11388  11516       depuis les années ~^\d{2,5}$
 11389  11517       depuis ?[assez|très]¿ longtemps
 11390  11518       depuis lors
 11391  11519       depuis ?[assez|très]¿ peu de temps
 11392  11520       depuis quelque temps
 11393  11521       depuis quelques [secondes|minutes|heures|jours|semaines|mois|trimestres|semestres|années|décennies|siècles|millénaires]
................................................................................
 11400  11528       des [années|mois|siècles|millénaires|décennies|semaines] plus [tôt|tard]
 11401  11529       dès [longtemps|maintenant|lors|aujourd’hui]
 11402  11530       dès à présent
 11403  11531       dès que possible
 11404  11532       dès [demain|hier] ?[soir|matin|après-midi]¿
 11405  11533       Dieu [m’|t’|l’|nous|vous|les] en [garde|préserve]
 11406  11534       Dieu [m’|t’|lui|nous|vous|leur] en soit témoin
        11535  +    Dieu seul le sait
 11407  11536       du ~^[xXvViI]+[eᵉ]$ siècle
 11408  11537       du [Ier|Iᵉʳ|1er|1ᵉʳ] siècle
 11409  11538       du bout des lèvres
 11410  11539       du début à la fin
 11411  11540       du fond du cœur
 11412  11541       du jour au lendemain
 11413  11542       du haut en bas
................................................................................
 11490  11619       en ?[assez|très]¿ peu [de|d’] temps
 11491  11620       en ?[assez|très]¿ [piteux|piètre] état
 11492  11621       en point [de|d’] [mire|orgue]
 11493  11622       en porte-à-faux
 11494  11623       en position [de|d’] [force|faiblesse]
 11495  11624       en premier lieu
 11496  11625       en première [instance|ligne]
        11626  +    en [première|seconde|~ième$] position
 11497  11627       en pure perte
 11498  11628       en quantité suffisante
 11499  11629       en quantité plus que suffisante
 11500  11630       en quelque sorte
 11501  11631       en queue [de|d’] peloton
 11502  11632       en rangs [dispersés|serrés]
 11503  11633       en rase campagne
................................................................................
 11523  11653       en tout bien tout honneur
 11524  11654       en tout [cas|genre|lieu|sens|temps]
 11525  11655       en tout et pour tout
 11526  11656       en tout état [de|d’] cause
 11527  11657       en tout premier lieu
 11528  11658       en toute bonne foi
 11529  11659       en toute connaissance [de|d’] cause
 11530         -    en toute [circonstance|confiance|discrétion|franchise|hâte|impartialité|impunité|innocence|légalité|liberté|logique|sécurité|simplicité]
        11660  +    en toute [circonstance|confiance|discrétion|franchise|hâte|impartialité|impunité|innocence|légalité|liberté|logique|modestie|sécurité|simplicité]
 11531  11661       en toutes circonstances
 11532  11662       en travers de la gorge
 11533  11663       en un claquement de doigts
 11534  11664       en un clin d’ œil
 11535  11665       en un rien [de|d’] temps
 11536  11666       en une autre occasion
 11537  11667       en vase clos
        11668  +    en vigueur
 11538  11669       en vitesse ?[subsonique|supersonique|subluminique|superluminique]¿
 11539  11670       en voie [de|d’] développement
 11540  11671       en y réfléchissant bien
 11541  11672       en [janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre] dernier
 11542  11673       en [mon|ton|son|leur|notre|votre] âme et conscience
 11543  11674       en [mon|ton|son|leur|notre|votre] for intérieur
 11544  11675       en [mon|ton|son|leur|notre|votre] nom propre
................................................................................
 11572  11703       hors d’ état [de|d’] [fonctionner|nuire]
 11573  11704       hors du commun
 11574  11705       ?d’¿ ici
 11575  11706       ?d’¿ ici [comme|ou] ailleurs
 11576  11707       ?d’¿ ici et [là|maintenant]
 11577  11708       ?d’¿ ici même
 11578  11709       ?d’¿ ici-bas
        11710  +    ?d’¿ il y a belle lurette
 11579  11711       ?d’¿ il y a ?très¿ longtemps
 11580  11712       ?d’¿ il y a ?très¿ peu [de|d’] temps
 11581  11713       ?d’¿ il y a quelques [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
 11582  11714       ?d’¿ il y a moins [de|d’] [*NUM|$:B] [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
 11583  11715       ?d’¿ il y a [*NUM|$:B] [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
 11584  11716       ?d’¿ il y a quelque temps
 11585  11717       ?d’¿ il n’y a pas ?si¿ longtemps
................................................................................
 11677  11809       par [à-coups|ailleurs|avance|chance|conséquent|curiosité|contre|défaut|définition|endroits|essence|excellence|exemple|hasard|ici|inadvertance|là|moments|nature|principe|terre]
 11678  11810       par acquit [de|d’] conscience
 11679  11811       par [beau|mauvais] temps
 11680  11812       par bien des [aspects|côtés]
 11681  11813       par bonté [de|d’] [âme|cœur]
 11682  11814       par ce biais
 11683  11815       par certains [aspects|côtés]
        11816  +    par grand froid
 11684  11817       par gros temps
 11685  11818       par la même occasion
 11686  11819       par la suite
 11687  11820       par le passé
 11688  11821       par les temps qui courent
 11689  11822       par monts et par vaux
 11690  11823       par temps [de|d’] pluie
................................................................................
 11792  11925       sans autre forme [de|d’] procès
 11793  11926       sans commune mesure
 11794  11927       sans coup férir
 11795  11928       sans crier gare
 11796  11929       sans difficulté ?[apparente|aucune|financière|majeure|particulière]¿
 11797  11930       sans dire mot
 11798  11931       sans en avoir conscience
        11932  +    sans états d’ âme
 11799  11933       sans [m’|t’|s’|nous|vous] en apercevoir
 11800  11934       sans [m’|t’|s’|nous|vous] en rendre compte
 11801  11935       sans [m’|t’|s’|nous|vous] faire [avoir|comprendre|désirer|prier|remarquer]
 11802  11936       sans faire [de|d’] vagues
 11803  11937       sans foi ?,¿ ni loi
 11804  11938       sans le faire exprès
 11805  11939       sans le vouloir
................................................................................
 11806  11940       sans l’ aide [de|d’] personne
 11807  11941       sans l’ ombre d’ un doute
 11808  11942       sans mot dire
 11809  11943       sans nul doute
 11810  11944       sans pour autant y [parvenir|réussir|réfléchir|songer|penser]
 11811  11945       sans pour autant y faire attention
 11812  11946       sans pour autant y prendre [garde|goût|gout]
        11947  +    sans [me|te|lui|nous|vous|leur|y] prêter attention
 11813  11948       sans [que|qu’] je le [sache|susse]
 11814  11949       sans [que|qu’] tu le [saches|susses]
 11815  11950       sans [que|qu’] [il|elle|on|$:M] le [sache|sût]
 11816  11951       sans [que|qu’] nous le [sachions|sussions]
 11817  11952       sans [que|qu’] vous le [sachiez|sussiez]
 11818  11953       sans [que|qu’] [ils|elles] le [sachent|sussent]
 11819  11954       sans queue ni tête
 11820  11955       sans raison apparente
 11821  11956       sans répit
        11957  +    sans tarder
 11822  11958       sans vouloir [me|m’|te|t’|lui|nous|vous|leur] manquer de respect
 11823  11959       sans y [parvenir|réussir|réfléchir|songer|penser]
 11824  11960       sans y [réfléchir|songer|penser] à [deux|2] fois
 11825  11961       sans y faire attention
 11826  11962       sans y prendre [garde|goût|gout|ombrage]
 11827         -    sans états d’ âme
 11828  11963       sauf >erreur [de|d’] [ma|ta|sa|notre|votre|leur] part
 11829  11964       secondo
 11830  11965       selon toute vraisemblance
 11831  11966       sens dessus dessous
 11832  11967       >seule à >seule
        11968  +    s’ il le [faut|fallait|faudra|faudrait]
 11833  11969       si [bas|haut|longtemps|nécessaire|possible|soudain]
 11834  11970       si [cela|ça|ceci] ne tenait qu’ à [moi|toi|lui|eux|elle|elles|nous|vous]
 11835  11971       si besoin est
 11836  11972       si le besoin s’en [fait|faisait] sentir
 11837  11973       si le besoin [doit|devait] s’en faire sentir
 11838  11974       si tel est le cas
 11839  11975       sine die
................................................................................
 11911  12047       une fois [de|d’] plus
 11912  12048       une fois n’ est pas coutume
 11913  12049       une fois pour toutes
 11914  12050       urbi et orbi
 11915  12051       vaille que vaille
 11916  12052       ventre à terre
 11917  12053       vers nulle part
 11918         -    vite
 11919  12054       vite fait ?,¿ bien fait
        12055  +    [voici|voilà] belle lurette
 11920  12056       volontiers
 11921  12057           <<- ~>> *
 11922  12058   
 11923  12059   
 11924  12060   __purge_x_par_après_x__
 11925  12061       un par un
 11926  12062       une par une
................................................................................
 11986  12122       à la [hauteur|portée|suite]                                                                                                                 [de|du|d’|des]
 11987  12123       à la grande surprise                                                                                                                        [de|du|d’|des]
 11988  12124       à [quelques|plusieurs] [mètres|kilomètres|lieues|pas|minutes|heures]                                                                        [de|du|d’|des]
 11989  12125       à [quelques|plusieurs] [dizaines|centaines|milliers] de [mètres|kilomètres]                                                                 [de|du|d’|des]
 11990  12126       à [base|force|raison]                                                                                                                       [de|d’]
 11991  12127       à grand renfort                                                                                                                             [de|d’]
 11992  12128       à grands coups                                                                                                                              [de|d’]
 11993         -    à seule fin                                                                                                                                 [de|d’]
 11994  12129       au [bout|courant|cours|détriment|fond|gré|lieu|long|large|milieu|nord|profit|ras|sein|sommet|sortir|sud|sujet|vu]                           [de|du|d’|des]
 11995  12130       au beau milieu                                                                                                                              [de|du|d’|des]
 11996  12131       au fin fond                                                                                                                                 [de|du|d’|des]
 11997  12132       au grand dam                                                                                                                                [de|du|d’|des]
 11998  12133       au plus profond                                                                                                                             [de|du|d’|des]
 11999  12134       au fur et à mesure                                                                                                                          [de|du|d’|des]
 12000  12135       au vu et au su                                                                                                                              [de|du|d’|des]
................................................................................
 12082  12217   
 12083  12218       jamais
 12084  12219           <<- not morph(<1, ">ne") ~>> *
 12085  12220   
 12086  12221       la une [de|des|du]
 12087  12222           <<- ~2>> _
 12088  12223   
 12089         -    l’ impression que
        12224  +    l’ impression [que|qu’]
 12090  12225           <<- ~1>> _
 12091  12226   
 12092         -    l’ étrange impression que
 12093         -    la [nette|bizarre] impression que
        12227  +    l’ étrange impression [que|qu’]
        12228  +    la [nette|bizarre] impression [que|qu’]
 12094  12229           <<- ~2:3>> _
 12095  12230   
 12096  12231       le pour et le contre
 12097  12232           <<- ~>> ␣
 12098  12233           <<- =>> define(\1, [":LN:m:p"])
 12099  12234   
 12100  12235       le [pressentiment|sentiment] [que|qu’]
................................................................................
 12110  12245           <<- ~2:0>> *
 12111  12246   
 12112  12247       pour ou contre
 12113  12248           <<- ~2:0>> *
 12114  12249   
 12115  12250       qui ce      [jour-là|matin-là|après-midi-là|soir-là|mois-là|siècle-là|millénaire-là]
 12116  12251       qui cette   [nanoseconde-là|milliseconde-là|seconde-là|minute-là|heure-là|nuit-là|matinée-là|soirée-là|journée-là|semaine-là|année-là|décennie-là]
 12117         -    qui à part [moi|toi|lui|elle|nous|vous|eux|elles
        12252  +    qui à part  [moi|toi|lui|elle|nous|vous|eux|elles]
 12118  12253       qui d’ autre à part [moi|toi|lui|elle|nous|vous|eux|elles]
 12119  12254           <<- ~2:0>> *
 12120  12255   
 12121  12256       plus avant ~¬^(?:de|d’|que|qu’)$
 12122  12257           <<- ~1:2>> *
 12123  12258   
 12124  12259       rien comparé à
................................................................................
 12132  12267   
 12133  12268       une fois
 12134  12269           <<- ~>> _
 12135  12270   
 12136  12271       vent debout contre
 12137  12272           <<- ~1:2>> *
 12138  12273   
 12139         -    je      [t’|vous]   en  [prie|supplie]
 12140         -    nous    [t’|vous]   en  [prions|supplions]
        12274  +    je      [t’|vous]   en  [prie|supplie]  <end>
        12275  +    nous    [t’|vous]   en  [prions|supplions]  <end>
 12141  12276           <<- ~>> *
        12277  +
        12278  +    ,  je      [t’|vous]   en  [prie|supplie]  ,
        12279  +    ,  nous    [t’|vous]   en  [prions|supplions]  ,
        12280  +        <<- not morph(>1, ":E") ~>> *
 12142  12281   
 12143  12282   
 12144  12283   # Déterminant + nombre
 12145  12284   __p_dét_plur_nombre_nom__
 12146  12285       [les|des|mes|tes|ses|nos|vos|leurs]  ~^\d+$  @:[NA].*:[pi]¬:(?:V0|3p|Oo|X)|>(?:janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)
 12147  12286           <<- ~2>> *
 12148  12287   
................................................................................
 12209  12348   
 12210  12349       au  moins  @¬:[AQ].*:[me]:[si]
 12211  12350           <<- ~1:2>> *
 12212  12351   
 12213  12352       au hasard  @:¬:[AQ].*:[me]:[si]
 12214  12353           <<- ~1:2>> *
 12215  12354   
 12216         -    aussi @:W que [nécessaire|possible]
        12355  +    aussi $:W que [nécessaire|possible]
 12217  12356           <<- ~>> *
 12218  12357   
 12219         -    aussi @:W que ce soit [<end>|,]
        12358  +    aussi $:W que ce soit [<end>|,]
 12220  12359           <<- ~1:5>> *
 12221  12360   
 12222  12361       au sens le [plus|moins] @:A.*:[me]:[si] du terme
 12223  12362       au sens @:A.*:[me]:[si] du terme
 12224  12363           <<- ~>> *
 12225  12364   
 12226  12365       ailleurs que chez [moi|toi|soi|lui|elle|nous|vous|eux|elles]
................................................................................
 12287  12426   
 12288  12427       hélas
 12289  12428           <<- not morph(<1, ":(?:X|Oo)") and not tag_before(\1, "2s") ~>> *
 12290  12429   
 12291  12430       la lettre [a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z]  @:(?:3s|Ov)
 12292  12431           <<- ~3>> *
 12293  12432   
 12294         -    le [plus|moins] @:W possible
        12433  +    le [plus|moins] $:W possible
 12295  12434           <<- ~>> *
 12296  12435   
 12297  12436       les [moins|plus] @:A.*:[pi] possible
 12298  12437           <<- ~-1>> *
 12299  12438   
 12300  12439       mais
 12301  12440           <<- not morph(<1, ":(?:D.*:p|N|V)") ~>> *
................................................................................
 12305  12444   
 12306  12445       nombre [de|des]
 12307  12446           <<- morph(<1, ":(?:R|C[sc])") ~1>> *
 12308  12447   
 12309  12448       non @:A
 12310  12449           <<- not morph(<1, ":D.*:m:[si]") ~1>> *
 12311  12450   
 12312         -    par trop @:A
        12451  +    par trop $:A
 12313  12452           <<- ~1:2>> *
 12314  12453   
 12315  12454       pas mal
 12316  12455           <<- not morph(<1, ":D") ~>> *
 12317  12456   
 12318  12457       pas assez *WORD
 12319  12458           <<- morph(\3, ":[AW]") and not morph(<1, ":D") ~>> *
................................................................................
 12320  12459   
 12321  12460       pêle-mêle
 12322  12461           <<- not morph(<1, ":D.*:[me]") ~>> *
 12323  12462   
 12324  12463       plein est
 12325  12464           <<- not morph(<1, ":D.*:m:[si]") ~>> *
 12326  12465   
 12327         -    [plus|moins|aussi] @:W que prévu
        12466  +    [plus|moins|aussi] $:W que prévu
 12328  12467           <<- ~>> *
 12329  12468   
 12330  12469       plus que tout autre @¬:[AQ].*:m:[si]
 12331  12470           <<- ~1:4>> *
 12332  12471   
 12333  12472       [plus|moins|aussi]  @:[AW]¬:G   que [les|nous|vous] autres
 12334  12473       [plus|moins|aussi]  @:[AW]¬:G   que l’ autre
................................................................................
 12389  12528   #<end>
 12390  12529   #@:[VR]¬[NAP]
 12391  12530   #, @¬:[NA]
 12392  12531   #[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|ça|ceci|cela|c’|ç’|chaque]
 12393  12532   
 12394  12533   
 12395  12534   __simplication_substantifs__
        12535  +    >accusé de reception
 12396  12536       >acte [de|d’] [baptême|caution|cautionnement|cession|contrition|licitation|mariage|naissance|notoriété|propriété|quittance|reconnaissance|répudiation|vente]
 12397  12537       >acte d’ [achat|engagement]
 12398  12538       >acte de gestion ?courante¿
 12399  12539       >acte de procédure ?pénale¿
 12400  12540       >acte d’ état ?civil¿
 12401  12541       >administratrice >système
 12402  12542       >agence de >voyage
 12403  12543       >aire d’ atterrissage
 12404  12544       >animal [de|d’] compagnie
 12405  12545       >appel au secours
        12546  +    >appel à l’ aide
 12406  12547       >arc à poulies
 12407  12548       >arme à feu
 12408  12549       >armée [de|d’] l’ air
 12409  12550       >armée [de|d’] terre
 12410  12551       >armer jusqu’ aux dents
 12411  12552       >arme [de|d’] [poing|guerre]
 12412  12553       >arme [de|d’] destruction massive
 12413  12554       >armoire à [>glace|>pharmacie]
 12414  12555       >argent [de|d’] poche
 12415  12556       >arnaque à l’ assurance
 12416  12557       >article [de|d’] presse
        12558  +    >assignation à résidence
 12417  12559       >attaque à main armée
 12418  12560       >attestation sur l’ honneur
 12419  12561       >atteinte aux bonnes mœurs
 12420  12562       >attendre [de|d’] pied ferme
 12421  12563       >avion à [>hélice|réaction]
 12422  12564       ayants droit
 12423  12565       >bandit [de|d’] grand chemin
................................................................................
 12440  12582       >boucle d’ >oreille
 12441  12583       bras d’ honneur
 12442  12584       >brave ?d’¿ entre les braves
 12443  12585       >brosse à [>dent|reluire]
 12444  12586       >cabinet [de|d’] [toilette|travail]
 12445  12587       >camp [de|d’] [concentration|internement|rééducation|vacances]
 12446  12588       >canne à [pêche|sucre]
        12589  +    >canon à eau
 12447  12590       >caisse à >outil
 12448  12591       >carton d’ emballage
 12449  12592       >centre d’ éducation [populaire|surveillée]
 12450  12593       >chair à [pâté|>canon]
 12451  12594       >chair [de|d’] poule
 12452  12595       >chambre à coucher
 12453  12596       >chambre [de|d’] [agriculture|hôte|hôtel|hôtes|commerce|compensation|décompression|dégrisement]
................................................................................
 12462  12605       >chili con carne
 12463  12606       >chou à la crème ?[fouettée|diplomate|mousseline|patissière|pralinée]¿
 12464  12607       >claire comme [de|d’] l’ eau [de|d’] [boudin|roche|source]
 12465  12608       >claire comme du cristal
 12466  12609       >claire comme jus [de|d’] [boudin|>chaussette|chique]
 12467  12610       [>clé|>clef] à molette
 12468  12611       >clin d’ œil
        12612  +    >clause de confidentialité
 12469  12613       >code [de|d’] bonne conduite
 12470  12614       >commise d’ office
 12471  12615       >compagne [de|d’] route
 12472  12616       >compagnon [de|d’] route
 12473  12617       >complémentaire santé
 12474  12618       >compte à rebours
        12619  +    concours de beauté
 12475  12620       >condamnée à mort
 12476  12621       >conférence [de|d’] presse
 12477  12622       >convention [récepteur|générateur]
 12478  12623       >conne comme la lune
 12479  12624       >conne comme un balai
 12480  12625       >conne comme une valise sans >poignée
 12481  12626       >contrôle [de|d’] routine
................................................................................
 12488  12633       [cousu+ses] [main]
 12489  12634       [cousu+ses] [de|d’] fil blanc
 12490  12635       >crayon à [lèvres|sourcils]
 12491  12636       >cour d’ assises
 12492  12637       [>coût|>cout] [de|d’] revient
 12493  12638       >couteau à cran d’ arrêt
 12494  12639       >cuillère à [café|soupe]
        12640  +    >cure de [désintoxication|désintox]
 12495  12641       >déclaration sur l’ honneur
 12496  12642       >délai [de|d’] [attente|carence|connexion|prescription|préavis|rétraction|rigueur]
 12497  12643       >demande d’ asile
 12498  12644       >descente aux [enfers|flambeaux]
 12499  12645       [>dîner|>diner] aux chandelles
 12500  12646       >digne [de|d’] [confiance|foi]
 12501  12647       >digne [de|d’] ce nom
................................................................................
 12534  12680       >file d’ attente
 12535  12681       >fille à [papa|maman|>soldat]
 12536  12682       >fille au pair
 12537  12683       fils à [papa|maman]
 12538  12684       fils [de|d’] pute
 12539  12685       >flocon [de|d’] neige ?électronique¿
 12540  12686       >folle à lier
        12687  +    >fontaine à eau
 12541  12688       >fosse à >ordure
 12542  12689       >fosse aux lions
 12543  12690       [>fourgon|>fourgonette] de location
 12544  12691       >frayeur [de|d’] tous les diables
 12545  12692       >frousse [de|d’] tous les diables
 12546  12693       >fusil à pompe
 12547  12694       >gilet de sauvetage
 12548  12695       >hall d’ entrée
 12549  12696       >haute comme [trois|3] pommes
        12697  +    >heure sup
 12550  12698       >histoire avec un [grand|petit] h
 12551  12699       >homme [de|d’] [affaires|armes|confiance|exception|État|Église|honneur|lettres|loi|main|paille]
 12552  12700       >homme d’ âge mûr
 12553  12701       >homme à tout faire
 12554  12702       >hôtel [de|d’] ville
 12555  12703       >hôtesse d’ accueil
 12556  12704       >garde à vue
................................................................................
 12568  12716       >lettre [de|d’] recommandation
 12569  12717       >lampe à [huile|pétrole]
 12570  12718       >lampe [de|d’] chevet
 12571  12719       >lavage de cerveau
 12572  12720       >liaison sans lendemain
 12573  12721       >lime à >ongle
 12574  12722       >liste d’ attente
        12723  +    >lit à baldaquin
 12575  12724       >lit [de|d’] camp
 12576  12725       >livraison à domicile
 12577  12726       >livre [de|d’] poche
        12727  +    >livret d’ épargne ?[bancaire|populaire|salariale]¿
        12728  +    >longueur d’ avance
 12578  12729       >lune [de|d’] miel
 12579  12730       >machine à [café|coudre|écrire|laver|sous|voter]
 12580  12731       >machine à remonter le temps
 12581  12732       >machine [de|d’] guerre
 12582  12733       >maillot [de|d’] bain
 12583  12734       >main d’ œuvre
 12584  12735       >maison [de|d’] [passe|retraite]
................................................................................
 12592  12743       >matière à réflexion
 12593  12744       >médecin [de|d’] garde
 12594  12745       >mère au foyer
 12595  12746       >metteuse en scène
 12596  12747       >mineure [de|d’] moins [de|d’] *NUM ans
 12597  12748       >mineure [de|d’] moins [de|d’] $:B ans
 12598  12749       >miroir aux alouettes
 12599         -    >mode [de|d’] [paiement|scrutin|vie]
        12750  +    >mode [de|d’] [emploi|paiement|scrutin|vie]
 12600  12751       >monnaie [de|d’] [échange|réserve|singe]
 12601  12752       >montre à gousset
 12602  12753       >mot [de|d’] passe
 12603  12754       >motrice [>essence|>diésel|>diesel]
 12604  12755       >motion [de|d’] [blâme|censure|défiance]
 12605  12756       >moule à [>gaufre|>gâteau|brioche|manqué|savarin|charlotte|tarte]
 12606  12757       >moulin à [café|eau|paroles|poivre|prières|vent]
................................................................................
 12631  12782       >planche [de|d’] salut
 12632  12783       >planche à repasser
 12633  12784       >pleine aux as
 12634  12785       >police [de|d’] [caractères|écriture]
 12635  12786       >politique spectacle
 12636  12787       >pomme [de|d’] [discorde|terre|reinette|pin|Adam|api|amour|ambre|eau|or]
 12637  12788       >pompe à [chaleur|essence|fric]
 12638         -    >porte [de|d’] [service|garage|sortie]
        12789  +    >porte [de|d’] [entrée|service|garage|sortie]
 12639  12790       >porte d’ entrée
 12640  12791       >pot [de|d’] [chambre|colle]
 12641  12792       >poudre aux yeux
 12642  12793       >presse à >scandale
 12643  12794       preuve ?suffisante¿ du contraire
 12644  12795       preuves ?suffisantes¿ du contraire
 12645  12796       prix [de|d’] revient
................................................................................
 12685  12836       >table de chevet
 12686  12837       >taille *NUM
 12687  12838       tas [de|d’] >ferraille ?rouillée¿
 12688  12839       >talon >aiguille
 12689  12840       taux [de|d’] [abstention|absorption|alcool|alphabétisation|endettement|inflation|intérêt|imposition|occupation|ouverture|œstrogène|urée|usure|change|cholestérol|cholesterol|glycémie|fécondité|participation|testostérone|TVA]
 12690  12841       >témoin à charge
 12691  12842       >ténor du barreau
        12843  +    >tête à claques
 12692  12844       >tête [de|d’] [linotte|déterré|déterrée|déterrés|déterrées|mule]
 12693  12845       >têtue comme une [bourrique|mule]
 12694  12846       >têtue comme un [âne|bourriquot|mulet]
 12695  12847       >terrain à découvert
 12696  12848       >tigre à dents [de|d’] sabre
        12849  +    >tiret d’ incise
 12697  12850       >titre [de|d’] [noblesse|propriété|séjour]
 12698  12851       >tondeuse à gazon
 12699  12852       >tour [de|d’] passe-passe
 12700  12853       >train à grande vitesse
 12701  12854       >traitement [de|d’] faveur
 12702  12855       >transport en commun
 12703  12856       >trou à >rat
................................................................................
 12732  12885       >calibre . *NUM ?[acp|auto|brenneke|browning|british|colt|court|H&K|magnum|mauser|otan|remington|parabellum|russian|S&W|sig|soviet|special|wcf|wsm|winchester]¿
 12733  12886       >calibre . *NUM long rifle
 12734  12887       >calibre *NUM ?[mm|in]¿
 12735  12888       >calibre *NUM [*|×] *NUM ?[mm|in]¿
 12736  12889           <<- ~2:0>> *
 12737  12890           <<- =>> =select(\1, ":N")
 12738  12891   
        12892  +
        12893  +__purge_syntagmes_nominaux_matière__
        12894  +    *WORD  en  acier  ?[galvanisé|inoxydable|trempé]¿
        12895  +    *WORD  en  [alu|aluminium|bois|contreplaqué|coton|cuir|cuivre|émail|étain|fer|fibrociment|fibro-ciment|inox|laiton|lin|coton|métal|nacre|plastique|plâtre|plomb|polycarbonate|polymère|verre|zinc]
        12896  +        <<- morph(\1, ":N") and not morph(>1, ":A.*:[me]:[si]") ~2:0>> *
        12897  +
        12898  +    *WORD  en  pierre
        12899  +    *WORD  en  pierre de taille
        12900  +    *WORD  en  soie
        12901  +    *WORD  en  terre  ?cuite¿
        12902  +        <<- morph(\1, ":N") and not morph(>1, ":A.*:[fe]:[si]") ~2:0>> *
        12903  +
        12904  +TEST: deux câbles en acier situés de part et d’autre du chariot
        12905  +
 12739  12906   
 12740  12907   __purge_locutions_adjectivales__
        12908  +    ancienne formule
 12741  12909       bas de gamme
 12742  12910       basse consommation
 12743  12911       bon [enfant|marché|teint]
 12744  12912       bon chic ?,¿ bon genre
 12745  12913       [>clé|>clef] en >main
 12746  12914       dernier cri
 12747  12915       fleur bleue
................................................................................
 12749  12917       grande taille
 12750  12918       grandeur nature
 12751  12919       haut de gamme
 12752  12920       haute [résolution|fidélité|tension]
 12753  12921       hors service
 12754  12922       longue [conservation|distance|portée|durée]
 12755  12923       meilleur marché
 12756         -    nouvelle génération
        12924  +    nouvelle [formule|génération]
 12757  12925       numéro un
 12758  12926       numéro $:B
 12759  12927       plein cadre
 12760  12928       top secret
 12761  12929       vieux jeu
 12762  12930       open source
 12763  12931       Créative Commons
................................................................................
 12770  12938           <<- morph(<1, ":(?:N|A|Q|W|V0e)", ":D") ~>> *
 12771  12939   
 12772  12940   
 12773  12941   __purge_couleurs__
 12774  12942       [beige|blanc|bleu|brun|châtain|cyan|gris|incarnat|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet|or|argent] [brillant|clair|criard|fluo|foncé|irisé|mat|pâle|pastel|sale|sombre|tendre|terne|vif]
 12775  12943       [beige|blanc|bleu|brun|châtain|cyan|gris|incarnat|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet|or|argent] et [beige|blanc|bleu|brun|châtain|cyan|gris|incarnat|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet|or|argent]
 12776  12944       blanc   [argenté|cassé|lunaire]
 12777         -    bleu    [acier|argenté|azur|céleste|ciel|électrique|givré|indigo|marine|nuit|outremer|outre-mer|persan|pétrole|roi|saphir|turquin|turquoise]
        12945  +    bleu    [acier|argenté|azur|céleste|ciel|électrique|givré|indigo|marine|nuit|outremer|outre-mer|persan|pétrole|roi|saphir|turquin|turquoise|vert]
 12778  12946       blond   [argenté|platine]
 12779  12947       gris    [acier|anthracite|argenté|fer|perle|souris]
 12780  12948       jaune   [canari|citron|doré|maïs|paille|sable]
 12781  12949       noir    [de|d’] [encre|jais]
 12782  12950       noir    et blanc
 12783  12951       noir    sur blanc
 12784  12952       rose    [bonbon|chair|corail]
................................................................................
 12836  13004           <<- morph(\2, ":M") and not before("\\b(?:plus|moins|aussi) .* que +$")
 12837  13005           ~2:4>> =rewriteSubject(\2,\4) + "||"
 12838  13006   
 12839  13007       <start>  ~^[A-ZÉÈÊ]  et  [moi|toi|lui|elle|nous|vous|eux|elles]
 12840  13008           <<- morph(\2, ":M")
 12841  13009           ~2:0>> =rewriteSubject(\2,\4) + "||"
 12842  13010   
        13011  +
        13012  +__purge_pronom_aussi__
        13013  +    [j’|je] *WORD  moi aussi
        13014  +        <<- morph(\2, ":1s") ~3:0>> *
        13015  +
        13016  +    tu      *WORD  toi aussi
        13017  +        <<- morph(\2, ":2s") ~3:0>> *
        13018  +
        13019  +    il      *WORD  lui aussi
        13020  +    elle    *WORD  elle aussi
        13021  +    on      *WORD  nous aussi
        13022  +        <<- morph(\2, ":3s") ~3:0>> *
        13023  +
        13024  +    nous    *WORD  nous aussi
        13025  +        <<- morph(\2, ":1p") ~3:0>> *
        13026  +
        13027  +    vous    *WORD  vous aussi
        13028  +        <<- morph(\2, ":2p") ~3:0>> *
        13029  +
        13030  +    ils     *WORD  eux aussi
        13031  +    elles   *WORD  elles aussi
        13032  +        <<- morph(\2, ":3p") ~3:0>> *
        13033  +
 12843  13034   
 12844  13035   __purge_après_être__
 12845  13036       [>être|>devenir|>rester] [bon|meilleur] marché
 12846  13037       [>être|>devenir|>rester] cousin et cousine
 12847  13038       [>être|>devenir|>rester] de passage
 12848  13039       [>être|>devenir|>rester] frère et sœur
 12849  13040       [>être|>devenir|>rester] mari et femme
................................................................................
 12876  13067           <<- =>> define(\3, [":LV"])
 12877  13068   
 12878  13069       [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ avant tout
 12879  13070       [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ du moins
 12880  13071       [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ en partie
 12881  13072       [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ somme toute
 12882  13073       [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ sous peu
 12883         -    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ tous [deux|trois]
        13074  +    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
 12884  13075       [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ un jour
 12885  13076       [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ à jamais
 12886  13077       [>être|>devenir|>rester] [pas|jamais|plus|guère|point]
 12887  13078           <<- ~2:0>> *
 12888  13079   
 12889  13080       /VCint [bon|meilleur] marché
 12890  13081       /VCint cousin et cousine
................................................................................
 12920  13111           <<- __also__ =>> define(\3, [":LV"])
 12921  13112   
 12922  13113       /VCint ?[pas|jamais|plus|guère|point]¿ avant tout
 12923  13114       /VCint ?[pas|jamais|plus|guère|point]¿ du moins
 12924  13115       /VCint ?[pas|jamais|plus|guère|point]¿ en partie
 12925  13116       /VCint ?[pas|jamais|plus|guère|point]¿ somme toute
 12926  13117       /VCint ?[pas|jamais|plus|guère|point]¿ sous peu
 12927         -    /VCint ?[pas|jamais|plus|guère|point]¿ tous [deux|trois]
        13118  +    /VCint ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
 12928  13119       /VCint ?[pas|jamais|plus|guère|point]¿ un jour
 12929  13120       /VCint ?[pas|jamais|plus|guère|point]¿ à jamais
 12930  13121       /VCint [pas|jamais|plus|guère|point]
 12931  13122           <<- morphVC(\1, ">(?:être|devenir|rester)") ~2:0>> *
 12932  13123   
 12933  13124       [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ beaucoup
 12934  13125       [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ bien [entendu|sûr]
................................................................................
 12957  13148       plus que
 12958  13149           <<- morph(<1, ":(?:V0e|N)") and morph(>1, ":[AQ]") ~>> *
 12959  13150   
 12960  13151   
 12961  13152   __purge_après_avoir__
 12962  13153       >avoir  [pas|jamais|plus|guère|point]
 12963  13154       >avoir  ?[pas|jamais|plus|guère|point]¿  en partie
 12964         -    >avoir  ?[pas|jamais|plus|guère|point]¿  tous [deux|trois]
        13155  +    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] [deux|trois]
 12965  13156       >avoir  ?[pas|jamais|plus|guère|point]¿  somme toute
 12966  13157           <<- ~2:0>> *
 12967  13158   
 12968  13159       >avoir  ?[pas|jamais|plus|guère|point]¿  beaucoup
 12969  13160       >avoir  ?[pas|jamais|plus|guère|point]¿  bien [entendu|sûr]
 12970  13161       >avoir  ?[pas|jamais|plus|guère|point]¿  dans [leur|l’|son] ensemble
 12971  13162       >avoir  ?[pas|jamais|plus|guère|point]¿  à cet [instant|endroit] ?précis¿
................................................................................
 12974  13165       >avoir  ?[pas|jamais|plus|guère|point]¿  un [moment|instant]
 12975  13166       >avoir  ?[pas|jamais|plus|guère|point]¿  un minimum
 12976  13167       >avoir  ?[pas|jamais|plus|guère|point]¿  un peu
 12977  13168       >avoir  ?[pas|jamais|plus|guère|point]¿  un petit peu
 12978  13169       >avoir  ?[pas|jamais|plus|guère|point]¿  un tout petit peu
 12979  13170           <<- morph(>1, ":[QY]") ~2:0>> *
 12980  13171   
 12981         -    >avoir  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
        13172  +    >avoir  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
 12982  13173       >avoir  bon dos
 12983  13174       >avoir  bon pied ?,¿ bon œil
 12984  13175       >avoir  carte blanche
 12985  13176       >avoir  forme [humaine|animale]
 12986  13177       >avoir  partie [gagnée|liée]
 12987  13178       >avoir  voix au chapitre
 12988  13179           <<- ~2:0>> ␣
 12989  13180           <<- =>> define(\2, [":LV"])
 12990  13181   
 12991         -    >avoir  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
        13182  +    >avoir  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
 12992  13183       >avoir  [pas|jamais|plus|guère|point]  bon dos
 12993  13184       >avoir  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
 12994  13185       >avoir  [pas|jamais|plus|guère|point]  carte blanche
 12995  13186       >avoir  [pas|jamais|plus|guère|point]  forme [humaine|animale]
 12996  13187       >avoir  [pas|jamais|plus|guère|point]  partie [gagnée|liée]
 12997  13188       >avoir  [pas|jamais|plus|guère|point]  quartier libre
 12998  13189       >avoir  [pas|jamais|plus|guère|point]  voix au chapitre
 12999  13190           <<- ~3:0>> ␣
 13000  13191           <<- =>> define(\3, [":LV"])
 13001  13192   
 13002         -    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
        13193  +    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
 13003  13194       >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  @:(?:Q|V1.*:Y)
 13004  13195           <<- ~2:-2>> *
 13005  13196   
 13006  13197       n’  >avoir  que  $:Q
 13007  13198           <<- ~3>> *
 13008  13199   
 13009  13200       n’  >avoir  que  $:W  $:Q
................................................................................
 13010  13201           <<- ~3:4>> *
 13011  13202   
 13012  13203       n’  >avoir  que  [peu|très|trop]  $:W  $:Q
 13013  13204           <<- ~3:5>> *
 13014  13205   
 13015  13206       /VCint  [pas|jamais|plus|guère|point]
 13016  13207       /VCint  ?[pas|jamais|plus|guère|point]¿  en partie
 13017         -    /VCint  ?[pas|jamais|plus|guère|point]¿  tous [deux|trois]
        13208  +    /VCint  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] [deux|trois]
 13018  13209       /VCint  ?[pas|jamais|plus|guère|point]¿  somme toute
 13019  13210           <<- morphVC(\1, ":V0a") ~2:0>> *
 13020  13211   
 13021  13212       /VCint  ?[pas|jamais|plus|guère|point]¿  beaucoup
 13022  13213       /VCint  ?[pas|jamais|plus|guère|point]¿  bien [entendu|sûr]
 13023  13214       /VCint  ?[pas|jamais|plus|guère|point]¿  dans [leur|l’|son] ensemble
 13024  13215       /VCint  ?[pas|jamais|plus|guère|point]¿  à cet [instant|endroit] ?précis¿
................................................................................
 13027  13218       /VCint  ?[pas|jamais|plus|guère|point]¿  un [moment|instant]
 13028  13219       /VCint  ?[pas|jamais|plus|guère|point]¿  un minimum
 13029  13220       /VCint  ?[pas|jamais|plus|guère|point]¿  un peu
 13030  13221       /VCint  ?[pas|jamais|plus|guère|point]¿  un petit peu
 13031  13222       /VCint  ?[pas|jamais|plus|guère|point]¿  un tout petit peu
 13032  13223           <<- morphVC(\1, ":V0a") and morph(>1, ":[QY]") ~2:0>> *
 13033  13224   
 13034         -    /VCint  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
        13225  +    /VCint  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
 13035  13226       /VCint  bon dos
 13036  13227       /VCint  bon pied ?,¿ bon œil
 13037  13228       /VCint  carte blanche
 13038  13229       /VCint  forme [humaine|animale]
 13039  13230       /VCint  partie [gagnée|liée]
 13040  13231       /VCint  voix au chapitre
 13041  13232           <<- morphVC(\1, ":V0a") ~2:0>> ␣
 13042  13233           <<- __also__ =>> define(\2, [":LV"])
 13043  13234   
 13044         -    /VCint  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
        13235  +    /VCint  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
 13045  13236       /VCint  [pas|jamais|plus|guère|point]  bon dos
 13046  13237       /VCint  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
 13047  13238       /VCint  [pas|jamais|plus|guère|point]  carte blanche
 13048  13239       /VCint  [pas|jamais|plus|guère|point]  forme [humaine|animale]
 13049  13240       /VCint  [pas|jamais|plus|guère|point]  partie [gagnée|liée]
 13050  13241       /VCint  [pas|jamais|plus|guère|point]  quartier libre
 13051  13242       /VCint  [pas|jamais|plus|guère|point]  voix au chapitre
 13052  13243           <<- morphVC(\1, ":V0a") ~3:0>> ␣
 13053  13244           <<- __also__ =>> define(\3, [":LV"])
 13054  13245   
 13055         -    /VCint  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
        13246  +    /VCint  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
 13056  13247       /VCint  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  @:(?:Q|V1.*:Y)
 13057  13248           <<- morphVC(\1, ":V0a") ~2:-2>> *
 13058  13249   
 13059  13250   
 13060  13251   __purge_après_verbe__
 13061  13252       $:V  ?pas¿  jour et nuit
 13062  13253       $:V  ?pas¿  nuit et jour
................................................................................
 13373  13564           <<- not morph(<1, ":R|>d’/") ~1:2>> *
 13374  13565   
 13375  13566       vu les circonstances  @¬:A:[fe]:[pi]
 13376  13567           <<- ~1:3>> *
 13377  13568   
 13378  13569   
 13379  13570   __purge_tous_deux_trois__
 13380         -    >faire tous [deux|trois]
        13571  +    >faire [tous|toutes] [deux|trois]
 13381  13572           <<- ~2:0>> *
 13382  13573   
 13383  13574       >faire tous
 13384  13575           <<- morph(\1, ":[123]p") or (\1 == "fait" and value(<1, "|on|")) ~2>> *
 13385  13576   
 13386  13577   
 13387  13578   # tous / tout / toute / toutes
................................................................................
 13431  13622       [<start>|,]  $:D  *WORD  *WORD  [ne|n’|me|m’|te|t’|se|s’]
 13432  13623       [<start>|,]  $:D  *WORD  *WORD  [en|nous|vous|lui|y]                    @:(?:[123][sp]|P)
 13433  13624       [<start>|,]  $:D  *WORD  *WORD  [le|la|l’|les|leur]                     @:(?:[123][sp]|P)¬:[NA]
 13434  13625       [<start>|,]  $:D  *WORD  *WORD  [nous|vous]     [le|la|l’|les|en|y]     @:(?:[123][sp]|P)
 13435  13626       [<start>|,]  $:D  *WORD  *WORD  [le|la|l’|les]  [lui|leur|en|y]         @:(?:[123][sp]|P)
 13436  13627       [<start>|,]  $:D  *WORD  *WORD  [lui|leur|y]    en                      @:(?:[123][sp]|P)
 13437  13628       [<start>|,]  $:D  *WORD  *WORD  @:(?:3[sp]|P)¬:[GW]
 13438         -        <<- morph(\3, ":[NA]", ":(?:G|V0)") and morph(\4, ":[NA]", ":(?:[PG]|V0)") =>> exclude(\4, ":V")
        13629  +        <<- morph(\3, ":[NA]", ":(?:G|V0)") and morph(\4, ":[NA]", ":(?:[PG]|V[023])") =>> exclude(\4, ":V")
 13439  13630   
 13440  13631       [des|ces|mes|tes|ses|nos|vos|quelques|lesdits]  @:A.*:[pi]  @:N.*:[pi]¬(?:3[sp]|G)
 13441  13632           <<- =>> exclude(\3, ":V")
 13442  13633   
 13443  13634       les  @:A.*:[pi]¬:V  @:N.*:[pi]¬(?:3[sp]|G)
 13444  13635           <<- not before(":O[vs]") =>> exclude(\3, ":V")
 13445  13636   
 13446  13637       leurs  @:A.*:[pi]¬:V  @:N.*:[pi]¬(?:3[sp]|G)
 13447  13638           <<- not before(":O[vs]") =>> exclude(\3, ":V")
 13448  13639   
 13449  13640       [plusieurs|certains|certaines]  @:A.*:[pi]¬:3[sp]  @:N.*:p¬:(?:3[sp]|G)
 13450  13641           <<- =>> exclude(\2, ":V") and exclude(\3, ":V")
 13451  13642   
        13643  +
        13644  +__purge_vite__
        13645  +    vite
        13646  +        <<- not (morph(<1, ":V0a") and value(>1, "|fait|")) ~>> *
        13647  +
 13452  13648   
 13453  13649   __purge_locutions_verbales__
 13454  13650       >aller bon train
 13455  13651       >arriver à [destination|échéance]
 13456  13652       >arriver à point nommé
 13457  13653       >arriver à bon port
 13458  13654       >battre à plate couture
 13459  13655       >battre en [brèche|retraite]
 13460  13656       [>brûler|>bruler] à vif
        13657  +    >charger à blanc
 13461  13658       >chauffer à blanc
 13462  13659       >compter à rebours
 13463  13660       >condamner à mort
 13464  13661       >couler à ?grands¿ flots
 13465  13662       >demander [assistance|audience|conseil|pardon]
 13466  13663       [>donner|>redonner] [naissance|sens|suite|vie]
 13467  13664       [>donner|>redonner] quartier libre
 13468  13665       >élire domicile
 13469  13666       >étouffer dans l’ œuf
 13470         -    >faire [allusion|assaut|attention|chaud|confiance|connaissance|compliqué|copain-copain|date|débat|défaut|demi-tour|écran|envie|erreur|état|exception|figure|foi|fortune|froid|front|grève|halte|honte|illusion|mention|mouche|office|part|peur|polémique|plaisir|preuve|rage|rempart|scandale|sens|signe|usage|volte-face]
        13667  +    >faire [allusion|assaut|attention|chaud|confiance|connaissance|compliqué|copain-copain|date|débat|défaut|demi-tour|écran|envie|erreur|état|exception|figure|foi|fortune|froid|front|grève|halte|honte|illusion|mention|mouche|office|part|peur|polémique|plaisir|preuve|rage|rempart|scandale|sens|signe|surface|usage|volte-face]
 13471  13668       >faire amende honorable
 13472  13669       >faire bande à part
 13473  13670       >faire bon accueil
 13474  13671       >faire bonne figure
 13475  13672       >faire chou blanc
 13476  13673       >faire copain copain
 13477  13674       >faire de [mon|ton|son|notre|votre|leur] mieux
................................................................................
 13532  13729       >prendre par surprise
 13533  13730       >prêter à confusion
 13534  13731       >prêter main forte
 13535  13732       >prêter main-forte
 13536  13733       >réduire en miettes
 13537  13734       >remettre en cause
 13538  13735       >rendre [hommage|service|visite]
        13736  +    >reprendre haleine
 13539  13737       >rester lettre morte
 13540  13738       >rester lettres mortes
 13541  13739       >revenir à la case départ
 13542  13740       >saigner à blanc
 13543  13741       >suivre ?[ça|cela|ceci]¿ de près
 13544  13742       >tenir à [carreau|cœur]
 13545  13743       >tenir ?[ça|cela|ceci]¿ à distance ?respectable¿
................................................................................
 13546  13744       >tenir [compte|compagnie]
 13547  13745       >tenir au courant
 13548  13746       >tenir en haute estime
 13549  13747       >tirer à blanc
 13550  13748       >tomber à [pic|point]
 13551  13749       >trier sur le volet
 13552  13750       >trouver refuge
        13751  +    >tirer à blanc
 13553  13752       >tirer [avantage|profit]
 13554  13753       >tourner à l’ aigre
 13555  13754       >tourner court
 13556  13755       >venir à bout
 13557  13756       [>venir|>revenir] je [ne|n’] sais ?pas¿ ?trop¿ d’ où
 13558  13757       [>venir|>revenir] on [ne|n’] sait ?pas¿ ?trop¿ d’ où
 13559  13758           <<- ~2:0>> *
................................................................................
 13561  13760   
 13562  13761   __conf_locutions_verbales__
 13563  13762       >arriver a [destination|échéance]
 13564  13763       >arriver a point nommé
 13565  13764       >arriver a bon port
 13566  13765       >battre a plate couture
 13567  13766       [>brûler|>bruler] a vif
        13767  +    >charger a blanc
 13568  13768       >chauffer a blanc
 13569  13769       >fermer a [>clé|>clef]
 13570  13770       [>gonfler|>regonfler] a bloc
 13571  13771       >jeter a terre
 13572  13772       [>mettre|>remettre] a [bas|>flot|>jour|>niveau|>nu|>nue|>plat|>terre]
 13573  13773       [>mettre|>remettre] a l’ [écart|épreuve]
 13574  13774       >percer a jour
 13575  13775       >prendre a la légère
 13576  13776       >prêter a >confusion
 13577  13777       >saigner a blanc
 13578  13778       >tenir a [carreau|cœur|distance]
 13579  13779       >tirer a blanc
 13580  13780       >tomber a [pic|point]
        13781  +    >tirer a blanc
 13581  13782       >tourner a l’ aigre
 13582  13783       >venir a bout
 13583  13784       [>venir|>revenir] a point
 13584  13785           <<- /conf/ -2>> à               # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.
 13585  13786   
        13787  +    >avoir du mal a
        13788  +    >avoir vocation a
        13789  +    >laisser libre cours a
        13790  +        <<- /conf/ --1>> à              # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.
        13791  +
 13586  13792       >faire plaisirs
 13587  13793           <<- /sgpl/ --1>> plaisir        # Faire plaisir : dans cette locution, “plaisir” doit être au singulier.
 13588  13794           <<- ~-1>> *
 13589  13795   
 13590  13796       >laisser pour [comte+s|>conte]
 13591  13797           <<- /conf/ --1>> compte         # Confusion. Locution “laisser pour compte”.|https://fr.wiktionary.org/wiki/laisser_pour_compte
 13592  13798   
 13593         -    [>mourir|>paraître|>paraitre|>rester|>sembler] >jeûne
        13799  +    [>être|>mourir|>paraître|>paraitre|>rester|>sembler] >jeûne
 13594  13800           <<- /conf/ -2>> jeune           # Confusion. Le jeûne est une privation de nourriture.|https://fr.wiktionary.org/wiki/jeune
 13595  13801   
 13596  13802       >partir en >couille
 13597  13803           <<- /conf/ -3>> quenouille|vrille   # Confusion. La locution “partir en couille” est un barbarisme. Locution authentique : “partir/tomber en quenouille”. Peut-être voulez-vous dire “partir en vrille” ?|https://fr.wiktionary.org/wiki/partir_en_quenouille
 13598  13804   
 13599  13805       >rendre ?bon¿ [comte|comtes|>conte|comptes]
 13600  13806           <<- /conf/ --1>> compte         # Confusion. Locution “rendre compte”.|https://fr.wiktionary.org/wiki/rendre_compte
................................................................................
 13618  13824           <<- /conf/ -1>> =\1.replace("omp", "on").replace("OMP", "ON")   # Confusion. Locution “conter fleurette”.|https://fr.wiktionary.org/wiki/conter_fleurette
 13619  13825   
 13620  13826   TEST: ce contrat arrive {{a}} échéance.
 13621  13827   TEST: il faut tenir {{contes}} des faits au lieu de nos impressions.
 13622  13828   TEST: prendre {{a}} la légère ce test serait une erreur.
 13623  13829   TEST: on va suivre ça de {{prêt}}.
 13624  13830   TEST: il faut se tenir {{a}} distance de ces gens-là.
        13831  +TEST: J’avais du mal {{a}} l’écouté (double erreur utile pour tester le faux positif)
 13625  13832   TEST: cette expérience ne va pas tarder à tourner {{cours}}.
 13626  13833   TEST: il faut rendre {{comte}} de la sitation désastreuse dans laquelle nous sommes tombés.
 13627  13834   TEST: il faut tenir {{comtes}} des aléas de la météo.
 13628  13835   TEST: faudra rendre bon {{conte}} de vos actes
 13629  13836   TEST: Elle est restée {{jeûne}}.
 13630  13837   TEST: Mourir {{jeûne}} ne lui faisait pas peur.
 13631  13838   TEST: elle suit ça de {{prêt}}
................................................................................
 13780  13987   TEST: La poïesis, en grec, est ce qui permet de faire passer n’importe quoi du non-être à l’être
 13781  13988   TEST: un moteur nouvelle génération
 13782  13989   TEST: La première est la critique dite artiste
 13783  13990   TEST: la critique conduit nombre de protestataires à se replier sur des modalités de défense efficaces dans le passé mais désormais largement inadaptées
 13784  13991   TEST: Tu crois que Microsoft peut contraindre les projets libres à quoi que ce soit ?
 13785  13992   TEST: « L’école produit la norme en matière de langage »
 13786  13993   TEST: Parler affaires.
        13994  +TEST: Mon Dieu, je vous en prie, faites qu’il ne m’arrive rien
        13995  +TEST: Anne, je t’en prie, viens de bonne heure
        13996  +TEST: elles ont toutes deux épluché le contenu de la boîte
 13787  13997   
 13788  13998   
 13789  13999   
 13790  14000   @@@@
 13791  14001   @@@@
 13792  14002   @@@@
 13793  14003   @@@@
................................................................................
 13794  14004   @@@@END_GRAPH                                                                                      _
 13795  14005   @@@@
 13796  14006   @@@@
 13797  14007   @@@@
 13798  14008   @@@@
 13799  14009   
 13800  14010   
 13801         -#
 13802         -# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
 13803         -#
 13804         -
 13805  14011   
 13806  14012   !!!! Redondances dans la phrase                                                                   !!
 13807  14013   
 13808  14014   __[i]/redon2(redondances_phrase)__
 13809  14015       ({w_4})[ ,].* (\1)  @@0,$
 13810  14016           <<- not morph(\1, ":(?:G|V0)|>même/") -2>> _                                                # Dans cette phrase, répétition de “\1” (à gauche).
 13811  14017           <<- __also__ -1>> _                                                                         # Dans cette phrase, répétition de “\1” (à droite).
................................................................................
 13880  14086   TEST: l’amour {{immortels}}
 13881  14087   TEST: du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou.
 13882  14088   TEST: du chien et de l’étonnant {{colliers}} qu’il avait autour du cou.
 13883  14089   
 13884  14090   
 13885  14091   __gn_le_1m__
 13886  14092       ,  le  *WORD
 13887         -        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\2)           # Accord de genre erroné : « \3 » est féminin.
        14093  +        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\3)           # Accord de genre erroné : « \3 » est féminin.
 13888  14094           <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
 13889  14095           <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               # Accord de nombre erroné : « \3 » devrait être au singulier.
 13890  14096           <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.
 13891  14097   
 13892  14098       *WORD  le  *WORD
 13893  14099           <<- /gn/ morph(\2, ":D") >>>
 13894  14100           <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)")
 13895  14101               or ( morph(\3, ":[NA].*:f", ":[me]") and morph(\1, ":R", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
 13896         -        -2>> =suggLesLa(\2)                                                                         # Accord de genre erroné : « \3 » est féminin.
        14102  +        -2>> =suggLesLa(\3)                                                                         # Accord de genre erroné : « \3 » est féminin.
 13897  14103           <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
 13898  14104           <<- /gn/ __else__ and morph(\3, ":[NA].*:p", "*")
 13899  14105               or ( morph(\3, ":[NA].*:p", ":[si]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
 13900  14106           -3>> =suggMasSing(\3)                                                                       # Accord de nombre erroné : « \3 » devrait être au singulier.
 13901  14107           <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.
 13902  14108   
 13903  14109       <start>  le  *WORD
 13904         -        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\2)                     # Accord de genre erroné : « \3 » est féminin.
        14110  +        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\3)                     # Accord de genre erroné : « \3 » est féminin.
 13905  14111           <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
 13906  14112           <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               # Accord de nombre erroné : « \3 » devrait être au singulier.
 13907  14113           <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.
 13908  14114   
 13909  14115   TEST: c’est une catastrophe, {{le}} {{profits}} a baissé ces deux derniers trimestres
 13910  14116   TEST: j’en ai marre, {{le}} {{passée}} est trop dans les esprits
 13911  14117   TEST: {{Le}} démoralisation.                                  ->> La
 13912  14118   TEST: {{Le}} Guyane française.                                ->> La
        14119  +TEST: sur {{le}} {{tables}}                                   ->> les|la|||
 13913  14120   TEST: avec {{le}} {{pile}}
 13914  14121   TEST: contre {{le}} {{rois}}
 13915  14122   TEST: {{le}} {{publique}}
 13916  14123   TEST: {{Le}} {{pendue}}
 13917  14124   TEST: {{Le}} personne répond.
 13918  14125   TEST: {{le}} {{quotients}}
 13919  14126   TEST: Comme avec l’Hyperloop, le bus chinois conçu pour passer au-dessus des voitures
................................................................................
 14572  14779       des  *WORD  *WORD
 14573  14780           <<- /gn/ (morph(<1, ":(?:[VRBX]|Cs)|>comme/|<start>|>,", "*") or morph(\3, ":N", ":[AQ]")) and not \3.startswith("seul") >>>
 14574  14781           <<- /gn/ ( (morph(\2, ":[NA].*:m", ":[fe]") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":[me]") and morph(\3, ":[NA].*:m", "*")) ) and not apposition(\2, \3)
 14575  14782           -3>> =switchGender(\3, True)                                                                # Accord de genre erroné avec « \2 ».
 14576  14783           <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2)                                 # Accord de genre erroné avec « \3 ».
 14577  14784           <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
 14578  14785           -3>> =suggPlur(\3)                                                                          # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.
 14579         -        <<- checkAgreement(\2, \3) =>> =exclude(\3, ":V")
        14786  +        <<- not morph(\3, ":G|>a/") and checkAgreement(\2, \3) =>> =exclude(\3, ":V")
 14580  14787   
 14581  14788   TEST: faire table rase des passions {{inutile}}               ->> inutiles
 14582  14789   TEST: à bonne distance des {{chiens}} {{méchante}}
 14583  14790   TEST: des hommes {{attaquée}}
 14584  14791   TEST: des femmes {{agressé}}
 14585  14792   TEST: des hommes très mal {{renseigné}}                       ->> renseignés
 14586  14793   TEST: des dépenses non {{nécessaire}}                         ->> nécessaires
................................................................................
 15358  15565   
 15359  15566   TEST: Des yeux {{vert}}.
 15360  15567   TEST: Des yeux {{marrons}}.
 15361  15568   TEST: Des créatures marines.
 15362  15569   TEST: Un cageot des premières cerises.
 15363  15570   
 15364  15571   
 15365         -__sgpl_couleurs_composées__
 15366         -    [>beige|>châtain|>cyan|>écarlate|>jaune|>magenta|>marron|>mauve|>orange|>pourpre|>rouge|>vermeille] [>brillante|>claire|>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>vive]
 15367         -    [>beige|>châtain|>cyan|>écarlate|>jaune|>magenta|>marron|>mauve|>orange|>pourpre|>rouge|>vermeille] [foncé+ses|irisé+ses]
        15572  +__sgpl_couleurs_composées!5__
        15573  +    [>beige|>châtain|>cyan|>écarlate|>jaune|>magenta|>marron|>mauve|>orange|>pourpre|>rouge|>rose|>vermeille] [>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>brillante|>claire|>vive|foncé+ses|irisé+ses]
        15574  +        <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":[pf]"))
        15575  +        ->> =suggSing(\1) + " " + suggMasSing(\2)
        15576  +        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais
        15577  +
        15578  +    [>blanche|>bleue|>brune|>grise|>noire|>verte|>violette] [>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>brillante|>claire|>vive|foncé+ses|irisé+ses]
 15368  15579           <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":[pf]"))
 15369         -        ->> =suggSing(\1) + " " + suggSing(\2)
        15580  +        ->> =suggMasSing(\1) + " " + suggMasSing(\2)
 15370  15581           # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais
 15371  15582   
 15372  15583       >jaune [>paille|>sable]
 15373  15584       >rose  [>bonbon|>chair|>corail]
 15374  15585       >rouge [>brique|>carmine|>cerise|>écarlate|rubis|>sang|>tomate|>vermillon]
 15375  15586           <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":p"))
 15376  15587           ->> =suggSing(\1) + " " + suggSing(\2)
 15377         -        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais
 15378         -
 15379         -    [>blanche|>bleue|>brune|>grise|>noire|>verte|>violette] [>brillante|>claire|>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>vive]
 15380         -    [>blanche|>bleue|>brune|>grise|>noire|>verte|>violette] [foncé+ses|irisé+ses]
 15381         -        <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":[pf]"))
 15382         -        ->> =suggMasSing(\1) + " " + suggSing(\2)
 15383  15588           # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais
 15384  15589   
 15385  15590       >bleue [>ciel|>indigo|>marine|>roi|>saphir|>turquoise|>verte]
 15386  15591       >blonde >platine
 15387  15592       >grise [>acier|>anthracite|>perle|souris]
 15388  15593       >verte [>émeraude|>olive|>pistache|>pomme]
 15389  15594           <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":p"))
................................................................................
 15390  15595           ->> =suggMasSing(\1) + " " + suggSing(\2)
 15391  15596           # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais
 15392  15597   
 15393  15598       >noire [de|d’] [encre|jais]
 15394  15599           <<- /sgpl/ not morph(<1, ":D") -1>> noir
 15395  15600           # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais
 15396  15601   
 15397         -TEST: les chapeaux {{rouges clairs}}
 15398         -TEST: des chaussures {{jaunes sables}}
 15399         -TEST: des pantalons {{verts clairs}}
 15400         -TEST: des robes {{bleues indigo}}
 15401         -TEST: Une jupe {{bleue foncée}}.
 15402         -TEST: Des cheveux {{noirs}} de jais.
        15602  +TEST: les chapeaux {{rouges clairs}}                                        ->> rouge clair
        15603  +TEST: des chaussures {{jaunes sables}}                                      ->> jaune sable|||sablent
        15604  +TEST: des pantalons {{verts clairs}}                                        ->> vert clair
        15605  +TEST: des robes {{bleues indigo}}                                           ->> bleu indigo
        15606  +TEST: des voitures {{jaunes fluo}}                                          ->> jaune fluo
        15607  +TEST: Une jupe {{bleue foncée}}.                                            ->> bleu foncé
        15608  +TEST: boutons {{roses pâles}}                                               ->> rose pâle
        15609  +TEST: Il a une queue {{bleue vert}}.                                        ->> bleu vert
        15610  +TEST: Il a une queue {{marron claire}}.                                     ->> marron clair
        15611  +TEST: Il a une queue {{verte clair}}                                        ->> vert clair
        15612  +TEST: Des cheveux {{noirs}} de jais.                                        ->> noir
 15403  15613   TEST: Une jupe bleu foncé.
 15404  15614   TEST: Des yeux vert clair.
 15405  15615   TEST: Des yeux vert olive.
 15406  15616   TEST: Ses cheveux étaient noir de jais.
        15617  +TEST: Il a une queue vert émeraude
        15618  +TEST: Il a une queue bleu vert
 15407  15619   
 15408  15620   
 15409  15621   
 15410  15622   !!
 15411  15623   !!
 15412  15624   !!!! Singuliers & Pluriels                                                                        !!
 15413  15625   !!
................................................................................
 15796  16008   TEST: On va procéder par {{intervalle}}
 15797  16009   
 15798  16010   
 15799  16011   # juste
 15800  16012   __sgpl_juste__
 15801  16013       justes
 15802  16014           <<- /sgpl/ \1.islower() and morph(<1, ":V", ":[DA]") and not morph(>1, ":[NA].*:[pi]")
 15803         -            and not (morph(<1, ">(?:être|sembler|devenir|rester|demeurer|redevenir|para[îi]tre)/.*:[123]p") and morph(>1, ":G|<end>|>,/"))
        16015  +            and not (morph(<1, ">(?:être|sembler|devenir|rester|demeurer|redevenir|para[îi]tre|trouver)/.*:[123]p") and morph(>1, ":G|<end>|>,/"))
 15804  16016           ->> juste                                                   # Si “juste” est un adverbe, il est invariable.
 15805  16017   
 15806  16018   TEST: Viser {{justes}}
 15807  16019   TEST: Voir {{justes}}.
 15808  16020   TEST: Penser juste.
 15809  16021   TEST: Dures mais justes.
 15810  16022   TEST: J’ai retrouvé tout mon ressenti, tous les mots sont justes.
 15811  16023   TEST: Nos chiffres sont justes, et nous vous le prouverons.
 15812  16024   TEST: Ces observations sont tellement justes que, dans les années à venir, elles serviront de référence.
 15813  16025   TEST: Les motivations sont justes et évidentes
 15814  16026   TEST: ces théories incomplètes sont suffisamment justes pour prédire la réalité
        16027  +TEST: À vous de trouver les compromis que vous trouvez justes.
 15815  16028   
 15816  16029   
 15817  16030   # pied
 15818  16031   __sgpl_pied__
 15819  16032       [>avoir|>perdre]  pieds
 15820  16033           <<- /sgpl/ -2>> pied                                        # Locution “\1 pied” : écrivez “pied” au singulier.
 15821  16034   
................................................................................
 15964  16177       [>pouvoir|>vouloir|>falloir] [rires|mangers|êtres|avoirs]
 15965  16178           <<- /sgpl/ morph(\1, ":V") -2>> =\2[:-1]                    # Si “\2” est censé être un verbe, ne mettez pas la marque du pluriel.
 15966  16179   
 15967  16180   
 15968  16181   TEST: On peut {{rires}}, non ?
 15969  16182   TEST: Faire {{rires}}, c’est compliqué.
 15970  16183   
        16184  +
        16185  +!!!! Adverbes après verbe                                                                         !!
        16186  +
        16187  +# fort
        16188  +__sgpl_verbe_fort__
        16189  +    forts
        16190  +        <<- /sgpl/ morph(<1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q|Y)|>(?:affirmer|trouver|croire|désirer|estimer|préférer|penser|imaginer|voir|vouloir|aimer|adorer|rendre|souhaiter)/")
        16191  +            and not morph(>1, ":A.*:[me]:[pi]")
        16192  +        ->> fort                                                # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.
        16193  +
        16194  +    hauts [et|&] forts
        16195  +        <<- /sgpl/ morph(<1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q|Y)")
        16196  +        ->> haut et fort                                        # Confusion probable. S’il s’agit ici de la locution adverbiale “haut et fort”, elle est invariable.
        16197  +
        16198  +TEST: ces emmerdeurs crient bien trop {{forts}}
        16199  +TEST: Ils déclamèrent {{hauts et forts}} leur amour de leur patrie.
        16200  +TEST: parler {{hauts & forts}}
        16201  +TEST: ces animaux paraissent forts, mais ils sont faibles.
        16202  +TEST: ils sont forts, ces gars-là.
        16203  +TEST: ils se croient forts.
        16204  +TEST: je les imagine forts et intelligents.
        16205  +TEST: elles les veulent forts et astucieux.
        16206  +TEST: les écarts ont été plus forts en une génération
        16207  +TEST: Avec le même nombre de bulletins, les xénophobes apparaîtront plus forts.
        16208  +TEST: Pour leur permettre d’être plus forts face aux maîtres de tous bords, patrons, maris ou bureaucrates.
        16209  +TEST: Il nous rend forts.
        16210  +
        16211  +
        16212  +# bien
        16213  +__sgpl_verbe_bien__
        16214  +    biens
        16215  +        <<- /sgpl/ morph(<1, ":V", ":[DA].*:p") ->> bien        # Confusion probable. Ici, “bien” est un adverbe, donc invariable.
        16216  +
        16217  +TEST: Ils vont {{biens}}.
        16218  +TEST: Elles travaillaient vraiment {{biens}}.
        16219  +TEST: Il ne comprenait vraiment pas très {{biens}} ces principes de base.
        16220  +TEST: Il a de grands biens.
        16221  +TEST: Ce sont des biens de peu de valeur.
        16222  +
 15971  16223   
 15972  16224   
 15973  16225   !!
 15974  16226   !!
 15975  16227   !!!! Confusions                                                                                   !!
 15976  16228   !!
 15977  16229   !!
................................................................................
 16677  16929   TEST: Un film {{dénudé}} de tout intérêt.
 16678  16930   TEST: Une personne {{dénudée}} de toute compassion.
 16679  16931   TEST: Une histoire {{dénudée}} d’intérêt.
 16680  16932   TEST: Des hommes {{dénudés}} de compassion.
 16681  16933   
 16682  16934   
 16683  16935   # desceller / déceler / desseller
 16684         -__erreur_déceler_desseller_desceller__
        16936  +__conf_erreur_déceler_desseller_desceller__
 16685  16937       [>erreur|>faute|>incohérence|>problème|>bug|>bogue|>faille|>maladie|>défaut|>défaillance|>perturbation|>irrégularité] <> [>desseller|>desceller]
 16686  16938           <<- /conf/ --1>> =\-1.replace("escell", "écel").replace("essell", "écel")
 16687  16939           # Confusion probable si ce verbe se rapporte à “\1”. Desceller signifie briser un sceau, un cachet… Desseller signifie ôter une selle. Si vous voulez dire “remarquer”, “dévoiler”, “découvrir”, écrivez “déceler”.|http://fr.wiktionary.org/wiki/déceler
 16688  16940   
 16689  16941       [>desseller|>desceller] [l’|@:[BD]] [>petite|>grande|>énorme|>dangeureuse|>formidable|>forte|>légère|>merveilleuse|>nouvelle|>vrai|>réelle|>sévère|>véritable] [>acidité|>activité|>allergie|>anévrisme|>anomalie|>arnaque|>appendicite|>atrophie|>baisse|>bébé|>blessure|>bug|>bogue|>carie|>cancer|>cause|>changement|>complot|>comète|>concentration|>corrélation|>croissance|>défaut|>défaillance|>demande|>dépression|>diabète|>différence|>diminution|>effluve|>épilepsie|>erreur|>essai|>existence|>grossesse|>grosseur|>faille|>faute|>fuite|>fraude|>grippe|>handicap|>hausse|>hémorragie|>hostilité|>hypertrophie|>incompatibilité|>incohérence|>infection|>infraction|>indice|>infidélité|>insuffisance|>intrigue|>irrégularité|>leucémie|>lésion|>lueur|>lumière|>maladie|>malformation|>manœuvre|>manipulation|>molécule|>mensonge|>mutation|>once|>perturbation|>personnalité|>piste|>perte|>planète|>exoplanète|>présence|>qualité|>odeur|>opportunité|>otite|>problème|>surdité|>talent|>tendance|>tentative|>tumeur|>utilisation|hoax|>variation|>vie|virus]
 16690  16942           <<- /conf/ -1>> =\1.replace("escell", "écel").replace("essell", "écel")
 16691  16943           # Confusion probable si ce mot se rapporte à “\3 \4”. Desceller signifie briser un sceau, un cachet… Desseller signifie ôter une selle.|http://fr.wiktionary.org/wiki/déceler
................................................................................
 16731  16983   # éminent / imminent
 16732  16984   __conf_éminent_imminent__
 16733  16985       >imminente [>actrice|>confrère|>collègue|>dirigeante|>dissidente|>entrepreneuse|>experte|>défenseuse|>intellectuelle|>mathématicienne|>musicienne|>pédiatre|>personalité|>personnage|>professeur|>physicienne|>rabbin|>représantante|>savante|>chirurgienne|>neurochirurgienne|>scientifique|>service|>spécialiste|~logues?$|~istes?$]
 16734  16986           <<- /conf/ -1>> =\1.replace("imm", "ém").replace("Imm", "Ém")
 16735  16987           # Confusion probable. Si “\1” se rapporte à “\2”, alors vous voulez probablement dire “éminent” ; “imminent” signifie “qui va survenir prochainement”.|https://fr.wiktionary.org/wiki/%C3%A9minent
 16736  16988   
 16737  16989       [>actrice|>confrère|>collègue|>dirigeante|>dissidente|>entrepreneuse|>experte|>défenseuse|>intellectuelle|>mathématicienne|>musicienne|>pédiatre|>personalité|>personnage|>professeur|>physicienne|>rabbin|>représantante|>savante|>chirurgienne|>neurochirurgienne|>scientifique|>service|>spécialiste|~logues?$|~istes?$] >imminente
 16738         -        <<- /conf/ -2>> =\2.replace("imm", "ém").replace("Imm", "Ém")
        16990  +        <<- /conf/ morph(<1, ":D") -2>> =\2.replace("imm", "ém").replace("Imm", "Ém")
 16739  16991           # Confusion probable. Si “\2” se rapporte à “\1”, alors vous voulez probablement dire “éminent” ; “imminent” signifie “qui va survenir prochainement”.|https://fr.wiktionary.org/wiki/%C3%A9minent
 16740  16992   
 16741  16993       [>accouchement|>accord|>arrivée|>assaut|>attaque|>atterrissage|>cataclysme|>catastrophe|>changement|>conflit|>crash|>danger|>décollage|>départ|>désarmement|>déclenchement|>effondrement|>éruption|>fin|>guerre|>lancement|>orage|>ouragan|>péril|>remaniement|>réponse|>résultat|>retour|>séisme|>tempête|>tsunami|>verdict] ?>être¿ >éminente
 16742  16994           <<- /conf/ --1>> =\-1.replace("émi", "immi").replace("Émi", "Immi")
 16743  16995           # Confusion probable. Si “\-1” se rapporte à “\1”, alors vous voulez probablement dire “imminent” ; “éminent” signifie “notable”.|https://fr.wiktionary.org/wiki/%C3%A9minent
 16744  16996   
 16745  16997   TEST: mon {{imminent}} collègue.
 16746  16998   TEST: Les scientifiques les plus {{imminents}}.
 16747  16999   TEST: l’accouchement est {{éminent}}.
 16748  17000   TEST: Mon {{imminent}} collègue.
 16749  17001   TEST: Un paléontologue {{imminent}}.
 16750  17002   TEST: L’arrivée est imminente.
 16751  17003   TEST: Des paléontologues éminents.
        17004  +TEST: aucune menace terroriste imminente
 16752  17005   
 16753  17006   
 16754  17007   # enduire / induire
 16755  17008   __conf_enduire_induire__
 16756  17009       >enduire en [>erreur|>tentation]
 16757  17010           <<- /conf/ -1>> =\1.replace("end", "ind").replace("End", "Ind").replace("END", "IND")       # Confusion probable. “Enduire” signifie “appliquer un enduit”.|https://fr.wiktionary.org/wiki/induire
 16758  17011   
................................................................................
 17845  18098   TEST: {{Tachez}} d’arriver à l’heure.
 17846  18099   TEST: {{Tache}} de ne pas faire trop de bruit.
 17847  18100   TEST: une tâche dévalorisante.
 17848  18101   TEST: peiner à la tâche.
 17849  18102   
 17850  18103   
 17851  18104   # taule / tôle
 17852         -__conf_taule_tôle__
        18105  +__conf_taule_tôle2__
 17853  18106       >aller en [>tôle|>tole]
 17854  18107       >quitter cette [tôle|tole]
 17855  18108       >faire de la [tôle|tole]
 17856  18109           <<- /conf/ --1>> taule                                      # Confusion. La tôle est une plaque de métal laminé. Pour la prison, écrivez “taule”.
 17857  18110   
 17858  18111       [>taule] [>boulonner|>cintrer|>émailler|>emboutir|>galvaniser|>gaufrer|>nervurer|>onduler|>perforer|>souder|>translucide]
 17859  18112           <<- /conf/ -1>> =\1.replace("au", "ô").replace("AU", "Ô")   # Confusion. La taule est la forme argotique pour évoquer la prison, le bordel ou toute forme d’habitation.
 17860  18113   
 17861         -    [>taule] [de|d’|en] [>acier|>alu|>aluminium|>bardage|>cuivre|>étanchéité|>fer|>festonnage|inox|>laiton|>métal|>trapèze|>zinc|>éverite|>fibrociment|>fibro-ciment|>plastique|>polycarbonate|PVC]
 17862         -        <<- /conf/ -1>> =\1.replace("au", "ô").replace("AU", "Ô")   # Confusion. La taule est la forme argotique pour évoquer la prison, le bordel ou toute forme d’habitation.
 17863         -
 17864  18114   TEST: Demain, il va aller en {{tôle}}.
 17865  18115   TEST: Tu as fait de la {{tôle}} ?
 17866  18116   TEST: C’est la {{taule}} galvanisée.
 17867         -TEST: une {{taule}} en acier
 17868  18117   
 17869  18118   
 17870  18119   # tant / temps (2e partie)
 17871  18120   __conf_tant_temps_tan__
 17872  18121       en [temps|>tan] [que|qu’]
 17873  18122           <<- /conf/ -2>> tant                                        # Confusion. Écrivez « en tant que ».|http://fr.wiktionary.org/wiki/en_tant_que
 17874  18123   
................................................................................
 17918  18167   TEST: être en {{tore}}
 17919  18168   TEST: Faire {{torr}}
 17920  18169   
 17921  18170   
 17922  18171   # venimeux / vénéneux
 17923  18172   __conf_venimeux_vénéreux__
 17924  18173       [>serpent|>araignée|>scorpion|>vipère|>cobra|>crapaud|>grenouille|>dendrobate|>poulpe|>guêpe|>abeille|>frelon|>méduse|>morsure|>piqûre|>dard|>dent|>croc|>crochet]  >vénéneuse
 17925         -        <<- /conf/ -2>> =\1.replace("énén", "enim")                                    # Confusion : “vénéneux” se dit des plantes, employez “venimeux”.
        18174  +        <<- /conf/ -2>> =\1.replace("énén", "enim").replace("ÉNÉN", "ENIM")                         # Confusion : “vénéneux” se dit des plantes, employez “venimeux”.
 17926  18175   
 17927  18176       [>plante|>champignon|>lépiote|>baie|>fruit|>herbe|>fleur|>chair|>moule|humus|>substance|>végétal]  >venimeuse
 17928         -        <<- /conf/ -2>> =\1.replace("enim", "énén")                                    # Confusion : pas de venin ici.
        18177  +        <<- /conf/ -2>> =\1.replace("enim", "énén").replace("ENIM", "ÉNÉN")                         # Confusion : pas de venin ici.
 17929  18178   
 17930  18179   TEST: ces araignées {{vénéneuses}}.
 17931  18180   TEST: ce champignon {{venimeux}}.
 17932  18181   
 17933  18182   
 17934  18183   
 17935  18184   !!
................................................................................
 17993  18242   TEST: la pression entre les membres à un moment devient trop importante
 17994  18243   TEST: Macron saisit la discorde avec le Brésil pour s’opposer à l’embarrassant accord
 17995  18244   TEST: Je vous renvoie pour cela à l’excellent documentaire
 17996  18245   TEST: cuisiner à l’étouffée
 17997  18246   
 17998  18247   
 17999  18248   __infi_loc_à_verbe__
 18000         -    de manière à            ~..(?:ée?s?|ez)$
 18001         -    du mal à                ~..(?:ée?s?|ez)$
 18002         -    intérêt à               ~..(?:ée?s?|ez)$
        18249  +    de manière à    ?[le|l’|la|leur|les|nous|vous|lui]¿     ~..(?:ée?s?|ez)$
        18250  +    du mal à        ?[le|l’|la|leur|les|nous|vous|lui]¿     ~..(?:ée?s?|ez)$
        18251  +    intérêt à       ?[le|l’|la|leur|les|nous|vous|lui]¿     ~..(?:ée?s?|ez)$
        18252  +    enclin à        ?[le|l’|la|leur|les|nous|vous|lui]¿     ~..(?:ée?s?|ez)$
 18003  18253           <<- /infi/ morph(\-1, ":V", ":M") and not (\-1.endswith("ez") and value(>1, "|vous|"))
 18004  18254           --1>> =suggVerbInfi(\-1)                                                                    # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.
 18005  18255   
 18006  18256   TEST: de manière à {{obligé}} ces gens
 18007  18257   TEST: ils ont intérêt à {{obligés}} ces gens
 18008  18258   TEST: Tous ceux qui ont du mal à {{obligé}} ces gens
 18009  18259   
 18010  18260   
 18011  18261   __infi_verbe_de_verbe__
 18012         -    [>cesser|>décider|>défendre|>suggérer|>commander|>essayer|>tenter|>choisir|>permettre|>interdire]  [de|d’]  *WORD
 18013         -        <<- /infi/ not morph(\1, ":N") and analyse(\-1, ":V1.*:Q", ":(?:M|Oo)") or analyse(\-1, ":[123][sp]", ":[MNG]")
        18262  +    [>arrêter|>cesser|>choisir|>commander|>continuer|>décider|>défendre|>envisager|>essayer|>éviter|>interdire|>omettre|>permettre|>prévoir|>refuser|>suggérer|>tenter]
        18263  +        || [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  *WORD
        18264  +        <<- /infi/ not morph(\1, ":N") and (analyse(\-1, ":V1.*:Q", ":(?:M|Oo)") or analyse(\-1, ":[123][sp]", ":[MNG]"))
 18014  18265           --1>> =suggVerbInfi(\-1)                                                                    # Après “\1 de”, le verbe devrait être à l’infinitif.
 18015  18266   
 18016  18267   TEST: cessez d’{{anesthésié}} ces gens !
        18268  +TEST: arrête d’y {{consacré}} autant de temps.
        18269  +TEST: Il tentait de {{raisonné}} en homme libre
 18017  18270   TEST: Le menu Format contient de nombreuses commandes de mise en forme.
 18018  18271   TEST: Le commandant de zone…
 18019  18272   TEST: À quoi rime de décider de mesures écologiques d’en haut
 18020  18273   TEST: L’accès au cannabis thérapeutique où à ses dérivés permettrait de plus aux autorités de santé d’apporter aux malades les garanties nécessaires quant à la qualité, aux concentrations, ainsi qu’aux modalités d’obtention et d’utilisation optimale.
 18021  18274   TEST: l’industrie est également touchée, avec « des pertes de commandes de véhicules chez Renault et chez Peugeot »
 18022  18275   
 18023  18276   
 18024  18277   __infi_qqch_de__
 18025         -    [afin|avant]                                [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18278  +    afin                                        [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18026  18279       avant ?même¿                                [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18027  18280       marre                                       [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18028  18281           <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 de”, le verbe devrait être à l’infinitif.
 18029  18282   
 18030         -    à même                                      [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18031         -    en train                                    [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18032         -    en vue                                      [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18283  +    à [condition|défaut|même]                   [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18284  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “à \2 de”, le verbe devrait être à l’infinitif.
        18285  +
        18286  +    à >seule >fin                               [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18287  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “à seule fin de”, le verbe devrait être à l’infinitif.
        18288  +
        18289  +    en  [droit|état|mesure|train|vue]           [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18033  18290           <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 \2 de”, le verbe devrait être à l’infinitif.
 18034  18291   
        18292  +    >avoir l’ air                               [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18293  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “avoir l’air de”, le verbe devrait être à l’infinitif.
        18294  +
        18295  +    >avoir la chance                            [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18296  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “avoir la chance de”, le verbe devrait être à l’infinitif.
        18297  +
        18298  +    >avoir le droit                             [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18299  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “avoir le droit de”, le verbe devrait être à l’infinitif.
        18300  +
        18301  +    >avoir [besoin|raison]                      [de|d’]  ?[le|les|nous|vous|lui]¿  ~..ée?s?$
        18302  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “avoir \2 de”, le verbe devrait être à l’infinitif.
        18303  +
        18304  +    >avoir [besoin|raison]                      [de|d’]  [l’|la]                   ~..ée?s?$
        18305  +        <<- /infi/ analyse(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1)                             # Après “avoir \2 de”, le verbe devrait être à l’infinitif.
        18306  +
        18307  +    >avoir vite fait                            [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18308  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “avoir vite fait de”, le verbe devrait être à l’infinitif.
        18309  +
        18310  +    >faire  semblant                            [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18311  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “faire semblant de”, le verbe devrait être à l’infinitif.
        18312  +
 18035  18313       [>façon|>manière]                           [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18036  18314       [>intention|>volonté]                       [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18037  18315           <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 de”, le verbe devrait être à l’infinitif s’il s’agit bien de décrire une action.
 18038  18316   
 18039         -    il >être [temps|impossible|indispensable|nécessaire|utile]  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18317  +    il >être [temps|admissible|inadmissible|absurde|contraignant|libérateur|difficile|facile|impossible|indispensable|nécessaire|possible|utile|inutile]
        18318  +        || [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18040  18319           <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “il est \3 de”, le verbe devrait être à l’infinitif.
 18041  18320   
 18042         -    [<start>|,] impossible  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18043         -        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “impossible de”, le verbe devrait être à l’infinitif.
        18321  +    il >être hors de question                   [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18322  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “il est hors de question de”, le verbe devrait être à l’infinitif.
 18044  18323   
 18045         -    force [est|était]  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18324  +    [<start>|,] [>capable|>incapable|impossible|inutile]  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18325  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\2 de”, le verbe devrait être à l’infinitif.
        18326  +
        18327  +    force [est|était]                           [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
 18046  18328           <<- /infi/ not value(<1, "|une|la|cette|ma|ta|sa|notre|votre|leur|quelle|de|d’|") and analyse(\-1, ":Q", ":M")
 18047  18329           --1>> =suggVerbInfi(\-1)                                                                    # Après “force est de”, le verbe devrait être à l’infinitif.
 18048  18330   
        18331  +    sous peine                                  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        18332  +        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “sous peine de”, le verbe devrait être à l’infinitif.
        18333  +
 18049  18334   TEST: afin de leur {{percée}} une ouverture
 18050  18335   TEST: en train de {{percées}}
        18336  +TEST: elle tricha à seule fin d’{{allée}} à l’université
 18051  18337   TEST: ils sont à même de {{trouvé}} la bonne réponse
 18052  18338   TEST: Nous étions en train de {{trouvé}} une solution à ces soucis récurrents.
        18339  +TEST: il a l’air de {{pensée}} qu’on est des crétins
        18340  +TEST: tu avais raison de {{pensée}} ça
        18341  +TEST: nous eûmes la chance de la {{trouvée}} facilement
        18342  +TEST: avoir raison de la {{considérée}} ainsi
        18343  +TEST: vous avez le droit de lui {{craché}} à la gueule
        18344  +TEST: ils ont vite fait de nous {{poussée}} à bout
 18053  18345   TEST: elle est en train de {{mangée}}
 18054  18346   TEST: je déteste sa manière de la {{rabaissée}} en permanence.
        18347  +TEST: il est hors de question de {{menée}} cette attaque ainsi
 18055  18348   TEST: il serait temps de {{poussée}} la logique jusqu’au bout
 18056  18349   TEST: impossible d’{{échappée}} à cette horreur.
 18057  18350   TEST: Force est d’{{pensée}} que nous allons y arriver avec seulement nos bonnes intentions.
        18351  +TEST: sous peine de nous {{pesée}} lourd sun l’estomac
        18352  +TEST: Sont-ils en mesure de nous {{fabriqué}} ces armes ?
        18353  +TEST: Ne fais pas semblant de l’{{oubliée}}.
 18058  18354   
 18059  18355   
 18060  18356   __infi_de_verbe__
 18061  18357       [de|d’]  [le|l’|leur|les]             @:V¬:[YNAM]|>(?:lui|plus)/
 18062  18358       [<start>|,]  [de|d’] [nous|vous|lui]  @:V¬:[YE]|>(?:lui|plus)/
 18063  18359           <<- /infi/ \-1.islower() --1>> =suggVerbInfi(\-1)                               # Erreur probable. Après “de”, le verbe devrait être à l’infinitif.
 18064  18360   
................................................................................
 18068  18364       [de|d’] [ne|n’]    [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]  @:V¬:Y|>(?:lui|plus|point)/
 18069  18365       [de|d’] [ne|n’|en|me|m’|te|t’|se|s’|y]                                       @:V¬:Y|>(?:lui|plus|point)/
 18070  18366       [de|d’] ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]  [le|la|l’|les|en|y]        @:V¬:Y
 18071  18367       [de|d’] ?[ne|n’]¿  [le|la|l’|les]                 [lui|leur|en|y]            @:V¬:Y
 18072  18368       [de|d’] ?[ne|n’]¿  [lui|leur]                     en                         @:V¬:Y
 18073  18369           <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “de”, le verbe devrait être à l’infinitif.
 18074  18370   
 18075         -    en  [droit|état|mesure|train]  [de|d’]  ?[nous|vous|le|la|l’|les|leur]¿  @:V1.*:Q
 18076         -        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “\1 \2 \3”, le verbe devrait être à l’infinitif.
 18077         -
 18078         -    >faire  ?[pas|jamais|guère]¿  semblant  [de|d’]  ?[nous|vous|le|la|l’|les|leur]¿  @:V1.*:Q
 18079         -        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “faire semblant de”, le verbe devrait être à l’infinitif.
 18080         -
 18081  18371       [de|d’]  @:V1.*:Q¬:N
 18082  18372           <<- /infi/ not \2[0:1].isupper() and not morph(<1, ">(?:en|passer)/")
 18083         -            and not before("(?i)\\b(?:quelqu(?:e chose|’une?)|qu’y a-t-il |(?:l(es?|a)|nous|vous|me|te|se) trait|personne|points? +$|autant +$|ça +|rien d(?:e |’)|rien(?: +[a-zéèêâîûù]+|) +$)")
        18373  +            and not before("(?i)(?:quelqu(?:e chose|’une?)|qu’y a-t-il |\\b(?:l(?:es?|a)|nous|vous|me|te|se) trait|personne|points? +$|autant +$|ça +|rien d(?:e |’)|rien(?: +[a-zéèêâîûù]+|) +$)")
 18084  18374               and not tag_before(\1, "ce_que")
 18085  18375           -2>> =suggVerbInfi(\2)                                                          # Le verbe devrait être à l’infinitif.
 18086  18376   
 18087  18377   TEST: d’en {{parlé}} sans cesse
 18088  18378   TEST: cela suffit de les {{aimait}}
 18089  18379   TEST: de ne leur en {{avancé}} que le nécessaire.
 18090  18380   TEST: de l’y {{poussé}}
 18091         -TEST: arrête d’y {{consacré}} autant de temps.
 18092  18381   TEST: je suis certain d’en {{choque}} plusieurs.
 18093  18382   TEST: elle était capable de la {{trouvait}} où qu’elle soit.
 18094  18383   TEST: de me le {{facturez}}
 18095  18384   TEST: suffit de {{la}} {{finit}}
 18096  18385   TEST: Il s’agit de me {{donnait}} tout ça.
 18097  18386   TEST: j’étais incapable de m’{{orientait}} dans la bonne direction.
 18098  18387   TEST: ils étaient susceptibles de m’y {{trouvaient}}
 18099         -TEST: Il tentait de {{raisonné}} en homme libre
 18100  18388   TEST: sa façon de {{nettoyez}} était inefficace.
 18101  18389   TEST: elle a délibérément omis de les {{inclurent}}.
 18102         -TEST: Sont-ils en mesure de nous {{fabriqué}} ces armes ?
 18103         -TEST: Ne fais pas semblant de l’{{oubliée}}.
 18104  18390   TEST: d’{{mangé}} je ne suis pas capable
 18105  18391   TEST: elle s’engage de ne les lui donner qu’en dernier recours.
 18106  18392   TEST: l’idée consiste de la lui donner sans contrepartie et voir ce qu’il en fera.
 18107  18393   TEST: de leur plus grand fils, ils attendent beaucoup.
 18108  18394   TEST: de n’importe quelle manière
 18109  18395   TEST: un libéralisme trop « individualiste » s’est transformé en de supposées demandes de droits spécifiques
 18110  18396   TEST: soit 40 % de plus comparé au quinquennat précédent
................................................................................
 18221  18507       >avoir beau ?[ne|n’]¿   [lui|leur|y]                    en                       ~..(?:ée?s?|ez|ai[ts]?)$
 18222  18508           <<- /infi/ morph(\-1, ":V1") --1>> =suggVerbInfi(\-1)                                       # Après “avoir beau”, le verbe devrait être à l’infinitif.|http://fr.wiktionary.org/wiki/avoir_beau
 18223  18509   
 18224  18510   TEST: Ils ont beau {{consacré}} le plus clair de leur temps à ce projet, ça n’avance guère.
 18225  18511   
 18226  18512   
 18227  18513   __infi_est_ce_que__
 18228         -    est-ce  que  @:(?:V1.*:Q|[13]s|2[sp])¬:[GYWMN]
        18514  +    est-ce  [que|qu’]  @:(?:V1.*:Q|[13]s|2[sp])¬:[GYWMN]
 18229  18515           <<- /infi/ not value(<1, "|que|qu’|") -3>> =suggVerbInfi(\3)                                # Après “est-ce que”, le verbe devrait être à l’infinitif.
 18230  18516   
 18231  18517   TEST: est-ce que {{rapporté}} ces données nous aidera ?
 18232  18518   TEST: est-ce que {{priait}} est la solution ?
 18233  18519   TEST: Est-ce que Pierre Xazzz va bien ?
 18234  18520   TEST: Qu’est-ce que rapporte réellement Dassault & Co au budget
 18235  18521   
................................................................................
 18274  18560   TEST: Il faudrait l’{{essayé}}.
 18275  18561   TEST: Il faudra ne {{touché}} qu’aux extrémités.
 18276  18562   TEST: faut-il {{pensé}} à ces choses-là encore et encore ?
 18277  18563   TEST: il faut n’{{estimait}} que la valeur de nos actes
 18278  18564   TEST: il fallait bien cela pour nous épargner
 18279  18565   TEST: une faille s’est ouverte sous nos pieds
 18280  18566   TEST: il faut en moyenne 1000 litres d’eau pour produire un kilo de céréales
        18567  +TEST: Xi Jinping a réaffirmé en janvier dernier qu’il utiliserait s’il le faut la force militaire
 18281  18568   
 18282  18569   
 18283  18570   __infi_faire__
 18284  18571       >faire  ~(?:ée?s?|ez)$
 18285  18572           <<- /infi/ not morph(<1, ">(?:en|de|être)/") and morph(\2, ":V", ":[MG]") and not (morph(\1, ":N") and morph(\2, ":Q.*:m:[sp]"))
 18286  18573           -2>> =suggVerbInfi(\2)                                                                      # Après le verbe “faire”, ce verbe devrait être à l’infinitif.
 18287  18574   
................................................................................
 18361  18648   
 18362  18649   TEST: Mieux vaut {{consacré}} son temps à des occupations utiles.
 18363  18650   TEST: Mieux ne vaut pas {{arrivé}} en retard.
 18364  18651   TEST: il eût mieux valu {{oublié}} cette affaire plutôt que réveiller ce dragon endormi.
 18365  18652   
 18366  18653   
 18367  18654   __infi_verbes__
 18368         -    [>aimer|>désirer|>espérer|>oser|>préférer|>souhaiter]  ?[pas|plus|point|guère|jamais]¿  ~..(?:ée?s?|ez)$
        18655  +# regarder, écouter, ouïr
        18656  +    [>aimer|>désirer|>entendre|>espérer|>oser|>préférer|>souhaiter]  ?[pas|plus|point|guère|jamais]¿  ~..(?:ée?s?|ez)$
 18369  18657           <<- /infi/ morph(\1, ":", ":[GN]") and morph(\2, ":V", ":M")
 18370  18658           -2>> =suggVerbInfi(\2)                                                                      # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.
 18371  18659   
 18372  18660       [>aller|>venir|>partir]  ?[pas|plus|point|guère|jamais|rien]¿  ~..(?:ée?s?|ez)$
 18373  18661           <<- /infi/ morph(\1, ":", ":[GN]") and morph(\-1, ":V", ":M|>(?:accompagner|armer|armurer|casquer|déguiser)/")
 18374  18662           --1>> =suggVerbInfi(\2)                                                                     # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.
 18375  18663   
 18376         -TEST: elle préférait {{mangée}} seule.
 18377         -TEST: Il venait, comme d’habitude, {{discuté}} avec son ami.
 18378         -TEST: Ces types-là venaient {{mangé}} chez moi tous les dimanches.
 18379         -TEST: ils viennent bien entendu {{attaqué}} le parlement
 18380         -TEST: ils vont par voie de conséquence vraiment {{attaqué}} la banque
 18381         -TEST: elles ont pu {{mangé}}
 18382         -TEST: Cette affaire ne va rien {{arrangé}}.
 18383         -TEST: ils vont de manière non conventionnelle {{fêtée}} leur réussite.
 18384         -TEST: ils vont de manière absurde {{arrivé}} au résultat inverse à leurs espérances
 18385         -TEST: croyez-vous qu’ils oseront {{proposé}} des amendements aussi audacieux ?
        18664  +TEST: elle préférait {{mangée}} seule.                                                  ->> manger
        18665  +TEST: Il venait, comme d’habitude, {{discuté}} avec son ami.                            ->> discuter
        18666  +TEST: Ces types-là venaient {{mangé}} chez moi tous les dimanches.                      ->> manger
        18667  +TEST: ils viennent bien entendu {{attaqué}} le parlement                                ->> attaquer
        18668  +TEST: ils vont par voie de conséquence vraiment {{attaqué}} la banque                   ->> attaquer
        18669  +TEST: elles ont pu {{mangé}}                                                            ->> manger
        18670  +TEST: Cette affaire ne va rien {{arrangé}}.                                             ->> arranger
        18671  +TEST: ils vont de manière non conventionnelle {{fêtée}} leur réussite.                  ->> fêter
        18672  +TEST: ils vont de manière absurde {{arrivé}} au résultat inverse à leurs espérances     ->> arriver
        18673  +TEST: croyez-vous qu’ils oseront {{proposé}} des amendements aussi audacieux ?          ->> proposer
        18674  +TEST: Quelle est cette femme que j’ai entendue {{chanté}} ?                             ->> chanter
        18675  +TEST: elles partaient {{prié}} chaque matin                                             ->> prier
        18676  +TEST: jamais entendu {{parlé}} de ces choses                                            ->> parler
 18386  18677   TEST: Elles étaient venues armées.
 18387  18678   TEST: Il vint déguisé en mousquetaire.
 18388  18679   TEST: D’ailleurs j’irai armé.
 18389  18680   TEST: J’irai armé de mon épée.
 18390  18681   TEST: Si possible, venez accompagné.
 18391  18682   TEST: Elle vint accompagnée de son père.
 18392  18683   
................................................................................
 18842  19133   __ppas_sont_adj__
 18843  19134       sont  *WORD
 18844  19135           <<- /ppas/ morph(\2, ":V", ":(?:N|A|Q|W|G|3p)") and not tag_before(\1, "ce_que")
 18845  19136           -2>> =suggVerbPpas(\2, ":m:p")                      # Incohérence : “\2” n’est pas un participe passé.
 18846  19137   
 18847  19138   TEST: après avoir mis à jour sont {{profile}}.
 18848  19139   
 18849         -
 18850         -
 18851         -!!!! Adverbes après verbe                                                                         !!
 18852         -
 18853         -# fort
 18854         -__sgpl_verbe_fort__
 18855         -    forts
 18856         -        <<- /sgpl/ morph(<1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q|Y)|>(?:affirmer|trouver|croire|désirer|estimer|préférer|penser|imaginer|voir|vouloir|aimer|adorer|rendre|souhaiter)/")
 18857         -            and not morph(>1, ":A.*:[me]:[pi]")
 18858         -        ->> fort                                                # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.
 18859         -
 18860         -TEST: ces emmerdeurs crient bien trop {{forts}}
 18861         -TEST: ces animaux paraissent forts, mais ils sont faibles.
 18862         -TEST: ils sont forts, ces gars-là.
 18863         -TEST: ils se croient forts.
 18864         -TEST: je les imagine forts et intelligents.
 18865         -TEST: elles les veulent forts et astucieux.
 18866         -TEST: les écarts ont été plus forts en une génération
 18867         -TEST: Avec le même nombre de bulletins, les xénophobes apparaîtront plus forts.
 18868         -TEST: Pour leur permettre d’être plus forts face aux maîtres de tous bords, patrons, maris ou bureaucrates.
 18869         -TEST: Il nous rend forts.
 18870         -
 18871         -
 18872         -# bien
 18873         -__sgpl_verbe_bien__
 18874         -    biens
 18875         -        <<- /sgpl/ morph(<1, ":V", ":[DA].*:p") ->> bien        # Confusion probable. Ici, “bien” est un adverbe, donc invariable.
 18876         -
 18877         -TEST: Ils vont {{biens}}.
 18878         -TEST: Elles travaillaient vraiment {{biens}}.
 18879         -TEST: Il ne comprenait vraiment pas très {{biens}} ces principes de base.
 18880         -TEST: Il a de grands biens.
 18881         -TEST: Ce sont des biens de peu de valeur.
 18882         -
 18883  19140   
 18884  19141   
 18885  19142   !!
 18886  19143   !!
 18887  19144   !!!! Conjugaisons nous / vous (2ᵉ partie)                                                         !!
 18888  19145   !!
 18889  19146   !!
................................................................................
 20118  20375   
 20119  20376   TEST: Étaient-elles {{arriver}} ?
 20120  20377   TEST: Sont-elles tout à fait {{arriver}} ?
 20121  20378   TEST: Ne sont-elles pas {{aveugle}}
 20122  20379   TEST: demeurent-elles {{présente}}
 20123  20380   
 20124  20381   
        20382  +__ppas_ayant_été_pronom_ppas__
        20383  +    ayant  été  lui-même  @:[QA].*:[fp]¬:[me][si]
        20384  +        <<- /ppas/ --1>> =suggMasSing(\-1)                              # Accord avec “\3” : “\-1” devrait être au masculin singulier.
        20385  +
        20386  +    ayant  été  elle-même  @:[QA].*:[mp]¬:[fe][si]
        20387  +        <<- /ppas/ --1>> =suggFemSing(\-1)                              # Accord avec “\3” : “\-1” devrait être au féminin singulier.
        20388  +
        20389  +    ayant  été  [nous-même|vous-même]  @:[QA].*:p¬:[si]
        20390  +        <<- /ppas/ -3>> \3s                                             # Accord avec “\-1” : “\3” devrait être au pluriel.
        20391  +        <<- /ppas/ __also__ --1>> =suggSing(\-1)                        # Accord avec “\3” : “\-1” devrait être au singulier.
        20392  +
        20393  +    ayant  été  [nous-mêmes|vous-mêmes]  @:[QA].*:s¬:[pi]
        20394  +        <<- /ppas/ -3>> =\3[:-1]                                        # Accord avec “\-1” : “\3” devrait être au singulier.
        20395  +        <<- /ppas/ __also__ --1>> =suggPlur(\-1)                        # Accord avec “\3” : “\-1” devrait être au pluriel.
        20396  +
        20397  +    ayant  été  eux-mêmes  @:[QA].*:[fs]¬:[me][pi]
        20398  +        <<- /ppas/ --1>> =suggMasPlur(\-1)                              # Accord avec “\3” : “\-1” devrait être au masculin pluriel.
        20399  +
        20400  +    ayant  été  elles-mêmes  @:[QA].*:[ms]¬:[fe][pi]
        20401  +        <<- /ppas/ --1>> =suggFemPlur(\-1)                              # Accord avec “\3” : “\-1” devrait être au féminin pluriel.
        20402  +
        20403  +    ayant été [lui-même|elle-même|nous-même|vous-même|nous-mêmes|vous-mêmes|eux-mêmes|elles-mêmes]
        20404  +        <<- ~3>> *
        20405  +
        20406  +TEST: ayant été lui-même {{attaquée}}                               ->> attaqué
        20407  +TEST: ayant été elle-même {{pris}} dans la tourmente                ->> prise
        20408  +TEST: ayant été {{vous-même}} {{blâmés}}                            ->> vous-mêmes|||blâmé
        20409  +TEST: ayant été {{nous-mêmes}} {{blâmé}}                            ->> nous-même|||blâmés
        20410  +TEST: ayant été eux-mêmes {{chapitré}}                              ->> chapitrés
        20411  +TEST: ayant été elles-mêmes {{ignorés}} par leur hiérarchie         ->> ignorées
        20412  +
        20413  +
 20125  20414   
 20126  20415   !!
 20127  20416   !!
 20128  20417   !!!! Se croire/considérer/montrer/penser/révéler/savoir/sentir/voir/vouloir + participe passé/adj !!
 20129  20418   !!
 20130  20419   !!
 20131  20420   
................................................................................
 20342  20631   TEST: il en a toujours {{était}} ainsi                                              ->> été
 20343  20632   TEST: Ils avaient barre sur lui.
 20344  20633   
 20345  20634   
 20346  20635   __ppas_nous_vous_avoir__
 20347  20636       [nous|vous]  ?[ne|n’]¿  ?[lui|leur]¿  >avoir  *WORD
 20348  20637       <<- /ppas/ morph(\1, ":Os")
 20349         -        and not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        20638  +        and not value(\-1, "|barre|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
 20350  20639           and value(<1, "|<start>|,|comme|comment|et|lorsque|mais|où|ou|quand|qui|pourquoi|puisque|quoique|si|sinon|")
 20351  20640           and not \-1.isupper() and morph(\-1, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
 20352  20641       --1>> =suggVerbPpas(\-1, ":m:s")
 20353  20642       # 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
 20354  20643   
 20355  20644   TEST: Nous avons {{donne}} tout notre potentiel.
 20356  20645   TEST: mais nous avons {{était}} surpris par cette annonce.
................................................................................
 20358  20647   TEST: Vous lui avez {{donnés}} un cadeau.
 20359  20648   TEST: nous avions quelque peu {{tempérés}} leurs ardeurs
 20360  20649   TEST: D’un côté, le modèle occidental, […], nous a libérés de […]
 20361  20650   
 20362  20651   
 20363  20652   __ppas_det_nom_avoir__
 20364  20653       [un|une|des|le|la|l’|les|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leur|leurs|certains|certaines|quelques|plusieurs]  *WORD  ?[ne|n’]¿  ?[lui|leur]¿  >avoir  *WORD
 20365         -    <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        20654  +    <<- /ppas/ not value(\-1, "|barre|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
 20366  20655           and value(<1, "|<start>|,|comme|comment|et|lorsque|mais|où|ou|quand|qui|pourquoi|puisque|quoique|si|sinon|")
 20367  20656           and morph(\2, ":[NA]", ":G") and not \-1.isupper() and morph(\-1, ":(?:[123][sp]|Y|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
 20368  20657           and not (\-2 == "avions" and morph(\-1, ":3[sp]"))
 20369  20658       --1>> =suggVerbPpas(\-1, ":m:s")
 20370  20659       # 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
 20371  20660   
 20372  20661   TEST: Les femmes lui avait {{conseillées}} de se taire.
................................................................................
 20375  20664   TEST: Les élèves lui ont {{données}}.
 20376  20665   TEST: Les élèves lui ont {{donnés}} une réponse.
 20377  20666   TEST: Les élèves leur ont {{donnée}} ça.
 20378  20667   TEST: Le maire a {{créée}} un risque.
 20379  20668   TEST: le général n’a pas encore {{finit}} sa sieste.
 20380  20669   TEST: Certains les ont d’abord jugés trop lents.
 20381  20670   TEST: les timides ou les personnes n’ayant pas confiance en elles vont avoir tendance à éviter de regarder dans les yeux.
        20671  +TEST: Le théâtre, en l’occurrence, a charge de sensibiliser
 20382  20672   
 20383  20673   
 20384  20674   __ppas_les_avoir__
 20385  20675       les  >avoir  @:V[0-3]..t.*:Q.*:s¬:[GWpi]
 20386  20676           <<- /ppas/ morph(\2, ":V0a") -3>> =suggPlur(\3)
 20387  20677           # Accord avec le COD “les” : Le participe passé “\2” devrait être au pluriel (et accordé en genre).|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais
 20388  20678   
................................................................................
 20442  20732   
 20443  20733   TEST: des hommes, des femmes, des enfants qui ne leur avaient {{faits}} que du bien.
 20444  20734   
 20445  20735   
 20446  20736   __ppas_avoir_ppas_mas_sing__
 20447  20737       [<start>|,|après|pour|pourquoi|quand|que|qu’|sans|d’|de|qui]  ?[ne|n’]¿  ?[lui|leur]¿   avoir  @:Q.*:[pf]¬:m:[si]
 20448  20738       [<start>|,|après|pour|pourquoi|quand|que|qu’|sans|d’|de|qui]  ?[ne|n’]¿  [m’|t’]        avoir  @:Q.*:p¬:[si]
 20449         -        <<- /ppas/ not value(\-1, "|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        20739  +        <<- /ppas/ not value(\-1, "|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
 20450  20740           --1>> =suggVerbPpas(\-1, ":m:s")                      # Le participe passé devrait être au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais
 20451  20741   
 20452  20742   TEST: Avoir {{instruite}} notre mère
 20453  20743   TEST: Après avoir {{baissés}} nos tarifs
 20454  20744   TEST: Je viendrai, après avoir vraiment {{écoutée}} le prof.
 20455  20745   TEST: Merci de m’avoir {{lus}}                                      ->> lu
 20456  20746   TEST: Pourquoi m’avoir {{ignorés}} ainsi ?
................................................................................
 20459  20749   
 20460  20750   ## avoir avec participe passé
 20461  20751   __ppas_m_t_l_avoir__
 20462  20752       [l’|m’]  ?[en|y]¿  >avoir  @:(?:Y|[123][sp])¬:[QGWMX]
 20463  20753           <<- /ppas/ --1>> =suggVerbPpas(\-1, ":m:s")         # Confusion : employez un participe passé.
 20464  20754   
 20465  20755       t’  ?[en|y]¿  >avoir  @:(?:Y|[123][sp])¬:[QGWMX]
 20466         -        <<- /ppas/ not value(\-1, "|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        20756  +        <<- /ppas/ not value(\-1, "|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
 20467  20757           --1>> =suggVerbPpas(\-1, ":m:s")                    # Confusion : employez un participe passé.
 20468  20758   
 20469  20759   TEST: m’avoir {{terminer}}.
 20470  20760   TEST: il m’a {{souffler}} la bonne réponse.
 20471  20761   TEST: elle t’en a {{parle}}.
 20472  20762   TEST: c’est vous qui m’avez {{convertit}}.
 20473  20763   TEST: parce que t’as envie que je le fasse
................................................................................
 20480  20770       >avoir  ~..e[rz]$
 20481  20771           <<- /ppas/ not value(\1, "|A|avions|avoirs|") and morph(\2, ":(?:Y|2p)")
 20482  20772           -2>> =suggVerbPpas(\2, ":m:s")                                              # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.
 20483  20773           <<- /ppas/ __also__ and \1 == "a" and \2.endswith("r") and not value(<1, "|n’|m’|t’|l’|il|on|elle|")
 20484  20774           -1>> à                                                                      # Confusion probable : “a” est une conjugaison du verbe avoir. Pour la préposition, écrivez “à”.
 20485  20775   
 20486  20776       >avoir  ~..it$
 20487         -        <<- /ppas/ not value(\1, "|A|avoirs|") and morph(\2, ":V(?:2.*:Ip.*:3s|3.*:Is.*:3s)", ":[NAQ]")
        20777  +        <<- /ppas/ not value(\1, "|A|avions|avoirs|") and morph(\2, ":V(?:2.*:Ip.*:3s|3.*:Is.*:3s)", ":[NAQ]")
 20488  20778           -2>> =suggVerbPpas(\2, ":m:s")                                              # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.
 20489  20779   
 20490  20780       >avoir  ~.ut$
 20491         -        <<- /ppas/ not value(\1, "|A|avoirs|") and morph(\2, ":V3.*:Is.*:3s", ":[NAQ]")
        20781  +        <<- /ppas/ not value(\1, "|A|avions|avoirs|") and morph(\2, ":V3.*:Is.*:3s", ":[NAQ]")
 20492  20782           -2>> =suggVerbPpas(\2, ":m:s")                                              # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.
 20493  20783   
 20494  20784   TEST: Avoir {{marcher}} toute la journée m’a épuisée.
 20495  20785   TEST: L’homme, voyez-vous, {{a}} réellement {{marcher}} sur la Lune.
 20496  20786   TEST: Je ne lui ai rien {{demander}}, mais il est venu à notre secours au nom de la justice.
 20497  20787   TEST: Avoir {{finit}} son œuvre dans les temps, ce n’est pas toujours suffisant.
 20498  20788   TEST: ces hommes, n’en doutez pas, auraient {{put}} trouver la solution.
        20789  +TEST: à celui qui aurait {{déclarer}} une telle horreur
 20499  20790   TEST: nous avons vu des avions voler haut dans le ciel.
 20500  20791   
 20501  20792   
 20502  20793   
 20503  20794   !!
 20504  20795   !!
 20505  20796   !!!! COD précédant que                                                                            !!
................................................................................
 20585  20876   
 20586  20877   
 20587  20878   
 20588  20879   !!!! Participes passés avec “avoir” (formes interrogatives)                                       !!
 20589  20880   
 20590  20881   __ppas_avoir_interrogatif__
 20591  20882       *WORD  /VCint  *WORD
 20592         -        <<- /ppas/ morphVC(\2, ":V0a") and not value(\3, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
 20593         -        <<- /ppas/ morph(\3, ":(?:Y|[123][sp])", ":[QM]")
        20883  +        <<- /ppas/ morphVC(\2, ":V0a") and not value(\3, "|barre|charge|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
        20884  +        <<- /ppas/ morph(\3, ":(?:Y|[123][sp])", ":[QMG]")
 20594  20885           -3>> =suggVerbPpas(\3, ":m:s")                      # Incohérence probable avec “\2”. Après “avoir”, ce verbe devrait être un participe passé.
 20595  20886           <<- /ppas/ __else__ and not value(\1, "|les|l’|m’|t’|nous|vous|en|") and morph(\3, ":Q.*:[fp]", ":m:[si]")
 20596  20887               and not morph(\1, ":[NA].*:[fp]") and not before("(?i)\\b(?:quel(?:le|)s?|combien) ")
 20597  20888           -3>> =suggVerbPpas(\3, ":m:s")                      # Avec “avoir”, il faut un participe passé (au masculin singulier, sauf éventuellement si un COD précède).
 20598  20889   
 20599  20890       [<start>|,]  ?n’¿  /VCint  *WORD
 20600         -        <<- /ppas/ morphVC(\-2, ":V0a") and not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
 20601         -        <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QM]")
        20891  +        <<- /ppas/ morphVC(\-2, ":V0a") and not value(\-1, "|barre|charge|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
        20892  +        <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QMG]")
 20602  20893           --1>> =suggVerbPpas(\-1, ":m:s")                    # Incohérence probable avec “\-2”. Après “avoir”, ce verbe devrait être un participe passé.
 20603  20894           <<- /ppas/ __else__ and morph(\-1, ":Q.*:[fp]", ":m:[si]")
 20604  20895           --1>> =suggVerbPpas(\-1, ":m:s")                    # Avec “avoir”, il faut un participe passé (au masculin singulier, sauf éventuellement si un COD précède).
 20605  20896   
 20606  20897   TEST: cet été ont-ils {{mentionnés}} la sécheresse                              ->> mentionné
 20607  20898   TEST: quand ont-ils {{donner}} satisfaction                                     ->> donné
 20608  20899   TEST: qui a-t-elle {{connut}}                                                   ->> connu
................................................................................
 20617  20908   TEST: Avez-vous {{signez}} le contrat ?
 20618  20909   TEST: Ont-ils {{finit}} le travail ?
 20619  20910   TEST: Ai-je déjà {{reconnut}} mes torts ?
 20620  20911   TEST: N’avais-tu pas crainte de tout perdre ?
 20621  20912   TEST: Combien de bêtes n’as-tu pas déjà massacrées
 20622  20913   TEST: Combien de bêtes as-tu déjà massacrées
 20623  20914   TEST: A-t-il Pierre pour ami ?
        20915  +TEST: Quel lien y a-t-il entre donner et recevoir ?
 20624  20916   
 20625  20917   
 20626  20918   __ppas_l_m_t_avoir_interrogatif__
 20627  20919       [l’|m’|t’]  /VCint  *WORD
 20628  20920           <<- /ppas/ morphVC(\2, ":V0a") and morph(\3, ":(?:Y|2p|Q.*:p|3[sp])", ":[GWsi]")
 20629  20921           -3>> =suggVerbPpas(\3, ":m:s")                      # Accord avec le COD “\1” : le participe passé “\3” devrait être au singulier (et accordé en genre).
 20630  20922   
................................................................................
 22074  22366   TEST: comment {{sait elle}}
 22075  22367   TEST: qui {{était elle}} ?
 22076  22368   TEST: quel travail {{avait elle}} accompli ?
 22077  22369   TEST: je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça.
 22078  22370   TEST: C’était elle qui avait pris le contrôle.
 22079  22371   
 22080  22372   
 22081         -__inte_union_nous!7__
        22373  +__inte_union_nous2!7__
 22082  22374       [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons$  nous  [<end>|,]
 22083  22375       [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons$  nous  @:¬:1p
 22084  22376           <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]")
 22085  22377           -2:3>> \2-nous                                                                              # Forme interrogative ? Mettez un trait d’union.
 22086  22378   
 22087  22379       [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [sommes|étions|fûmes|fussions|serons|serions|avons|avions|eûmes|eussions|aurons|aurions]  nous
 22088  22380           <<- /inte/ space_after(\2, 1, 1)
................................................................................
 22091  22383       *WORD  ~ons$  nous  [<end>|,]
 22092  22384       *WORD  ~ons$  nous  @:¬:(?:Y|1p)
 22093  22385           <<- /inte/ space_after(\2, 1, 1) and
 22094  22386               ( (value(\2, "|avions|") and not morph(\1, ":A.*:[me]:[sp]") and not morph(\-1, ":(:?3[sp]|Ov)"))
 22095  22387               or (morph(\2, ":V.*:1p", ":[GNW]") and not morph(\1, ":Os")) )
 22096  22388           -2:3>> \2-nous                                                                              # Forme interrogative ? Mettez un trait d’union.
 22097  22389   
 22098         -TEST: {{retrouverons nous}} enfin la tranquilité ?
 22099         -TEST: Ne {{sommes nous}} pas des dieux ?
 22100         -TEST: À quelle autorité {{prétendons nous}} si…
        22390  +TEST: y {{retrouverons nous}} enfin la tranquilité ?
        22391  +TEST: pourquoi {{sommes nous}} réellement des dieux ?
        22392  +TEST: À quelle autorité {{prétendons nous}} sur ces gens…
 22101  22393   TEST: quel exercice {{avions nous}} revu ?
 22102         -TEST: pourquoi n’en entendons nous jamais parler ?
        22394  +TEST: À quelle autorité {{prétendons nous}} si…
        22395  +TEST: pourquoi {{entendons nous}} souvent ces injonctions idiotes ?
 22103  22396   TEST: les avions nous font rêver.
 22104  22397   
 22105  22398   
 22106         -__inte_union_vous!7__
 22107         -    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..e[zs]$  vous  [<end>|,]
 22108         -    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..e[zs]$  vous  @:¬:2p
        22399  +__inte_union_vous2!7__
        22400  +    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..ez$  vous  [<end>|,]
        22401  +    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..ez$  vous  @:¬:2p
 22109  22402           <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]")
 22110  22403           -2:3>> \2-vous                                                                              # Forme interrogative ? Mettez un trait d’union.
 22111  22404   
 22112  22405       [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [êtes|étiez|fûtes|fussiez|serez|seriez|avez|aviez|eûtes|eussiez|aurez|auriez]  vous
 22113  22406           <<- /inte/ space_after(\2, 1, 1)
 22114  22407           -2:3>> \2-vous                                                                              # Forme interrogative ? Mettez un trait d’union.
 22115  22408   
................................................................................
 22116  22409       *WORD  ~..e[zs]$  vous  [<end>|,]
 22117  22410       *WORD  ~..e[zs]$  vous  @:¬:(?:Y|2p)
 22118  22411           <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GNW]") and not value(\2, "|veuillez|") and not morph(\1, ":Os")
 22119  22412           -2:3>> \2-vous                                                                              # Forme interrogative ? Mettez un trait d’union.
 22120  22413   
 22121  22414   TEST: Mais {{soutiendrez vous}} cette proposition ?
 22122  22415   TEST: comment {{êtes vous}} arrivées là ?
 22123         -TEST: quelle tarte {{voulez vous}} ?
        22416  +TEST: quel genre de femme {{voulez vous}} réellement ?
        22417  +TEST: quel exercice {{avions nous}} réellement ?
        22418  +TEST: quel homme {{voulez vous}} qu’il devienne
 22124  22419   TEST: Veuillez vous instruire avant de contester ces mesures.
 22125  22420   
 22126  22421   
 22127  22422   __inte_union_ils!7__
 22128  22423       [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  ils  [<end>|,]
 22129  22424       [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  ils  @:¬:3p
 22130  22425           <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GW]")
................................................................................
 23037  23332   TEST: j’{{aurai}} aimé que vous m’en parliez.
 23038  23333   TEST: Quand j’en aurai fini avec eux, vous aurez du mal à les reconnaître.
 23039  23334   TEST: Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
 23040  23335   TEST: Quand j’aurai soif et faim, je m’arrêterai.
 23041  23336   
 23042  23337   
 23043  23338   # Si suivi du conditionnel ou du subjonctif
 23044         -__vmode_si_sujet__
        23339  +__vmode_si_sujet_conditionnel_subjonctif__
 23045  23340       [<start>|,]  si     [j’|J’|t’|T’]  @:[SK]¬:(?:G|V0|I)
 23046  23341       [<start>|,]  si     @:(?:Os|M)     @:[SK]¬:(?:G|V0|I)
 23047  23342       [<start>|,]  s’     [il|ils]       @:[SK]¬:(?:G|V0|I)
 23048  23343           <<- /vmode/ -4>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.
 23049  23344   
 23050  23345   TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
 23051  23346   TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.
 23052  23347   TEST: Si j’{{irais}} le faire
 23053  23348   
        23349  +
        23350  +__vmode_si_sujet_conditionnel__
        23351  +    <start>  si  [je|j’]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23352  +    <start>  si  [je|j’]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23353  +        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":1s")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si j’avais perdu, j’aurais recommencé. »
        23354  +
        23355  +    <start>  si  [tu|t’]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23356  +    <start>  si  [tu|t’]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23357  +        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":2s")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si tu avais perdu, tu aurais recommencé. »
        23358  +
        23359  +    <start>  [si|s’]  [il|on|elle]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23360  +    <start>  [si|s’]  [il|on|elle]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23361  +        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":3s")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « S’il avait perdu, il aurait recommencé. »
        23362  +
        23363  +    <start>  si  nous  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23364  +    <start>  si  nous  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23365  +        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":1p")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si nous avions perdu, nous aurions recommencé. »
        23366  +
        23367  +    <start>  si  vous  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23368  +    <start>  si  vous  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23369  +        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":2p")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si vous aviez perdu, vous auriez recommencé. »
        23370  +
        23371  +    <start>  [si|s’]  [ils|elles]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23372  +    <start>  [si|s’]  [ils|elles]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23373  +        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":3p")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si elles avaient perdu, elles auraient recommencé. »
        23374  +
        23375  +    <start>  si  [le|la|l’|un|une|ce|cet|cette|mon|ton|son|notre|votre|leur]  @:[NA].*:[si]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23376  +    <start>  si  [le|la|l’|un|une|ce|cet|cette|mon|ton|son|notre|votre|leur]  @:[NA].*:[si]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23377  +        <<- /vmode/ morph(\5, ":K") -5>> =suggVerbTense(\5, ":Iq", ":3s")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « S’il avait perdu, il aurait recommencé. »
        23378  +
        23379  +    <start>  si  [les|des|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  @:[NA].*:[pi]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23380  +    <start>  si  [les|des|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  @:[NA].*:[pi]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        23381  +        <<- /vmode/ morph(\5, ":K") -5>> =suggVerbTense(\5, ":Iq", ":3p")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si elles avaient perdu, elles auraient recommencé. »
        23382  +
        23383  +TEST: si j’{{aurais}} perdu, j’aurais recommencé.                                   ->> avais
        23384  +TEST: si t’{{aurais}} vu le match, tu aurais compris                                ->> avais
        23385  +TEST: si elle {{aurait}} mangé ce truc, elle serait malade                          ->> avait
        23386  +TEST: si nous {{aurions}} connu cet homme, on se serait pas trompé                  ->> avions
        23387  +TEST: si vous {{auriez}} avancé, ce serait différent                                ->> aviez
        23388  +TEST: s’ils {{auraient}} deviné la solution, ils auraient pas demandé               ->> avaient
        23389  +TEST: si le patron {{aurait}} pensé la chose, on l’aurait su.                       ->> avait
        23390  +TEST: si les femmes {{auraient}} parlé, je l’aurais su.                             ->> avaient
        23391  +
 23054  23392   
 23055  23393   # Dès que + indicatif
 23056  23394   __vmode_dès_que__
 23057  23395       dès  [que|qu’]  @:(?:Os|M)  @:S¬:[IG]
 23058  23396           <<- /vmode/ -4>> =suggVerbMode(\4, ":I", \3)                                                # Après “dès que”, le verbe ne devrait pas être au subjonctif.
 23059  23397   #        <<- morph(\1, ":(?:Os|M)", False) and morph(\2, ":K", False)        -2>> =suggVerbMode(@, ":If", \1)    # Ce verbe ne devrait pas être au conditionnel.
 23060  23398   
................................................................................
 23083  23421       à               [condition|moins|supposer]      [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
 23084  23422       de              [crainte|peur]                  [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
 23085  23423       de              [façon|manière]                 [que|qu’]   @:(?:Os|M)  @:I¬:(?:[GYS]|Iq)
 23086  23424       en              sorte                           [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
 23087  23425       pour            peu                             [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
 23088  23426       pour            autant                          [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
 23089  23427           <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                # Après “\1 \2 que”, ce verbe devrait être au subjonctif.
 23090         -
 23091  23428   
 23092  23429       [<start>|,]     non                             [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
 23093  23430           <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                # Après “non que”, ce verbe devrait probablement être au subjonctif.
 23094  23431   
 23095  23432       [<start>|,]     en          admettant           [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
 23096  23433           <<- /vmode/ -6>> =suggVerbMode(\6, ":S", \5)                                                # Si “en admettant que” indique que la suite est une hypothèse, le verbe doit être au subjonctif.
 23097  23434   
................................................................................
 26826  27163   TEST: » Jules Mignaud, banquier, de la maison Mignaud et fils, rue Deloraine. Il est l’aîné des Mignaud. Madame l’Espanaye avait quelque fortune.
 26827  27164   TEST: Il lui avait ouvert un compte dans sa maison, huit ans auparavant, au printemps.
 26828  27165   TEST: Elle a souvent déposé chez lui de petites sommes d’argent. Il ne lui a rien délivré jusqu’au troisième jour avant sa mort, où elle est venue lui demander en personne une somme de quatre mille francs. Cette somme lui a été payée en or, et un commis a été chargé de la lui porter chez elle.
 26829  27166   TEST: » Adolphe Lebon, commis chez Mignaud et fils, dépose que, le jour en question, vers midi, il a accompagné madame l’Espanaye à son logis, avec les quatre mille francs, en deux sacs.
 26830  27167   TEST: Quand la porte s’ouvrit, mademoiselle l’Espanaye parut, et lui prit des mains l’un des deux sacs, pendant que la vieille dame le déchargeait de l’autre.
 26831  27168   TEST: Il les salua et partit. Il n’a vu personne dans la rue en ce moment. C’est une rue borgne, très-solitaire.
 26832  27169   TEST: » William Bird, tailleur, dépose qu’il est un de ceux qui se sont introduits dans la maison. Il est Anglais. Il a vécu deux ans à Paris. Il est un des premiers qui ont monté l’escalier.
 26833         -TEST: Il a entendu les voix qui se disputaient. La voix rude était celle d’un Français. Il a pu distinguer quelques mots, mais il ne se les rappelle pas. Il a entendu distinctement sacré et mon Dieu.
        27170  +TODO: Il a entendu les voix qui se disputaient. La voix rude était celle d’un Français. Il a pu distinguer quelques mots, mais il ne se les rappelle pas. Il a entendu distinctement sacré et mon Dieu.
 26834  27171   TEST: C’était en ce moment un bruit comme de plusieurs personnes qui se battent, – le tapage d’une lutte et d’objets qu’on brise. La voix aiguë était très-forte, plus forte que la voix rude.
 26835  27172   TEST: Il est sûr que ce n’était pas une voix d’Anglais. Elle lui sembla une voix d’Allemand ; peut-être bien une voix de femme. Le témoin ne sait pas l’allemand.
 26836  27173   TEST: » Quatre des témoins ci-dessus mentionnés ont été assignés de nouveau, et ont déposé que la porte de la chambre où fut trouvé le corps de mademoiselle l’Espanaye était fermée en dedans quand ils y arrivèrent.
 26837  27174   TEST: Tout était parfaitement silencieux ; ni gémissements, ni bruits d’aucune espèce. Après avoir forcé la porte, ils ne virent personne.
 26838  27175   TEST: » Les fenêtres, dans la chambre de derrière et dans celle de face, étaient fermées et solidement assujetties en dedans. Une porte de communication était fermée, mais pas à clef.
 26839  27176   TEST: La porte qui conduit de la chambre du devant au corridor était fermée à clef, et la clef en dedans ; une petite pièce sur le devant de la maison, au quatrième étage, à l’entrée du corridor, ouverte, et la porte entre-bâillée ; cette pièce, encombrée de vieux bois de lit, de malles, etc.
 26840  27177   TEST: On a soigneusement dérangé et visité tous ces objets.

Changes to graphspell-js/ibdawg.js.

   264    264           }
   265    265           if (sWord.charAt(0).gl_isUpperCase()) {
   266    266               if (sWord.length > 1) {
   267    267                   if (sWord.gl_isTitle()) {
   268    268                       return !!this.lookup(sWord.toLowerCase());
   269    269                   }
   270    270                   if (sWord.gl_isUpperCase()) {
   271         -                    if (this.bAcronymValid) {
   272         -                        return true;
   273         -                    }
   274         -                    return !!(this.lookup(sWord.toLowerCase()) || this.lookup(sWord.gl_toCapitalize()));
          271  +                    return !!(this.bAcronymValid || this.lookup(sWord.toLowerCase()) || this.lookup(sWord.gl_toCapitalize()));
   275    272                   }
   276    273                   return !!this.lookup(sWord.slice(0, 1).toLowerCase() + sWord.slice(1));
   277    274               }
   278    275               return !!this.lookup(sWord.toLowerCase());
   279    276           }
   280    277           if (sWord.slice(0,1).gl_isDigit()) {
   281    278               return true;
................................................................................
   379    376                   return;
   380    377               }
   381    378               else if ( (sNewWord.length + sRemain.length == oSuggResult.sWord.length) && oSuggResult.sWord.toLowerCase().startsWith(sNewWord.toLowerCase()) && this.isValid(sRemain) ) {
   382    379                   if (this.sLangCode == "fr"
   383    380                       && ["l", "d", "n", "m", "t", "s", "c", "j", "qu", "lorsqu", "puisqu", "quoiqu", "jusqu", "quelqu"].includes(sNewWord.toLowerCase()) && char_player.aVowel.has(sRemain.slice(0,1))) {
   384    381                       oSuggResult.addSugg(sNewWord+"’"+sRemain);
   385    382                   }
   386         -                oSuggResult.addSugg(sNewWord+" "+sRemain);
          383  +                if ((sNewWord.length > 1 && sRemain.length > 1) || ["a", "à", "y"].includes(sNewWord) || ["a", "à", "y"].includes(sRemain)) {
          384  +                    oSuggResult.addSugg(sNewWord+" "+sRemain);
          385  +                }
   387    386               }
   388    387           }
   389    388           if (nDist > oSuggResult.nDistLimit) {
   390    389               return;
   391    390           }
   392    391   
   393    392           let cCurrent = sRemain.slice(0, 1);

Changes to graphspell/ibdawg.py.

     1      1   #!python3
     2      2   
     3      3   """
     4      4   INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH
     5      5   Implementation of a spellchecker as a transducer (storing transformation code to get lemma and morphologies)
     6         -and a spell suggestion mechanim
            6  +and a spell suggestion mechanism
     7      7   """
     8      8   
     9      9   import traceback
    10     10   import pkgutil
    11     11   import re
    12     12   from functools import wraps
    13     13   import time
................................................................................
   262    262           if self.lookup(sWord):
   263    263               return True
   264    264           if sWord[0:1].isupper():
   265    265               if len(sWord) > 1:
   266    266                   if sWord.istitle():
   267    267                       return self.lookup(sWord.lower())
   268    268                   if sWord.isupper():
   269         -                    if self.bAcronymValid:
   270         -                        return True
   271         -                    return self.lookup(sWord.lower()) or self.lookup(sWord.capitalize())
          269  +                    return self.bAcronymValid or self.lookup(sWord.lower()) or self.lookup(sWord.capitalize())
   272    270                   return self.lookup(sWord[:1].lower() + sWord[1:])
   273    271               return self.lookup(sWord.lower())
   274    272           if sWord[0:1].isdigit():
   275    273               return True
   276    274           return False
   277    275   
   278    276       def lookup (self, sWord):
................................................................................
   338    336                   oSuggResult.addSugg(sNewWord, nDeep)
   339    337                   for sTail in self._getTails(iAddr):
   340    338                       oSuggResult.addSugg(sNewWord+sTail, nDeep)
   341    339                   return
   342    340               if (len(sNewWord) + len(sRemain) == len(oSuggResult.sWord)) and oSuggResult.sWord.lower().startswith(sNewWord.lower()) and self.isValid(sRemain):
   343    341                   if self.sLangCode == "fr" and sNewWord.lower() in ("l", "d", "n", "m", "t", "s", "c", "j", "qu", "lorsqu", "puisqu", "quoiqu", "jusqu", "quelqu") and sRemain[0:1] in cp.aVowel:
   344    342                       oSuggResult.addSugg(sNewWord+"’"+sRemain)
   345         -                oSuggResult.addSugg(sNewWord+" "+sRemain)
          343  +                if (len(sNewWord) > 1 and len(sRemain) > 1) or sNewWord in ("a", "à", "y") or sRemain in ("a", "à", "y"):
          344  +                    oSuggResult.addSugg(sNewWord+" "+sRemain)
   346    345           if nDist > oSuggResult.nDistLimit:
   347    346               return
   348    347           cCurrent = sRemain[0:1]
   349    348           for cChar, jAddr in self._getCharArcs(iAddr):
   350    349               if cChar in cp.d1to1.get(cCurrent, cCurrent):
   351    350                   self._suggest(oSuggResult, sRemain[1:], nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump, nDist, nDeep+1, jAddr, sNewWord+cChar)
   352    351               elif not bAvoidLoop:

Changes to make.py.

     1         - #!/usr/bin/env python3
            1  +#!/usr/bin/env python3
     2      2   # coding: UTF-8
     3      3   
     4      4   """
     5      5   Grammalecte builder
     6      6   """
     7      7   
     8      8   import sys
................................................................................
   122    122   
   123    123       ## ADDONS OXT
   124    124       print("+ OXT: ", end="")
   125    125       for spfSrc, spfDst in dOxt.items():
   126    126           print(spfSrc, end=", ")
   127    127           if os.path.isdir(spLang+'/'+spfSrc):
   128    128               for sf in os.listdir(spLang+'/'+spfSrc):
   129         -                hZip.write(spLang+'/'+spfSrc+"/"+sf, spfDst+"/"+sf)
          129  +                if sf.endswith(('.txt', '.py')):
          130  +                    hZip.writestr(spfDst+"/"+sf, helpers.fileFile(spLang+'/'+spfSrc+"/"+sf, dVars))
          131  +                else:
          132  +                    hZip.write(spLang+'/'+spfSrc+"/"+sf, spfDst+"/"+sf)
   130    133           else:
   131    134               if spfSrc.endswith(('.txt', '.py')):
   132    135                   hZip.writestr(spfDst, helpers.fileFile(spLang+'/'+spfSrc, dVars))
   133    136               else:
   134    137                   hZip.write(spLang+'/'+spfSrc, spfDst)
   135    138       print()
   136    139       hZip.close()