Index: compile_rules_graph.py
==================================================================
--- compile_rules_graph.py
+++ compile_rules_graph.py
@@ -431,16 +431,18 @@
print("Unknown line:")
print(sLine)
# processing rules
print(" preparing rules...")
+ nRule = 0
for sGraphName, lRuleLine in dAllGraph.items():
print("{:>8,} rules in {:<24} ".format(len(lRuleLine), "<"+sGraphName+">"), end="")
lPreparedRule = []
for i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority in lRuleLine:
for aRule in createRule(i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority, dOptPriority, dDef, dDecl):
lPreparedRule.append(aRule)
+ nRule += len(lRuleLine)
# Graph creation
oDARG = darg.DARG(lPreparedRule, sLang)
dAllGraph[sGraphName] = oDARG.createGraph()
# Debugging
if False:
@@ -450,10 +452,11 @@
print(e)
if False:
print("\nGRAPH:", sGraphName)
for k, v in dAllGraph[sGraphName].items():
print(k, "\t", v)
+ print(" Total: ", nRule, "rules")
# creating file with all functions callable by rules
print(" creating callables for graph rules...")
sPyCallables = ""
sJSCallables = ""
Index: gc_core/py/oxt/OptionsDialog.xcs
==================================================================
--- gc_core/py/oxt/OptionsDialog.xcs
+++ gc_core/py/oxt/OptionsDialog.xcs
@@ -32,10 +32,11 @@
1
BOLDWAVE
0
+
Index: gc_lang/fr/config.ini
==================================================================
--- gc_lang/fr/config.ini
+++ gc_lang/fr/config.ini
@@ -4,11 +4,11 @@
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
country_default = FR
name = Grammalecte
implname = grammalecte
# always use 3 numbers for version: x.y.z
-version = 1.4.0
+version = 1.5.0
author = Olivier R.
provider = Grammalecte.net
link = https://grammalecte.net
description = Correcteur grammatical, orthographique et typographique pour le français.
extras = README_fr.txt
Index: gc_lang/fr/modules-js/gce_suggestions.js
==================================================================
--- gc_lang/fr/modules-js/gce_suggestions.js
+++ gc_lang/fr/modules-js/gce_suggestions.js
@@ -224,11 +224,11 @@
return "";
}
//// Nouns and adjectives
-function suggPlur (sFlex, sWordToAgree=null) {
+function suggPlur (sFlex, sWordToAgree=null, bSelfSugg=false) {
// returns plural forms assuming sFlex is singular
if (sWordToAgree) {
let lMorph = _oSpellChecker.getMorph(sWordToAgree);
if (lMorph.length === 0) {
return "";
@@ -246,10 +246,18 @@
aSugg.add(sFlex.slice(0,-1)+"ux");
}
if (sFlex.endsWith("ail") && sFlex.length > 3 && _oSpellChecker.isValid(sFlex.slice(0,-2)+"ux")) {
aSugg.add(sFlex.slice(0,-2)+"ux");
}
+ }
+ if (sFlex.endsWith("L")) {
+ if (sFlex.endsWith("AL") && sFlex.length > 2 && _oSpellChecker.isValid(sFlex.slice(0,-1)+"UX")) {
+ aSugg.add(sFlex.slice(0,-1)+"UX");
+ }
+ if (sFlex.endsWith("AIL") && sFlex.length > 3 && _oSpellChecker.isValid(sFlex.slice(0,-2)+"UX")) {
+ aSugg.add(sFlex.slice(0,-2)+"UX");
+ }
}
if (_oSpellChecker.isValid(sFlex+"s")) {
aSugg.add(sFlex+"s");
}
if (_oSpellChecker.isValid(sFlex+"x")) {
@@ -256,17 +264,20 @@
aSugg.add(sFlex+"x");
}
if (mfsp.hasMiscPlural(sFlex)) {
mfsp.getMiscPlural(sFlex).forEach(function(x) { aSugg.add(x); });
}
+ if (aSugg.size == 0 && bSelfSugg && (sFlex.endsWith("s") || sFlex.endsWith("x") || sFlex.endsWith("S") || sFlex.endsWith("X"))) {
+ aSugg.add(sFlex);
+ }
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
}
-function suggSing (sFlex) {
+function suggSing (sFlex, bSelfSugg=false) {
// returns singular forms assuming sFlex is plural
let aSugg = new Set();
if (sFlex.endsWith("ux")) {
if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"l")) {
aSugg.add(sFlex.slice(0,-2)+"l");
@@ -273,12 +284,23 @@
}
if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"il")) {
aSugg.add(sFlex.slice(0,-2)+"il");
}
}
- if (_oSpellChecker.isValid(sFlex.slice(0,-1))) {
+ if (sFlex.endsWith("UX")) {
+ if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"L")) {
+ aSugg.add(sFlex.slice(0,-2)+"L");
+ }
+ if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"IL")) {
+ aSugg.add(sFlex.slice(0,-2)+"IL");
+ }
+ }
+ if ((sFlex.endsWith("s") || sFlex.endsWith("x") || sFlex.endsWith("S") || sFlex.endsWith("X")) && _oSpellChecker.isValid(sFlex.slice(0,-1))) {
aSugg.add(sFlex.slice(0,-1));
+ }
+ if (bSelfSugg && aSugg.size == 0) {
+ aSugg.add(sFlex);
}
if (aSugg.size > 0) {
return Array.from(aSugg).join("|");
}
return "";
Index: gc_lang/fr/modules/gce_suggestions.py
==================================================================
--- gc_lang/fr/modules/gce_suggestions.py
+++ gc_lang/fr/modules/gce_suggestions.py
@@ -170,11 +170,11 @@
return ""
## Nouns and adjectives
-def suggPlur (sFlex, sWordToAgree=None):
+def suggPlur (sFlex, sWordToAgree=None, bSelfSugg=False):
"returns plural forms assuming sFlex is singular"
if sWordToAgree:
lMorph = _oSpellChecker.getMorph(sFlex)
if not lMorph:
return ""
@@ -187,31 +187,45 @@
if sFlex.endswith("l"):
if sFlex.endswith("al") and len(sFlex) > 2 and _oSpellChecker.isValid(sFlex[:-1]+"ux"):
aSugg.add(sFlex[:-1]+"ux")
if sFlex.endswith("ail") and len(sFlex) > 3 and _oSpellChecker.isValid(sFlex[:-2]+"ux"):
aSugg.add(sFlex[:-2]+"ux")
+ if sFlex.endswith("L"):
+ if sFlex.endswith("AL") and len(sFlex) > 2 and _oSpellChecker.isValid(sFlex[:-1]+"UX"):
+ aSugg.add(sFlex[:-1]+"UX")
+ if sFlex.endswith("AIL") and len(sFlex) > 3 and _oSpellChecker.isValid(sFlex[:-2]+"UX"):
+ aSugg.add(sFlex[:-2]+"UX")
if _oSpellChecker.isValid(sFlex+"s"):
aSugg.add(sFlex+"s")
if _oSpellChecker.isValid(sFlex+"x"):
aSugg.add(sFlex+"x")
if mfsp.hasMiscPlural(sFlex):
aSugg.update(mfsp.getMiscPlural(sFlex))
+ if not aSugg and bSelfSugg and sFlex.endswith(("s", "x", "S", "X")):
+ aSugg.add(sFlex)
if aSugg:
return "|".join(aSugg)
return ""
-def suggSing (sFlex):
+def suggSing (sFlex, bSelfSugg=True):
"returns singular forms assuming sFlex is plural"
aSugg = set()
if sFlex.endswith("ux"):
if _oSpellChecker.isValid(sFlex[:-2]+"l"):
aSugg.add(sFlex[:-2]+"l")
if _oSpellChecker.isValid(sFlex[:-2]+"il"):
aSugg.add(sFlex[:-2]+"il")
- if _oSpellChecker.isValid(sFlex[:-1]):
+ if sFlex.endswith("UX"):
+ if _oSpellChecker.isValid(sFlex[:-2]+"L"):
+ aSugg.add(sFlex[:-2]+"L")
+ if _oSpellChecker.isValid(sFlex[:-2]+"IL"):
+ aSugg.add(sFlex[:-2]+"IL")
+ if sFlex.endswith(("s", "x", "S", "X")) and _oSpellChecker.isValid(sFlex[:-1]):
aSugg.add(sFlex[:-1])
+ if bSelfSugg and not aSugg:
+ aSugg.add(sFlex)
if aSugg:
return "|".join(aSugg)
return ""
Index: gc_lang/fr/oxt/About/About.py
==================================================================
--- gc_lang/fr/oxt/About/About.py
+++ gc_lang/fr/oxt/About/About.py
@@ -1,6 +1,5 @@
-# -*- coding: utf8 -*-
# About dialog
# by Olivier R.
# License: MPL 2
import unohelper
Index: gc_lang/fr/oxt/About/ab_strings.py
==================================================================
--- gc_lang/fr/oxt/About/ab_strings.py
+++ gc_lang/fr/oxt/About/ab_strings.py
@@ -1,6 +1,6 @@
-# -*- encoding: UTF-8 -*-
+# About strings
def getUI (sLang):
if sLang in dStrings:
return dStrings[sLang]
return dStrings["fr"]
Index: gc_lang/fr/oxt/DictOptions/LexiconEditor.py
==================================================================
--- gc_lang/fr/oxt/DictOptions/LexiconEditor.py
+++ gc_lang/fr/oxt/DictOptions/LexiconEditor.py
@@ -371,26 +371,28 @@
self.xNumDic.Label = 0
self.xDateDic.Label = self.dUI.get("void", "#err")
@_waitPointer
def importDictionary (self):
- # FilePicker doesn’t work at all…
- #xFilePicker = self.xSvMgr.createInstanceWithContext('com.sun.star.ui.dialogs.FilePicker', self.ctx) # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
- #xFilePicker.initialize([uno.getConstantByName("com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE")]) # seems useless
- #xFilePicker.appendFilter("Supported files", "*.json; *.bdic")
- #xFilePicker.setDefaultName("fr.personal.json") # useless, doesn’t work
- #xFilePicker.setDisplayDirectory("")
- #xFilePicker.setMultiSelectionMode(False)
- #nResult = xFilePicker.execute()
- #if nResult == 1:
- # lFile = xFilePicker.getSelectedFiles()
- # lFile = xFilePicker.getFiles()
- # print(lFile)
- # MessageBox(self.xDocument, "File(s): " + str(lFile), "DEBUG", INFOBOX)
- # workaround
- spfImported = os.path.join(os.path.expanduser("~"), "fr.personal.json")
- if os.path.isfile(spfImported):
+ spfImported = ""
+ try:
+ xFilePicker = self.xSvMgr.createInstanceWithContext('com.sun.star.ui.dialogs.FilePicker', self.ctx) # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
+ xFilePicker.initialize([uno.getConstantByName("com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE")]) # seems useless
+ xFilePicker.appendFilter("Supported files", "*.json; *.bdic")
+ xFilePicker.setDefaultName("fr.__personal__.json") # useless, doesn’t work
+ xFilePicker.setDisplayDirectory("")
+ xFilePicker.setMultiSelectionMode(False)
+ nResult = xFilePicker.execute()
+ if nResult == 1:
+ # lFile = xFilePicker.getSelectedFiles()
+ lFile = xFilePicker.getFiles()
+ #print(lFile)
+ #MessageBox(self.xDocument, "File(s): " + str(lFile), "DEBUG", INFOBOX)
+ spfImported = lFile[0][8:] # remove file:///
+ except:
+ spfImported = os.path.join(os.path.expanduser("~"), "fr.personal.json") # workaround
+ if spfImported and os.path.isfile(spfImported):
with open(spfImported, "r", encoding="utf-8") as hDst:
sJSON = hDst.read()
try:
sTest = json.loads(sJSON)
except:
@@ -424,19 +426,30 @@
self.xDateDic.Label = self.dUI.get("void", "#err")
MessageBox(self.xDocument, self.dUI.get('save_message', "#err"), self.dUI.get('save_title', "#err"))
def exportDictionary (self):
try:
- spfExported = os.path.join(os.path.expanduser("~"), "fr.personal.json")
- sJSON = self.xOptionNode.getPropertyValue("personal_dic")
- if sJSON:
- with open(spfExported, "w", encoding="utf-8") as hDst:
- hDst.write(sJSON)
- sMessage = self.dUI.get('export_message', "#err_msg: %s") % spfExported
- else:
- sMessage = self.dUI.get('empty_dictionary', "#err")
- MessageBox(self.xDocument, sMessage, self.dUI.get('export_title', "#err"))
+ xFilePicker = self.xSvMgr.createInstanceWithContext('com.sun.star.ui.dialogs.FilePicker', self.ctx) # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
+ xFilePicker.initialize([uno.getConstantByName("com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE")]) # seems useless
+ xFilePicker.appendFilter("Supported files", "*.json; *.bdic")
+ xFilePicker.setDefaultName("fr.__personal__.json") # useless, doesn’t work
+ xFilePicker.setDisplayDirectory("")
+ xFilePicker.setMultiSelectionMode(False)
+ nResult = xFilePicker.execute()
+ if nResult == 1:
+ # lFile = xFilePicker.getSelectedFiles()
+ lFile = xFilePicker.getFiles()
+ spfExported = lFile[0][8:] # remove file:///
+ #spfExported = os.path.join(os.path.expanduser("~"), "fr.personal.json")
+ sJSON = self.xOptionNode.getPropertyValue("personal_dic")
+ if sJSON:
+ with open(spfExported, "w", encoding="utf-8") as hDst:
+ hDst.write(sJSON)
+ sMessage = self.dUI.get('export_message', "#err_msg: %s") % spfExported
+ else:
+ sMessage = self.dUI.get('empty_dictionary', "#err")
+ MessageBox(self.xDocument, sMessage, self.dUI.get('export_title', "#err"))
except:
sMessage = traceback.format_exc()
MessageBox(self.xDocument, sMessage, self.dUI.get('export_title', "#err"), ERRORBOX)
def _getRadioValue (self, *args):
Index: gc_lang/fr/oxt/Lexicographer/Enumerator.py
==================================================================
--- gc_lang/fr/oxt/Lexicographer/Enumerator.py
+++ gc_lang/fr/oxt/Lexicographer/Enumerator.py
@@ -102,11 +102,11 @@
# fonts
xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDTitle.Height = 9
xFDTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFDTitle.Name = "Verdana"
-
+
xFDSubTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
xFDSubTitle.Height = 8
xFDSubTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
xFDSubTitle.Name = "Verdana"
@@ -126,25 +126,24 @@
self.xGridModel = self._addGrid("list_grid", nX, nY1+25, nWidth, 181, \
[ {"Title": self.dUI.get("words", "#err"), "ColumnWidth": 175}, {"Title": "Occurrences", "ColumnWidth": 45} ], \
SelectionModel = uno.Enum("com.sun.star.view.SelectionType", "MULTI") \
)
self._addWidget('num_of_entries', 'FixedText', nX, nY1+210, 60, nHeight, Label = self.dUI.get('num_of_entries', "#err"), Align = 2)
- self.xNumWord = self._addWidget('num_of_entries_res', 'FixedText', nX+65, nY1+210, 30, nHeight, Label = "—")
- self._addWidget('tot_of_entries', 'FixedText', nX+100, nY1+210, 60, nHeight, Label = self.dUI.get('tot_of_entries', "#err"), Align = 2)
- self.xTotWord = self._addWidget('tot_of_entries_res', 'FixedText', nX+165, nY1+210, 30, nHeight, Label = "—")
-
+ self.xNumWord = self._addWidget('num_of_entries_res', 'FixedText', nX+65, nY1+210, 25, nHeight, Label = "—")
+ self._addWidget('tot_of_entries', 'FixedText', nX+90, nY1+210, 60, nHeight, Label = self.dUI.get('tot_of_entries', "#err"), Align = 2)
+ self.xTotWord = self._addWidget('tot_of_entries_res', 'FixedText', nX+155, nY1+210, 30, nHeight, Label = "—")
+ self.xSearch = self._addWidget('search_button', 'Button', nX+190, nY1+210, 30, nHeight, Label = ">>>", Enabled = False)
+
# Tag
# Note: the only way to group RadioButtons is to create them successively
- self._addWidget("dformat_section", 'FixedLine', nX, nY2, 90, nHeight, Label = self.dUI.get("dformat_section", "#err"), FontDescriptor = xFDTitle)
- self._addWidget("charstyle_section", 'FixedLine', nX+100, nY2, 90, nHeight, Label = self.dUI.get("charstyle_section", "#err"), FontDescriptor = xFDTitle)
- self.xUnderline = self._addWidget('underline', 'RadioButton', nX, nY2+12, 40, nHeight, Label = self.dUI.get('underline', "#err"))
- self.xNoUnderline = self._addWidget('nounderline', 'RadioButton', nX+50, nY2+12, 40, nHeight, Label = self.dUI.get('nounderline', "#err"))
- self.xAccent = self._addWidget('accentuation', 'RadioButton', nX+100, nY2+12, 50, nHeight, Label = self.dUI.get('accentuation', "#err"))
- self.xNoAccent = self._addWidget('noaccentuation', 'RadioButton', nX+155, nY2+12, 40, nHeight, Label = self.dUI.get('noaccentuation', "#err"))
-
- 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)
-
+ self._addWidget("charstyle_section", 'FixedLine', nX, nY2, 200, nHeight, Label = self.dUI.get("charstyle_section", "#err"), FontDescriptor = xFDTitle)
+ self.xAccent = self._addWidget('emphasis', 'RadioButton', nX, nY2+12, 55, nHeight, Label = self.dUI.get('emphasis', "#err"))
+ self.xStrongAccent = self._addWidget('strong_emphasis', 'RadioButton', nX+60, nY2+12, 70, nHeight, Label = self.dUI.get('strong_emphasis', "#err"))
+ self.xNoAccent = self._addWidget('nostyle', 'RadioButton', nX+140, nY2+12, 45, nHeight, Label = self.dUI.get('nostyle', "#err"))
+
+ 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)
+
# Progress bar
self.xProgressBar = self._addWidget('progress_bar', 'ProgressBar', nX, self.xDialog.Height-25, 160, 14)
self.xProgressBar.ProgressValueMin = 0
self.xProgressBar.ProgressValueMax = 1 # to calculate later
@@ -159,51 +158,61 @@
self.xContainer.getControl('count_button').setActionCommand('Count')
self.xContainer.getControl('count2_button').addActionListener(self)
self.xContainer.getControl('count2_button').setActionCommand('CountByLemma')
self.xContainer.getControl('unknown_button').addActionListener(self)
self.xContainer.getControl('unknown_button').setActionCommand('UnknownWords')
+ self.xContainer.getControl('search_button').addActionListener(self)
+ self.xContainer.getControl('search_button').setActionCommand('Search')
self.xContainer.getControl('tag_button').addActionListener(self)
self.xContainer.getControl('tag_button').setActionCommand('Tag')
self.xContainer.getControl('close_button').addActionListener(self)
self.xContainer.getControl('close_button').setActionCommand('Close')
- self.xContainer.setVisible(False)
+ self.xContainer.setVisible(True) # True for non modal dialog
xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
self.xContainer.createPeer(xToolkit, None)
- self.xContainer.execute()
+ #self.xContainer.execute() # Don’t excute for non modal dialog
# XActionListener
def actionPerformed (self, xActionEvent):
try:
if xActionEvent.ActionCommand == "Count":
self.count(self.dUI.get("words", "#err"))
self.xTag.Enabled = True
+ self.xSearch.Enabled = True
elif xActionEvent.ActionCommand == "CountByLemma":
self.count(self.dUI.get("lemmas", "#err"), bByLemma=True)
self.xTag.Enabled = False
+ self.xSearch.Enabled = False
elif xActionEvent.ActionCommand == "UnknownWords":
self.count(self.dUI.get("unknown_words", "#err"), bOnlyUnknownWords=True)
self.xTag.Enabled = True
+ self.xSearch.Enabled = True
+ elif xActionEvent.ActionCommand == "Search":
+ if not self.xGridControl.hasSelectedRows():
+ return
+ lRow = self.xGridControl.getSelectedRows()
+ aWord = set([ self.xGridModel.GridDataModel.getCellData(0, n) for n in lRow ])
+ self.gotoWord(aWord)
elif xActionEvent.ActionCommand == "Tag":
if not self.xGridControl.hasSelectedRows():
return
lRow = self.xGridControl.getSelectedRows()
aWord = set([ self.xGridModel.GridDataModel.getCellData(0, n) for n in lRow ])
sAction = ""
- if self.xUnderline.State:
- sAction = "underline"
- elif self.xNoUnderline.State:
- sAction = "nounderline"
- elif self.xAccent.State:
- sAction = "accentuation"
+ if self.xAccent.State:
+ sAction = "emphasis"
+ elif self.xStrongAccent.State:
+ sAction = "strong_emphasis"
elif self.xNoAccent.State:
- sAction = "noaccentuation"
+ sAction = "nostyle"
self.tagText(aWord, sAction)
elif xActionEvent.ActionCommand == "Close":
- self.xContainer.endExecute()
+ self.xContainer.dispose() # Non modal dialog
+ #self.xContainer.endExecute() # Modal dialog
except:
traceback.print_exc()
-
+
# XJobExecutor
def trigger (self, args):
try:
xDialog = Enumerator(self.ctx)
xDialog.run()
@@ -282,19 +291,73 @@
for dToken in self.oTokenizer.genTokens(sParagraph):
if dToken["sValue"] in aWord:
xCursor.goRight(dToken["nStart"]-nPos, False) # start of token
nPos = dToken["nEnd"]
xCursor.goRight(nPos-dToken["nStart"], True) # end of token
- if sAction == "underline":
- xCursor.CharBackColor = hexToRBG("AA0000")
- elif sAction == "nounderline":
- xCursor.CharBackColor = hexToRBG("FFFFFF")
- elif sAction == "accentuation":
+ # if sAction == "underline":
+ # xCursor.CharBackColor = hexToRBG("AA0000")
+ # elif sAction == "nounderline":
+ # xCursor.CharBackColor = hexToRBG("FFFFFF")
+ if sAction == "emphasis":
xCursor.CharStyleName = "Emphasis"
- elif sAction == "noaccentuation":
+ elif sAction == "strong_emphasis":
+ xCursor.CharStyleName = "Strong Emphasis"
+ elif sAction == "nostyle":
#xCursor.CharStyleName = "Default Style" # doesn’t work
xCursor.setPropertyToDefault("CharStyleName")
self.xProgressBar.ProgressValue += 1
+ @_waitPointer
+ def gotoWord (self, aWord):
+ try:
+ if not aWord:
+ return
+ if not self.oTokenizer:
+ self.oTokenizer = self.oSpellChecker.getTokenizer()
+ xViewCursor = self.xDocument.CurrentController.ViewCursor
+ if not xViewCursor.isCollapsed():
+ xViewCursor.collapseToEnd()
+ xRange = xViewCursor.getStart()
+ xCursor = self.xDocument.Text.createTextCursor()
+ xCursor.gotoRange(xRange, False)
+ #xCursor.gotoEndOfWord(False)
+ xCursor.gotoEndOfParagraph(True)
+ sParagraph = xCursor.getString()
+ xCursor.gotoRange(xRange, False)
+ tPos = self._searchWordsInText(aWord, sParagraph)
+ if not tPos:
+ while xCursor.gotoNextParagraph(False):
+ xCursor.gotoEndOfParagraph(True)
+ sParagraph = xCursor.getString()
+ xCursor.gotoStartOfParagraph(False)
+ tPos = self._searchWordsInText(aWord, sParagraph)
+ if tPos:
+ break
+ if not tPos:
+ xCursor.gotoStart(False)
+ xCursor.gotoEndOfParagraph(True)
+ sParagraph = xCursor.getString()
+ xCursor.gotoStartOfParagraph(True)
+ tPos = self._searchWordsInText(aWord, sParagraph)
+ while xCursor.gotoNextParagraph(False):
+ xCursor.gotoEndOfParagraph(True)
+ sParagraph = xCursor.getString()
+ xCursor.gotoStartOfParagraph(False)
+ tPos = self._searchWordsInText(aWord, sParagraph)
+ if tPos:
+ break
+ if tPos:
+ xCursor.goRight(tPos[0], False)
+ xRange = xCursor.getStart()
+ xViewCursor.gotoRange(xRange, False)
+ xViewCursor.goRight(tPos[1], True)
+ except:
+ traceback.print_exc()
+
+ def _searchWordsInText (self, aWord, sText):
+ for dToken in self.oTokenizer.genTokens(sText):
+ if dToken["sValue"] in aWord:
+ return (dToken["nStart"], dToken["nEnd"]-dToken["nStart"])
+ return None
#g_ImplementationHelper = unohelper.ImplementationHelper()
#g_ImplementationHelper.addImplementation(Enumerator, 'net.grammalecte.enumerator', ('com.sun.star.task.Job',))
Index: gc_lang/fr/oxt/Lexicographer/enum_strings.py
==================================================================
--- gc_lang/fr/oxt/Lexicographer/enum_strings.py
+++ gc_lang/fr/oxt/Lexicographer/enum_strings.py
@@ -4,11 +4,11 @@
return dStrings["fr"]
dStrings = {
"fr": {
"title": "Grammalecte · Recenseur de mots",
-
+
"list_section": "Énumération des occurrences",
"count_button": "Compter tout",
"count2_button": "Compter par lemme",
"unknown_button": "Mots inconnus",
"num_of_entries": "Nombre d’entrées :",
@@ -20,12 +20,13 @@
"dformat_section": "Formatage direct",
"charstyle_section": "Style de caractères",
"underline": "Surligner",
"nounderline": "Effacer",
- "accentuation": "Accentuation",
- "noaccentuation": "Aucun",
+ "emphasis": "Accentuation",
+ "strong_emphasis": "Accentuation forte",
+ "nostyle": "Aucun",
"tag_button": "Taguer",
"close_button": "Fermer",
},
"en": {
@@ -44,12 +45,13 @@
"dformat_section": "Direct format",
"charstyle_section": "Character style",
"underline": "Underline",
"nounderline": "Erase",
- "accentuation": "Accentuation",
- "noaccentuation": "None",
+ "emphasis": "Emphasis",
+ "strong_emphasis": "Strong emphasis",
+ "nostyle": "None",
"tag_button": "Tag",
"close_button": "Close",
},
}
Index: gc_lang/fr/oxt/TextFormatter/TextFormatter.py
==================================================================
--- gc_lang/fr/oxt/TextFormatter/TextFormatter.py
+++ gc_lang/fr/oxt/TextFormatter/TextFormatter.py
@@ -1,19 +1,15 @@
-# -*- coding: utf8 -*-
# Text Formatter
# by Olivier R.
# License: MPL 2
import unohelper
import uno
-import sys
-import os
+
import traceback
import time
-
-if sys.version_info.major == 3:
- import imp
+import json
import tf_strings
import tf_options
import tf_tabrep
import helpers
@@ -266,11 +262,12 @@
FontDescriptor = xFD2, TextColor = 0x004400)
self.binfo = self._addWidget('info', 'Button', self.xDialog.Width-15, 0, 10, 9, Label = self.dUI.get('info', "#err"), \
HelpText = self.dUI.get('infotitle', "#err"), FontDescriptor = xFDsmall, TextColor = 0x444444)
# load configuration
- self._loadConfig()
+ self.xGLOptionNode = helpers.getConfigSetting("/org.openoffice.Lightproof_${implname}/Other/", True)
+ self._loadConfig("${lang}")
## container
self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
self.xContainer.setModel(self.xDialog)
self.xContainer.setVisible(False)
@@ -309,11 +306,11 @@
xElem = xDesktop.getCurrentComponent()
# Writer
if True:
# no selection
- self._saveConfig()
+ self._saveConfig("${lang}")
self._replaceAll(xElem)
else:
# modify selected text only
pass
#xSelecList = xDoc.getCurrentSelection()
@@ -360,46 +357,48 @@
else:
print("Wrong command: " + xActionEvent.ActionCommand)
except:
traceback.print_exc()
- def _loadConfig (self):
+ def _loadConfig (self, sLang):
try:
- if sys.version_info.major == 3:
- imp.reload(tf_options)
- else:
- reload(tf_options)
- self._setConfig(tf_options.dOpt)
+ dOpt = tf_options.dDefaultOpt.copy()
+ xChild = self.xGLOptionNode.getByName("o_"+sLang)
+ sTFOptionsJSON = xChild.getPropertyValue("tf_options")
+ if sTFOptionsJSON:
+ dOpt.update(json.loads(sTFOptionsJSON))
+ self._setConfig(dOpt)
except:
traceback.print_exc()
-
- def _setConfig (self, d):
- try:
- for key, val in d.items():
- w = getattr(self, key)
- w.State = val
- if key in self.dCheckboxWidgets:
- self._switchCheckBox(w)
- except:
- raise
-
- def _saveConfig (self):
+ self._setConfig(tf_options.dDefaultOpt)
+
+ def _setConfig (self, dOpt):
+ for sKey, val in dOpt.items():
+ try:
+ w = getattr(self, sKey)
+ if w:
+ w.State = val
+ if sKey in self.dCheckboxWidgets:
+ self._switchCheckBox(w)
+ except:
+ traceback.print_exc()
+ print("option", sKey, "not set.")
+
+ def _saveConfig (self, sLang):
+ "save options in LibreOffice profile"
try:
# create options dictionary
dOpt = {}
- for key, lWidget in self.dCheckboxWidgets.items():
- w = getattr(self, key)
+ for sKey, lWidget in self.dCheckboxWidgets.items():
+ w = getattr(self, sKey)
dOpt[w.Name] = w.State
for w in lWidget:
dOpt[w.Name] = w.State
- # write file
- sExtPath = helpers.getAbsolutePathOf("/pythonpath/tf_options.py")
- if os.path.isfile(sExtPath):
- hOpt = open(sExtPath, "w")
- hOpt.write("dDefaultOpt = " + str(tf_options.dDefaultOpt) + "\n")
- hOpt.write("dOpt = " + str(dOpt))
- hOpt.close()
+ # save option to LO profile as JSON string
+ xChild = self.xGLOptionNode.getByName("o_"+sLang)
+ xChild.setPropertyValue("tf_options", json.dumps(dOpt))
+ self.xGLOptionNode.commitChanges()
except:
traceback.print_exc()
def _switchCheckBox (self, wGroupCheckbox):
for w in self.dCheckboxWidgets.get(wGroupCheckbox.Name, []):
@@ -686,11 +685,10 @@
n += self._replaceText(xElem, sPattern, sRepl, bRegex, bCaseSensitive)
except:
print("# Error with "+sList)
traceback.print_exc()
return n
-
def _replaceText (self, xElem, sPattern, sRepl, bRegex, bCaseSensitive=False):
try:
xRD = xElem.createReplaceDescriptor()
xRD.SearchString = sPattern
Index: gc_lang/fr/oxt/TextFormatter/tf_options.py
==================================================================
--- gc_lang/fr/oxt/TextFormatter/tf_options.py
+++ gc_lang/fr/oxt/TextFormatter/tf_options.py
@@ -1,16 +1,9 @@
+# text formatter options
+
dDefaultOpt = {
- 'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1,
- 'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nbsp6': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0,
- 'space': 1, 'space1': 1, 'space2': 1,
- 'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0,
- '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,
- 'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0,
- 'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0,
-}
-dOpt = {
- 'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1,
+ 'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1,
'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nbsp6': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0,
'space': 1, 'space1': 1, 'space2': 1,
'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0,
'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,
'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0,
Index: gc_lang/fr/rules.grx
==================================================================
--- gc_lang/fr/rules.grx
+++ gc_lang/fr/rules.grx
@@ -1951,11 +1951,11 @@
[des|chaque|quelque|quelques|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs|aucun|aucune] *WORD
<<- =>> exclude(\2, ":V")
[un|une] *WORD
- <<- not value(<1, "|l’|quelqu’|quelqu|") and not value(\2, "|a|fut|fût|est|") and not morph(\2, ":P") =>> exclude(\2, ":V")
+ <<- not value(<1, "|l’|quelqu’|quelqu|") and not value(\2, "|a|fut|fût|est|fait|") and not morph(\2, ":P") =>> exclude(\2, ":V")
[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
<<- =>> select(\-1, ":N")
de [la|l’] $:¬:Y
@@ -2005,10 +2005,11 @@
TEST: c’est à n’y plus rien comprendre.
TEST: Elle était tout feu, tout flamme.
TEST: Ses rencards finissent par devenir lassants
TEST: trois espèces de chauve-souris dont une est éteinte
TEST: Ils sont source de conflits
+TEST: Votre question fait référence à un fait divers déroutant
!!!
!!!
@@ -4460,10 +4461,47 @@
<<- ~>> =\1.replace("’", "-")
TEST: je suis allé dans la {{grand’rue}}. ->> grand-rue
+!!!! Trait d’union : formes interrogative (nous/vous) !!
+__inte_union_nous1!7__
+ [ne|n’] ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~ons$ nous
+ [ne|n’] [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~ons$ nous
+ [ne|n’] [le|la|l’|les] [lui|leur|en|y] ~ons$ nous
+ [ne|n’] [lui|leur|y] en ~ons$ nous
+ <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:1p", ":[GW]") --2:-1>> \-2-\-1 # Forme interrogative ? Mettez un trait d’union.
+
+ [|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~ons$ nous [|,]
+ [|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~ons$ nous @:¬:(?:1p|Y)
+ <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
+ -2:3>> \2-\3 # Forme interrogative ? Mettez un trait d’union.
+
+TEST: n’y {{retrouverons nous}} jamais la tranquilité ?
+TEST: pourquoi n’en {{entendons nous}} jamais parler ?
+TEST: que {{pouvons nous}} dans cette vie
+TEST: Sachons nous conformer à ces restrictions et faisons notre travail.
+
+
+__inte_union_vous1!7__
+ [ne|n’] ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~ez$ vous
+ [ne|n’] [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~ez$ vous
+ [ne|n’] [le|la|l’|les] [lui|leur|en|y] ~ez$ vous
+ [ne|n’] [lui|leur|y] en ~ez$ vous
+ <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:2p", ":[GW]") --2:-1>> \-2-\-1 # Forme interrogative ? Mettez un trait d’union.
+
+ [|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~ez$ vous [|,]
+ [|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~ez$ vous @:¬:(?:2p|Y)
+ <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
+ -2:3>> \2-\3 # Forme interrogative ? Mettez un trait d’union.
+
+TEST: ne {{soutiendrez vous}} pas cette proposition ?
+TEST: n’en {{voulez vous}} jamais à ces gens ?
+TEST: comment {{pensez vous}} y parvenir
+TEST: veuillez vous adresser à notre secretaire pour prendre rendez-vous.
+
+
!!!! Virgules !!
__virg_dialogue_après_nom_propre__
[|,] $:M¬:G [/-je|/-tu|/-on|/-nous|/-vous|/-ils|/-elles|/VCimp]
@@ -4755,10 +4793,19 @@
<<- /bs/ ->> _
# 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
TEST: Nous y sommes allés {{pour ne pas qu’}}elle se sente seule.
+
+# silence assourdissant
+__bs_silence_assourdissant__
+ silence assourdissant
+ silences assourdissants
+ <<- /bs/ ->> _ # Cliché. Locution oxymorique employée à tort et à travers.
+
+TEST: dans un {{silence assourdissant}}
+
# très / trop
__bs_très_trop_superflu__
[très|trop] [beaucoup|assez|mieux|pire|meilleur|délicieux|plus|moins]
<<- /bs/ ->> \2 # Avec “\2”, “\1” est superflu.
@@ -5095,11 +5142,10 @@
<<- /pleo/ ->> \1 # Pléonasme.
TEST: {{Ajourner à une date ultérieure}} ->> Ajourner
TEST: {{différer à une date ultérieure}} ->> différer
TEST: {{reporter à plus tard}} ->> reporter
-
!!
!!
@@ -5837,11 +5883,11 @@
[|,] [ton|son|audit] @:(?:Y|[123][sp])¬:[NAQ]
<<- /conf/ \3.islower()
-3>> =suggSimil(\3, ":[NA]:[me]:[si]", True) # Incohérence avec “\2” : “\3” est un verbe.
- [un|une] @:(?:Y|[123][sp])¬:[GNA] ?@:W¿ @:A¬:[GM]
+ [un|une] @:(?:Y|[123][sp])¬:[GNA] ?$:W¿ @:A¬:[GM]
<<- /conf/ not value(<1, "|dont|l’|d’|sauf|excepté|") and not before("(?i)\\bun à +$")
-2>> =suggSimil(\2, ":[NAQ]:[me]:[si]", True) # Incohérence avec “\1” : “\2” est une forme verbale conjuguée.
TEST: un {{maintient}} difficile.
TEST: quelqu’un arrive.
@@ -6305,11 +6351,11 @@
TEST: Celui qui y croit {{à les}} moyens d’y parvenir.
à *WORD
- <<- /conf/ \2.islower() and not value(\2, "|coté|") >>>
+ <<- /conf/ \2.islower() and not value(\2, "|coté|sont|") >>>
<<- /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”.
<<- /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|")
-2>> =suggVerbInfi(\2) # Le verbe devrait être à l’infinitif.
<<- /conf/ __else__ and morph(\2, ":[123][sp]", "*") and not value(\2, "|tord|tords|") >>>
<<- /conf/ morph(\2, ":V2.*:I[ps]:3s", "*") -2>> =suggVerbPpas(\2, ":m:s") # Incohérence : “\1” est une préposition. “\2” est un verbe conjugué.
@@ -6342,10 +6388,18 @@
TEST: scrupuleux {{a}} n’en toucher qu’une part infime.
TEST: Ne pas hésiter {{a}} {{demander}} des conseils.
TEST: Sébastien {{a}} {{demander}} des conseils.
TEST: {{A}} vous lire, on ne sait plus que penser de toutes ces histoires
+
+__conf_à_qui_infinitif__
+ *WORD a qui @:(?:Y|Os)
+ <<- /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
+
+TEST: il n’y avait personne {{a}} qui parler de nos problèmes ->> à
+TEST: des gens {{a}} qui offrir ça ->> à
+
__conf_à_a__
[|,] a moins [que|qu’]
<<- /conf/ -2>> à # Confusion probable : « à moins que » pour dire « sauf si ».
@@ -6542,11 +6596,12 @@
TEST: une dérive à vau-l’eau.
__conf_à_a_locutions__
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
- 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]
+ 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]
+ a [mi-chemin|mi-mandat|mi-mot+s|mi-parcours|mi-temps|mi-voix]
a air comprimé
a armes égales
a aucun prix
a autrui
a autre chose
@@ -6765,26 +6820,29 @@
TEST: il va falloir songer à les leur donner
TEST: le coût est estimé à au moins 1000 milliards de dollars
TEST: elle à qui nous avons donné notre cœur et pour laquelle nous avons tout tenté pour la faire aimer de nos concitoyens.
TEST: jusqu’à parfois se mettre en danger
TEST: les méthodes de l’à-peu-près ne suffisent pas.
+TEST: Celui qui a peine à paraître ne doit pas être mis subitement en lumière
## substantifs
__conf_substantif_à_substantif!3__
*WORD a @:N¬*
- <<- /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", "*")
+ <<- /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|")
+ and morph(\1, ":N", "*")
-2>> à # Confusion probable : “a” est une forme conjuguée du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0
TEST: les bobos {{a}} trottinette
TEST: la lettre A est la première lettre de l’alphabet
TEST: la lettre a est la première lettre de l’alphabet
TEST: cette femme a raison
TEST: l’homme a beau se démener, rien n’y fait.
TEST: elle a tendance à n’en faire qu’à sa tête.
TEST: Ce travail a lieu dans le désert.
+TEST: cette injonction a force de loi
__conf_a_à_substantifs__
>arc a >poulie
>arme a >feu
@@ -6916,15 +6974,15 @@
TEST: Je peux mener {{a}} bien cette opération.
TEST: Cette coalition que tu penses mener a bien l’intention de te trahir.
__conf_à_a_après_verbes__
- @:V¬:[YGNAWM] ?@:W¿ a
+ @:V¬:[YGNAWM] ?$:W¿ a
<<- /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")
--1>> à # Confusion probable : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0
- [/VCint|/VCimp] ?@:W¿ a
+ [/VCint|/VCimp] ?$:W¿ a
<<- /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
TEST: Vient-on {{a}} la maison demain ?
TEST: Arrivait-elle {{a}} le manger ?
TEST: Dis-moi {{a}} quelle heure on mange.
@@ -6935,10 +6993,19 @@
TEST: Ce que je mange a un goût de surgelé.
TEST: celui qui conduisait a décidé de faire un tour du quartier avec la voiture.
TEST: Un rendez-vous a bousculé ses plans
TEST: Maria Butina a également rencontré des républicains tels que Donald Trump
+
+__conf_à_en_juger_par__
+ !! à en juger par ¡¡
+ [à|a] [en|>an] [juger|jugé+ses|jugeait|jugeais] [par|pare+s|>part]
+ <<- /conf/ ->> à en juger par # Confusion : “à en juger par” c’est-à-dire “selon le jugement qu’on se faire avec”.
+
+TEST: {{a en jugé part}} cet article, c’est bientôt la fin.
+TEST: ils sont à en juger par leurs résultats les prochains champions.
+
__conf_celui_celle_à_qui__
[celui|celle|ceux|celles] a qui
<<- /conf/ -2>> à # Confusion. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0
@@ -7303,17 +7370,22 @@
<<- /conf/ -1:2>> ces|ses # Confusion. Exemples : c’est facile ; ces chats (désignation) ; ses chats (possession)…
ses /-là
<<- /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”.
+ c’ est n’ [est|était]
+ c’ est ne [serait|sera]
+ <<- /conf/ not value(<1, "|que|qu’|") -1:2>> ce # Confusion probable.
+
TEST: {{ses}} au-dessus de ses forces.
TEST: {{ces}} comme la peste
TEST: car {{ses}} d’autre part
TEST: {{ces}} qu’il y a tant de pertes
TEST: {{ces}} jamais une bonne idée.
TEST: {{c’est}} {{délires}} nous ennuient
TEST: {{ses}} gens-là sont des salopards
+TEST: {{c’est}} n’est pas ça. ->> ce
TEST: En 2015, c’est Paris et son agglomération qui…
TEST: Ses pas de danse.
TEST: Avec ces quelques mots, que veux-tu dire ?
TEST: Avec ces quelque 70 millions d’euros de cash disponible
TEST: négocier séparément avec ces divers sous-groupes
@@ -7871,10 +7943,26 @@
en générale
<<- /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
TEST: On n’en sait {{en générale}} pas assez.
+
+# emballé, c’est pesé
+__conf_emballé_c_est_pesé__
+ >emballer [c|sais|sait] >peser
+ <<- /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
+
+ >emballer ?,¿ c’ est >peser
+ <<- /conf/ not (value(\1, "|emballé|") and value(\-1, "|pesé|")) and morph(<1, ":C||>,")
+ ->> 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
+
+TEST: {{emballait c pesé}}
+TEST: {{emballer c’est peser}}
+TEST: Tu peux emballer, c’est pesé.
+TEST: il faut emballer, c’est pesé
+TEST: c’est emballé, c’est pesé.
+
# évidement / évidemment
__conf_évidemment_évidement__
[/VCint|/VCimp] ?[pas|plus|jamais|guère]¿ évidement
[pas|plus] évidement
@@ -8164,10 +8252,11 @@
<<- /conf/ -1>> or,
# 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
>or du commun
>or de ?[ma|ta|sa|notre|votre|leur]¿ [compréhension|perception|portée|vue]
+ >or de question [que|qu’]
<<- not morph(<1, ":D.*:[me]") -1>> hors
# Confusion probable. Si vous voulez dire “en dehors de”, écrivez “hors”.|https://fr.wiktionary.org/wiki/hors
TEST: {{hors}}, nous y coryons malgré tout ce qu’on peut en dire.
TEST: {{Hors}} il y a tant à faire depuis que nous sommes arrivés en ces lieux.
@@ -8541,11 +8630,11 @@
__conf_on_ont__
[|,|$:Cs] ?l’¿ (ont) [ne|n’|me|m’|te|se|s’]
[|,|$:Cs] ?l’¿ (ont) [lui|nous|vous] @:[123][sp]¬:G
[|,|$:Cs] ?l’¿ (ont) [leur|le|la|l’] @:[123][sp]¬:(?:G|[NA].*:[si])
- [|,|$:Cs] ?l’¿ (ont) @:[123][sp]¬:[GQ]|>(?:envie|peine|affaire|hâte|force|recours|somme)/
+ [|,|$:Cs] ?l’¿ (ont) @:[123][sp]¬:[GQ]|>(?:envie|charge|peine|affaire|hâte|force|recours|somme)/
<<- /conf/ -1>> on # Confusion probable : “ont” est une conjugaison du verbe avoir.
[|,|$:Cs] ?l’¿ ont t’
<<- /conf/ not value(>1, "|il|ils|elle|elles|") --2>> on # Confusion probable : “ont” est une conjugaison du verbe avoir.
@@ -8713,10 +8802,29 @@
TEST: Il ne le deviendra {{par}}. ->> pas
TEST: ne viens {{par}}, c’est dangereux.
TEST: il ne tient par contre que grâce à nous
TEST: elle ne savait par qui passer pour arriver à ses fins.
+
+# par le bout du nez
+__conf_par_le_bout_du_nez__
+ !! par le bout du nez ¡¡
+ [par|>part|pare+s] [le|l’] [bout|bous] du [né|nez]
+ <<- /conf/ ->> par le bout du nez # Confusion. Locution “par le bout du nez”.
+
+TEST: se faire mener {{par le bout du né}}.
+
+
+# par les temps qui courent
+__conf_par_les_temps_qui_courent__
+ !! par les temps qui courent ¡¡
+ [par|>part|pare+s] les [>tan|tant|temps] qui [courent|court+s|>cour|coure+s|courre]
+ <<- /conf/ ->> par les temps qui courent # Confusion: Locution “par les temps qui courent”.
+
+TEST: {{part les tan qui court}}
+TEST: par les temps qui courent, impossible de passer inaperçu.
+
# pause /pose
__conf_pause_pose__
>pose [gourmande|café|carrière|crédit|déjeuner|détente|dîner|pipi|repas|thé]
>pose du [matin|soir]
@@ -9184,11 +9292,11 @@
# 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
les quelquefois [ou|où|que|qu’]
<<- /conf/ -2>> quelques fois # Confusion : “quelquefois” signifie “parfois”.|https://fr.wiktionary.org/wiki/quelquefois
- >être quelques fois ?@:W¿ @:A [de|d’]
+ >être quelques fois ?$:W¿ @:A [de|d’]
<<- /conf/ -2:3>> quelquefois # Confusion possible. Si vous voulez dire “parfois”, écrivez “quelquefois”.
TEST: {{Quelles que fois}}, on y comprend plus rien.
TEST: {{Qu’elle que fois}}, on y comprend plus rien.
TEST: Il y va {{quelque fois}} par an.
@@ -9282,11 +9390,11 @@
TEST: Quelle peut bien être l’influence de cet artiste de nos jours ?
# quoi que / quoique
__conf_quoique_quoi_que__
- quoiqu’ il se soit ?@:W¿ passé
+ quoiqu’ il se soit ?$:W¿ passé
[quoique|quoiqu’] [je|j’|tu|il|elle|on|nous|vous|ils|elles] en >penser
[quoique|quoiqu’] [je|j’|tu|il|elle|on|nous|vous|ils|elles] >avoir pu faire
<<- /conf/ -1>> quoi que|quoi qu’ # Confusion probable.|https://fr.wiktionary.org/wiki/quoi_que
TEST: mais {{quoique}} tu en penses, c’est comme ça que ça fonctionne.
@@ -9540,11 +9648,12 @@
TEST: {{sont}} {{pain}}
TEST: en {{sont}} {{absence}}
TEST: qui {{son}} ces gens ?
TEST: chez {{sont}} amis
TEST: il a perdu {{sont}} {{ami}}
-TEST: ces gens {{son}} ceux qui nous mettent constamment dans la merde
+TEST: ces gens {{son}} ceux qui nous mettent constamment dans la merde ->> sont
+TEST: à {{sont}} précis de mathématiques ->> son
TEST: elles s’en sont mal portées
TEST: ils en sont reconnaissants
TEST: sont loin, ces gens…
TEST: Il ne sait pas vraiment ce que sont la peur et la souffrance.
TEST: avec le mur du son ceux qui l’entendent.
@@ -9630,10 +9739,13 @@
<<- /conf/ -2>> temps # Confusion. Écrivez « en temps de » si vous évoquez une période de temps.
de [tant|>tan] en [tant|>tan]
<<- /conf/ ->> de temps en temps # Confusion. Écrivez « de temps en temps ».
+ depuis la [nui|nuit] des [>tan|tant]
+ <<- /conf/ --1>> temps # Confusion. Locution “depuis la nuit des temps”.|
+
[après|avec] [temps|>tan] [de|d’]
<<- /conf/ -2>> tant # Confusion. Écrivez “tant” pour évoquer une quantité de quelque chose.|http://fr.wiktionary.org/wiki/tant
[à|a] [>tan|tant] [partiel|partiels|plein|pleins]
<<- /conf/ -2>> temps # Confusion. Pour ce qui est temporel, écrivez “temps”.
@@ -9651,10 +9763,11 @@
TEST: ils vont {{de tan en tan}} au restaurant
TEST: après {{temps}} de souffrance, il faut savoir lâcher prise.
TEST: il travaille à {{tant}} partiel
TEST: {{en même tant}}, on s’en moque, de toutes ces histoires ennuyeuses.
TEST: en {{tan}} que telle, cette méthode n’est pas parfaite, mais avec de l’intuition
+TEST: depuis la nuit des {{tans}}
TEST: ce sera fait en {{tant}} et en heure
TEST: ce qui a commencé en 2011 en tant d’endroits du pourtour méditerranéen
TEST: elle est allée en tant de lieux qu’il est difficile de suivre son trajet.
@@ -9667,10 +9780,17 @@
<<- /conf/ -3>> teint # Confusion.|https://fr.wiktionary.org/wiki/fond_de_teint
TEST: Elle l’a observé par un miroir sans {{teint}}.
TEST: Elle a acheté un nouveau fond de {{tain}}.
+
+__conf_taule_tôle1__
+ [>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]
+ <<- /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.
+
+TEST: une {{taule}} en acier
+
# tête / tète
__conf_tête_tète!6__
[tète|tètes] [baissée|baissées|baissé|baissés]
[tète|tètes] [haute|hautes|basse|basses]
@@ -10783,10 +10903,11 @@
, [oui|non] ,
, entre autres ?choses¿ ,
à *NUM %
à ?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
à [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]
+ à [mi-chemin|mi-mandat|mi-mot+s|mi-parcours|mi-temps|mi-voix]
à air comprimé
à angle droit
à armes égales
à aucun prix
à autre chose
@@ -10887,10 +11008,11 @@
à l’ unanimité
à l’ unisson
à l’ une d’ entre elles
à l’ échelle [nationale|mondiale|régionale|départementale|cantonale|locale|galactique|universelle]
à l’ étouffée
+ à l’ exclusion de toute autre chose
à l’ évidence
à l’ œil nu
à l’ [un|une] des leurs
à la [bourre|con|coule|dérobée|diable|fois|leur|manque|mords-moi-le-nœud|papa|ramasse|renverse|redresse|rescousse|sauvette|volée]
à la bonne franquette
@@ -10933,11 +11055,12 @@
à [mon|ton|son|notre|votre|leur] [cœur|corps] défendant
à [mon|ton|son|notre|votre|leur] grand [désarroi|soulagement]
à n’ en [pas|point] douter
à n’ en plus finir
à n’ importe quel prix
- à parler franc
+ à n’ importe quelle heure du jour et de la nuit
+ à parler [franc|franchement|strictement]
à part [entière|ça|cela|ceci]
à parts égales
à partir [de|d’] {pronom_obj}
à partir [de|d’] [aujourd’hui|ici|là|maintenant|rien]
à partir [de|d’] [demain|hier] ?[matin|midi|soir]¿
@@ -10976,10 +11099,11 @@
à ras [le|du] sol
à rude épreuve
à s’ y méprendre
à somme nulle
à spectre ?[très|si]¿ large
+ à strictement parler
à tarif réduit
à tarifs réduits
à tel point
à temps [plein|partiel|complet]
à tête reposée
@@ -11113,11 +11237,11 @@
avant d’ aller plus loin
avant J.-C.
avant Jésus-Christ
avant d’ en arriver là
avant de faire quoi que ce soit
- avant de faire quoi que ce soit [de|d’] ?@:W¿ [absurde|stupide|crétin|con|idiot|inconsidéré]
+ avant de faire quoi que ce soit [de|d’] ?$:W¿ [absurde|stupide|crétin|con|idiot|inconsidéré]
avant qu’ il ne soit trop tard
avant un bon bout de temps
avec [brio|constance|joie|légèreté|insistance|peine]
avec autre chose
avec le plus grand soin
@@ -11142,25 +11266,27 @@
çà et là
ce faisant
cependant
[cela|ça|ceci] mis à part
[cela|ça|ceci] va sans dire
+ [cela|ceci] étant dit
certes
ces derniers temps
cette [fois|fois-là|fois-ci]
chaque fois
ci-dessous
ci-dessus
+ chose promise ?,¿ chose due
comme avant
comme autrefois
comme d’ habitude
comme toujours
comme de juste
comme bon [me|te|lui|leur|nous|vous] semble
comme au bon vieux temps
comme cul et chemise
- comme [frappé|frappée|frappés|frappées] par la foudre
+ comme [frappé+ses] par la foudre
comme n’ importe où ?ailleurs¿
comme par [enchantement|magie]
comme par un fait exprès
comme pas deux
comme peau de chagrin
@@ -11187,10 +11313,11 @@
dans leur grande majorité
dans les années ~^\d{2,5}$
dans les [secondes|minutes|heures|jours|semaines|mois|trimestres|semestres|années|décennies|siècles|millénaires] à venir
dans peu de temps
dans tout [cela|ça|ceci]
+ dans [ma|ta|sa|notre|votre|leur] prime jeunesse
dans très peu de temps
dans un cas comme dans l’autre
dans une [certaine|large|moindre] mesure
début {mois} ~^\d{2,5}$
au début {mois} ~^\d{2,5}$
@@ -11382,10 +11509,11 @@
depuis *NUM [ans|années|mois|semaines|jours|heures|minutes|secondes]
depuis belle lurette
depuis bien longtemps
depuis [de|d’] ?[assez|très]¿ longues années
depuis des lustres
+ depuis la nuit des temps
depuis la [première|dernière|~ième$] fois
depuis les années ~^\d{2,5}$
depuis ?[assez|très]¿ longtemps
depuis lors
depuis ?[assez|très]¿ peu de temps
@@ -11402,10 +11530,11 @@
dès à présent
dès que possible
dès [demain|hier] ?[soir|matin|après-midi]¿
Dieu [m’|t’|l’|nous|vous|les] en [garde|préserve]
Dieu [m’|t’|lui|nous|vous|leur] en soit témoin
+ Dieu seul le sait
du ~^[xXvViI]+[eᵉ]$ siècle
du [Ier|Iᵉʳ|1er|1ᵉʳ] siècle
du bout des lèvres
du début à la fin
du fond du cœur
@@ -11492,10 +11621,11 @@
en point [de|d’] [mire|orgue]
en porte-à-faux
en position [de|d’] [force|faiblesse]
en premier lieu
en première [instance|ligne]
+ en [première|seconde|~ième$] position
en pure perte
en quantité suffisante
en quantité plus que suffisante
en quelque sorte
en queue [de|d’] peloton
@@ -11525,18 +11655,19 @@
en tout et pour tout
en tout état [de|d’] cause
en tout premier lieu
en toute bonne foi
en toute connaissance [de|d’] cause
- en toute [circonstance|confiance|discrétion|franchise|hâte|impartialité|impunité|innocence|légalité|liberté|logique|sécurité|simplicité]
+ en toute [circonstance|confiance|discrétion|franchise|hâte|impartialité|impunité|innocence|légalité|liberté|logique|modestie|sécurité|simplicité]
en toutes circonstances
en travers de la gorge
en un claquement de doigts
en un clin d’ œil
en un rien [de|d’] temps
en une autre occasion
en vase clos
+ en vigueur
en vitesse ?[subsonique|supersonique|subluminique|superluminique]¿
en voie [de|d’] développement
en y réfléchissant bien
en [janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre] dernier
en [mon|ton|son|leur|notre|votre] âme et conscience
@@ -11574,10 +11705,11 @@
?d’¿ ici
?d’¿ ici [comme|ou] ailleurs
?d’¿ ici et [là|maintenant]
?d’¿ ici même
?d’¿ ici-bas
+ ?d’¿ il y a belle lurette
?d’¿ il y a ?très¿ longtemps
?d’¿ il y a ?très¿ peu [de|d’] temps
?d’¿ il y a quelques [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
?d’¿ il y a moins [de|d’] [*NUM|$:B] [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
?d’¿ il y a [*NUM|$:B] [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
@@ -11679,10 +11811,11 @@
par [beau|mauvais] temps
par bien des [aspects|côtés]
par bonté [de|d’] [âme|cœur]
par ce biais
par certains [aspects|côtés]
+ par grand froid
par gros temps
par la même occasion
par la suite
par le passé
par les temps qui courent
@@ -11794,10 +11927,11 @@
sans coup férir
sans crier gare
sans difficulté ?[apparente|aucune|financière|majeure|particulière]¿
sans dire mot
sans en avoir conscience
+ sans états d’ âme
sans [m’|t’|s’|nous|vous] en apercevoir
sans [m’|t’|s’|nous|vous] en rendre compte
sans [m’|t’|s’|nous|vous] faire [avoir|comprendre|désirer|prier|remarquer]
sans faire [de|d’] vagues
sans foi ?,¿ ni loi
@@ -11808,30 +11942,32 @@
sans mot dire
sans nul doute
sans pour autant y [parvenir|réussir|réfléchir|songer|penser]
sans pour autant y faire attention
sans pour autant y prendre [garde|goût|gout]
+ sans [me|te|lui|nous|vous|leur|y] prêter attention
sans [que|qu’] je le [sache|susse]
sans [que|qu’] tu le [saches|susses]
sans [que|qu’] [il|elle|on|$:M] le [sache|sût]
sans [que|qu’] nous le [sachions|sussions]
sans [que|qu’] vous le [sachiez|sussiez]
sans [que|qu’] [ils|elles] le [sachent|sussent]
sans queue ni tête
sans raison apparente
sans répit
+ sans tarder
sans vouloir [me|m’|te|t’|lui|nous|vous|leur] manquer de respect
sans y [parvenir|réussir|réfléchir|songer|penser]
sans y [réfléchir|songer|penser] à [deux|2] fois
sans y faire attention
sans y prendre [garde|goût|gout|ombrage]
- sans états d’ âme
sauf >erreur [de|d’] [ma|ta|sa|notre|votre|leur] part
secondo
selon toute vraisemblance
sens dessus dessous
>seule à >seule
+ s’ il le [faut|fallait|faudra|faudrait]
si [bas|haut|longtemps|nécessaire|possible|soudain]
si [cela|ça|ceci] ne tenait qu’ à [moi|toi|lui|eux|elle|elles|nous|vous]
si besoin est
si le besoin s’en [fait|faisait] sentir
si le besoin [doit|devait] s’en faire sentir
@@ -11913,12 +12049,12 @@
une fois pour toutes
urbi et orbi
vaille que vaille
ventre à terre
vers nulle part
- vite
vite fait ?,¿ bien fait
+ [voici|voilà] belle lurette
volontiers
<<- ~>> *
__purge_x_par_après_x__
@@ -11988,11 +12124,10 @@
à [quelques|plusieurs] [mètres|kilomètres|lieues|pas|minutes|heures] [de|du|d’|des]
à [quelques|plusieurs] [dizaines|centaines|milliers] de [mètres|kilomètres] [de|du|d’|des]
à [base|force|raison] [de|d’]
à grand renfort [de|d’]
à grands coups [de|d’]
- à seule fin [de|d’]
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]
au beau milieu [de|du|d’|des]
au fin fond [de|du|d’|des]
au grand dam [de|du|d’|des]
au plus profond [de|du|d’|des]
@@ -12084,15 +12219,15 @@
<<- not morph(<1, ">ne") ~>> *
la une [de|des|du]
<<- ~2>> _
- l’ impression que
+ l’ impression [que|qu’]
<<- ~1>> _
- l’ étrange impression que
- la [nette|bizarre] impression que
+ l’ étrange impression [que|qu’]
+ la [nette|bizarre] impression [que|qu’]
<<- ~2:3>> _
le pour et le contre
<<- ~>> ␣
<<- =>> define(\1, [":LN:m:p"])
@@ -12112,11 +12247,11 @@
pour ou contre
<<- ~2:0>> *
qui ce [jour-là|matin-là|après-midi-là|soir-là|mois-là|siècle-là|millénaire-là]
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à]
- qui à part [moi|toi|lui|elle|nous|vous|eux|elles
+ qui à part [moi|toi|lui|elle|nous|vous|eux|elles]
qui d’ autre à part [moi|toi|lui|elle|nous|vous|eux|elles]
<<- ~2:0>> *
plus avant ~¬^(?:de|d’|que|qu’)$
<<- ~1:2>> *
@@ -12134,13 +12269,17 @@
<<- ~>> _
vent debout contre
<<- ~1:2>> *
- je [t’|vous] en [prie|supplie]
- nous [t’|vous] en [prions|supplions]
+ je [t’|vous] en [prie|supplie]
+ nous [t’|vous] en [prions|supplions]
<<- ~>> *
+
+ , je [t’|vous] en [prie|supplie] ,
+ , nous [t’|vous] en [prions|supplions] ,
+ <<- not morph(>1, ":E") ~>> *
# Déterminant + nombre
__p_dét_plur_nombre_nom__
[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)
@@ -12211,14 +12350,14 @@
<<- ~1:2>> *
au hasard @:¬:[AQ].*:[me]:[si]
<<- ~1:2>> *
- aussi @:W que [nécessaire|possible]
+ aussi $:W que [nécessaire|possible]
<<- ~>> *
- aussi @:W que ce soit [|,]
+ aussi $:W que ce soit [|,]
<<- ~1:5>> *
au sens le [plus|moins] @:A.*:[me]:[si] du terme
au sens @:A.*:[me]:[si] du terme
<<- ~>> *
@@ -12289,11 +12428,11 @@
<<- not morph(<1, ":(?:X|Oo)") and not tag_before(\1, "2s") ~>> *
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)
<<- ~3>> *
- le [plus|moins] @:W possible
+ le [plus|moins] $:W possible
<<- ~>> *
les [moins|plus] @:A.*:[pi] possible
<<- ~-1>> *
@@ -12307,11 +12446,11 @@
<<- morph(<1, ":(?:R|C[sc])") ~1>> *
non @:A
<<- not morph(<1, ":D.*:m:[si]") ~1>> *
- par trop @:A
+ par trop $:A
<<- ~1:2>> *
pas mal
<<- not morph(<1, ":D") ~>> *
@@ -12322,11 +12461,11 @@
<<- not morph(<1, ":D.*:[me]") ~>> *
plein est
<<- not morph(<1, ":D.*:m:[si]") ~>> *
- [plus|moins|aussi] @:W que prévu
+ [plus|moins|aussi] $:W que prévu
<<- ~>> *
plus que tout autre @¬:[AQ].*:m:[si]
<<- ~1:4>> *
@@ -12391,10 +12530,11 @@
#, @¬:[NA]
#[ne|n’|me|m’|te|t’|se|s’|le|la|l’|les|leur|leur|mon|ma|ta|sa|notre|votre|mes|tes|ses|ce|cet|cette|ces|je|j’|tu|il|on|nous|vous|ils|ça|ceci|cela|c’|ç’|chaque]
__simplication_substantifs__
+ >accusé de reception
>acte [de|d’] [baptême|caution|cautionnement|cession|contrition|licitation|mariage|naissance|notoriété|propriété|quittance|reconnaissance|répudiation|vente]
>acte d’ [achat|engagement]
>acte de gestion ?courante¿
>acte de procédure ?pénale¿
>acte d’ état ?civil¿
@@ -12401,10 +12541,11 @@
>administratrice >système
>agence de >voyage
>aire d’ atterrissage
>animal [de|d’] compagnie
>appel au secours
+ >appel à l’ aide
>arc à poulies
>arme à feu
>armée [de|d’] l’ air
>armée [de|d’] terre
>armer jusqu’ aux dents
@@ -12412,10 +12553,11 @@
>arme [de|d’] destruction massive
>armoire à [>glace|>pharmacie]
>argent [de|d’] poche
>arnaque à l’ assurance
>article [de|d’] presse
+ >assignation à résidence
>attaque à main armée
>attestation sur l’ honneur
>atteinte aux bonnes mœurs
>attendre [de|d’] pied ferme
>avion à [>hélice|réaction]
@@ -12442,10 +12584,11 @@
>brave ?d’¿ entre les braves
>brosse à [>dent|reluire]
>cabinet [de|d’] [toilette|travail]
>camp [de|d’] [concentration|internement|rééducation|vacances]
>canne à [pêche|sucre]
+ >canon à eau
>caisse à >outil
>carton d’ emballage
>centre d’ éducation [populaire|surveillée]
>chair à [pâté|>canon]
>chair [de|d’] poule
@@ -12464,16 +12607,18 @@
>claire comme [de|d’] l’ eau [de|d’] [boudin|roche|source]
>claire comme du cristal
>claire comme jus [de|d’] [boudin|>chaussette|chique]
[>clé|>clef] à molette
>clin d’ œil
+ >clause de confidentialité
>code [de|d’] bonne conduite
>commise d’ office
>compagne [de|d’] route
>compagnon [de|d’] route
>complémentaire santé
>compte à rebours
+ concours de beauté
>condamnée à mort
>conférence [de|d’] presse
>convention [récepteur|générateur]
>conne comme la lune
>conne comme un balai
@@ -12490,10 +12635,11 @@
>crayon à [lèvres|sourcils]
>cour d’ assises
[>coût|>cout] [de|d’] revient
>couteau à cran d’ arrêt
>cuillère à [café|soupe]
+ >cure de [désintoxication|désintox]
>déclaration sur l’ honneur
>délai [de|d’] [attente|carence|connexion|prescription|préavis|rétraction|rigueur]
>demande d’ asile
>descente aux [enfers|flambeaux]
[>dîner|>diner] aux chandelles
@@ -12536,19 +12682,21 @@
>fille au pair
fils à [papa|maman]
fils [de|d’] pute
>flocon [de|d’] neige ?électronique¿
>folle à lier
+ >fontaine à eau
>fosse à >ordure
>fosse aux lions
[>fourgon|>fourgonette] de location
>frayeur [de|d’] tous les diables
>frousse [de|d’] tous les diables
>fusil à pompe
>gilet de sauvetage
>hall d’ entrée
>haute comme [trois|3] pommes
+ >heure sup
>histoire avec un [grand|petit] h
>homme [de|d’] [affaires|armes|confiance|exception|État|Église|honneur|lettres|loi|main|paille]
>homme d’ âge mûr
>homme à tout faire
>hôtel [de|d’] ville
@@ -12570,13 +12718,16 @@
>lampe [de|d’] chevet
>lavage de cerveau
>liaison sans lendemain
>lime à >ongle
>liste d’ attente
+ >lit à baldaquin
>lit [de|d’] camp
>livraison à domicile
>livre [de|d’] poche
+ >livret d’ épargne ?[bancaire|populaire|salariale]¿
+ >longueur d’ avance
>lune [de|d’] miel
>machine à [café|coudre|écrire|laver|sous|voter]
>machine à remonter le temps
>machine [de|d’] guerre
>maillot [de|d’] bain
@@ -12594,11 +12745,11 @@
>mère au foyer
>metteuse en scène
>mineure [de|d’] moins [de|d’] *NUM ans
>mineure [de|d’] moins [de|d’] $:B ans
>miroir aux alouettes
- >mode [de|d’] [paiement|scrutin|vie]
+ >mode [de|d’] [emploi|paiement|scrutin|vie]
>monnaie [de|d’] [échange|réserve|singe]
>montre à gousset
>mot [de|d’] passe
>motrice [>essence|>diésel|>diesel]
>motion [de|d’] [blâme|censure|défiance]
@@ -12633,11 +12784,11 @@
>pleine aux as
>police [de|d’] [caractères|écriture]
>politique spectacle
>pomme [de|d’] [discorde|terre|reinette|pin|Adam|api|amour|ambre|eau|or]
>pompe à [chaleur|essence|fric]
- >porte [de|d’] [service|garage|sortie]
+ >porte [de|d’] [entrée|service|garage|sortie]
>porte d’ entrée
>pot [de|d’] [chambre|colle]
>poudre aux yeux
>presse à >scandale
preuve ?suffisante¿ du contraire
@@ -12687,15 +12838,17 @@
tas [de|d’] >ferraille ?rouillée¿
>talon >aiguille
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]
>témoin à charge
>ténor du barreau
+ >tête à claques
>tête [de|d’] [linotte|déterré|déterrée|déterrés|déterrées|mule]
>têtue comme une [bourrique|mule]
>têtue comme un [âne|bourriquot|mulet]
>terrain à découvert
>tigre à dents [de|d’] sabre
+ >tiret d’ incise
>titre [de|d’] [noblesse|propriété|séjour]
>tondeuse à gazon
>tour [de|d’] passe-passe
>train à grande vitesse
>traitement [de|d’] faveur
@@ -12734,12 +12887,27 @@
>calibre *NUM ?[mm|in]¿
>calibre *NUM [*|×] *NUM ?[mm|in]¿
<<- ~2:0>> *
<<- =>> =select(\1, ":N")
+
+__purge_syntagmes_nominaux_matière__
+ *WORD en acier ?[galvanisé|inoxydable|trempé]¿
+ *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]
+ <<- morph(\1, ":N") and not morph(>1, ":A.*:[me]:[si]") ~2:0>> *
+
+ *WORD en pierre
+ *WORD en pierre de taille
+ *WORD en soie
+ *WORD en terre ?cuite¿
+ <<- morph(\1, ":N") and not morph(>1, ":A.*:[fe]:[si]") ~2:0>> *
+
+TEST: deux câbles en acier situés de part et d’autre du chariot
+
__purge_locutions_adjectivales__
+ ancienne formule
bas de gamme
basse consommation
bon [enfant|marché|teint]
bon chic ?,¿ bon genre
[>clé|>clef] en >main
@@ -12751,11 +12919,11 @@
haut de gamme
haute [résolution|fidélité|tension]
hors service
longue [conservation|distance|portée|durée]
meilleur marché
- nouvelle génération
+ nouvelle [formule|génération]
numéro un
numéro $:B
plein cadre
top secret
vieux jeu
@@ -12772,11 +12940,11 @@
__purge_couleurs__
[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]
[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]
blanc [argenté|cassé|lunaire]
- bleu [acier|argenté|azur|céleste|ciel|électrique|givré|indigo|marine|nuit|outremer|outre-mer|persan|pétrole|roi|saphir|turquin|turquoise]
+ bleu [acier|argenté|azur|céleste|ciel|électrique|givré|indigo|marine|nuit|outremer|outre-mer|persan|pétrole|roi|saphir|turquin|turquoise|vert]
blond [argenté|platine]
gris [acier|anthracite|argenté|fer|perle|souris]
jaune [canari|citron|doré|maïs|paille|sable]
noir [de|d’] [encre|jais]
noir et blanc
@@ -12838,10 +13006,33 @@
~^[A-ZÉÈÊ] et [moi|toi|lui|elle|nous|vous|eux|elles]
<<- morph(\2, ":M")
~2:0>> =rewriteSubject(\2,\4) + "||"
+
+__purge_pronom_aussi__
+ [j’|je] *WORD moi aussi
+ <<- morph(\2, ":1s") ~3:0>> *
+
+ tu *WORD toi aussi
+ <<- morph(\2, ":2s") ~3:0>> *
+
+ il *WORD lui aussi
+ elle *WORD elle aussi
+ on *WORD nous aussi
+ <<- morph(\2, ":3s") ~3:0>> *
+
+ nous *WORD nous aussi
+ <<- morph(\2, ":1p") ~3:0>> *
+
+ vous *WORD vous aussi
+ <<- morph(\2, ":2p") ~3:0>> *
+
+ ils *WORD eux aussi
+ elles *WORD elles aussi
+ <<- morph(\2, ":3p") ~3:0>> *
+
__purge_après_être__
[>être|>devenir|>rester] [bon|meilleur] marché
[>être|>devenir|>rester] cousin et cousine
[>être|>devenir|>rester] de passage
@@ -12878,11 +13069,11 @@
[>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ avant tout
[>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ du moins
[>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ en partie
[>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ somme toute
[>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ sous peu
- [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ tous [deux|trois]
+ [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
[>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ un jour
[>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ à jamais
[>être|>devenir|>rester] [pas|jamais|plus|guère|point]
<<- ~2:0>> *
@@ -12922,11 +13113,11 @@
/VCint ?[pas|jamais|plus|guère|point]¿ avant tout
/VCint ?[pas|jamais|plus|guère|point]¿ du moins
/VCint ?[pas|jamais|plus|guère|point]¿ en partie
/VCint ?[pas|jamais|plus|guère|point]¿ somme toute
/VCint ?[pas|jamais|plus|guère|point]¿ sous peu
- /VCint ?[pas|jamais|plus|guère|point]¿ tous [deux|trois]
+ /VCint ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
/VCint ?[pas|jamais|plus|guère|point]¿ un jour
/VCint ?[pas|jamais|plus|guère|point]¿ à jamais
/VCint [pas|jamais|plus|guère|point]
<<- morphVC(\1, ">(?:être|devenir|rester)") ~2:0>> *
@@ -12959,11 +13150,11 @@
__purge_après_avoir__
>avoir [pas|jamais|plus|guère|point]
>avoir ?[pas|jamais|plus|guère|point]¿ en partie
- >avoir ?[pas|jamais|plus|guère|point]¿ tous [deux|trois]
+ >avoir ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
>avoir ?[pas|jamais|plus|guère|point]¿ somme toute
<<- ~2:0>> *
>avoir ?[pas|jamais|plus|guère|point]¿ beaucoup
>avoir ?[pas|jamais|plus|guère|point]¿ bien [entendu|sûr]
@@ -12976,21 +13167,21 @@
>avoir ?[pas|jamais|plus|guère|point]¿ un peu
>avoir ?[pas|jamais|plus|guère|point]¿ un petit peu
>avoir ?[pas|jamais|plus|guère|point]¿ un tout petit peu
<<- morph(>1, ":[QY]") ~2:0>> *
- >avoir [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
+ >avoir [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
>avoir bon dos
>avoir bon pied ?,¿ bon œil
>avoir carte blanche
>avoir forme [humaine|animale]
>avoir partie [gagnée|liée]
>avoir voix au chapitre
<<- ~2:0>> ␣
<<- =>> define(\2, [":LV"])
- >avoir [pas|jamais|plus|guère|point] [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
+ >avoir [pas|jamais|plus|guère|point] [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
>avoir [pas|jamais|plus|guère|point] bon dos
>avoir [pas|jamais|plus|guère|point] bon pied ?,¿ bon œil
>avoir [pas|jamais|plus|guère|point] carte blanche
>avoir [pas|jamais|plus|guère|point] forme [humaine|animale]
>avoir [pas|jamais|plus|guère|point] partie [gagnée|liée]
@@ -12997,11 +13188,11 @@
>avoir [pas|jamais|plus|guère|point] quartier libre
>avoir [pas|jamais|plus|guère|point] voix au chapitre
<<- ~3:0>> ␣
<<- =>> define(\3, [":LV"])
- >avoir ?[pas|jamais|plus|guère|point]¿ [tous|toutes] les $:B [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
+ >avoir ?[pas|jamais|plus|guère|point]¿ [tous|toutes] les $:B [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
>avoir ?[pas|jamais|plus|guère|point]¿ [tous|toutes] les $:B @:(?:Q|V1.*:Y)
<<- ~2:-2>> *
n’ >avoir que $:Q
<<- ~3>> *
@@ -13012,11 +13203,11 @@
n’ >avoir que [peu|très|trop] $:W $:Q
<<- ~3:5>> *
/VCint [pas|jamais|plus|guère|point]
/VCint ?[pas|jamais|plus|guère|point]¿ en partie
- /VCint ?[pas|jamais|plus|guère|point]¿ tous [deux|trois]
+ /VCint ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
/VCint ?[pas|jamais|plus|guère|point]¿ somme toute
<<- morphVC(\1, ":V0a") ~2:0>> *
/VCint ?[pas|jamais|plus|guère|point]¿ beaucoup
/VCint ?[pas|jamais|plus|guère|point]¿ bien [entendu|sûr]
@@ -13029,21 +13220,21 @@
/VCint ?[pas|jamais|plus|guère|point]¿ un peu
/VCint ?[pas|jamais|plus|guère|point]¿ un petit peu
/VCint ?[pas|jamais|plus|guère|point]¿ un tout petit peu
<<- morphVC(\1, ":V0a") and morph(>1, ":[QY]") ~2:0>> *
- /VCint [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
+ /VCint [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
/VCint bon dos
/VCint bon pied ?,¿ bon œil
/VCint carte blanche
/VCint forme [humaine|animale]
/VCint partie [gagnée|liée]
/VCint voix au chapitre
<<- morphVC(\1, ":V0a") ~2:0>> ␣
<<- __also__ =>> define(\2, [":LV"])
- /VCint [pas|jamais|plus|guère|point] [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
+ /VCint [pas|jamais|plus|guère|point] [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
/VCint [pas|jamais|plus|guère|point] bon dos
/VCint [pas|jamais|plus|guère|point] bon pied ?,¿ bon œil
/VCint [pas|jamais|plus|guère|point] carte blanche
/VCint [pas|jamais|plus|guère|point] forme [humaine|animale]
/VCint [pas|jamais|plus|guère|point] partie [gagnée|liée]
@@ -13050,11 +13241,11 @@
/VCint [pas|jamais|plus|guère|point] quartier libre
/VCint [pas|jamais|plus|guère|point] voix au chapitre
<<- morphVC(\1, ":V0a") ~3:0>> ␣
<<- __also__ =>> define(\3, [":LV"])
- /VCint ?[pas|jamais|plus|guère|point]¿ [tous|toutes] les $:B [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
+ /VCint ?[pas|jamais|plus|guère|point]¿ [tous|toutes] les $:B [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
/VCint ?[pas|jamais|plus|guère|point]¿ [tous|toutes] les $:B @:(?:Q|V1.*:Y)
<<- morphVC(\1, ":V0a") ~2:-2>> *
__purge_après_verbe__
@@ -13375,11 +13566,11 @@
vu les circonstances @¬:A:[fe]:[pi]
<<- ~1:3>> *
__purge_tous_deux_trois__
- >faire tous [deux|trois]
+ >faire [tous|toutes] [deux|trois]
<<- ~2:0>> *
>faire tous
<<- morph(\1, ":[123]p") or (\1 == "fait" and value(<1, "|on|")) ~2>> *
@@ -13433,11 +13624,11 @@
[|,] $:D *WORD *WORD [le|la|l’|les|leur] @:(?:[123][sp]|P)¬:[NA]
[|,] $:D *WORD *WORD [nous|vous] [le|la|l’|les|en|y] @:(?:[123][sp]|P)
[|,] $:D *WORD *WORD [le|la|l’|les] [lui|leur|en|y] @:(?:[123][sp]|P)
[|,] $:D *WORD *WORD [lui|leur|y] en @:(?:[123][sp]|P)
[|,] $:D *WORD *WORD @:(?:3[sp]|P)¬:[GW]
- <<- morph(\3, ":[NA]", ":(?:G|V0)") and morph(\4, ":[NA]", ":(?:[PG]|V0)") =>> exclude(\4, ":V")
+ <<- morph(\3, ":[NA]", ":(?:G|V0)") and morph(\4, ":[NA]", ":(?:[PG]|V[023])") =>> exclude(\4, ":V")
[des|ces|mes|tes|ses|nos|vos|quelques|lesdits] @:A.*:[pi] @:N.*:[pi]¬(?:3[sp]|G)
<<- =>> exclude(\3, ":V")
les @:A.*:[pi]¬:V @:N.*:[pi]¬(?:3[sp]|G)
@@ -13447,29 +13638,35 @@
<<- not before(":O[vs]") =>> exclude(\3, ":V")
[plusieurs|certains|certaines] @:A.*:[pi]¬:3[sp] @:N.*:p¬:(?:3[sp]|G)
<<- =>> exclude(\2, ":V") and exclude(\3, ":V")
+
+__purge_vite__
+ vite
+ <<- not (morph(<1, ":V0a") and value(>1, "|fait|")) ~>> *
+
__purge_locutions_verbales__
>aller bon train
>arriver à [destination|échéance]
>arriver à point nommé
>arriver à bon port
>battre à plate couture
>battre en [brèche|retraite]
[>brûler|>bruler] à vif
+ >charger à blanc
>chauffer à blanc
>compter à rebours
>condamner à mort
>couler à ?grands¿ flots
>demander [assistance|audience|conseil|pardon]
[>donner|>redonner] [naissance|sens|suite|vie]
[>donner|>redonner] quartier libre
>élire domicile
>étouffer dans l’ œuf
- >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]
+ >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]
>faire amende honorable
>faire bande à part
>faire bon accueil
>faire bonne figure
>faire chou blanc
@@ -13534,10 +13731,11 @@
>prêter main forte
>prêter main-forte
>réduire en miettes
>remettre en cause
>rendre [hommage|service|visite]
+ >reprendre haleine
>rester lettre morte
>rester lettres mortes
>revenir à la case départ
>saigner à blanc
>suivre ?[ça|cela|ceci]¿ de près
@@ -13548,10 +13746,11 @@
>tenir en haute estime
>tirer à blanc
>tomber à [pic|point]
>trier sur le volet
>trouver refuge
+ >tirer à blanc
>tirer [avantage|profit]
>tourner à l’ aigre
>tourner court
>venir à bout
[>venir|>revenir] je [ne|n’] sais ?pas¿ ?trop¿ d’ où
@@ -13563,10 +13762,11 @@
>arriver a [destination|échéance]
>arriver a point nommé
>arriver a bon port
>battre a plate couture
[>brûler|>bruler] a vif
+ >charger a blanc
>chauffer a blanc
>fermer a [>clé|>clef]
[>gonfler|>regonfler] a bloc
>jeter a terre
[>mettre|>remettre] a [bas|>flot|>jour|>niveau|>nu|>nue|>plat|>terre]
@@ -13576,23 +13776,29 @@
>prêter a >confusion
>saigner a blanc
>tenir a [carreau|cœur|distance]
>tirer a blanc
>tomber a [pic|point]
+ >tirer a blanc
>tourner a l’ aigre
>venir a bout
[>venir|>revenir] a point
<<- /conf/ -2>> à # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.
+ >avoir du mal a
+ >avoir vocation a
+ >laisser libre cours a
+ <<- /conf/ --1>> à # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.
+
>faire plaisirs
<<- /sgpl/ --1>> plaisir # Faire plaisir : dans cette locution, “plaisir” doit être au singulier.
<<- ~-1>> *
>laisser pour [comte+s|>conte]
<<- /conf/ --1>> compte # Confusion. Locution “laisser pour compte”.|https://fr.wiktionary.org/wiki/laisser_pour_compte
- [>mourir|>paraître|>paraitre|>rester|>sembler] >jeûne
+ [>être|>mourir|>paraître|>paraitre|>rester|>sembler] >jeûne
<<- /conf/ -2>> jeune # Confusion. Le jeûne est une privation de nourriture.|https://fr.wiktionary.org/wiki/jeune
>partir en >couille
<<- /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
@@ -13620,10 +13826,11 @@
TEST: ce contrat arrive {{a}} échéance.
TEST: il faut tenir {{contes}} des faits au lieu de nos impressions.
TEST: prendre {{a}} la légère ce test serait une erreur.
TEST: on va suivre ça de {{prêt}}.
TEST: il faut se tenir {{a}} distance de ces gens-là.
+TEST: J’avais du mal {{a}} l’écouté (double erreur utile pour tester le faux positif)
TEST: cette expérience ne va pas tarder à tourner {{cours}}.
TEST: il faut rendre {{comte}} de la sitation désastreuse dans laquelle nous sommes tombés.
TEST: il faut tenir {{comtes}} des aléas de la météo.
TEST: faudra rendre bon {{conte}} de vos actes
TEST: Elle est restée {{jeûne}}.
@@ -13782,10 +13989,13 @@
TEST: La première est la critique dite artiste
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
TEST: Tu crois que Microsoft peut contraindre les projets libres à quoi que ce soit ?
TEST: « L’école produit la norme en matière de langage »
TEST: Parler affaires.
+TEST: Mon Dieu, je vous en prie, faites qu’il ne m’arrive rien
+TEST: Anne, je t’en prie, viens de bonne heure
+TEST: elles ont toutes deux épluché le contenu de la boîte
@@@@
@@@@
@@ -13796,14 +14006,10 @@
@@@@
@@@@
@@@@
-#
-# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
-#
-
!!!! Redondances dans la phrase !!
__[i]/redon2(redondances_phrase)__
({w_4})[ ,].* (\1) @@0,$
@@ -13882,36 +14088,37 @@
TEST: du chien et de l’étonnant {{colliers}} qu’il avait autour du cou.
__gn_le_1m__
, le *WORD
- <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\2) # Accord de genre erroné : « \3 » est féminin.
+ <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\3) # Accord de genre erroné : « \3 » est féminin.
<<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True) # Accord de genre erroné : « \2 » est un déterminant masculin.
<<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3) # Accord de nombre erroné : « \3 » devrait être au singulier.
<<- /gn/ __also__ -2>> les # Accord de nombre erroné : « \3 » est au pluriel.
*WORD le *WORD
<<- /gn/ morph(\2, ":D") >>>
<<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)")
or ( morph(\3, ":[NA].*:f", ":[me]") and morph(\1, ":R", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
- -2>> =suggLesLa(\2) # Accord de genre erroné : « \3 » est féminin.
+ -2>> =suggLesLa(\3) # Accord de genre erroné : « \3 » est féminin.
<<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True) # Accord de genre erroné : « \2 » est un déterminant masculin.
<<- /gn/ __else__ and morph(\3, ":[NA].*:p", "*")
or ( morph(\3, ":[NA].*:p", ":[si]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
-3>> =suggMasSing(\3) # Accord de nombre erroné : « \3 » devrait être au singulier.
<<- /gn/ __also__ -2>> les # Accord de nombre erroné : « \3 » est au pluriel.
le *WORD
- <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\2) # Accord de genre erroné : « \3 » est féminin.
+ <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\3) # Accord de genre erroné : « \3 » est féminin.
<<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True) # Accord de genre erroné : « \2 » est un déterminant masculin.
<<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3) # Accord de nombre erroné : « \3 » devrait être au singulier.
<<- /gn/ __also__ -2>> les # Accord de nombre erroné : « \3 » est au pluriel.
TEST: c’est une catastrophe, {{le}} {{profits}} a baissé ces deux derniers trimestres
TEST: j’en ai marre, {{le}} {{passée}} est trop dans les esprits
TEST: {{Le}} démoralisation. ->> La
TEST: {{Le}} Guyane française. ->> La
+TEST: sur {{le}} {{tables}} ->> les|la|||
TEST: avec {{le}} {{pile}}
TEST: contre {{le}} {{rois}}
TEST: {{le}} {{publique}}
TEST: {{Le}} {{pendue}}
TEST: {{Le}} personne répond.
@@ -14574,11 +14781,11 @@
<<- /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)
-3>> =switchGender(\3, True) # Accord de genre erroné avec « \2 ».
<<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2) # Accord de genre erroné avec « \3 ».
<<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
-3>> =suggPlur(\3) # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.
- <<- checkAgreement(\2, \3) =>> =exclude(\3, ":V")
+ <<- not morph(\3, ":G|>a/") and checkAgreement(\2, \3) =>> =exclude(\3, ":V")
TEST: faire table rase des passions {{inutile}} ->> inutiles
TEST: à bonne distance des {{chiens}} {{méchante}}
TEST: des hommes {{attaquée}}
TEST: des femmes {{agressé}}
@@ -15360,28 +15567,26 @@
TEST: Des yeux {{marrons}}.
TEST: Des créatures marines.
TEST: Un cageot des premières cerises.
-__sgpl_couleurs_composées__
- [>beige|>châtain|>cyan|>écarlate|>jaune|>magenta|>marron|>mauve|>orange|>pourpre|>rouge|>vermeille] [>brillante|>claire|>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>vive]
- [>beige|>châtain|>cyan|>écarlate|>jaune|>magenta|>marron|>mauve|>orange|>pourpre|>rouge|>vermeille] [foncé+ses|irisé+ses]
+__sgpl_couleurs_composées!5__
+ [>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]
+ <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":[pf]"))
+ ->> =suggSing(\1) + " " + suggMasSing(\2)
+ # 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
+
+ [>blanche|>bleue|>brune|>grise|>noire|>verte|>violette] [>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>brillante|>claire|>vive|foncé+ses|irisé+ses]
<<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":[pf]"))
- ->> =suggSing(\1) + " " + suggSing(\2)
+ ->> =suggMasSing(\1) + " " + suggMasSing(\2)
# 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
>jaune [>paille|>sable]
>rose [>bonbon|>chair|>corail]
>rouge [>brique|>carmine|>cerise|>écarlate|rubis|>sang|>tomate|>vermillon]
<<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":p"))
->> =suggSing(\1) + " " + suggSing(\2)
- # 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
-
- [>blanche|>bleue|>brune|>grise|>noire|>verte|>violette] [>brillante|>claire|>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>vive]
- [>blanche|>bleue|>brune|>grise|>noire|>verte|>violette] [foncé+ses|irisé+ses]
- <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":[pf]"))
- ->> =suggMasSing(\1) + " " + suggSing(\2)
# 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
>bleue [>ciel|>indigo|>marine|>roi|>saphir|>turquoise|>verte]
>blonde >platine
>grise [>acier|>anthracite|>perle|souris]
@@ -15392,20 +15597,27 @@
>noire [de|d’] [encre|jais]
<<- /sgpl/ not morph(<1, ":D") -1>> noir
# 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
-TEST: les chapeaux {{rouges clairs}}
-TEST: des chaussures {{jaunes sables}}
-TEST: des pantalons {{verts clairs}}
-TEST: des robes {{bleues indigo}}
-TEST: Une jupe {{bleue foncée}}.
-TEST: Des cheveux {{noirs}} de jais.
+TEST: les chapeaux {{rouges clairs}} ->> rouge clair
+TEST: des chaussures {{jaunes sables}} ->> jaune sable|||sablent
+TEST: des pantalons {{verts clairs}} ->> vert clair
+TEST: des robes {{bleues indigo}} ->> bleu indigo
+TEST: des voitures {{jaunes fluo}} ->> jaune fluo
+TEST: Une jupe {{bleue foncée}}. ->> bleu foncé
+TEST: boutons {{roses pâles}} ->> rose pâle
+TEST: Il a une queue {{bleue vert}}. ->> bleu vert
+TEST: Il a une queue {{marron claire}}. ->> marron clair
+TEST: Il a une queue {{verte clair}} ->> vert clair
+TEST: Des cheveux {{noirs}} de jais. ->> noir
TEST: Une jupe bleu foncé.
TEST: Des yeux vert clair.
TEST: Des yeux vert olive.
TEST: Ses cheveux étaient noir de jais.
+TEST: Il a une queue vert émeraude
+TEST: Il a une queue bleu vert
!!
!!
@@ -15798,11 +16010,11 @@
# juste
__sgpl_juste__
justes
<<- /sgpl/ \1.islower() and morph(<1, ":V", ":[DA]") and not morph(>1, ":[NA].*:[pi]")
- and not (morph(<1, ">(?:être|sembler|devenir|rester|demeurer|redevenir|para[îi]tre)/.*:[123]p") and morph(>1, ":G||>,/"))
+ and not (morph(<1, ">(?:être|sembler|devenir|rester|demeurer|redevenir|para[îi]tre|trouver)/.*:[123]p") and morph(>1, ":G||>,/"))
->> juste # Si “juste” est un adverbe, il est invariable.
TEST: Viser {{justes}}
TEST: Voir {{justes}}.
TEST: Penser juste.
@@ -15810,10 +16022,11 @@
TEST: J’ai retrouvé tout mon ressenti, tous les mots sont justes.
TEST: Nos chiffres sont justes, et nous vous le prouverons.
TEST: Ces observations sont tellement justes que, dans les années à venir, elles serviront de référence.
TEST: Les motivations sont justes et évidentes
TEST: ces théories incomplètes sont suffisamment justes pour prédire la réalité
+TEST: À vous de trouver les compromis que vous trouvez justes.
# pied
__sgpl_pied__
[>avoir|>perdre] pieds
@@ -15966,10 +16179,49 @@
TEST: On peut {{rires}}, non ?
TEST: Faire {{rires}}, c’est compliqué.
+
+!!!! Adverbes après verbe !!
+
+# fort
+__sgpl_verbe_fort__
+ forts
+ <<- /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)/")
+ and not morph(>1, ":A.*:[me]:[pi]")
+ ->> fort # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.
+
+ hauts [et|&] forts
+ <<- /sgpl/ morph(<1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q|Y)")
+ ->> haut et fort # Confusion probable. S’il s’agit ici de la locution adverbiale “haut et fort”, elle est invariable.
+
+TEST: ces emmerdeurs crient bien trop {{forts}}
+TEST: Ils déclamèrent {{hauts et forts}} leur amour de leur patrie.
+TEST: parler {{hauts & forts}}
+TEST: ces animaux paraissent forts, mais ils sont faibles.
+TEST: ils sont forts, ces gars-là.
+TEST: ils se croient forts.
+TEST: je les imagine forts et intelligents.
+TEST: elles les veulent forts et astucieux.
+TEST: les écarts ont été plus forts en une génération
+TEST: Avec le même nombre de bulletins, les xénophobes apparaîtront plus forts.
+TEST: Pour leur permettre d’être plus forts face aux maîtres de tous bords, patrons, maris ou bureaucrates.
+TEST: Il nous rend forts.
+
+
+# bien
+__sgpl_verbe_bien__
+ biens
+ <<- /sgpl/ morph(<1, ":V", ":[DA].*:p") ->> bien # Confusion probable. Ici, “bien” est un adverbe, donc invariable.
+
+TEST: Ils vont {{biens}}.
+TEST: Elles travaillaient vraiment {{biens}}.
+TEST: Il ne comprenait vraiment pas très {{biens}} ces principes de base.
+TEST: Il a de grands biens.
+TEST: Ce sont des biens de peu de valeur.
+
!!
!!
!!!! Confusions !!
@@ -16679,11 +16931,11 @@
TEST: Une histoire {{dénudée}} d’intérêt.
TEST: Des hommes {{dénudés}} de compassion.
# desceller / déceler / desseller
-__erreur_déceler_desseller_desceller__
+__conf_erreur_déceler_desseller_desceller__
[>erreur|>faute|>incohérence|>problème|>bug|>bogue|>faille|>maladie|>défaut|>défaillance|>perturbation|>irrégularité] <> [>desseller|>desceller]
<<- /conf/ --1>> =\-1.replace("escell", "écel").replace("essell", "écel")
# 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
[>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]
@@ -16733,11 +16985,11 @@
>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?$]
<<- /conf/ -1>> =\1.replace("imm", "ém").replace("Imm", "Ém")
# 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
[>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
- <<- /conf/ -2>> =\2.replace("imm", "ém").replace("Imm", "Ém")
+ <<- /conf/ morph(<1, ":D") -2>> =\2.replace("imm", "ém").replace("Imm", "Ém")
# 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
[>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
<<- /conf/ --1>> =\-1.replace("émi", "immi").replace("Émi", "Immi")
# Confusion probable. Si “\-1” se rapporte à “\1”, alors vous voulez probablement dire “imminent” ; “éminent” signifie “notable”.|https://fr.wiktionary.org/wiki/%C3%A9minent
@@ -16747,10 +16999,11 @@
TEST: l’accouchement est {{éminent}}.
TEST: Mon {{imminent}} collègue.
TEST: Un paléontologue {{imminent}}.
TEST: L’arrivée est imminente.
TEST: Des paléontologues éminents.
+TEST: aucune menace terroriste imminente
# enduire / induire
__conf_enduire_induire__
>enduire en [>erreur|>tentation]
@@ -17847,26 +18100,22 @@
TEST: une tâche dévalorisante.
TEST: peiner à la tâche.
# taule / tôle
-__conf_taule_tôle__
+__conf_taule_tôle2__
>aller en [>tôle|>tole]
>quitter cette [tôle|tole]
>faire de la [tôle|tole]
<<- /conf/ --1>> taule # Confusion. La tôle est une plaque de métal laminé. Pour la prison, écrivez “taule”.
[>taule] [>boulonner|>cintrer|>émailler|>emboutir|>galvaniser|>gaufrer|>nervurer|>onduler|>perforer|>souder|>translucide]
<<- /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.
- [>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]
- <<- /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.
-
TEST: Demain, il va aller en {{tôle}}.
TEST: Tu as fait de la {{tôle}} ?
TEST: C’est la {{taule}} galvanisée.
-TEST: une {{taule}} en acier
# tant / temps (2e partie)
__conf_tant_temps_tan__
en [temps|>tan] [que|qu’]
@@ -17920,14 +18169,14 @@
# venimeux / vénéneux
__conf_venimeux_vénéreux__
[>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
- <<- /conf/ -2>> =\1.replace("énén", "enim") # Confusion : “vénéneux” se dit des plantes, employez “venimeux”.
+ <<- /conf/ -2>> =\1.replace("énén", "enim").replace("ÉNÉN", "ENIM") # Confusion : “vénéneux” se dit des plantes, employez “venimeux”.
[>plante|>champignon|>lépiote|>baie|>fruit|>herbe|>fleur|>chair|>moule|humus|>substance|>végétal] >venimeuse
- <<- /conf/ -2>> =\1.replace("enim", "énén") # Confusion : pas de venin ici.
+ <<- /conf/ -2>> =\1.replace("enim", "énén").replace("ENIM", "ÉNÉN") # Confusion : pas de venin ici.
TEST: ces araignées {{vénéneuses}}.
TEST: ce champignon {{venimeux}}.
@@ -17995,68 +18244,115 @@
TEST: Je vous renvoie pour cela à l’excellent documentaire
TEST: cuisiner à l’étouffée
__infi_loc_à_verbe__
- de manière à ~..(?:ée?s?|ez)$
- du mal à ~..(?:ée?s?|ez)$
- intérêt à ~..(?:ée?s?|ez)$
+ de manière à ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..(?:ée?s?|ez)$
+ du mal à ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..(?:ée?s?|ez)$
+ intérêt à ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..(?:ée?s?|ez)$
+ enclin à ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..(?:ée?s?|ez)$
<<- /infi/ morph(\-1, ":V", ":M") and not (\-1.endswith("ez") and value(>1, "|vous|"))
--1>> =suggVerbInfi(\-1) # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.
TEST: de manière à {{obligé}} ces gens
TEST: ils ont intérêt à {{obligés}} ces gens
TEST: Tous ceux qui ont du mal à {{obligé}} ces gens
__infi_verbe_de_verbe__
- [>cesser|>décider|>défendre|>suggérer|>commander|>essayer|>tenter|>choisir|>permettre|>interdire] [de|d’] *WORD
- <<- /infi/ not morph(\1, ":N") and analyse(\-1, ":V1.*:Q", ":(?:M|Oo)") or analyse(\-1, ":[123][sp]", ":[MNG]")
+ [>arrêter|>cesser|>choisir|>commander|>continuer|>décider|>défendre|>envisager|>essayer|>éviter|>interdire|>omettre|>permettre|>prévoir|>refuser|>suggérer|>tenter]
+ || [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ *WORD
+ <<- /infi/ not morph(\1, ":N") and (analyse(\-1, ":V1.*:Q", ":(?:M|Oo)") or analyse(\-1, ":[123][sp]", ":[MNG]"))
--1>> =suggVerbInfi(\-1) # Après “\1 de”, le verbe devrait être à l’infinitif.
TEST: cessez d’{{anesthésié}} ces gens !
+TEST: arrête d’y {{consacré}} autant de temps.
+TEST: Il tentait de {{raisonné}} en homme libre
TEST: Le menu Format contient de nombreuses commandes de mise en forme.
TEST: Le commandant de zone…
TEST: À quoi rime de décider de mesures écologiques d’en haut
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.
TEST: l’industrie est également touchée, avec « des pertes de commandes de véhicules chez Renault et chez Peugeot »
__infi_qqch_de__
- [afin|avant] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ afin [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
avant ?même¿ [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
marre [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
<<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “\1 de”, le verbe devrait être à l’infinitif.
- à même [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
- en train [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
- en vue [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ à [condition|défaut|même] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “à \2 de”, le verbe devrait être à l’infinitif.
+
+ à >seule >fin [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “à seule fin de”, le verbe devrait être à l’infinitif.
+
+ en [droit|état|mesure|train|vue] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
<<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “\1 \2 de”, le verbe devrait être à l’infinitif.
+ >avoir l’ air [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “avoir l’air de”, le verbe devrait être à l’infinitif.
+
+ >avoir la chance [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “avoir la chance de”, le verbe devrait être à l’infinitif.
+
+ >avoir le droit [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “avoir le droit de”, le verbe devrait être à l’infinitif.
+
+ >avoir [besoin|raison] [de|d’] ?[le|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “avoir \2 de”, le verbe devrait être à l’infinitif.
+
+ >avoir [besoin|raison] [de|d’] [l’|la] ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) # Après “avoir \2 de”, le verbe devrait être à l’infinitif.
+
+ >avoir vite fait [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “avoir vite fait de”, le verbe devrait être à l’infinitif.
+
+ >faire semblant [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “faire semblant de”, le verbe devrait être à l’infinitif.
+
[>façon|>manière] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
[>intention|>volonté] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
<<- /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.
- il >être [temps|impossible|indispensable|nécessaire|utile] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ il >être [temps|admissible|inadmissible|absurde|contraignant|libérateur|difficile|facile|impossible|indispensable|nécessaire|possible|utile|inutile]
+ || [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
<<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “il est \3 de”, le verbe devrait être à l’infinitif.
- [|,] impossible [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
- <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “impossible de”, le verbe devrait être à l’infinitif.
+ il >être hors de question [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “il est hors de question de”, le verbe devrait être à l’infinitif.
- force [est|était] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ [|,] [>capable|>incapable|impossible|inutile] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “\2 de”, le verbe devrait être à l’infinitif.
+
+ force [est|était] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
<<- /infi/ not value(<1, "|une|la|cette|ma|ta|sa|notre|votre|leur|quelle|de|d’|") and analyse(\-1, ":Q", ":M")
--1>> =suggVerbInfi(\-1) # Après “force est de”, le verbe devrait être à l’infinitif.
+ sous peine [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$
+ <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) # Après “sous peine de”, le verbe devrait être à l’infinitif.
+
TEST: afin de leur {{percée}} une ouverture
TEST: en train de {{percées}}
+TEST: elle tricha à seule fin d’{{allée}} à l’université
TEST: ils sont à même de {{trouvé}} la bonne réponse
TEST: Nous étions en train de {{trouvé}} une solution à ces soucis récurrents.
+TEST: il a l’air de {{pensée}} qu’on est des crétins
+TEST: tu avais raison de {{pensée}} ça
+TEST: nous eûmes la chance de la {{trouvée}} facilement
+TEST: avoir raison de la {{considérée}} ainsi
+TEST: vous avez le droit de lui {{craché}} à la gueule
+TEST: ils ont vite fait de nous {{poussée}} à bout
TEST: elle est en train de {{mangée}}
TEST: je déteste sa manière de la {{rabaissée}} en permanence.
+TEST: il est hors de question de {{menée}} cette attaque ainsi
TEST: il serait temps de {{poussée}} la logique jusqu’au bout
TEST: impossible d’{{échappée}} à cette horreur.
TEST: Force est d’{{pensée}} que nous allons y arriver avec seulement nos bonnes intentions.
+TEST: sous peine de nous {{pesée}} lourd sun l’estomac
+TEST: Sont-ils en mesure de nous {{fabriqué}} ces armes ?
+TEST: Ne fais pas semblant de l’{{oubliée}}.
__infi_de_verbe__
[de|d’] [le|l’|leur|les] @:V¬:[YNAM]|>(?:lui|plus)/
[|,] [de|d’] [nous|vous|lui] @:V¬:[YE]|>(?:lui|plus)/
@@ -18070,39 +18366,29 @@
[de|d’] ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:V¬:Y
[de|d’] ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:V¬:Y
[de|d’] ?[ne|n’]¿ [lui|leur] en @:V¬:Y
<<- /infi/ --1>> =suggVerbInfi(\-1) # Après “de”, le verbe devrait être à l’infinitif.
- en [droit|état|mesure|train] [de|d’] ?[nous|vous|le|la|l’|les|leur]¿ @:V1.*:Q
- <<- /infi/ --1>> =suggVerbInfi(\-1) # Après “\1 \2 \3”, le verbe devrait être à l’infinitif.
-
- >faire ?[pas|jamais|guère]¿ semblant [de|d’] ?[nous|vous|le|la|l’|les|leur]¿ @:V1.*:Q
- <<- /infi/ --1>> =suggVerbInfi(\-1) # Après “faire semblant de”, le verbe devrait être à l’infinitif.
-
[de|d’] @:V1.*:Q¬:N
<<- /infi/ not \2[0:1].isupper() and not morph(<1, ">(?:en|passer)/")
- 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éèêâîûù]+|) +$)")
+ 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éèêâîûù]+|) +$)")
and not tag_before(\1, "ce_que")
-2>> =suggVerbInfi(\2) # Le verbe devrait être à l’infinitif.
TEST: d’en {{parlé}} sans cesse
TEST: cela suffit de les {{aimait}}
TEST: de ne leur en {{avancé}} que le nécessaire.
TEST: de l’y {{poussé}}
-TEST: arrête d’y {{consacré}} autant de temps.
TEST: je suis certain d’en {{choque}} plusieurs.
TEST: elle était capable de la {{trouvait}} où qu’elle soit.
TEST: de me le {{facturez}}
TEST: suffit de {{la}} {{finit}}
TEST: Il s’agit de me {{donnait}} tout ça.
TEST: j’étais incapable de m’{{orientait}} dans la bonne direction.
TEST: ils étaient susceptibles de m’y {{trouvaient}}
-TEST: Il tentait de {{raisonné}} en homme libre
TEST: sa façon de {{nettoyez}} était inefficace.
TEST: elle a délibérément omis de les {{inclurent}}.
-TEST: Sont-ils en mesure de nous {{fabriqué}} ces armes ?
-TEST: Ne fais pas semblant de l’{{oubliée}}.
TEST: d’{{mangé}} je ne suis pas capable
TEST: elle s’engage de ne les lui donner qu’en dernier recours.
TEST: l’idée consiste de la lui donner sans contrepartie et voir ce qu’il en fera.
TEST: de leur plus grand fils, ils attendent beaucoup.
TEST: de n’importe quelle manière
@@ -18223,11 +18509,11 @@
TEST: Ils ont beau {{consacré}} le plus clair de leur temps à ce projet, ça n’avance guère.
__infi_est_ce_que__
- est-ce que @:(?:V1.*:Q|[13]s|2[sp])¬:[GYWMN]
+ est-ce [que|qu’] @:(?:V1.*:Q|[13]s|2[sp])¬:[GYWMN]
<<- /infi/ not value(<1, "|que|qu’|") -3>> =suggVerbInfi(\3) # Après “est-ce que”, le verbe devrait être à l’infinitif.
TEST: est-ce que {{rapporté}} ces données nous aidera ?
TEST: est-ce que {{priait}} est la solution ?
TEST: Est-ce que Pierre Xazzz va bien ?
@@ -18276,10 +18562,11 @@
TEST: faut-il {{pensé}} à ces choses-là encore et encore ?
TEST: il faut n’{{estimait}} que la valeur de nos actes
TEST: il fallait bien cela pour nous épargner
TEST: une faille s’est ouverte sous nos pieds
TEST: il faut en moyenne 1000 litres d’eau pour produire un kilo de céréales
+TEST: Xi Jinping a réaffirmé en janvier dernier qu’il utiliserait s’il le faut la force militaire
__infi_faire__
>faire ~(?:ée?s?|ez)$
<<- /infi/ not morph(<1, ">(?:en|de|être)/") and morph(\2, ":V", ":[MG]") and not (morph(\1, ":N") and morph(\2, ":Q.*:m:[sp]"))
@@ -18363,28 +18650,32 @@
TEST: Mieux ne vaut pas {{arrivé}} en retard.
TEST: il eût mieux valu {{oublié}} cette affaire plutôt que réveiller ce dragon endormi.
__infi_verbes__
- [>aimer|>désirer|>espérer|>oser|>préférer|>souhaiter] ?[pas|plus|point|guère|jamais]¿ ~..(?:ée?s?|ez)$
+# regarder, écouter, ouïr
+ [>aimer|>désirer|>entendre|>espérer|>oser|>préférer|>souhaiter] ?[pas|plus|point|guère|jamais]¿ ~..(?:ée?s?|ez)$
<<- /infi/ morph(\1, ":", ":[GN]") and morph(\2, ":V", ":M")
-2>> =suggVerbInfi(\2) # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.
[>aller|>venir|>partir] ?[pas|plus|point|guère|jamais|rien]¿ ~..(?:ée?s?|ez)$
<<- /infi/ morph(\1, ":", ":[GN]") and morph(\-1, ":V", ":M|>(?:accompagner|armer|armurer|casquer|déguiser)/")
--1>> =suggVerbInfi(\2) # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.
-TEST: elle préférait {{mangée}} seule.
-TEST: Il venait, comme d’habitude, {{discuté}} avec son ami.
-TEST: Ces types-là venaient {{mangé}} chez moi tous les dimanches.
-TEST: ils viennent bien entendu {{attaqué}} le parlement
-TEST: ils vont par voie de conséquence vraiment {{attaqué}} la banque
-TEST: elles ont pu {{mangé}}
-TEST: Cette affaire ne va rien {{arrangé}}.
-TEST: ils vont de manière non conventionnelle {{fêtée}} leur réussite.
-TEST: ils vont de manière absurde {{arrivé}} au résultat inverse à leurs espérances
-TEST: croyez-vous qu’ils oseront {{proposé}} des amendements aussi audacieux ?
+TEST: elle préférait {{mangée}} seule. ->> manger
+TEST: Il venait, comme d’habitude, {{discuté}} avec son ami. ->> discuter
+TEST: Ces types-là venaient {{mangé}} chez moi tous les dimanches. ->> manger
+TEST: ils viennent bien entendu {{attaqué}} le parlement ->> attaquer
+TEST: ils vont par voie de conséquence vraiment {{attaqué}} la banque ->> attaquer
+TEST: elles ont pu {{mangé}} ->> manger
+TEST: Cette affaire ne va rien {{arrangé}}. ->> arranger
+TEST: ils vont de manière non conventionnelle {{fêtée}} leur réussite. ->> fêter
+TEST: ils vont de manière absurde {{arrivé}} au résultat inverse à leurs espérances ->> arriver
+TEST: croyez-vous qu’ils oseront {{proposé}} des amendements aussi audacieux ? ->> proposer
+TEST: Quelle est cette femme que j’ai entendue {{chanté}} ? ->> chanter
+TEST: elles partaient {{prié}} chaque matin ->> prier
+TEST: jamais entendu {{parlé}} de ces choses ->> parler
TEST: Elles étaient venues armées.
TEST: Il vint déguisé en mousquetaire.
TEST: D’ailleurs j’irai armé.
TEST: J’irai armé de mon épée.
TEST: Si possible, venez accompagné.
@@ -18844,44 +19135,10 @@
<<- /ppas/ morph(\2, ":V", ":(?:N|A|Q|W|G|3p)") and not tag_before(\1, "ce_que")
-2>> =suggVerbPpas(\2, ":m:p") # Incohérence : “\2” n’est pas un participe passé.
TEST: après avoir mis à jour sont {{profile}}.
-
-
-!!!! Adverbes après verbe !!
-
-# fort
-__sgpl_verbe_fort__
- forts
- <<- /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)/")
- and not morph(>1, ":A.*:[me]:[pi]")
- ->> fort # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.
-
-TEST: ces emmerdeurs crient bien trop {{forts}}
-TEST: ces animaux paraissent forts, mais ils sont faibles.
-TEST: ils sont forts, ces gars-là.
-TEST: ils se croient forts.
-TEST: je les imagine forts et intelligents.
-TEST: elles les veulent forts et astucieux.
-TEST: les écarts ont été plus forts en une génération
-TEST: Avec le même nombre de bulletins, les xénophobes apparaîtront plus forts.
-TEST: Pour leur permettre d’être plus forts face aux maîtres de tous bords, patrons, maris ou bureaucrates.
-TEST: Il nous rend forts.
-
-
-# bien
-__sgpl_verbe_bien__
- biens
- <<- /sgpl/ morph(<1, ":V", ":[DA].*:p") ->> bien # Confusion probable. Ici, “bien” est un adverbe, donc invariable.
-
-TEST: Ils vont {{biens}}.
-TEST: Elles travaillaient vraiment {{biens}}.
-TEST: Il ne comprenait vraiment pas très {{biens}} ces principes de base.
-TEST: Il a de grands biens.
-TEST: Ce sont des biens de peu de valeur.
-
!!
!!
!!!! Conjugaisons nous / vous (2ᵉ partie) !!
@@ -20120,10 +20377,42 @@
TEST: Sont-elles tout à fait {{arriver}} ?
TEST: Ne sont-elles pas {{aveugle}}
TEST: demeurent-elles {{présente}}
+__ppas_ayant_été_pronom_ppas__
+ ayant été lui-même @:[QA].*:[fp]¬:[me][si]
+ <<- /ppas/ --1>> =suggMasSing(\-1) # Accord avec “\3” : “\-1” devrait être au masculin singulier.
+
+ ayant été elle-même @:[QA].*:[mp]¬:[fe][si]
+ <<- /ppas/ --1>> =suggFemSing(\-1) # Accord avec “\3” : “\-1” devrait être au féminin singulier.
+
+ ayant été [nous-même|vous-même] @:[QA].*:p¬:[si]
+ <<- /ppas/ -3>> \3s # Accord avec “\-1” : “\3” devrait être au pluriel.
+ <<- /ppas/ __also__ --1>> =suggSing(\-1) # Accord avec “\3” : “\-1” devrait être au singulier.
+
+ ayant été [nous-mêmes|vous-mêmes] @:[QA].*:s¬:[pi]
+ <<- /ppas/ -3>> =\3[:-1] # Accord avec “\-1” : “\3” devrait être au singulier.
+ <<- /ppas/ __also__ --1>> =suggPlur(\-1) # Accord avec “\3” : “\-1” devrait être au pluriel.
+
+ ayant été eux-mêmes @:[QA].*:[fs]¬:[me][pi]
+ <<- /ppas/ --1>> =suggMasPlur(\-1) # Accord avec “\3” : “\-1” devrait être au masculin pluriel.
+
+ ayant été elles-mêmes @:[QA].*:[ms]¬:[fe][pi]
+ <<- /ppas/ --1>> =suggFemPlur(\-1) # Accord avec “\3” : “\-1” devrait être au féminin pluriel.
+
+ 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]
+ <<- ~3>> *
+
+TEST: ayant été lui-même {{attaquée}} ->> attaqué
+TEST: ayant été elle-même {{pris}} dans la tourmente ->> prise
+TEST: ayant été {{vous-même}} {{blâmés}} ->> vous-mêmes|||blâmé
+TEST: ayant été {{nous-mêmes}} {{blâmé}} ->> nous-même|||blâmés
+TEST: ayant été eux-mêmes {{chapitré}} ->> chapitrés
+TEST: ayant été elles-mêmes {{ignorés}} par leur hiérarchie ->> ignorées
+
+
!!
!!
!!!! Se croire/considérer/montrer/penser/révéler/savoir/sentir/voir/vouloir + participe passé/adj !!
!!
@@ -20344,11 +20633,11 @@
__ppas_nous_vous_avoir__
[nous|vous] ?[ne|n’]¿ ?[lui|leur]¿ >avoir *WORD
<<- /ppas/ morph(\1, ":Os")
- and not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
+ and not value(\-1, "|barre|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
and value(<1, "||,|comme|comment|et|lorsque|mais|où|ou|quand|qui|pourquoi|puisque|quoique|si|sinon|")
and not \-1.isupper() and morph(\-1, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
--1>> =suggVerbPpas(\-1, ":m:s")
# 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
@@ -20360,11 +20649,11 @@
TEST: D’un côté, le modèle occidental, […], nous a libérés de […]
__ppas_det_nom_avoir__
[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
- <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
+ <<- /ppas/ not value(\-1, "|barre|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
and value(<1, "||,|comme|comment|et|lorsque|mais|où|ou|quand|qui|pourquoi|puisque|quoique|si|sinon|")
and morph(\2, ":[NA]", ":G") and not \-1.isupper() and morph(\-1, ":(?:[123][sp]|Y|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
and not (\-2 == "avions" and morph(\-1, ":3[sp]"))
--1>> =suggVerbPpas(\-1, ":m:s")
# 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
@@ -20377,10 +20666,11 @@
TEST: Les élèves leur ont {{donnée}} ça.
TEST: Le maire a {{créée}} un risque.
TEST: le général n’a pas encore {{finit}} sa sieste.
TEST: Certains les ont d’abord jugés trop lents.
TEST: les timides ou les personnes n’ayant pas confiance en elles vont avoir tendance à éviter de regarder dans les yeux.
+TEST: Le théâtre, en l’occurrence, a charge de sensibiliser
__ppas_les_avoir__
les >avoir @:V[0-3]..t.*:Q.*:s¬:[GWpi]
<<- /ppas/ morph(\2, ":V0a") -3>> =suggPlur(\3)
@@ -20444,11 +20734,11 @@
__ppas_avoir_ppas_mas_sing__
[|,|après|pour|pourquoi|quand|que|qu’|sans|d’|de|qui] ?[ne|n’]¿ ?[lui|leur]¿ avoir @:Q.*:[pf]¬:m:[si]
[|,|après|pour|pourquoi|quand|que|qu’|sans|d’|de|qui] ?[ne|n’]¿ [m’|t’] avoir @:Q.*:p¬:[si]
- <<- /ppas/ not value(\-1, "|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
+ <<- /ppas/ not value(\-1, "|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
--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
TEST: Avoir {{instruite}} notre mère
TEST: Après avoir {{baissés}} nos tarifs
TEST: Je viendrai, après avoir vraiment {{écoutée}} le prof.
@@ -20461,11 +20751,11 @@
__ppas_m_t_l_avoir__
[l’|m’] ?[en|y]¿ >avoir @:(?:Y|[123][sp])¬:[QGWMX]
<<- /ppas/ --1>> =suggVerbPpas(\-1, ":m:s") # Confusion : employez un participe passé.
t’ ?[en|y]¿ >avoir @:(?:Y|[123][sp])¬:[QGWMX]
- <<- /ppas/ not value(\-1, "|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
+ <<- /ppas/ not value(\-1, "|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
--1>> =suggVerbPpas(\-1, ":m:s") # Confusion : employez un participe passé.
TEST: m’avoir {{terminer}}.
TEST: il m’a {{souffler}} la bonne réponse.
TEST: elle t’en a {{parle}}.
@@ -20482,22 +20772,23 @@
-2>> =suggVerbPpas(\2, ":m:s") # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.
<<- /ppas/ __also__ and \1 == "a" and \2.endswith("r") and not value(<1, "|n’|m’|t’|l’|il|on|elle|")
-1>> à # Confusion probable : “a” est une conjugaison du verbe avoir. Pour la préposition, écrivez “à”.
>avoir ~..it$
- <<- /ppas/ not value(\1, "|A|avoirs|") and morph(\2, ":V(?:2.*:Ip.*:3s|3.*:Is.*:3s)", ":[NAQ]")
+ <<- /ppas/ not value(\1, "|A|avions|avoirs|") and morph(\2, ":V(?:2.*:Ip.*:3s|3.*:Is.*:3s)", ":[NAQ]")
-2>> =suggVerbPpas(\2, ":m:s") # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.
>avoir ~.ut$
- <<- /ppas/ not value(\1, "|A|avoirs|") and morph(\2, ":V3.*:Is.*:3s", ":[NAQ]")
+ <<- /ppas/ not value(\1, "|A|avions|avoirs|") and morph(\2, ":V3.*:Is.*:3s", ":[NAQ]")
-2>> =suggVerbPpas(\2, ":m:s") # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.
TEST: Avoir {{marcher}} toute la journée m’a épuisée.
TEST: L’homme, voyez-vous, {{a}} réellement {{marcher}} sur la Lune.
TEST: Je ne lui ai rien {{demander}}, mais il est venu à notre secours au nom de la justice.
TEST: Avoir {{finit}} son œuvre dans les temps, ce n’est pas toujours suffisant.
TEST: ces hommes, n’en doutez pas, auraient {{put}} trouver la solution.
+TEST: à celui qui aurait {{déclarer}} une telle horreur
TEST: nous avons vu des avions voler haut dans le ciel.
!!
@@ -20587,20 +20878,20 @@
!!!! Participes passés avec “avoir” (formes interrogatives) !!
__ppas_avoir_interrogatif__
*WORD /VCint *WORD
- <<- /ppas/ morphVC(\2, ":V0a") and not value(\3, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
- <<- /ppas/ morph(\3, ":(?:Y|[123][sp])", ":[QM]")
+ <<- /ppas/ morphVC(\2, ":V0a") and not value(\3, "|barre|charge|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
+ <<- /ppas/ morph(\3, ":(?:Y|[123][sp])", ":[QMG]")
-3>> =suggVerbPpas(\3, ":m:s") # Incohérence probable avec “\2”. Après “avoir”, ce verbe devrait être un participe passé.
<<- /ppas/ __else__ and not value(\1, "|les|l’|m’|t’|nous|vous|en|") and morph(\3, ":Q.*:[fp]", ":m:[si]")
and not morph(\1, ":[NA].*:[fp]") and not before("(?i)\\b(?:quel(?:le|)s?|combien) ")
-3>> =suggVerbPpas(\3, ":m:s") # Avec “avoir”, il faut un participe passé (au masculin singulier, sauf éventuellement si un COD précède).
[|,] ?n’¿ /VCint *WORD
- <<- /ppas/ morphVC(\-2, ":V0a") and not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
- <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QM]")
+ <<- /ppas/ morphVC(\-2, ":V0a") and not value(\-1, "|barre|charge|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
+ <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QMG]")
--1>> =suggVerbPpas(\-1, ":m:s") # Incohérence probable avec “\-2”. Après “avoir”, ce verbe devrait être un participe passé.
<<- /ppas/ __else__ and morph(\-1, ":Q.*:[fp]", ":m:[si]")
--1>> =suggVerbPpas(\-1, ":m:s") # Avec “avoir”, il faut un participe passé (au masculin singulier, sauf éventuellement si un COD précède).
TEST: cet été ont-ils {{mentionnés}} la sécheresse ->> mentionné
@@ -20619,10 +20910,11 @@
TEST: Ai-je déjà {{reconnut}} mes torts ?
TEST: N’avais-tu pas crainte de tout perdre ?
TEST: Combien de bêtes n’as-tu pas déjà massacrées
TEST: Combien de bêtes as-tu déjà massacrées
TEST: A-t-il Pierre pour ami ?
+TEST: Quel lien y a-t-il entre donner et recevoir ?
__ppas_l_m_t_avoir_interrogatif__
[l’|m’|t’] /VCint *WORD
<<- /ppas/ morphVC(\2, ":V0a") and morph(\3, ":(?:Y|2p|Q.*:p|3[sp])", ":[GWsi]")
@@ -22076,11 +22368,11 @@
TEST: quel travail {{avait elle}} accompli ?
TEST: je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça.
TEST: C’était elle qui avait pris le contrôle.
-__inte_union_nous!7__
+__inte_union_nous2!7__
[|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~ons$ nous [|,]
[|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~ons$ nous @:¬:1p
<<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]")
-2:3>> \2-nous # Forme interrogative ? Mettez un trait d’union.
@@ -22093,21 +22385,22 @@
<<- /inte/ space_after(\2, 1, 1) and
( (value(\2, "|avions|") and not morph(\1, ":A.*:[me]:[sp]") and not morph(\-1, ":(:?3[sp]|Ov)"))
or (morph(\2, ":V.*:1p", ":[GNW]") and not morph(\1, ":Os")) )
-2:3>> \2-nous # Forme interrogative ? Mettez un trait d’union.
-TEST: {{retrouverons nous}} enfin la tranquilité ?
-TEST: Ne {{sommes nous}} pas des dieux ?
-TEST: À quelle autorité {{prétendons nous}} si…
+TEST: y {{retrouverons nous}} enfin la tranquilité ?
+TEST: pourquoi {{sommes nous}} réellement des dieux ?
+TEST: À quelle autorité {{prétendons nous}} sur ces gens…
TEST: quel exercice {{avions nous}} revu ?
-TEST: pourquoi n’en entendons nous jamais parler ?
+TEST: À quelle autorité {{prétendons nous}} si…
+TEST: pourquoi {{entendons nous}} souvent ces injonctions idiotes ?
TEST: les avions nous font rêver.
-__inte_union_vous!7__
- [|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~..e[zs]$ vous [|,]
- [|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~..e[zs]$ vous @:¬:2p
+__inte_union_vous2!7__
+ [|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~..ez$ vous [|,]
+ [|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~..ez$ vous @:¬:2p
<<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]")
-2:3>> \2-vous # Forme interrogative ? Mettez un trait d’union.
[|,|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
<<- /inte/ space_after(\2, 1, 1)
@@ -22118,11 +22411,13 @@
<<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GNW]") and not value(\2, "|veuillez|") and not morph(\1, ":Os")
-2:3>> \2-vous # Forme interrogative ? Mettez un trait d’union.
TEST: Mais {{soutiendrez vous}} cette proposition ?
TEST: comment {{êtes vous}} arrivées là ?
-TEST: quelle tarte {{voulez vous}} ?
+TEST: quel genre de femme {{voulez vous}} réellement ?
+TEST: quel exercice {{avions nous}} réellement ?
+TEST: quel homme {{voulez vous}} qu’il devienne
TEST: Veuillez vous instruire avant de contester ces mesures.
__inte_union_ils!7__
[|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui] ~[eo]nt$ ils [|,]
@@ -23039,20 +23334,63 @@
TEST: Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
TEST: Quand j’aurai soif et faim, je m’arrêterai.
# Si suivi du conditionnel ou du subjonctif
-__vmode_si_sujet__
+__vmode_si_sujet_conditionnel_subjonctif__
[|,] si [j’|J’|t’|T’] @:[SK]¬:(?:G|V0|I)
[|,] si @:(?:Os|M) @:[SK]¬:(?:G|V0|I)
[|,] s’ [il|ils] @:[SK]¬:(?:G|V0|I)
<<- /vmode/ -4>> _ # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.
TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.
TEST: Si j’{{irais}} le faire
+
+__vmode_si_sujet_conditionnel__
+ si [je|j’] >avoir $:Q ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ si [je|j’] >avoir $:Q $:D $:N ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ <<- /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é. »
+
+ si [tu|t’] >avoir $:Q ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ si [tu|t’] >avoir $:Q $:D $:N ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ <<- /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é. »
+
+ [si|s’] [il|on|elle] >avoir $:Q ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ [si|s’] [il|on|elle] >avoir $:Q $:D $:N ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ <<- /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é. »
+
+ si nous >avoir $:Q ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ si nous >avoir $:Q $:D $:N ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ <<- /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é. »
+
+ si vous >avoir $:Q ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ si vous >avoir $:Q $:D $:N ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ <<- /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é. »
+
+ [si|s’] [ils|elles] >avoir $:Q ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ [si|s’] [ils|elles] >avoir $:Q $:D $:N ?,¿ [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles] $:K
+ <<- /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é. »
+
+ 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
+ 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
+ <<- /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é. »
+
+ 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
+ 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
+ <<- /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é. »
+
+TEST: si j’{{aurais}} perdu, j’aurais recommencé. ->> avais
+TEST: si t’{{aurais}} vu le match, tu aurais compris ->> avais
+TEST: si elle {{aurait}} mangé ce truc, elle serait malade ->> avait
+TEST: si nous {{aurions}} connu cet homme, on se serait pas trompé ->> avions
+TEST: si vous {{auriez}} avancé, ce serait différent ->> aviez
+TEST: s’ils {{auraient}} deviné la solution, ils auraient pas demandé ->> avaient
+TEST: si le patron {{aurait}} pensé la chose, on l’aurait su. ->> avait
+TEST: si les femmes {{auraient}} parlé, je l’aurais su. ->> avaient
+
# Dès que + indicatif
__vmode_dès_que__
dès [que|qu’] @:(?:Os|M) @:S¬:[IG]
<<- /vmode/ -4>> =suggVerbMode(\4, ":I", \3) # Après “dès que”, le verbe ne devrait pas être au subjonctif.
@@ -23085,11 +23423,10 @@
de [façon|manière] [que|qu’] @:(?:Os|M) @:I¬:(?:[GYS]|Iq)
en sorte [que|qu’] @:(?:Os|M) @:I¬:[GYS]
pour peu [que|qu’] @:(?:Os|M) @:I¬:[GYS]
pour autant [que|qu’] @:(?:Os|M) @:I¬:[GYS]
<<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4) # Après “\1 \2 que”, ce verbe devrait être au subjonctif.
-
[|,] non [que|qu’] @:(?:Os|M) @:I¬:[GYS]
<<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4) # Après “non que”, ce verbe devrait probablement être au subjonctif.
[|,] en admettant [que|qu’] @:(?:Os|M) @:I¬:[GYS]
@@ -26828,11 +27165,11 @@
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.
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.
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.
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.
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.
-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.
+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.
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.
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.
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.
TEST: Tout était parfaitement silencieux ; ni gémissements, ni bruits d’aucune espèce. Après avoir forcé la porte, ils ne virent personne.
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.
Index: graphspell-js/ibdawg.js
==================================================================
--- graphspell-js/ibdawg.js
+++ graphspell-js/ibdawg.js
@@ -266,14 +266,11 @@
if (sWord.length > 1) {
if (sWord.gl_isTitle()) {
return !!this.lookup(sWord.toLowerCase());
}
if (sWord.gl_isUpperCase()) {
- if (this.bAcronymValid) {
- return true;
- }
- return !!(this.lookup(sWord.toLowerCase()) || this.lookup(sWord.gl_toCapitalize()));
+ return !!(this.bAcronymValid || this.lookup(sWord.toLowerCase()) || this.lookup(sWord.gl_toCapitalize()));
}
return !!this.lookup(sWord.slice(0, 1).toLowerCase() + sWord.slice(1));
}
return !!this.lookup(sWord.toLowerCase());
}
@@ -381,11 +378,13 @@
else if ( (sNewWord.length + sRemain.length == oSuggResult.sWord.length) && oSuggResult.sWord.toLowerCase().startsWith(sNewWord.toLowerCase()) && this.isValid(sRemain) ) {
if (this.sLangCode == "fr"
&& ["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))) {
oSuggResult.addSugg(sNewWord+"’"+sRemain);
}
- oSuggResult.addSugg(sNewWord+" "+sRemain);
+ if ((sNewWord.length > 1 && sRemain.length > 1) || ["a", "à", "y"].includes(sNewWord) || ["a", "à", "y"].includes(sRemain)) {
+ oSuggResult.addSugg(sNewWord+" "+sRemain);
+ }
}
}
if (nDist > oSuggResult.nDistLimit) {
return;
}
Index: graphspell/ibdawg.py
==================================================================
--- graphspell/ibdawg.py
+++ graphspell/ibdawg.py
@@ -1,11 +1,11 @@
#!python3
"""
INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH
Implementation of a spellchecker as a transducer (storing transformation code to get lemma and morphologies)
-and a spell suggestion mechanim
+and a spell suggestion mechanism
"""
import traceback
import pkgutil
import re
@@ -264,13 +264,11 @@
if sWord[0:1].isupper():
if len(sWord) > 1:
if sWord.istitle():
return self.lookup(sWord.lower())
if sWord.isupper():
- if self.bAcronymValid:
- return True
- return self.lookup(sWord.lower()) or self.lookup(sWord.capitalize())
+ return self.bAcronymValid or self.lookup(sWord.lower()) or self.lookup(sWord.capitalize())
return self.lookup(sWord[:1].lower() + sWord[1:])
return self.lookup(sWord.lower())
if sWord[0:1].isdigit():
return True
return False
@@ -340,11 +338,12 @@
oSuggResult.addSugg(sNewWord+sTail, nDeep)
return
if (len(sNewWord) + len(sRemain) == len(oSuggResult.sWord)) and oSuggResult.sWord.lower().startswith(sNewWord.lower()) and self.isValid(sRemain):
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:
oSuggResult.addSugg(sNewWord+"’"+sRemain)
- oSuggResult.addSugg(sNewWord+" "+sRemain)
+ if (len(sNewWord) > 1 and len(sRemain) > 1) or sNewWord in ("a", "à", "y") or sRemain in ("a", "à", "y"):
+ oSuggResult.addSugg(sNewWord+" "+sRemain)
if nDist > oSuggResult.nDistLimit:
return
cCurrent = sRemain[0:1]
for cChar, jAddr in self._getCharArcs(iAddr):
if cChar in cp.d1to1.get(cCurrent, cCurrent):
Index: make.py
==================================================================
--- make.py
+++ make.py
@@ -1,6 +1,6 @@
- #!/usr/bin/env python3
+#!/usr/bin/env python3
# coding: UTF-8
"""
Grammalecte builder
"""
@@ -124,11 +124,14 @@
print("+ OXT: ", end="")
for spfSrc, spfDst in dOxt.items():
print(spfSrc, end=", ")
if os.path.isdir(spLang+'/'+spfSrc):
for sf in os.listdir(spLang+'/'+spfSrc):
- hZip.write(spLang+'/'+spfSrc+"/"+sf, spfDst+"/"+sf)
+ if sf.endswith(('.txt', '.py')):
+ hZip.writestr(spfDst+"/"+sf, helpers.fileFile(spLang+'/'+spfSrc+"/"+sf, dVars))
+ else:
+ hZip.write(spLang+'/'+spfSrc+"/"+sf, spfDst+"/"+sf)
else:
if spfSrc.endswith(('.txt', '.py')):
hZip.writestr(spfDst, helpers.fileFile(spLang+'/'+spfSrc, dVars))
else:
hZip.write(spLang+'/'+spfSrc, spfDst)