1"""
2Grammalecte
3Grammar checker engine
4"""
5
6import re
7import traceback
8#import unicodedata
9from itertools import chain
10
11from ..graphspell.spellchecker import SpellChecker
12from ..graphspell.echo import echo
13
14from .. import text
15
16from . import gc_options
17
18try:
19    # LibreOffice / OpenOffice
20    from com.sun.star.linguistic2 import SingleProofreadingError
21    from com.sun.star.text.TextMarkupType import PROOFREADING
22    from com.sun.star.beans import PropertyValue
23    #import lightproof_handler_grammalecte as opt
24    _bWriterError = True
25except ImportError:
26    _bWriterError = False
27
28
29__all__ = [ "lang", "locales", "pkg", "name", "version", "author", \
30            "load", "parse", "getSpellChecker", \
31            "setOption", "setOptions", "getOptions", "getDefaultOptions", "getOptionsLabels", "resetOptions", "displayOptions", \
32            "ignoreRule", "resetIgnoreRules", "reactivateRule", "listRules", "displayRules", "setWriterUnderliningStyle" ]
33
34__version__ = "1.11.0"
35
36
37lang = "fr"
38locales = {'fr-FR': ['fr', 'FR', ''], 'fr-BE': ['fr', 'BE', ''], 'fr-CA': ['fr', 'CA', ''], 'fr-CH': ['fr', 'CH', ''], 'fr-LU': ['fr', 'LU', ''], 'fr-BF': ['fr', 'BF', ''], 'fr-BJ': ['fr', 'BJ', ''], 'fr-CD': ['fr', 'CD', ''], 'fr-CI': ['fr', 'CI', ''], 'fr-CM': ['fr', 'CM', ''], 'fr-MA': ['fr', 'MA', ''], 'fr-ML': ['fr', 'ML', ''], 'fr-MU': ['fr', 'MU', ''], 'fr-NE': ['fr', 'NE', ''], 'fr-RE': ['fr', 'RE', ''], 'fr-SN': ['fr', 'SN', ''], 'fr-TG': ['fr', 'TG', '']}
39pkg = "grammalecte"
40name = "Grammalecte"
41version = "1.11.0"
42author = "Olivier R."
43
44# Modules
45_rules = None                               # module gc_rules
46_rules_graph = None                         # module gc_rules_graph
47
48# Data
49_sAppContext = ""                           # what software is running
50_dOptions = None
51_dOptionsColors = None
52_oSpellChecker = None
53_oTokenizer = None
54_aIgnoredRules = set()
55
56# Writer underlining style
57_bMulticolor = True
58_nUnderliningStyle = 0
59
60
61#### Initialization
62
63def load (sContext="Python", sColorType="aRGB"):
64    "initialization of the grammar checker"
65    global _oSpellChecker
66    global _sAppContext
67    global _dOptions
68    global _dOptionsColors
69    global _oTokenizer
70    try:
71        _oSpellChecker = SpellChecker("fr", "fr-allvars.bdic", "", "")
72        _sAppContext = sContext
73        _dOptions = gc_options.getOptions(sContext).copy()   # duplication necessary, to be able to reset to default
74        _dOptionsColors = gc_options.getOptionsColors(sContext, sColorType)
75        _oTokenizer = _oSpellChecker.getTokenizer()
76        _oSpellChecker.activateStorage()
77    except:
78        traceback.print_exc()
79
80
81def getSpellChecker ():
82    "return the spellchecker object"
83    return _oSpellChecker
84
85
86#### Rules
87
88def _getRules (bParagraph):
89    try:
90        if not bParagraph:
91            return _rules.lSentenceRules
92        return _rules.lParagraphRules
93    except:
94        _loadRules()
95    if not bParagraph:
96        return _rules.lSentenceRules
97    return _rules.lParagraphRules
98
99
100def _loadRules ():
101    from . import gc_rules
102    from . import gc_rules_graph
103    global _rules
104    global _rules_graph
105    _rules = gc_rules
106    _rules_graph = gc_rules_graph
107    # compile rules regex
108    for sOption, lRuleGroup in chain(_rules.lParagraphRules, _rules.lSentenceRules):
109        if sOption != "@@@@":
110            for aRule in lRuleGroup:
111                try:
112                    aRule[0] = re.compile(aRule[0])
113                except (IndexError, re.error):
114                    echo("Bad regular expression in # " + str(aRule[2]))
115                    aRule[0] = "(?i)<Grammalecte>"
116
117
118def ignoreRule (sRuleId):
119    "disable rule <sRuleId>"
120    _aIgnoredRules.add(sRuleId)
121
122
123def resetIgnoreRules ():
124    "clear all ignored rules"
125    _aIgnoredRules.clear()
126
127
128def reactivateRule (sRuleId):
129    "(re)activate rule <sRuleId>"
130    _aIgnoredRules.discard(sRuleId)
131
132
133def listRules (sFilter=None):
134    "generator: returns typle (sOption, sLineId, sRuleId)"
135    if sFilter:
136        try:
137            zFilter = re.compile(sFilter)
138        except re.error:
139            echo("# Error. List rules: wrong regex.")
140            sFilter = None
141    # regex rules
142    for sOption, lRuleGroup in chain(_getRules(True), _getRules(False)):
143        if sOption != "@@@@":
144            for _, _, sLineId, sRuleId, _, _ in lRuleGroup:
145                if not sFilter or zFilter.search(sRuleId):
146                    yield ("RegEx", sOption, sLineId, sRuleId)
147    # tokens rules
148    for sRuleName, lActions in _rules_graph.dRule.items():
149        sLineId, sOption, _, cActionType, *_ = lActions
150        if cActionType == "-":
151            yield("Tokens", sOption, sLineId, sRuleName)
152
153
154def displayRules (sFilter=None):
155    "display the name of rules, with the filter <sFilter>"
156    echo("List of rules. Filter: << " + str(sFilter) + " >>")
157    for sOption, sLineId, sRuleId, sType in listRules(sFilter):
158        echo("{:<8} {:<10} {:<10} {}".format(sOption, sLineId, sRuleId, sType))
159
160
161#### Options
162
163def setOption (sOpt, bVal):
164    "set option <sOpt> with <bVal> if it exists"
165    if sOpt in _dOptions:
166        _dOptions[sOpt] = bVal
167
168
169def setOptions (dOpt):
170    "update the dictionary of options with <dOpt>"
171    for sKey, bVal in dOpt.items():
172        if sKey in _dOptions:
173            _dOptions[sKey] = bVal
174
175
176def getOptions ():
177    "return the dictionary of current options"
178    return _dOptions
179
180
181def getDefaultOptions ():
182    "return the dictionary of default options"
183    return gc_options.getOptions(_sAppContext).copy()
184
185
186def getOptionsLabels (sLang):
187    "return options labels"
188    return gc_options.getUI(sLang)
189
190
191def displayOptions (sLang="fr"):
192    "display the list of grammar checking options"
193    echo("Options:")
194    echo("\n".join( [ k+":\t"+str(v)+"\t"+gc_options.getUI(sLang).get(k, ("?", ""))[0]  for k, v  in sorted(_dOptions.items()) ] ))
195    echo("")
196
197
198def resetOptions ():
199    "set options to default values"
200    global _dOptions
201    _dOptions = getDefaultOptions()
202
203
204def setWriterUnderliningStyle (sStyle="BOLDWAVE", bMulticolor=True):
205    "set underlining style for Writer (WAVE, BOLDWAVE, BOLD)"
206    global _nUnderliningStyle
207    global _bMulticolor
208    # https://api.libreoffice.org/docs/idl/ref/FontUnderline_8idl.html
209    # WAVE: 10, BOLD: 12, BOLDWAVE: 18 DASH: 5
210    if sStyle == "WAVE":
211        _nUnderliningStyle = 0  # 0 for default Writer setting
212    elif sStyle == "BOLDWAVE":
213        _nUnderliningStyle = 18
214    elif sStyle == "BOLD":
215        _nUnderliningStyle = 12
216    elif sStyle == "DASH":
217        _nUnderliningStyle = 5
218    else:
219        _nUnderliningStyle = 0
220    _bMulticolor = bMulticolor
221
222
223#### Parsing
224
225def parse (sText, sCountry="FR", bDebug=False, dOptions=None, bContext=False, bFullInfo=False):
226    "init point to analyse <sText> and returns an iterable of errors or (with option <bFullInfo>) paragraphs errors and sentences with tokens and errors"
227    oText = TextParser(sText)
228    return oText.parse(sCountry, bDebug, dOptions, bContext, bFullInfo)
229
230
231#### TEXT PARSER
232
233class TextParser:
234    "Text parser"
235
236    def __init__ (self, sText):
237        self.sText = sText
238        self.sText0 = sText
239        self.sSentence = ""
240        self.sSentence0 = ""
241        self.nOffsetWithinParagraph = 0
242        self.lToken = []
243        self.dTokenPos = {}         # {position: token}
244        self.dTags = {}             # {position: tags}
245        self.dError = {}            # {position: error}
246        self.dSentenceError = {}    # {position: error} (for the current sentence only)
247        self.dErrorPriority = {}    # {position: priority of the current error}
248
249    def __str__ (self):
250        s = "===== TEXT =====\n"
251        s += "sentence: " + self.sSentence0 + "\n"
252        s += "now:      " + self.sSentence  + "\n"
253        for dToken in self.lToken:
254            s += '#{i}\t{nStart}:{nEnd}\t{sValue}\t{sType}'.format(**dToken)
255            if "lMorph" in dToken:
256                s += "\t" + str(dToken["lMorph"])
257            if "aTags" in dToken:
258                s += "\t" + str(dToken["aTags"])
259            s += "\n"
260        #for nPos, dToken in self.dTokenPos.items():
261        #    s += "{}\t{}\n".format(nPos, dToken)
262        return s
263
264    def parse (self, sCountry="FR", bDebug=False, dOptions=None, bContext=False, bFullInfo=False):
265        "analyses <sText> and returns an iterable of errors or (with option <bFullInfo>) paragraphs errors and sentences with tokens and errors"
266        #sText = unicodedata.normalize("NFC", sText)
267        dOpt = dOptions or _dOptions
268        bShowRuleId = option('idrule')
269        # parse paragraph
270        try:
271            self.parseText(self.sText, self.sText0, True, 0, sCountry, dOpt, bShowRuleId, bDebug, bContext)
272        except:
273            raise
274        if bFullInfo:
275            lParagraphErrors = list(self.dError.values())
276            lSentences = []
277            self.dSentenceError.clear()
278        # parse sentences
279        sText = self._getCleanText()
280        for iStart, iEnd in text.getSentenceBoundaries(sText):
281            if 4 < (iEnd - iStart) < 2000:
282                try:
283                    self.sSentence = sText[iStart:iEnd]
284                    self.sSentence0 = self.sText0[iStart:iEnd]
285                    self.nOffsetWithinParagraph = iStart
286                    self.lToken = list(_oTokenizer.genTokens(self.sSentence, True))
287                    self.dTokenPos = { dToken["nStart"]: dToken  for dToken in self.lToken  if dToken["sType"] != "INFO" }
288                    if bFullInfo:
289                        dSentence = { "nStart": iStart, "nEnd": iEnd, "sSentence": self.sSentence, "lToken": list(self.lToken) }
290                        for dToken in dSentence["lToken"]:
291                            if dToken["sType"] == "WORD":
292                                dToken["bValidToken"] = _oSpellChecker.isValidToken(dToken["sValue"])
293                        # the list of tokens is duplicated, to keep all tokens from being deleted when analysis
294                    self.parseText(self.sSentence, self.sSentence0, False, iStart, sCountry, dOpt, bShowRuleId, bDebug, bContext)
295                    if bFullInfo:
296                        dSentence["lGrammarErrors"] = list(self.dSentenceError.values())
297                        lSentences.append(dSentence)
298                        self.dSentenceError.clear()
299                except:
300                    raise
301        if bFullInfo:
302            # Grammar checking and sentence analysis
303            return lParagraphErrors, lSentences
304        else:
305            # Grammar checking only
306            return self.dError.values() # this is a view (iterable)
307
308    def _getCleanText (self):
309        sText = self.sText
310        if " " in sText:
311            sText = sText.replace(" ", ' ') # nbsp
312        if " " in sText:
313            sText = sText.replace(" ", ' ') # nnbsp
314        if "'" in sText:
315            sText = sText.replace("'", "’")
316        if "‑" in sText:
317            sText = sText.replace("‑", "-") # nobreakdash
318        if "@@" in sText:
319            sText = re.sub("@@+", "", sText)
320        return sText
321
322    def parseText (self, sText, sText0, bParagraph, nOffset, sCountry, dOptions, bShowRuleId, bDebug, bContext):
323        "parse the text with rules"
324        bChange = False
325        for sOption, lRuleGroup in _getRules(bParagraph):
326            if sOption == "@@@@":
327                # graph rules
328                if not bParagraph and bChange:
329                    self.update(sText, bDebug)
330                    bChange = False
331                for sGraphName, sLineId in lRuleGroup:
332                    if sGraphName not in dOptions or dOptions[sGraphName]:
333                        if bDebug:
334                            echo("\n>>>> GRAPH: " + sGraphName + " " + sLineId)
335                        sText = self.parseGraph(_rules_graph.dAllGraph[sGraphName], sCountry, dOptions, bShowRuleId, bDebug, bContext)
336            elif not sOption or dOptions.get(sOption, False):
337                # regex rules
338                for zRegex, bUppercase, sLineId, sRuleId, nPriority, lActions in lRuleGroup:
339                    if sRuleId not in _aIgnoredRules:
340                        for m in zRegex.finditer(sText):
341                            bCondMemo = None
342                            for sFuncCond, cActionType, sWhat, *eAct in lActions:
343                                # action in lActions: [ condition, action type, replacement/suggestion/action[, iGroup[, message, URL]] ]
344                                try:
345                                    bCondMemo = not sFuncCond or globals()[sFuncCond](sText, sText0, m, self.dTokenPos, sCountry, bCondMemo)
346                                    if bCondMemo:
347                                        if bDebug:
348                                            echo("RULE: " + sLineId)
349                                        if cActionType == "-":
350                                            # grammar error
351                                            nErrorStart = nOffset + m.start(eAct[0])
352                                            if nErrorStart not in self.dError or nPriority > self.dErrorPriority.get(nErrorStart, -1):
353                                                self.dError[nErrorStart] = self._createErrorFromRegex(sText, sText0, sWhat, nOffset, m, eAct[0], sLineId, sRuleId, bUppercase, eAct[1], eAct[2], bShowRuleId, sOption, bContext)
354                                                self.dErrorPriority[nErrorStart] = nPriority
355                                                self.dSentenceError[nErrorStart] = self.dError[nErrorStart]
356                                        elif cActionType == "~":
357                                            # text processor
358                                            sText = self.rewriteText(sText, sWhat, eAct[0], m, bUppercase)
359                                            bChange = True
360                                            if bDebug:
361                                                echo("~ " + sText + "  -- " + m.group(eAct[0]) + "  # " + sLineId)
362                                        elif cActionType == "=":
363                                            # disambiguation
364                                            if not bParagraph:
365                                                globals()[sWhat](sText, m, self.dTokenPos)
366                                                if bDebug:
367                                                    echo("= " + m.group(0) + "  # " + sLineId)
368                                        elif cActionType == ">":
369                                            # we do nothing, this test is just a condition to apply all following actions
370                                            pass
371                                        else:
372                                            echo("# error: unknown action at " + sLineId)
373                                    elif cActionType == ">":
374                                        break
375                                except Exception as e:
376                                    raise Exception(str(e), "# " + sLineId + " # " + sRuleId)
377        if bChange:
378            if bParagraph:
379                self.sText = sText
380            else:
381                self.sSentence = sText
382
383    def update (self, sSentence, bDebug=False):
384        "update <sSentence> and retokenize"
385        self.sSentence = sSentence
386        lNewToken = list(_oTokenizer.genTokens(sSentence, True))
387        for dToken in lNewToken:
388            if "lMorph" in self.dTokenPos.get(dToken["nStart"], {}):
389                dToken["lMorph"] = self.dTokenPos[dToken["nStart"]]["lMorph"]
390            if "aTags" in self.dTokenPos.get(dToken["nStart"], {}):
391                dToken["aTags"] = self.dTokenPos[dToken["nStart"]]["aTags"]
392        self.lToken = lNewToken
393        self.dTokenPos = { dToken["nStart"]: dToken  for dToken in self.lToken  if dToken["sType"] != "INFO" }
394        if bDebug:
395            echo("UPDATE:")
396            echo(self)
397
398    def _getNextPointers (self, dToken, dGraph, dPointer, bDebug=False):
399        "generator: return nodes where <dToken> “values” match <dNode> arcs"
400        dNode = dGraph[dPointer["iNode"]]
401        iToken1 = dPointer["iToken1"]
402        bTokenFound = False
403        # token value
404        if dToken["sValue"] in dNode:
405            if bDebug:
406                echo("  MATCH: " + dToken["sValue"])
407            yield { "iToken1": iToken1, "iNode": dNode[dToken["sValue"]] }
408            bTokenFound = True
409        if dToken["sValue"][0:2].istitle(): # we test only 2 first chars, to make valid words such as "Laissez-les", "Passe-partout".
410            sValue = dToken["sValue"].lower()
411            if sValue in dNode:
412                if bDebug:
413                    echo("  MATCH: " + sValue)
414                yield { "iToken1": iToken1, "iNode": dNode[sValue] }
415                bTokenFound = True
416        elif dToken["sValue"].isupper():
417            sValue = dToken["sValue"].lower()
418            if sValue in dNode:
419                if bDebug:
420                    echo("  MATCH: " + sValue)
421                yield { "iToken1": iToken1, "iNode": dNode[sValue] }
422                bTokenFound = True
423            sValue = dToken["sValue"].capitalize()
424            if sValue in dNode:
425                if bDebug:
426                    echo("  MATCH: " + sValue)
427                yield { "iToken1": iToken1, "iNode": dNode[sValue] }
428                bTokenFound = True
429        # regex value arcs
430        if dToken["sType"] not in frozenset(["INFO", "PUNC", "SIGN"]):
431            if "<re_value>" in dNode:
432                for sRegex in dNode["<re_value>"]:
433                    if "¬" not in sRegex:
434                        # no anti-pattern
435                        if re.search(sRegex, dToken["sValue"]):
436                            if bDebug:
437                                echo("  MATCH: ~" + sRegex)
438                            yield { "iToken1": iToken1, "iNode": dNode["<re_value>"][sRegex] }
439                            bTokenFound = True
440                    else:
441                        # there is an anti-pattern
442                        sPattern, sNegPattern = sRegex.split("¬", 1)
443                        if sNegPattern and re.search(sNegPattern, dToken["sValue"]):
444                            continue
445                        if not sPattern or re.search(sPattern, dToken["sValue"]):
446                            if bDebug:
447                                echo("  MATCH: ~" + sRegex)
448                            yield { "iToken1": iToken1, "iNode": dNode["<re_value>"][sRegex] }
449                            bTokenFound = True
450        # analysable tokens
451        if dToken["sType"][0:4] == "WORD":
452            # token lemmas
453            if "<lemmas>" in dNode:
454                for sLemma in _oSpellChecker.getLemma(dToken["sValue"]):
455                    if sLemma in dNode["<lemmas>"]:
456                        if bDebug:
457                            echo("  MATCH: >" + sLemma)
458                        yield { "iToken1": iToken1, "iNode": dNode["<lemmas>"][sLemma] }
459                        bTokenFound = True
460            # morph arcs
461            if "<morph>" in dNode:
462                lMorph = dToken.get("lMorph", _oSpellChecker.getMorph(dToken["sValue"]))
463                if lMorph:
464                    for sSearch in dNode["<morph>"]:
465                        if "¬" not in sSearch:
466                            # no anti-pattern
467                            if any(sSearch in sMorph  for sMorph in lMorph):
468                                if bDebug:
469                                    echo("  MATCH: $" + sSearch)
470                                yield { "iToken1": iToken1, "iNode": dNode["<morph>"][sSearch] }
471                                bTokenFound = True
472                        else:
473                            # there is an anti-pattern
474                            sPattern, sNegPattern = sSearch.split("¬", 1)
475                            if sNegPattern == "*":
476                                # all morphologies must match with <sPattern>
477                                if sPattern:
478                                    if all(sPattern in sMorph  for sMorph in lMorph):
479                                        if bDebug:
480                                            echo("  MATCH: $" + sSearch)
481                                        yield { "iToken1": iToken1, "iNode": dNode["<morph>"][sSearch] }
482                                        bTokenFound = True
483                            else:
484                                if sNegPattern and any(sNegPattern in sMorph  for sMorph in lMorph):
485                                    continue
486                                if not sPattern or any(sPattern in sMorph  for sMorph in lMorph):
487                                    if bDebug:
488                                        echo("  MATCH: $" + sSearch)
489                                    yield { "iToken1": iToken1, "iNode": dNode["<morph>"][sSearch] }
490                                    bTokenFound = True
491            # regex morph arcs
492            if "<re_morph>" in dNode:
493                lMorph = dToken.get("lMorph", _oSpellChecker.getMorph(dToken["sValue"]))
494                if lMorph:
495                    for sRegex in dNode["<re_morph>"]:
496                        if "¬" not in sRegex:
497                            # no anti-pattern
498                            if any(re.search(sRegex, sMorph)  for sMorph in lMorph):
499                                if bDebug:
500                                    echo("  MATCH: @" + sRegex)
501                                yield { "iToken1": iToken1, "iNode": dNode["<re_morph>"][sRegex] }
502                                bTokenFound = True
503                        else:
504                            # there is an anti-pattern
505                            sPattern, sNegPattern = sRegex.split("¬", 1)
506                            if sNegPattern == "*":
507                                # all morphologies must match with <sPattern>
508                                if sPattern:
509                                    if all(re.search(sPattern, sMorph)  for sMorph in lMorph):
510                                        if bDebug:
511                                            echo("  MATCH: @" + sRegex)
512                                        yield { "iToken1": iToken1, "iNode": dNode["<re_morph>"][sRegex] }
513                                        bTokenFound = True
514                            else:
515                                if sNegPattern and any(re.search(sNegPattern, sMorph)  for sMorph in lMorph):
516                                    continue
517                                if not sPattern or any(re.search(sPattern, sMorph)  for sMorph in lMorph):
518                                    if bDebug:
519                                        echo("  MATCH: @" + sRegex)
520                                    yield { "iToken1": iToken1, "iNode": dNode["<re_morph>"][sRegex] }
521                                    bTokenFound = True
522        # token tags
523        if "aTags" in dToken and "<tags>" in dNode:
524            for sTag in dToken["aTags"]:
525                if sTag in dNode["<tags>"]:
526                    if bDebug:
527                        echo("  MATCH: /" + sTag)
528                    yield { "iToken1": iToken1, "iNode": dNode["<tags>"][sTag] }
529                    bTokenFound = True
530        # meta arc (for token type)
531        if "<meta>" in dNode:
532            for sMeta in dNode["<meta>"]:
533                # no regex here, we just search if <dNode["sType"]> exists within <sMeta>
534                if sMeta == "*" or dToken["sType"] == sMeta:
535                    if bDebug:
536                        echo("  MATCH: *" + sMeta)
537                    yield { "iToken1": iToken1, "iNode": dNode["<meta>"][sMeta] }
538                    bTokenFound = True
539                elif "¬" in sMeta:
540                    if dToken["sType"] not in sMeta:
541                        if bDebug:
542                            echo("  MATCH: *" + sMeta)
543                        yield { "iToken1": iToken1, "iNode": dNode["<meta>"][sMeta] }
544                        bTokenFound = True
545        if not bTokenFound and "bKeep" in dPointer:
546            yield dPointer
547        # JUMP
548        # Warning! Recurssion!
549        if "<>" in dNode:
550            dPointer2 = { "iToken1": iToken1, "iNode": dNode["<>"], "bKeep": True }
551            yield from self._getNextPointers(dToken, dGraph, dPointer2, bDebug)
552
553    def parseGraph (self, dGraph, sCountry="FR", dOptions=None, bShowRuleId=False, bDebug=False, bContext=False):
554        "parse graph with tokens from the text and execute actions encountered"
555        lPointer = []
556        bTagAndRewrite = False
557        for iToken, dToken in enumerate(self.lToken):
558            if bDebug:
559                echo("TOKEN: " + dToken["sValue"])
560            # check arcs for each existing pointer
561            lNextPointer = []
562            for dPointer in lPointer:
563                lNextPointer.extend(self._getNextPointers(dToken, dGraph, dPointer, bDebug))
564            lPointer = lNextPointer
565            # check arcs of first nodes
566            lPointer.extend(self._getNextPointers(dToken, dGraph, { "iToken1": iToken, "iNode": 0 }, bDebug))
567            # check if there is rules to check for each pointer
568            for dPointer in lPointer:
569                #if bDebug:
570                #    echo("+", dPointer)
571                if "<rules>" in dGraph[dPointer["iNode"]]:
572                    bChange = self._executeActions(dGraph, dGraph[dPointer["iNode"]]["<rules>"], dPointer["iToken1"]-1, iToken, dOptions, sCountry, bShowRuleId, bDebug, bContext)
573                    if bChange:
574                        bTagAndRewrite = True
575        if bTagAndRewrite:
576            self.rewriteFromTags(bDebug)
577        if bDebug:
578            echo(self)
579        return self.sSentence
580
581    def _executeActions (self, dGraph, dNode, nTokenOffset, nLastToken, dOptions, sCountry, bShowRuleId, bDebug, bContext):
582        "execute actions found in the DARG"
583        bChange = False
584        for sLineId, nextNodeKey in dNode.items():
585            bCondMemo = None
586            for sRuleId in dGraph[nextNodeKey]:
587                try:
588                    if bDebug:
589                        echo("   >TRY: " + sRuleId + " " + sLineId)
590                    _, sOption, sFuncCond, cActionType, sWhat, *eAct = _rules_graph.dRule[sRuleId]
591                    # Suggestion    [ option, condition, "-", replacement/suggestion/action, iTokenStart, iTokenEnd, cStartLimit, cEndLimit, bCaseSvty, nPriority, sMessage, iURL ]
592                    # TextProcessor [ option, condition, "~", replacement/suggestion/action, iTokenStart, iTokenEnd, bCaseSvty ]
593                    # Disambiguator [ option, condition, "=", replacement/suggestion/action ]
594                    # Tag           [ option, condition, "/", replacement/suggestion/action, iTokenStart, iTokenEnd ]
595                    # Immunity      [ option, condition, "!", "",                            iTokenStart, iTokenEnd ]
596                    # Test          [ option, condition, ">", "" ]
597                    if not sOption or dOptions.get(sOption, False):
598                        bCondMemo = not sFuncCond or globals()[sFuncCond](self.lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, self.dTags, self.sSentence, self.sSentence0)
599                        if bCondMemo:
600                            if cActionType == "-":
601                                # grammar error
602                                iTokenStart, iTokenEnd, cStartLimit, cEndLimit, bCaseSvty, nPriority, sMessage, iURL = eAct
603                                nTokenErrorStart = nTokenOffset + iTokenStart  if iTokenStart > 0  else nLastToken + iTokenStart
604                                if "bImmune" not in self.lToken[nTokenErrorStart]:
605                                    nTokenErrorEnd = nTokenOffset + iTokenEnd  if iTokenEnd > 0  else nLastToken + iTokenEnd
606                                    nErrorStart = self.nOffsetWithinParagraph + (self.lToken[nTokenErrorStart]["nStart"] if cStartLimit == "<"  else self.lToken[nTokenErrorStart]["nEnd"])
607                                    nErrorEnd = self.nOffsetWithinParagraph + (self.lToken[nTokenErrorEnd]["nEnd"] if cEndLimit == ">"  else self.lToken[nTokenErrorEnd]["nStart"])
608                                    if nErrorStart not in self.dError or nPriority > self.dErrorPriority.get(nErrorStart, -1):
609                                        self.dError[nErrorStart] = self._createErrorFromTokens(sWhat, nTokenOffset, nLastToken, nTokenErrorStart, nErrorStart, nErrorEnd, sLineId, sRuleId, bCaseSvty, \
610                                                                                               sMessage, _rules_graph.dURL.get(iURL, ""), bShowRuleId, sOption, bContext)
611                                        self.dErrorPriority[nErrorStart] = nPriority
612                                        self.dSentenceError[nErrorStart] = self.dError[nErrorStart]
613                                        if bDebug:
614                                            echo("    NEW_ERROR: {}".format(self.dError[nErrorStart]))
615                            elif cActionType == "~":
616                                # text processor
617                                nTokenStart = nTokenOffset + eAct[0]  if eAct[0] > 0  else nLastToken + eAct[0]
618                                nTokenEnd = nTokenOffset + eAct[1]  if eAct[1] > 0  else nLastToken + eAct[1]
619                                self._tagAndPrepareTokenForRewriting(sWhat, nTokenStart, nTokenEnd, nTokenOffset, nLastToken, eAct[2], bDebug)
620                                bChange = True
621                                if bDebug:
622                                    echo("    TEXT_PROCESSOR: [{}:{}]  > {}".format(self.lToken[nTokenStart]["sValue"], self.lToken[nTokenEnd]["sValue"], sWhat))
623                            elif cActionType == "=":
624                                # disambiguation
625                                globals()[sWhat](self.lToken, nTokenOffset, nLastToken)
626                                if bDebug:
627                                    echo("    DISAMBIGUATOR: ({})  [{}:{}]".format(sWhat, self.lToken[nTokenOffset+1]["sValue"], self.lToken[nLastToken]["sValue"]))
628                            elif cActionType == ">":
629                                # we do nothing, this test is just a condition to apply all following actions
630                                if bDebug:
631                                    echo("    COND_OK")
632                            elif cActionType == "/":
633                                # Tag
634                                nTokenStart = nTokenOffset + eAct[0]  if eAct[0] > 0  else nLastToken + eAct[0]
635                                nTokenEnd = nTokenOffset + eAct[1]  if eAct[1] > 0  else nLastToken + eAct[1]
636                                for i in range(nTokenStart, nTokenEnd+1):
637                                    if "aTags" in self.lToken[i]:
638                                        self.lToken[i]["aTags"].update(sWhat.split("|"))
639                                    else:
640                                        self.lToken[i]["aTags"] = set(sWhat.split("|"))
641                                if bDebug:
642                                    echo("    TAG: {} >  [{}:{}]".format(sWhat, self.lToken[nTokenStart]["sValue"], self.lToken[nTokenEnd]["sValue"]))
643                                for sTag in sWhat.split("|"):
644                                    if sTag not in self.dTags:
645                                        self.dTags[sTag] = [nTokenStart, nTokenEnd]
646                                    else:
647                                        self.dTags[sTag][0] = min(nTokenStart, self.dTags[sTag][0])
648                                        self.dTags[sTag][1] = max(nTokenEnd, self.dTags[sTag][1])
649                            elif cActionType == "!":
650                                # immunity
651                                if bDebug:
652                                    echo("    IMMUNITY: " + sLineId + " / " + sRuleId)
653                                nTokenStart = nTokenOffset + eAct[0]  if eAct[0] > 0  else nLastToken + eAct[0]
654                                nTokenEnd = nTokenOffset + eAct[1]  if eAct[1] > 0  else nLastToken + eAct[1]
655                                if nTokenEnd - nTokenStart == 0:
656                                    self.lToken[nTokenStart]["bImmune"] = True
657                                    nErrorStart = self.nOffsetWithinParagraph + self.lToken[nTokenStart]["nStart"]
658                                    if nErrorStart in self.dError:
659                                        del self.dError[nErrorStart]
660                                else:
661                                    for i in range(nTokenStart, nTokenEnd+1):
662                                        self.lToken[i]["bImmune"] = True
663                                        nErrorStart = self.nOffsetWithinParagraph + self.lToken[i]["nStart"]
664                                        if nErrorStart in self.dError:
665                                            del self.dError[nErrorStart]
666                            else:
667                                echo("# error: unknown action at " + sLineId)
668                        elif cActionType == ">":
669                            if bDebug:
670                                echo("    COND_BREAK")
671                            break
672                except Exception as e:
673                    raise Exception(str(e), sLineId, sRuleId, self.sSentence)
674        return bChange
675
676    def _createErrorFromRegex (self, sText, sText0, sRepl, nOffset, m, iGroup, sLineId, sRuleId, bCaseSvty, sMsg, sURL, bShowRuleId, sOption, bContext):
677        nStart = nOffset + m.start(iGroup)
678        nEnd = nOffset + m.end(iGroup)
679        # suggestions
680        if sRepl[0:1] == "=":
681            sSugg = globals()[sRepl[1:]](sText, m)
682            lSugg = sSugg.split("|")  if sSugg  else []
683        elif sRepl == "_":
684            lSugg = []
685        else:
686            lSugg = m.expand(sRepl).split("|")
687        if bCaseSvty and lSugg and m.group(iGroup)[0:1].isupper():
688            lSugg = list(map(lambda s: s.upper(), lSugg))  if m.group(iGroup).isupper()  else list(map(lambda s: s[0:1].upper()+s[1:], lSugg))
689        # Message
690        sMessage = globals()[sMsg[1:]](sText, m)  if sMsg[0:1] == "="  else  m.expand(sMsg)
691        if bShowRuleId:
692            sMessage += "  #" + sLineId + " / " + sRuleId
693        #
694        if _bWriterError:
695            return self._createErrorForWriter(nStart, nEnd - nStart, sRuleId, sOption, sMessage, lSugg, sURL)
696        return self._createErrorAsDict(nStart, nEnd, sLineId, sRuleId, sOption, sMessage, lSugg, sURL, bContext)
697
698    def _createErrorFromTokens (self, sSugg, nTokenOffset, nLastToken, iFirstToken, nStart, nEnd, sLineId, sRuleId, bCaseSvty, sMsg, sURL, bShowRuleId, sOption, bContext):
699        # suggestions
700        if sSugg[0:1] == "=":
701            sSugg = globals()[sSugg[1:]](self.lToken, nTokenOffset, nLastToken)
702            lSugg = sSugg.split("|")  if sSugg  else []
703        elif sSugg == "_":
704            lSugg = []
705        else:
706            lSugg = self._expand(sSugg, nTokenOffset, nLastToken).split("|")
707        if bCaseSvty and lSugg and self.lToken[iFirstToken]["sValue"][0:1].isupper():
708            lSugg = list(map(lambda s: s.upper(), lSugg))  if self.sSentence[nStart:nEnd].isupper()  else list(map(lambda s: s[0:1].upper()+s[1:], lSugg))
709        # Message
710        sMessage = globals()[sMsg[1:]](self.lToken, nTokenOffset, nLastToken)  if sMsg[0:1] == "="  else self._expand(sMsg, nTokenOffset, nLastToken)
711        if bShowRuleId:
712            sMessage += "  #" + sLineId + " / " + sRuleId
713        #
714        if _bWriterError:
715            return self._createErrorForWriter(nStart, nEnd - nStart, sRuleId, sOption, sMessage, lSugg, sURL)
716        return self._createErrorAsDict(nStart, nEnd, sLineId, sRuleId, sOption, sMessage, lSugg, sURL, bContext)
717
718    def _createErrorForWriter (self, nStart, nLen, sRuleId, sOption, sMessage, lSugg, sURL):
719        xErr = SingleProofreadingError()    # uno.createUnoStruct( "com.sun.star.linguistic2.SingleProofreadingError" )
720        xErr.nErrorStart = nStart
721        xErr.nErrorLength = nLen
722        xErr.nErrorType = PROOFREADING
723        xErr.aRuleIdentifier = sRuleId
724        xErr.aShortComment = sMessage   # sMessage.split("|")[0]     # in context menu
725        xErr.aFullComment = sMessage    # sMessage.split("|")[-1]    # in dialog
726        xErr.aSuggestions = tuple(lSugg)
727        # Properties
728        lProperties = []
729        if _nUnderliningStyle:
730            lProperties.append(PropertyValue(Name="LineType", Value=_nUnderliningStyle))
731        if _bMulticolor:
732            lProperties.append(PropertyValue(Name="LineColor", Value=_dOptionsColors.get(sOption, 33023)))
733        if sURL:
734            lProperties.append(PropertyValue(Name="FullCommentURL", Value=sURL))
735        xErr.aProperties = lProperties
736        return xErr
737
738    def _createErrorAsDict (self, nStart, nEnd, sLineId, sRuleId, sOption, sMessage, lSugg, sURL, bContext):
739        dErr = {
740            "nStart": nStart,
741            "nEnd": nEnd,
742            "sLineId": sLineId,
743            "sRuleId": sRuleId,
744            "sType": sOption  if sOption  else "notype",
745            "aColor": _dOptionsColors.get(sOption, None),
746            "sMessage": sMessage,
747            "aSuggestions": lSugg,
748            "URL": sURL
749        }
750        if bContext:
751            dErr['sUnderlined'] = self.sText0[nStart:nEnd]
752            dErr['sBefore'] = self.sText0[max(0,nStart-80):nStart]
753            dErr['sAfter'] = self.sText0[nEnd:nEnd+80]
754        return dErr
755
756    def _expand (self, sText, nTokenOffset, nLastToken):
757        for m in re.finditer(r"\\(-?[0-9]+)", sText):
758            if m.group(1)[0:1] == "-":
759                sText = sText.replace(m.group(0), self.lToken[nLastToken+int(m.group(1))+1]["sValue"])
760            else:
761                sText = sText.replace(m.group(0), self.lToken[nTokenOffset+int(m.group(1))]["sValue"])
762        return sText
763
764    def rewriteText (self, sText, sRepl, iGroup, m, bUppercase):
765        "text processor: write <sRepl> in <sText> at <iGroup> position"
766        nLen = m.end(iGroup) - m.start(iGroup)
767        if sRepl == "*":
768            sNew = " " * nLen
769        elif sRepl == "_":
770            sNew = "_" * nLen
771        elif sRepl == "@":
772            sNew = "@" * nLen
773        elif sRepl[0:1] == "=":
774            sNew = globals()[sRepl[1:]](sText, m)
775            sNew = sNew + " " * (nLen-len(sNew))
776            if bUppercase and m.group(iGroup)[0:1].isupper():
777                sNew = sNew.capitalize()
778        else:
779            sNew = m.expand(sRepl)
780            sNew = sNew + " " * (nLen-len(sNew))
781        return sText[0:m.start(iGroup)] + sNew + sText[m.end(iGroup):]
782
783    def _tagAndPrepareTokenForRewriting (self, sWhat, nTokenRewriteStart, nTokenRewriteEnd, nTokenOffset, nLastToken, bCaseSvty, bDebug):
784        "text processor: rewrite tokens between <nTokenRewriteStart> and <nTokenRewriteEnd> position"
785        if sWhat == "*":
786            # purge text
787            if nTokenRewriteEnd - nTokenRewriteStart == 0:
788                self.lToken[nTokenRewriteStart]["bToRemove"] = True
789            else:
790                for i in range(nTokenRewriteStart, nTokenRewriteEnd+1):
791                    self.lToken[i]["bToRemove"] = True
792        elif sWhat == "␣":
793            # merge tokens
794            self.lToken[nTokenRewriteStart]["nMergeUntil"] = nTokenRewriteEnd
795        elif sWhat == "_":
796            # neutralized token
797            if nTokenRewriteEnd - nTokenRewriteStart == 0:
798                self.lToken[nTokenRewriteStart]["sNewValue"] = "_"
799            else:
800                for i in range(nTokenRewriteStart, nTokenRewriteEnd+1):
801                    self.lToken[i]["sNewValue"] = "_"
802        else:
803            if sWhat.startswith("="):
804                sWhat = globals()[sWhat[1:]](self.lToken, nTokenOffset, nLastToken)
805            else:
806                sWhat = self._expand(sWhat, nTokenOffset, nLastToken)
807            bUppercase = bCaseSvty and self.lToken[nTokenRewriteStart]["sValue"][0:1].isupper()
808            if nTokenRewriteEnd - nTokenRewriteStart == 0:
809                # one token
810                if bUppercase:
811                    sWhat = sWhat[0:1].upper() + sWhat[1:]
812                self.lToken[nTokenRewriteStart]["sNewValue"] = sWhat
813            else:
814                # several tokens
815                lTokenValue = sWhat.split("|")
816                if len(lTokenValue) != (nTokenRewriteEnd - nTokenRewriteStart + 1):
817                    if (bDebug):
818                        echo("Error. Text processor: number of replacements != number of tokens.")
819                    return
820                for i, sValue in zip(range(nTokenRewriteStart, nTokenRewriteEnd+1), lTokenValue):
821                    if not sValue or sValue == "*":
822                        self.lToken[i]["bToRemove"] = True
823                    else:
824                        if bUppercase:
825                            sValue = sValue[0:1].upper() + sValue[1:]
826                        self.lToken[i]["sNewValue"] = sValue
827
828    def rewriteFromTags (self, bDebug=False):
829        "rewrite the sentence, modify tokens, purge the token list"
830        if bDebug:
831            echo("REWRITE")
832        lNewToken = []
833        nMergeUntil = 0
834        dTokenMerger = {}
835        for iToken, dToken in enumerate(self.lToken):
836            bKeepToken = True
837            if dToken["sType"] != "INFO":
838                if nMergeUntil and iToken <= nMergeUntil:
839                    dTokenMerger["sValue"] += " " * (dToken["nStart"] - dTokenMerger["nEnd"]) + dToken["sValue"]
840                    dTokenMerger["nEnd"] = dToken["nEnd"]
841                    if bDebug:
842                        echo("  MERGED TOKEN: " + dTokenMerger["sValue"])
843                    bKeepToken = False
844                if "nMergeUntil" in dToken:
845                    if iToken > nMergeUntil: # this token is not already merged with a previous token
846                        dTokenMerger = dToken
847                    if dToken["nMergeUntil"] > nMergeUntil:
848                        nMergeUntil = dToken["nMergeUntil"]
849                    del dToken["nMergeUntil"]
850                elif "bToRemove" in dToken:
851                    if bDebug:
852                        echo("  REMOVED: " + dToken["sValue"])
853                    self.sSentence = self.sSentence[:dToken["nStart"]] + " " * (dToken["nEnd"] - dToken["nStart"]) + self.sSentence[dToken["nEnd"]:]
854                    bKeepToken = False
855            #
856            if bKeepToken:
857                lNewToken.append(dToken)
858                if "sNewValue" in dToken:
859                    # rewrite token and sentence
860                    if bDebug:
861                        echo(dToken["sValue"] + " -> " + dToken["sNewValue"])
862                    dToken["sRealValue"] = dToken["sValue"]
863                    dToken["sValue"] = dToken["sNewValue"]
864                    nDiffLen = len(dToken["sRealValue"]) - len(dToken["sNewValue"])
865                    sNewRepl = (dToken["sNewValue"] + " " * nDiffLen)  if nDiffLen >= 0  else dToken["sNewValue"][:len(dToken["sRealValue"])]
866                    self.sSentence = self.sSentence[:dToken["nStart"]] + sNewRepl + self.sSentence[dToken["nEnd"]:]
867                    del dToken["sNewValue"]
868            else:
869                try:
870                    del self.dTokenPos[dToken["nStart"]]
871                except KeyError:
872                    echo(self)
873                    echo(dToken)
874        if bDebug:
875            echo("  TEXT REWRITED: " + self.sSentence)
876        self.lToken.clear()
877        self.lToken = lNewToken
878
879
880#### common functions
881
882def option (sOpt):
883    "return True if option <sOpt> is active"
884    return _dOptions.get(sOpt, False)
885
886
887#### Functions to get text outside pattern scope
888
889# warning: check compile_rules.py to understand how it works
890
891_zNextWord = re.compile(r" +(\w[\w-]*)")
892_zPrevWord = re.compile(r"(\w[\w-]*) +$")
893
894def nextword (s, iStart, n):
895    "get the nth word of the input string or empty string"
896    m = re.match("(?: +[\\w%-]+){" + str(n-1) + "} +([\\w%-]+)", s[iStart:])
897    if not m:
898        return None
899    return (iStart+m.start(1), m.group(1))
900
901
902def prevword (s, iEnd, n):
903    "get the (-)nth word of the input string or empty string"
904    m = re.search("([\\w%-]+) +(?:[\\w%-]+ +){" + str(n-1) + "}$", s[:iEnd])
905    if not m:
906        return None
907    return (m.start(1), m.group(1))
908
909
910def nextword1 (s, iStart):
911    "get next word (optimization)"
912    m = _zNextWord.match(s[iStart:])
913    if not m:
914        return None
915    return (iStart+m.start(1), m.group(1))
916
917
918def prevword1 (s, iEnd):
919    "get previous word (optimization)"
920    m = _zPrevWord.search(s[:iEnd])
921    if not m:
922        return None
923    return (m.start(1), m.group(1))
924
925
926def look (s, sPattern, sNegPattern=None):
927    "seek sPattern in s (before/after/fulltext), if sNegPattern not in s"
928    if sNegPattern and re.search(sNegPattern, s):
929        return False
930    if re.search(sPattern, s):
931        return True
932    return False
933
934
935def look_chk1 (dTokenPos, s, nOffset, sPattern, sPatternGroup1, sNegPatternGroup1=""):
936    "returns True if s has pattern sPattern and m.group(1) has pattern sPatternGroup1"
937    m = re.search(sPattern, s)
938    if not m:
939        return False
940    try:
941        sWord = m.group(1)
942        nPos = m.start(1) + nOffset
943    except IndexError:
944        return False
945    return morph(dTokenPos, (nPos, sWord), sPatternGroup1, sNegPatternGroup1)
946
947
948
949#### Analyse groups for regex rules
950
951def displayInfo (dTokenPos, tWord):
952    "for debugging: retrieve info of word"
953    if not tWord:
954        echo("> nothing to find")
955        return True
956    lMorph = _oSpellChecker.getMorph(tWord[1])
957    if not lMorph:
958        echo("> not in dictionary")
959        return True
960    echo("TOKENS:", dTokenPos)
961    if tWord[0] in dTokenPos and "lMorph" in dTokenPos[tWord[0]]:
962        echo("DA: " + str(dTokenPos[tWord[0]]["lMorph"]))
963    echo("FSA: " + str(lMorph))
964    return True
965
966
967def morph (dTokenPos, tWord, sPattern, sNegPattern="", bNoWord=False):
968    "analyse a tuple (position, word), returns True if not sNegPattern in word morphologies and sPattern in word morphologies (disambiguation on)"
969    if not tWord:
970        return bNoWord
971    lMorph = dTokenPos[tWord[0]]["lMorph"]  if tWord[0] in dTokenPos and "lMorph" in dTokenPos[tWord[0]]  else _oSpellChecker.getMorph(tWord[1])
972    if not lMorph:
973        return False
974    # check negative condition
975    if sNegPattern:
976        if sNegPattern == "*":
977            # all morph must match sPattern
978            zPattern = re.compile(sPattern)
979            return all(zPattern.search(sMorph)  for sMorph in lMorph)
980        zNegPattern = re.compile(sNegPattern)
981        if any(zNegPattern.search(sMorph)  for sMorph in lMorph):
982            return False
983    # search sPattern
984    zPattern = re.compile(sPattern)
985    return any(zPattern.search(sMorph)  for sMorph in lMorph)
986
987
988def analyse (sWord, sPattern, sNegPattern=""):
989    "analyse a word, returns True if not sNegPattern in word morphologies and sPattern in word morphologies (disambiguation off)"
990    lMorph = _oSpellChecker.getMorph(sWord)
991    if not lMorph:
992        return False
993    # check negative condition
994    if sNegPattern:
995        if sNegPattern == "*":
996            zPattern = re.compile(sPattern)
997            return all(zPattern.search(sMorph)  for sMorph in lMorph)
998        zNegPattern = re.compile(sNegPattern)
999        if any(zNegPattern.search(sMorph)  for sMorph in lMorph):
1000            return False
1001    # search sPattern
1002    zPattern = re.compile(sPattern)
1003    return any(zPattern.search(sMorph)  for sMorph in lMorph)
1004
1005
1006#### Analyse tokens for graph rules
1007
1008def g_value (dToken, sValues, nLeft=None, nRight=None):
1009    "test if <dToken['sValue']> is in sValues (each value should be separated with |)"
1010    sValue = "|"+dToken["sValue"]+"|"  if nLeft is None  else "|"+dToken["sValue"][slice(nLeft, nRight)]+"|"
1011    if sValue in sValues:
1012        return True
1013    if dToken["sValue"][0:2].istitle(): # we test only 2 first chars, to make valid words such as "Laissez-les", "Passe-partout".
1014        if sValue.lower() in sValues:
1015            return True
1016    elif dToken["sValue"].isupper():
1017        #if sValue.lower() in sValues:
1018        #    return True
1019        sValue = "|"+sValue[1:].capitalize()
1020        if sValue in sValues:
1021            return True
1022        sValue = sValue.lower()
1023        if sValue in sValues:
1024            return True
1025    return False
1026
1027
1028def g_morph (dToken, sPattern, sNegPattern="", nLeft=None, nRight=None, bMemorizeMorph=True):
1029    "analyse a token, return True if <sNegPattern> not in morphologies and <sPattern> in morphologies"
1030    if "lMorph" in dToken:
1031        lMorph = dToken["lMorph"]
1032    else:
1033        if nLeft is not None:
1034            lMorph = _oSpellChecker.getMorph(dToken["sValue"][slice(nLeft, nRight)])
1035            if bMemorizeMorph:
1036                dToken["lMorph"] = lMorph
1037        else:
1038            lMorph = _oSpellChecker.getMorph(dToken["sValue"])
1039    if not lMorph:
1040        return False
1041    # check negative condition
1042    if sNegPattern:
1043        if sNegPattern == "*":
1044            # all morph must match sPattern
1045            zPattern = re.compile(sPattern)
1046            return all(zPattern.search(sMorph)  for sMorph in lMorph)
1047        zNegPattern = re.compile(sNegPattern)
1048        if any(zNegPattern.search(sMorph)  for sMorph in lMorph):
1049            return False
1050    # search sPattern
1051    zPattern = re.compile(sPattern)
1052    return any(zPattern.search(sMorph)  for sMorph in lMorph)
1053
1054
1055def g_analyse (dToken, sPattern, sNegPattern="", nLeft=None, nRight=None, bMemorizeMorph=True):
1056    "analyse a token, return True if <sNegPattern> not in morphologies and <sPattern> in morphologies (disambiguation off)"
1057    if nLeft is not None:
1058        lMorph = _oSpellChecker.getMorph(dToken["sValue"][slice(nLeft, nRight)])
1059        if bMemorizeMorph:
1060            dToken["lMorph"] = lMorph
1061    else:
1062        lMorph = _oSpellChecker.getMorph(dToken["sValue"])
1063    if not lMorph:
1064        return False
1065    # check negative condition
1066    if sNegPattern:
1067        if sNegPattern == "*":
1068            # all morph must match sPattern
1069            zPattern = re.compile(sPattern)
1070            return all(zPattern.search(sMorph)  for sMorph in lMorph)
1071        zNegPattern = re.compile(sNegPattern)
1072        if any(zNegPattern.search(sMorph)  for sMorph in lMorph):
1073            return False
1074    # search sPattern
1075    zPattern = re.compile(sPattern)
1076    return any(zPattern.search(sMorph)  for sMorph in lMorph)
1077
1078
1079def g_merged_analyse (dToken1, dToken2, cMerger, sPattern, sNegPattern="", bSetMorph=True):
1080    "merge two token values, return True if <sNegPattern> not in morphologies and <sPattern> in morphologies (disambiguation off)"
1081    lMorph = _oSpellChecker.getMorph(dToken1["sValue"] + cMerger + dToken2["sValue"])
1082    if not lMorph:
1083        return False
1084    # check negative condition
1085    if sNegPattern:
1086        if sNegPattern == "*":
1087            # all morph must match sPattern
1088            zPattern = re.compile(sPattern)
1089            bResult = all(zPattern.search(sMorph)  for sMorph in lMorph)
1090            if bResult and bSetMorph:
1091                dToken1["lMorph"] = lMorph
1092            return bResult
1093        zNegPattern = re.compile(sNegPattern)
1094        if any(zNegPattern.search(sMorph)  for sMorph in lMorph):
1095            return False
1096    # search sPattern
1097    zPattern = re.compile(sPattern)
1098    bResult = any(zPattern.search(sMorph)  for sMorph in lMorph)
1099    if bResult and bSetMorph:
1100        dToken1["lMorph"] = lMorph
1101    return bResult
1102
1103
1104def g_tag_before (dToken, dTags, sTag):
1105    "returns True if <sTag> is present on tokens before <dToken>"
1106    if sTag not in dTags:
1107        return False
1108    if dToken["i"] > dTags[sTag][0]:
1109        return True
1110    return False
1111
1112
1113def g_tag_after (dToken, dTags, sTag):
1114    "returns True if <sTag> is present on tokens after <dToken>"
1115    if sTag not in dTags:
1116        return False
1117    if dToken["i"] < dTags[sTag][1]:
1118        return True
1119    return False
1120
1121
1122def g_tag (dToken, sTag):
1123    "returns True if <sTag> is present on token <dToken>"
1124    return "aTags" in dToken and sTag in dToken["aTags"]
1125
1126
1127def g_meta (dToken, sType):
1128    "returns True if <sType> is equal to the token type"
1129    return dToken["sType"] == sType
1130
1131
1132def g_space_between_tokens (dToken1, dToken2, nMin, nMax=None):
1133    "checks if spaces between tokens is >= <nMin> and <= <nMax>"
1134    nSpace = dToken2["nStart"] - dToken1["nEnd"]
1135    if nSpace < nMin:
1136        return False
1137    if nMax is not None and nSpace > nMax:
1138        return False
1139    return True
1140
1141
1142def g_token (lToken, i):
1143    "return token at index <i> in lToken (or the closest one)"
1144    if i < 0:
1145        return lToken[0]
1146    if i >= len(lToken):
1147        return lToken[-1]
1148    return lToken[i]
1149
1150
1151
1152#### Disambiguator for regex rules
1153
1154def select (dTokenPos, nPos, sWord, sPattern, lDefault=None):
1155    "Disambiguation: select morphologies of <sWord> matching <sPattern>"
1156    if not sWord:
1157        return True
1158    if nPos not in dTokenPos:
1159        echo("Error. There should be a token at this position: ", nPos)
1160        return True
1161    lMorph = _oSpellChecker.getMorph(sWord)
1162    if not lMorph or len(lMorph) == 1:
1163        return True
1164    lSelect = [ sMorph  for sMorph in lMorph  if re.search(sPattern, sMorph) ]
1165    if lSelect:
1166        if len(lSelect) != len(lMorph):
1167            dTokenPos[nPos]["lMorph"] = lSelect
1168    elif lDefault:
1169        dTokenPos[nPos]["lMorph"] = lDefault
1170    return True
1171
1172
1173def exclude (dTokenPos, nPos, sWord, sPattern, lDefault=None):
1174    "Disambiguation: exclude morphologies of <sWord> matching <sPattern>"
1175    if not sWord:
1176        return True
1177    if nPos not in dTokenPos:
1178        echo("Error. There should be a token at this position: ", nPos)
1179        return True
1180    lMorph = _oSpellChecker.getMorph(sWord)
1181    if not lMorph or len(lMorph) == 1:
1182        return True
1183    lSelect = [ sMorph  for sMorph in lMorph  if not re.search(sPattern, sMorph) ]
1184    if lSelect:
1185        if len(lSelect) != len(lMorph):
1186            dTokenPos[nPos]["lMorph"] = lSelect
1187    elif lDefault:
1188        dTokenPos[nPos]["lMorph"] = lDefault
1189    return True
1190
1191
1192def define (dTokenPos, nPos, sMorphs):
1193    "Disambiguation: set morphologies of token at <nPos> with <sMorphs>"
1194    if nPos not in dTokenPos:
1195        echo("Error. There should be a token at this position: ", nPos)
1196        return True
1197    dTokenPos[nPos]["lMorph"] = sMorphs.split("|")
1198    return True
1199
1200
1201#### Disambiguation for graph rules
1202
1203def g_select (dToken, sPattern, lDefault=None):
1204    "Disambiguation: select morphologies for <dToken> according to <sPattern>, always return True"
1205    lMorph = dToken["lMorph"]  if "lMorph" in dToken  else _oSpellChecker.getMorph(dToken["sValue"])
1206    if not lMorph or len(lMorph) == 1:
1207        if lDefault:
1208            dToken["lMorph"] = lDefault
1209            #echo("DA:", dToken["sValue"], dToken["lMorph"])
1210        return True
1211    lSelect = [ sMorph  for sMorph in lMorph  if re.search(sPattern, sMorph) ]
1212    if lSelect:
1213        if len(lSelect) != len(lMorph):
1214            dToken["lMorph"] = lSelect
1215    elif lDefault:
1216        dToken["lMorph"] = lDefault
1217    #echo("DA:", dToken["sValue"], dToken["lMorph"])
1218    return True
1219
1220
1221def g_exclude (dToken, sPattern, lDefault=None):
1222    "Disambiguation: select morphologies for <dToken> according to <sPattern>, always return True"
1223    lMorph = dToken["lMorph"]  if "lMorph" in dToken  else _oSpellChecker.getMorph(dToken["sValue"])
1224    if not lMorph or len(lMorph) == 1:
1225        if lDefault:
1226            dToken["lMorph"] = lDefault
1227            #echo("DA:", dToken["sValue"], dToken["lMorph"])
1228        return True
1229    lSelect = [ sMorph  for sMorph in lMorph  if not re.search(sPattern, sMorph) ]
1230    if lSelect:
1231        if len(lSelect) != len(lMorph):
1232            dToken["lMorph"] = lSelect
1233    elif lDefault:
1234        dToken["lMorph"] = lDefault
1235    #echo("DA:", dToken["sValue"], dToken["lMorph"])
1236    return True
1237
1238
1239def g_add_morph (dToken, sNewMorph):
1240    "Disambiguation: add a morphology to a token"
1241    lMorph = dToken["lMorph"]  if "lMorph" in dToken  else _oSpellChecker.getMorph(dToken["sValue"])
1242    lMorph.extend(sNewMorph.split("|"))
1243    dToken["lMorph"] = lMorph
1244    return True
1245
1246
1247def g_rewrite (dToken, sToReplace, sReplace):
1248    "Disambiguation: rewrite morphologies"
1249    lMorph = dToken["lMorph"]  if "lMorph" in dToken  else _oSpellChecker.getMorph(dToken["sValue"])
1250    dToken["lMorph"] = [ sMorph.replace(sToReplace, sReplace)  for sMorph in lMorph ]
1251    return True
1252
1253
1254def g_define (dToken, sMorphs):
1255    "Disambiguation: set morphologies of <dToken>, always return True"
1256    dToken["lMorph"] = sMorphs.split("|")
1257    #echo("DA:", dToken["sValue"], lMorph)
1258    return True
1259
1260
1261def g_define_from (dToken, nLeft=None, nRight=None):
1262    "Disambiguation: set morphologies of <dToken> with slicing its value with <nLeft> and <nRight>"
1263    if nLeft is not None:
1264        dToken["lMorph"] = _oSpellChecker.getMorph(dToken["sValue"][slice(nLeft, nRight)])
1265    else:
1266        dToken["lMorph"] = _oSpellChecker.getMorph(dToken["sValue"])
1267    return True
1268
1269
1270def g_change_meta (dToken, sType):
1271    "Disambiguation: change type of token"
1272    dToken["sType"] = sType
1273    return True
1274
1275
1276
1277#### GRAMMAR CHECKER PLUGINS
1278
1279
1280
1281#### GRAMMAR CHECKING ENGINE PLUGIN: Parsing functions for French language
1282
1283from . import cregex as cr
1284
1285
1286def g_morphVC (dToken, sPattern, sNegPattern=""):
1287    "lance la fonction g_morph() sur la première partie d’un verbe composé (ex: vient-il)"
1288    nEnd = dToken["sValue"].rfind("-")
1289    if dToken["sValue"].count("-") > 1:
1290        if "-t-" in dToken["sValue"]:
1291            nEnd = nEnd - 2
1292        elif re.search("-l(?:es?|a)-(?:[mt]oi|nous|leur)$|(?:[nv]ous|lui|leur)-en$", dToken["sValue"]):
1293            nEnd = dToken["sValue"][0:nEnd].rfind("-")
1294    return g_morph(dToken, sPattern, sNegPattern, 0, nEnd, False)
1295
1296
1297def apposition (sWord1, sWord2):
1298    "returns True if nom + nom (no agreement required)"
1299    return len(sWord2) < 2 or (cr.mbNomNotAdj(_oSpellChecker.getMorph(sWord2)) and cr.mbPpasNomNotAdj(_oSpellChecker.getMorph(sWord1)))
1300
1301
1302def g_checkAgreement (dToken1, dToken2, bNotOnlyNames=True):
1303    "check agreement between <dToken1> and <dToken2>"
1304    lMorph1 = dToken1["lMorph"]  if "lMorph" in dToken1  else  _oSpellChecker.getMorph(dToken1["sValue"])
1305    if not lMorph1:
1306        return True
1307    lMorph2 = dToken2["lMorph"]  if "lMorph" in dToken2  else  _oSpellChecker.getMorph(dToken2["sValue"])
1308    if not lMorph2:
1309        return True
1310    if bNotOnlyNames and not (cr.mbAdj(lMorph2) or cr.mbAdjNb(lMorph1)):
1311        return False
1312    return cr.checkAgreement(lMorph1, lMorph2)
1313
1314
1315def checkAgreement (sWord1, sWord2):
1316    "check agreement between <sWord1> and <sWord1>"
1317    lMorph2 = _oSpellChecker.getMorph(sWord2)
1318    if not lMorph2:
1319        return True
1320    lMorph1 = _oSpellChecker.getMorph(sWord1)
1321    if not lMorph1:
1322        return True
1323    return cr.checkAgreement(lMorph1, lMorph2)
1324
1325
1326_zUnitSpecial = re.compile("[µ/⁰¹²³⁴⁵⁶⁷⁸⁹Ωℓ·]")
1327_zUnitNumbers = re.compile("[0-9]")
1328
1329def mbUnit (s):
1330    "returns True it can be a measurement unit"
1331    if _zUnitSpecial.search(s):
1332        return True
1333    if 1 < len(s) < 16 and s[0:1].islower() and (not s[1:].islower() or _zUnitNumbers.search(s)):
1334        return True
1335    return False
1336
1337
1338#### GRAMMAR CHECKING ENGINE PLUGIN
1339
1340#### Check date validity
1341
1342import datetime
1343
1344
1345_lDay = ["lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"]
1346_dMonth = { "janvier":1, "février":2, "mars":3, "avril":4, "mai":5, "juin":6, "juillet":7, "août":8, "aout":8, "septembre":9, "octobre":10, "novembre":11, "décembre":12 }
1347
1348# Dans Python, datetime.weekday() envoie le résultat comme si nous étions dans un calendrier grégorien universal.
1349# https://fr.wikipedia.org/wiki/Passage_du_calendrier_julien_au_calendrier_gr%C3%A9gorien
1350# Selon Grégoire, le jeudi 4 octobre 1582 est immédiatement suivi par le vendredi 15 octobre.
1351# En France, la bascule eut lieu le 9 décembre 1582 qui fut suivi par le 20 décembre 1582.
1352# C’est la date retenue pour la bascule dans Grammalecte, mais le calendrier grégorien fut adopté dans le monde diversement.
1353# Il fallut des siècles pour qu’il soit adopté par l’Occident et une grande partie du reste du monde.
1354_dGregorianToJulian = {
1355    "lundi":    "jeudi",
1356    "mardi":    "vendredi",
1357    "mercredi": "samedi",
1358    "jeudi":    "dimanche",
1359    "vendredi": "lundi",
1360    "samedi":   "mardi",
1361    "dimanche": "mercredi"
1362}
1363
1364
1365def checkDate (sDay, sMonth, sYear):
1366    "return True if the date is valid"
1367    if not sMonth.isdigit():
1368        sMonth = _dMonth.get(sMonth.lower(), "13")
1369    try:
1370        return datetime.date(int(sYear), int(sMonth), int(sDay))
1371    except ValueError:
1372        return False
1373    except TypeError:
1374        return True
1375
1376
1377def checkDay (sWeekday, sDay, sMonth, sYear):
1378    "return True if sWeekday is valid according to the given date"
1379    xDate = checkDate(sDay, sMonth, sYear)
1380    if xDate and _getDay(xDate) != sWeekday.lower():
1381        return False
1382    # if the date isn’t valid, any day is valid.
1383    return True
1384
1385
1386def getDay (sDay, sMonth, sYear):
1387    "return the day of the date (in Gregorian calendar after 1582-12-20, in Julian calendar before 1582-12-09)"
1388    xDate = checkDate(sDay, sMonth, sYear)
1389    if xDate:
1390        return _getDay(xDate)
1391    return ""
1392
1393
1394def _getDay (xDate):
1395    "return the day of the date (in Gregorian calendar after 1582-12-20, in Julian calendar before 1582-12-09)"
1396    if xDate.year > 1582:
1397        # Calendrier grégorien
1398        return _lDay[xDate.weekday()]
1399    if xDate.year < 1582:
1400        # Calendrier julien
1401        sGregorianDay = _lDay[xDate.weekday()]
1402        return _dGregorianToJulian.get(sGregorianDay, "Erreur: jour inconnu")
1403    # 1582
1404    if xDate.month < 12  or xDate.day <= 9:
1405        # Calendrier julien
1406        sGregorianDay = _lDay[xDate.weekday()]
1407        return _dGregorianToJulian.get(sGregorianDay, "Erreur: jour inconnu")
1408    if xDate.day >= 20:
1409        # Calendrier grégorien
1410        return _lDay[xDate.weekday()]
1411    # 10 - 19 décembre 1582: jours inexistants en France.
1412    return ""
1413
1414
1415#### GRAMMAR CHECKING ENGINE PLUGIN: Suggestion mechanisms
1416
1417from . import conj
1418from . import mfsp
1419from . import phonet
1420
1421
1422## Verbs
1423
1424def splitVerb (sVerb):
1425    "renvoie le verbe et les pronoms séparément"
1426    iRight = sVerb.rfind("-")
1427    sSuffix = sVerb[iRight:]
1428    sVerb = sVerb[:iRight]
1429    if sVerb.endswith(("-t", "-le", "-la", "-les")):
1430        iRight = sVerb.rfind("-")
1431        sSuffix = sVerb[iRight:] + sSuffix
1432        sVerb = sVerb[:iRight]
1433    return sVerb, sSuffix
1434
1435
1436def suggVerb (sFlex, sWho, funcSugg2=None, bVC=False):
1437    "change <sFlex> conjugation according to <sWho>"
1438    if bVC:
1439        sFlex, sSfx = splitVerb(sFlex)
1440    aSugg = set()
1441    for sStem in _oSpellChecker.getLemma(sFlex):
1442        tTags = conj._getTags(sStem)
1443        if tTags:
1444            # we get the tense
1445            aTense = set()
1446            for sMorph in _oSpellChecker.getMorph(sFlex):
1447                for m in re.finditer(">"+sStem+"/.*?(:(?:Y|I[pqsf]|S[pq]|K|P|Q))", sMorph):
1448                    # stem must be used in regex to prevent confusion between different verbs (e.g. sauras has 2 stems: savoir and saurer)
1449                    if m:
1450                        if m.group(1) == ":Y" or m.group(1) == ":Q":
1451                            aTense.add(":Ip")
1452                            aTense.add(":Iq")
1453                            aTense.add(":Is")
1454                        elif m.group(1) == ":P":
1455                            aTense.add(":Ip")
1456                        else:
1457                            aTense.add(m.group(1))
1458            for sTense in aTense:
1459                if sWho == ":1ś" and not conj._hasConjWithTags(tTags, sTense, ":1ś"):
1460                    sWho = ":1s"
1461                if conj._hasConjWithTags(tTags, sTense, sWho):
1462                    aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho))
1463    if funcSugg2:
1464        aSugg2 = funcSugg2(sFlex)
1465        if aSugg2:
1466            aSugg.add(aSugg2)
1467    if aSugg:
1468        if bVC:
1469            aSugg = list(map(lambda sSug: sSug + sSfx, aSugg))
1470        return "|".join(aSugg)
1471    return ""
1472
1473
1474def suggVerbPpas (sFlex, sPattern=None):
1475    "suggest past participles for <sFlex>"
1476    aSugg = set()
1477    for sStem in _oSpellChecker.getLemma(sFlex):
1478        tTags = conj._getTags(sStem)
1479        if tTags:
1480            if not sPattern:
1481                aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
1482                aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2"))
1483                aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3"))
1484                aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4"))
1485                aSugg.discard("")
1486            elif sPattern == ":m:s":
1487                aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
1488            elif sPattern == ":m:p":
1489                if conj._hasConjWithTags(tTags, ":PQ", ":Q2"):
1490                    aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2"))
1491                else:
1492                    aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
1493            elif sPattern == ":f:s":
1494                if conj._hasConjWithTags(tTags, ":PQ", ":Q3"):
1495                    aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3"))
1496                else:
1497                    aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
1498            elif sPattern == ":f:p":
1499                if conj._hasConjWithTags(tTags, ":PQ", ":Q4"):
1500                    aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4"))
1501                else:
1502                    aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
1503            elif sPattern == ":s":
1504                aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
1505                aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3"))
1506                aSugg.discard("")
1507            elif sPattern == ":p":
1508                aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2"))
1509                aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4"))
1510                aSugg.discard("")
1511            else:
1512                aSugg.add(conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1"))
1513    if aSugg:
1514        return "|".join(aSugg)
1515    return ""
1516
1517
1518def suggVerbTense (sFlex, sTense, sWho):
1519    "change <sFlex> to a verb according to <sTense> and <sWho>"
1520    aSugg = set()
1521    for sStem in _oSpellChecker.getLemma(sFlex):
1522        if conj.hasConj(sStem, sTense, sWho):
1523            aSugg.add(conj.getConj(sStem, sTense, sWho))
1524    if aSugg:
1525        return "|".join(aSugg)
1526    return ""
1527
1528
1529def suggVerbImpe (sFlex, bVC=False):
1530    "change <sFlex> to a verb at imperative form"
1531    if bVC:
1532        sFlex, sSfx = splitVerb(sFlex)
1533    aSugg = set()
1534    for sStem in _oSpellChecker.getLemma(sFlex):
1535        tTags = conj._getTags(sStem)
1536        if tTags:
1537            if conj._hasConjWithTags(tTags, ":E", ":2s"):
1538                aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":2s"))
1539            if conj._hasConjWithTags(tTags, ":E", ":1p"):
1540                aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":1p"))
1541            if conj._hasConjWithTags(tTags, ":E", ":2p"):
1542                aSugg.add(conj._getConjWithTags(sStem, tTags, ":E", ":2p"))
1543    if aSugg:
1544        if bVC:
1545            aSugg = list(map(lambda sSug: sSug + sSfx, aSugg))
1546        return "|".join(aSugg)
1547    return ""
1548
1549
1550def suggVerbInfi (sFlex):
1551    "returns infinitive forms of <sFlex>"
1552    return "|".join([ sStem  for sStem in _oSpellChecker.getLemma(sFlex)  if conj.isVerb(sStem) ])
1553
1554
1555_dQuiEst = { "je": ":1s", "j’": ":1s", "j’en": ":1s", "j’y": ":1s", \
1556             "tu": ":2s", "il": ":3s", "on": ":3s", "elle": ":3s", "nous": ":1p", "vous": ":2p", "ils": ":3p", "elles": ":3p" }
1557_lIndicatif = [":Ip", ":Iq", ":Is", ":If"]
1558_lSubjonctif = [":Sp", ":Sq"]
1559
1560def suggVerbMode (sFlex, cMode, sSuj):
1561    "returns other conjugations of <sFlex> acconding to <cMode> and <sSuj>"
1562    if cMode == ":I":
1563        lMode = _lIndicatif
1564    elif cMode == ":S":
1565        lMode = _lSubjonctif
1566    elif cMode.startswith((":I", ":S")):
1567        lMode = [cMode]
1568    else:
1569        return ""
1570    sWho = _dQuiEst.get(sSuj.lower(), None)
1571    if not sWho:
1572        if sSuj[0:1].islower(): # pas un pronom, ni un nom propre
1573            return ""
1574        sWho = ":3s"
1575    aSugg = set()
1576    for sStem in _oSpellChecker.getLemma(sFlex):
1577        tTags = conj._getTags(sStem)
1578        if tTags:
1579            for sTense in lMode:
1580                if conj._hasConjWithTags(tTags, sTense, sWho):
1581                    aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho))
1582    if aSugg:
1583        return "|".join(aSugg)
1584    return ""
1585
1586
1587## Nouns and adjectives
1588
1589def suggPlur (sFlex, sWordToAgree=None, bSelfSugg=False):
1590    "returns plural forms assuming sFlex is singular"
1591    if sWordToAgree:
1592        lMorph = _oSpellChecker.getMorph(sFlex)
1593        if not lMorph:
1594            return ""
1595        sGender = cr.getGender(lMorph)
1596        if sGender == ":m":
1597            return suggMasPlur(sFlex)
1598        if sGender == ":f":
1599            return suggFemPlur(sFlex)
1600    aSugg = set()
1601    if sFlex.endswith("l"):
1602        if sFlex.endswith("al") and len(sFlex) > 2 and _oSpellChecker.isValid(sFlex[:-1]+"ux"):
1603            aSugg.add(sFlex[:-1]+"ux")
1604        if sFlex.endswith("ail") and len(sFlex) > 3 and _oSpellChecker.isValid(sFlex[:-2]+"ux"):
1605            aSugg.add(sFlex[:-2]+"ux")
1606    if sFlex.endswith("L"):
1607        if sFlex.endswith("AL") and len(sFlex) > 2 and _oSpellChecker.isValid(sFlex[:-1]+"UX"):
1608            aSugg.add(sFlex[:-1]+"UX")
1609        if sFlex.endswith("AIL") and len(sFlex) > 3 and _oSpellChecker.isValid(sFlex[:-2]+"UX"):
1610            aSugg.add(sFlex[:-2]+"UX")
1611    if sFlex[-1:].islower():
1612        if _oSpellChecker.isValid(sFlex+"s"):
1613            aSugg.add(sFlex+"s")
1614        if _oSpellChecker.isValid(sFlex+"x"):
1615            aSugg.add(sFlex+"x")
1616    else:
1617        if _oSpellChecker.isValid(sFlex+"S"):
1618            aSugg.add(sFlex+"s")
1619        if _oSpellChecker.isValid(sFlex+"X"):
1620            aSugg.add(sFlex+"x")
1621    if mfsp.hasMiscPlural(sFlex):
1622        aSugg.update(mfsp.getMiscPlural(sFlex))
1623    if not aSugg and bSelfSugg and sFlex.endswith(("s", "x", "S", "X")):
1624        aSugg.add(sFlex)
1625    aSugg.discard("")
1626    if aSugg:
1627        return "|".join(aSugg)
1628    return ""
1629
1630
1631def suggSing (sFlex, bSelfSugg=True):
1632    "returns singular forms assuming sFlex is plural"
1633    aSugg = set()
1634    if sFlex.endswith("ux"):
1635        if _oSpellChecker.isValid(sFlex[:-2]+"l"):
1636            aSugg.add(sFlex[:-2]+"l")
1637        if _oSpellChecker.isValid(sFlex[:-2]+"il"):
1638            aSugg.add(sFlex[:-2]+"il")
1639    if sFlex.endswith("UX"):
1640        if _oSpellChecker.isValid(sFlex[:-2]+"L"):
1641            aSugg.add(sFlex[:-2]+"L")
1642        if _oSpellChecker.isValid(sFlex[:-2]+"IL"):
1643            aSugg.add(sFlex[:-2]+"IL")
1644    if sFlex.endswith(("s", "x", "S", "X")) and _oSpellChecker.isValid(sFlex[:-1]):
1645        aSugg.add(sFlex[:-1])
1646    if bSelfSugg and not aSugg:
1647        aSugg.add(sFlex)
1648    aSugg.discard("")
1649    if aSugg:
1650        return "|".join(aSugg)
1651    return ""
1652
1653
1654def suggMasSing (sFlex, bSuggSimil=False):
1655    "returns masculine singular forms"
1656    aSugg = set()
1657    for sMorph in _oSpellChecker.getMorph(sFlex):
1658        if not ":V" in sMorph:
1659            # not a verb
1660            if ":m" in sMorph or ":e" in sMorph:
1661                aSugg.add(suggSing(sFlex))
1662            else:
1663                sStem = cr.getLemmaOfMorph(sMorph)
1664                if mfsp.isMasForm(sStem):
1665                    aSugg.add(sStem)
1666        else:
1667            # a verb
1668            sVerb = cr.getLemmaOfMorph(sMorph)
1669            if conj.hasConj(sVerb, ":PQ", ":Q1") and conj.hasConj(sVerb, ":PQ", ":Q3"):
1670                # We also check if the verb has a feminine form.
1671                # If not, we consider it’s better to not suggest the masculine one, as it can be considered invariable.
1672                aSugg.add(conj.getConj(sVerb, ":PQ", ":Q1"))
1673    if bSuggSimil:
1674        for e in phonet.selectSimil(sFlex, ":m:[si]"):
1675            aSugg.add(e)
1676    aSugg.discard("")
1677    if aSugg:
1678        return "|".join(aSugg)
1679    return ""
1680
1681
1682def suggMasPlur (sFlex, bSuggSimil=False):
1683    "returns masculine plural forms"
1684    aSugg = set()
1685    for sMorph in _oSpellChecker.getMorph(sFlex):
1686        if not ":V" in sMorph:
1687            # not a verb
1688            if ":m" in sMorph or ":e" in sMorph:
1689                aSugg.add(suggPlur(sFlex))
1690            else:
1691                sStem = cr.getLemmaOfMorph(sMorph)
1692                if mfsp.isMasForm(sStem):
1693                    aSugg.add(suggPlur(sStem))
1694        else:
1695            # a verb
1696            sVerb = cr.getLemmaOfMorph(sMorph)
1697            if conj.hasConj(sVerb, ":PQ", ":Q2"):
1698                aSugg.add(conj.getConj(sVerb, ":PQ", ":Q2"))
1699            elif conj.hasConj(sVerb, ":PQ", ":Q1"):
1700                sSugg = conj.getConj(sVerb, ":PQ", ":Q1")
1701                # it is necessary to filter these flexions, like “succédé” or “agi” that are not masculine plural.
1702                if sSugg.endswith("s"):
1703                    aSugg.add(sSugg)
1704    if bSuggSimil:
1705        for e in phonet.selectSimil(sFlex, ":m:[pi]"):
1706            aSugg.add(e)
1707    aSugg.discard("")
1708    if aSugg:
1709        return "|".join(aSugg)
1710    return ""
1711
1712
1713def suggFemSing (sFlex, bSuggSimil=False):
1714    "returns feminine singular forms"
1715    aSugg = set()
1716    for sMorph in _oSpellChecker.getMorph(sFlex):
1717        if not ":V" in sMorph:
1718            # not a verb
1719            if ":f" in sMorph or ":e" in sMorph:
1720                aSugg.add(suggSing(sFlex))
1721            else:
1722                sStem = cr.getLemmaOfMorph(sMorph)
1723                if mfsp.isMasForm(sStem):
1724                    aSugg.update(mfsp.getFemForm(sStem, False))
1725        else:
1726            # a verb
1727            sVerb = cr.getLemmaOfMorph(sMorph)
1728            if conj.hasConj(sVerb, ":PQ", ":Q3"):
1729                aSugg.add(conj.getConj(sVerb, ":PQ", ":Q3"))
1730    if bSuggSimil:
1731        for e in phonet.selectSimil(sFlex, ":f:[si]"):
1732            aSugg.add(e)
1733    aSugg.discard("")
1734    if aSugg:
1735        return "|".join(aSugg)
1736    return ""
1737
1738
1739def suggFemPlur (sFlex, bSuggSimil=False):
1740    "returns feminine plural forms"
1741    aSugg = set()
1742    for sMorph in _oSpellChecker.getMorph(sFlex):
1743        if not ":V" in sMorph:
1744            # not a verb
1745            if ":f" in sMorph or ":e" in sMorph:
1746                aSugg.add(suggPlur(sFlex))
1747            else:
1748                sStem = cr.getLemmaOfMorph(sMorph)
1749                if mfsp.isMasForm(sStem):
1750                    aSugg.update(mfsp.getFemForm(sStem, True))
1751        else:
1752            # a verb
1753            sVerb = cr.getLemmaOfMorph(sMorph)
1754            if conj.hasConj(sVerb, ":PQ", ":Q4"):
1755                aSugg.add(conj.getConj(sVerb, ":PQ", ":Q4"))
1756    if bSuggSimil:
1757        for e in phonet.selectSimil(sFlex, ":f:[pi]"):
1758            aSugg.add(e)
1759    aSugg.discard("")
1760    if aSugg:
1761        return "|".join(aSugg)
1762    return ""
1763
1764
1765def hasFemForm (sFlex):
1766    "return True if there is a feminine form of <sFlex>"
1767    for sStem in _oSpellChecker.getLemma(sFlex):
1768        if mfsp.isMasForm(sStem) or conj.hasConj(sStem, ":PQ", ":Q3"):
1769            return True
1770    if phonet.hasSimil(sFlex, ":f"):
1771        return True
1772    return False
1773
1774
1775def hasMasForm (sFlex):
1776    "return True if there is a masculine form of <sFlex>"
1777    for sStem in _oSpellChecker.getLemma(sFlex):
1778        if mfsp.isMasForm(sStem) or conj.hasConj(sStem, ":PQ", ":Q1"):
1779            # what has a feminine form also has a masculine form
1780            return True
1781    if phonet.hasSimil(sFlex, ":m"):
1782        return True
1783    return False
1784
1785
1786def switchGender (sFlex, bPlur=None):
1787    "return feminine or masculine form(s) of <sFlex>"
1788    aSugg = set()
1789    if bPlur is None:
1790        for sMorph in _oSpellChecker.getMorph(sFlex):
1791            if ":f" in sMorph:
1792                if ":s" in sMorph:
1793                    aSugg.add(suggMasSing(sFlex))
1794                elif ":p" in sMorph:
1795                    aSugg.add(suggMasPlur(sFlex))
1796            elif ":m" in sMorph:
1797                if ":s" in sMorph:
1798                    aSugg.add(suggFemSing(sFlex))
1799                elif ":p" in sMorph:
1800                    aSugg.add(suggFemPlur(sFlex))
1801                else:
1802                    aSugg.add(suggFemSing(sFlex))
1803                    aSugg.add(suggFemPlur(sFlex))
1804    elif bPlur:
1805        for sMorph in _oSpellChecker.getMorph(sFlex):
1806            if ":f" in sMorph:
1807                aSugg.add(suggMasPlur(sFlex))
1808            elif ":m" in sMorph:
1809                aSugg.add(suggFemPlur(sFlex))
1810    else:
1811        for sMorph in _oSpellChecker.getMorph(sFlex):
1812            if ":f" in sMorph:
1813                aSugg.add(suggMasSing(sFlex))
1814            elif ":m" in sMorph:
1815                aSugg.add(suggFemSing(sFlex))
1816    if aSugg:
1817        return "|".join(aSugg)
1818    return ""
1819
1820
1821def switchPlural (sFlex):
1822    "return plural or singular form(s) of <sFlex>"
1823    aSugg = set()
1824    for sMorph in _oSpellChecker.getMorph(sFlex):
1825        if ":s" in sMorph:
1826            aSugg.add(suggPlur(sFlex))
1827        elif ":p" in sMorph:
1828            aSugg.add(suggSing(sFlex))
1829    if aSugg:
1830        return "|".join(aSugg)
1831    return ""
1832
1833
1834def hasSimil (sWord, sPattern=None):
1835    "return True if there is words phonetically similar to <sWord> (according to <sPattern> if required)"
1836    return phonet.hasSimil(sWord, sPattern)
1837
1838
1839def suggSimil (sWord, sPattern=None, bSubst=False, bVC=False):
1840    "return list of words phonetically similar to sWord and whom POS is matching sPattern"
1841    if bVC:
1842        sWord, sSfx = splitVerb(sWord)
1843    aSugg = phonet.selectSimil(sWord, sPattern)
1844    if not aSugg or not bSubst:
1845        for sMorph in _oSpellChecker.getMorph(sWord):
1846            aSugg.update(conj.getSimil(sWord, sMorph, bSubst))
1847            break
1848    if aSugg:
1849        if bVC:
1850            aSugg = list(map(lambda sSug: sSug + sSfx, aSugg))
1851        return "|".join(aSugg)
1852    return ""
1853
1854
1855def suggCeOrCet (sWord):
1856    "suggest “ce” or “cet” or both according to the first letter of <sWord>"
1857    if re.match("(?i)[aeéèêiouyâîï]", sWord):
1858        return "cet"
1859    if sWord[0:1] in "hH":
1860        return "ce|cet"
1861    return "ce"
1862
1863
1864def suggLesLa (sWord):
1865    "suggest “les” or “la” according to <sWord>"
1866    if any( ":p" in sMorph  for sMorph in _oSpellChecker.getMorph(sWord) ):
1867        return "les|la"
1868    return "la"
1869
1870
1871_zBinary = re.compile("^[01]+$")
1872
1873def formatNumber (sNumber):
1874    "add spaces or hyphens to big numbers"
1875    nLen = len(sNumber)
1876    if nLen < 4:
1877        return sNumber
1878    sRes = ""
1879    if "," not in sNumber:
1880        # nombre entier
1881        sRes = _formatNumber(sNumber, 3)
1882        # binaire
1883        if _zBinary.search(sNumber):
1884            sRes += "|" + _formatNumber(sNumber, 4)
1885        # numéros de téléphone
1886        if nLen == 10:
1887            if sNumber.startswith("0"):
1888                sRes += "|" + _formatNumber(sNumber, 2)                                                                 # téléphone français
1889                if sNumber[1] == "4" and (sNumber[2]=="7" or sNumber[2]=="8" or sNumber[2]=="9"):
1890                    sRes += "|" + sNumber[0:4] + " " + sNumber[4:6] + " " + sNumber[6:8] + " " + sNumber[8:]            # mobile belge
1891                sRes += "|" + sNumber[0:3] + " " + sNumber[3:6] + " " + sNumber[6:8] + " " + sNumber[8:]                # téléphone suisse
1892            sRes += "|" + sNumber[0:4] + " " + sNumber[4:7] + "-" + sNumber[7:]                                         # téléphone canadien ou américain
1893        elif nLen == 9 and sNumber.startswith("0"):
1894            sRes += "|" + sNumber[0:3] + " " + sNumber[3:5] + " " + sNumber[5:7] + " " + sNumber[7:9]                   # fixe belge 1
1895            sRes += "|" + sNumber[0:2] + " " + sNumber[2:5] + " " + sNumber[5:7] + " " + sNumber[7:9]                   # fixe belge 2
1896    else:
1897        # Nombre réel
1898        sInt, sFloat = sNumber.split(",", 1)
1899        sRes = _formatNumber(sInt, 3) + "," + sFloat
1900    return sRes
1901
1902def _formatNumber (sNumber, nGroup=3):
1903    sRes = ""
1904    nEnd = len(sNumber)
1905    while nEnd > 0:
1906        nStart = max(nEnd-nGroup, 0)
1907        sRes = sNumber[nStart:nEnd] + " " + sRes  if sRes  else sNumber[nStart:nEnd]
1908        nEnd = nEnd - nGroup
1909    return sRes
1910
1911
1912def formatNF (s):
1913    "typography: format NF reference (norme française)"
1914    try:
1915        m = re.match("NF[  -]?(C|E|P|Q|S|X|Z|EN(?:[  -]ISO|))[  -]?([0-9]+(?:[/‑-][0-9]+|))", s)
1916        if not m:
1917            return ""
1918        return "NF " + m.group(1).upper().replace(" ", " ").replace("-", " ") + " " + m.group(2).replace("/", "‑").replace("-", "‑")
1919    except (re.error, IndexError):
1920        traceback.print_exc()
1921        return "# erreur #"
1922
1923
1924def undoLigature (c):
1925    "typography: split ligature character <c> in several chars"
1926    if c == "fi":
1927        return "fi"
1928    if c == "fl":
1929        return "fl"
1930    if c == "ff":
1931        return "ff"
1932    if c == "ffi":
1933        return "ffi"
1934    if c == "ffl":
1935        return "ffl"
1936    if c == "ſt":
1937        return "ft"
1938    if c == "st":
1939        return "st"
1940    return "_"
1941
1942
1943
1944
1945_xNormalizedCharsForInclusiveWriting = str.maketrans({
1946    '(': '_',  ')': '_',
1947    '.': '_',  '·': '_',  '•': '_',
1948    '–': '_',  '—': '_',
1949    '/': '_'
1950})
1951
1952
1953def normalizeInclusiveWriting (sToken):
1954    "typography: replace word separators used in inclusive writing by underscore (_)"
1955    return sToken.translate(_xNormalizedCharsForInclusiveWriting)
1956
1957
1958
1959#### CALLABLES FOR REGEX RULES (generated code)
1960
1961def _c_esp_avant_après_tiret_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1962    return not m.group(1).endswith("-t") and m.group(3) != "t" and not (m.group(2) == " -" and m.group(3).isdigit())
1963def _c_esp_avant_après_tiret_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1964    return (m.group(3) == "je" and morph(dTokenPos, (m.start(1), m.group(1)), ":1s")) or (m.group(3) == "tu" and morph(dTokenPos, (m.start(1), m.group(1)), ":2s")) or (m.group(3) == "il" and morph(dTokenPos, (m.start(1), m.group(1)), ":3s")) or (m.group(3) == "elle" and morph(dTokenPos, (m.start(1), m.group(1)), ":3s")) or (m.group(3) == "on" and morph(dTokenPos, (m.start(1), m.group(1)), ":3s")) or (m.group(3) == "nous" and morph(dTokenPos, (m.start(1), m.group(1)), ":1p")) or (m.group(3) == "vous" and morph(dTokenPos, (m.start(1), m.group(1)), ":2P")) or (m.group(3) == "ils" and morph(dTokenPos, (m.start(1), m.group(1)), ":3p")) or (m.group(3) == "elles" and morph(dTokenPos, (m.start(1), m.group(1)), ":3p"))
1965def _c_esp_avant_après_tiret_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1966    return not bCondMemo
1967def _c_typo_parenthèse_fermante_collée_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1968    return not look(sSentence[:m.start()], "\\([rR][eéEÉ]$")
1969def _p_p_URL2_2 (sSentence, m):
1970    return m.group(2).capitalize()
1971def _p_p_sigle1_1 (sSentence, m):
1972    return m.group(1).replace(".", "")+"."
1973def _c_p_sigle2_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1974    return not re.search("(?i)^(?:i\\.e\\.|s\\.[tv]\\.p\\.|e\\.g\\.|a\\.k\\.a\\.|c\\.q\\.f\\.d\\.|b\\.a\\.|n\\.b\\.)$", m.group(0))
1975def _c_p_sigle2_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1976    return m.group(0).__len__() == 4
1977def _s_p_sigle2_2 (sSentence, m):
1978    return m.group(0).replace(".", "").upper() + "|" + m.group(0)[0:2] + " " + m.group(0)[2:4]
1979def _c_p_sigle2_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1980    return not bCondMemo
1981def _s_p_sigle2_3 (sSentence, m):
1982    return m.group(0).replace(".", "").upper()
1983def _c_p_sigle2_4 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1984    return m.group(0) != "b.a."
1985def _p_p_sigle2_4 (sSentence, m):
1986    return m.group(0).replace(".", "_")
1987def _p_p_sigle3_1 (sSentence, m):
1988    return m.group(0).replace(".", "").replace("-","")
1989def _c_p_prénom_lettre_point_patronyme_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1990    return morph(dTokenPos, (m.start(1), m.group(1)), ":M[12]") and (morph(dTokenPos, (m.start(3), m.group(3)), ":(?:M[12]|V)") or not _oSpellChecker.isValid(m.group(3)))
1991def _c_p_prénom_lettre_point_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1992    return morph(dTokenPos, (m.start(1), m.group(1)), ":M[12]") and look(sSentence[m.end():], "^\\W+[a-zéèêîïâ]")
1993def _p_p_patronyme_composé_avec_le_la_les_1 (sSentence, m):
1994    return m.group(0).replace(" ", "_")
1995def _c_p_mot_entre_crochets_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1996    return m.group(1).isdigit()
1997def _c_p_mot_entre_crochets_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
1998    return not bCondMemo and morph(dTokenPos, (m.start(1), m.group(1)), ":G")
1999def _p_p_mot_entre_crochets_2 (sSentence, m):
2000    return " " + m.group(1) + " "
2001def _c_p_mot_entre_crochets_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2002    return not bCondMemo and m.group(1).isalpha()
2003def _c_typo_apostrophe_incorrecte_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2004    return not (m.group(2).__len__() == 1  and  m.group(1).endswith("′ "))
2005def _s_typo_apostrophe_manquante_prudence1_1 (sSentence, m):
2006    return m.group(1)[:-1]+"’"
2007def _c_typo_apostrophe_manquante_prudence2_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2008    return not option("mapos") and (m.group(2) == "<" or morph(dTokenPos, (m.start(2), m.group(2)), ":V"))
2009def _s_typo_apostrophe_manquante_prudence2_1 (sSentence, m):
2010    return m.group(1)[:-1]+"’"
2011def _c_typo_apostrophe_manquante_audace1_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2012    return option("mapos") and not look(sSentence[:m.start()], "(?i)(?:lettre|caractère|glyphe|dimension|variable|fonction|point) *$")
2013def _s_typo_apostrophe_manquante_audace1_1 (sSentence, m):
2014    return m.group(1)[:-1]+"’"
2015def _c_typo_guillemets_typographiques_doubles_ouvrants_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2016    return not look(sSentence[:m.start()], "[a-zA-Zéïîùàâäôö]$")
2017def _c_eepi_écriture_épicène_tous_toutes_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2018    return option("eepi")
2019def _p_eepi_écriture_épicène_tous_toutes_2 (sSentence, m):
2020    return normalizeInclusiveWriting(m.group(0))
2021def _c_eepi_écriture_épicène_ceux_celles_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2022    return option("eepi")
2023def _p_eepi_écriture_épicène_ceux_celles_2 (sSentence, m):
2024    return normalizeInclusiveWriting(m.group(0))
2025def _c_eepi_écriture_épicène_pluriel_eur_divers_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2026    return option("eepi") and m.group(2) != "se"
2027def _c_eepi_écriture_épicène_pluriel_eur_divers_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2028    return option("eepi") and m.group(2) == "se"
2029def _p_eepi_écriture_épicène_pluriel_eur_divers_3 (sSentence, m):
2030    return normalizeInclusiveWriting(m.group(0))
2031def _c_eepi_écriture_épicène_pluriel_eux_euses_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2032    return option("eepi")
2033def _p_eepi_écriture_épicène_pluriel_eux_euses_2 (sSentence, m):
2034    return normalizeInclusiveWriting(m.group(0))
2035def _c_eepi_écriture_épicène_pluriel_aux_ales_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2036    return option("eepi")
2037def _p_eepi_écriture_épicène_pluriel_aux_ales_2 (sSentence, m):
2038    return normalizeInclusiveWriting(m.group(0))
2039def _c_eepi_écriture_épicène_pluriel_er_ère_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2040    return option("eepi")
2041def _p_eepi_écriture_épicène_pluriel_er_ère_2 (sSentence, m):
2042    return normalizeInclusiveWriting(m.group(0))
2043def _c_eepi_écriture_épicène_pluriel_if_ive_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2044    return option("eepi")
2045def _p_eepi_écriture_épicène_pluriel_if_ive_2 (sSentence, m):
2046    return normalizeInclusiveWriting(m.group(0))
2047def _c_eepi_écriture_épicène_pluriel_e_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2048    return not (m.group(0).endswith(".Les") or m.group(0).endswith(".Tes"))
2049def _p_eepi_écriture_épicène_pluriel_e_2 (sSentence, m):
2050    return normalizeInclusiveWriting(m.group(0))
2051def _c_eepi_écriture_épicène_pluriel_e_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2052    return option("eepi") and not m.group(0).endswith("les") and not m.group(0).endswith("LES") and not re.search("(?i)·[ntlf]?e·s$", m.group(0))
2053def _c_eepi_écriture_épicène_pluriel_e_4 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2054    return m.group(1).endswith("s") or m.group(1).endswith("S")
2055def _c_eepi_écriture_épicène_pluriel_e_5 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2056    return not bCondMemo
2057def _c_eepi_écriture_épicène_singulier_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2058    return not (m.group(0).endswith(".Le") or m.group(0).endswith(".Ne") or m.group(0).endswith(".De")) and not ((m.group(0).endswith("-le") or m.group(0).endswith("-Le") or m.group(0).endswith("-LE")) and not (m.group(1).endswith("l") or m.group(1).endswith("L")))
2059def _p_eepi_écriture_épicène_singulier_2 (sSentence, m):
2060    return normalizeInclusiveWriting(m.group(0))
2061def _c_eepi_écriture_épicène_singulier_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2062    return option("eepi") and (m.group(1) == "un" or m.group(1) == "Un" or m.group(1) == "UN")
2063def _c_eepi_écriture_épicène_singulier_4 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2064    return not bCondMemo and option("eepi") and not re.search("(?i)·[ntl]?e$", m.group(2))
2065def _s_eepi_écriture_épicène_singulier_4 (sSentence, m):
2066    return m.group(1)+"·"+m.group(2)[1:].rstrip(")")
2067def _p_typo_écriture_invariable_1 (sSentence, m):
2068    return normalizeInclusiveWriting(m.group(0))
2069def _c_typo_écriture_invariable_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2070    return option("typo") and option("eepi") and not m.group(0).endswith("·s") and not (m.group(0).endswith("/s") and morph(dTokenPos, (m.start(1), m.group(1)), ";S"))
2071def _c_majuscule_après_point_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2072    return not re.search("(?i)^(?:etc|[A-Z]|chap|cf|fig|hab|litt|circ|coll|r[eé]f|étym|suppl|bibl|bibliogr|cit|op|vol|déc|nov|oct|janv|juil|avr|sept)$", m.group(1)) and morph(dTokenPos, (m.start(1), m.group(1)), ":") and morph(dTokenPos, (m.start(2), m.group(2)), ":")
2073def _s_majuscule_après_point_1 (sSentence, m):
2074    return m.group(2).capitalize()
2075def _c_majuscule_début_paragraphe_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2076    return look(sSentence[m.end():], "\\w\\w[.] +\\w+")
2077def _s_majuscule_début_paragraphe_1 (sSentence, m):
2078    return m.group(1).capitalize()
2079def _c_poncfin_règle1_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2080    return look(sSentence[:m.start()], "\\w+(?:\\.|[   ][!?]) +(?:[A-ZÉÈÎ]\\w+|[ÀÔ])")
2081def _c_virgule_manquante_avant_car_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2082    return not morph(dTokenPos, (m.start(1), m.group(1)), ":[DR]")
2083def _c_virgule_manquante_avant_mais_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2084    return not morph(dTokenPos, (m.start(1), m.group(1)), ">(?:[mtscl]es|[nv]os|quels)/")
2085def _c_virgule_manquante_avant_donc_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2086    return not morph(dTokenPos, (m.start(1), m.group(1)), ":[VG]")
2087def _c_virg_virgule_après_point_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2088    return not re.search("^(?:etc|[A-Z]|fig|hab|litt|circ|coll|ref|étym|suppl|bibl|bibliogr|cit|vol|déc|nov|oct|janv|juil|avr|sept|pp?)$", m.group(1))
2089def _c_typo_espace_manquant_après1_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2090    return not m.group(1).isdigit()
2091def _c_typo_espace_manquant_après3_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2092    return (m.group(1).__len__() > 1 and not m.group(1)[0:1].isdigit() and _oSpellChecker.isValid(m.group(1))) or look(sSentence[m.end():], "^’")
2093def _c_typo_espace_manquant_après4_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2094    return m.group(1)[0:1].isupper() or m.group(1).__len__() > 5 or not m.group(1).isalpha() or (m.group(1).__len__() > 1 and _oSpellChecker.isValid(m.group(1)))
2095def _s_typo_point_après_titre_1 (sSentence, m):
2096    return m.group(1)[0:-1]
2097def _c_typo_point_après_numéro_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2098    return m.group(1)[1:3] == "os"
2099def _c_typo_point_après_numéro_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2100    return not bCondMemo
2101def _c_typo_points_suspension1_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2102    return not look(sSentence[:m.start()], "(?i)etc$")
2103def _s_typo_points_suspension2_1 (sSentence, m):
2104    return m.group(0).replace("...", "…").rstrip(".")
2105def _s_typo_virgules_points_1 (sSentence, m):
2106    return m.group(0).replace(",", ".").replace("...", "…")
2107def _s_typo_ponctuation_superflue1_1 (sSentence, m):
2108    return ",|" + m.group(1)
2109def _s_typo_ponctuation_superflue2_1 (sSentence, m):
2110    return ";|" + m.group(1)
2111def _s_typo_ponctuation_superflue3_1 (sSentence, m):
2112    return ":|" + m.group(0)[1]
2113def _c_nbsp_ajout_avant_double_ponctuation_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2114    return sCountry != "CA"
2115def _s_nbsp_ajout_avant_double_ponctuation_1 (sSentence, m):
2116    return " "+m.group(0)
2117def _c_unit_nbsp_avant_unités1_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2118    return option("num")
2119def _s_unit_nbsp_avant_unités1_1 (sSentence, m):
2120    return formatNumber(m.group(2)) + " " + m.group(3)
2121def _c_unit_nbsp_avant_unités1_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2122    return not bCondMemo
2123def _c_unit_nbsp_avant_unités2_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2124    return morph(dTokenPos, (m.start(3), m.group(3)), ";S", ":[VCR]") or mbUnit(m.group(3)) or not _oSpellChecker.isValid(m.group(3))
2125def _c_unit_nbsp_avant_unités2_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2126    return option("num")
2127def _s_unit_nbsp_avant_unités2_2 (sSentence, m):
2128    return formatNumber(m.group(2)) + " " + m.group(3)
2129def _c_unit_nbsp_avant_unités2_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2130    return not bCondMemo
2131def _c_unit_nbsp_avant_unités3_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2132    return (m.group(2).__len__() > 4 and not _oSpellChecker.isValid(m.group(3))) or morph(dTokenPos, (m.start(3), m.group(3)), ";S", ":[VCR]") or mbUnit(m.group(3))
2133def _c_unit_nbsp_avant_unités3_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2134    return option("num")
2135def _s_unit_nbsp_avant_unités3_2 (sSentence, m):
2136    return formatNumber(m.group(2)) + " " + m.group(3)
2137def _c_unit_nbsp_avant_unités3_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2138    return not bCondMemo
2139def _s_typo_math_1 (sSentence, m):
2140    return m.group(0).replace(" ", "(")+")|"+m.group(0).replace(" ", " ")
2141def _c_typo_signe_moins_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2142    return not look(sSentence[:m.start()], "\\w$")
2143def _c_typo_signe_multiplication_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2144    return not m.group(0).startswith("0x")
2145def _s_ligatures_typographiques_1 (sSentence, m):
2146    return undoLigature(m.group(0))
2147def _c_nf_norme_française_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2148    return not re.search("^NF (?:C|E|P|Q|S|X|Z|EN(?: ISO|)) [0-9]+(?:‑[0-9]+|)", m.group(0))
2149def _s_nf_norme_française_1 (sSentence, m):
2150    return formatNF(m.group(0))
2151def _c_typo_cohérence_guillemets_chevrons_ouvrants_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2152    return not look(sSentence[:m.start()], "\\w$")
2153def _c_typo_cohérence_guillemets_chevrons_ouvrants_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2154    return not look(sSentence[m.end():], "^\\w")
2155def _c_typo_cohérence_guillemets_chevrons_fermants_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2156    return not look(sSentence[:m.start()], "\\w$")
2157def _c_typo_cohérence_guillemets_chevrons_fermants_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2158    return not look(sSentence[m.end():], "^\\w")
2159def _c_typo_cohérence_guillemets_doubles_ouvrants_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2160    return not look(sSentence[:m.start()], "\\w$")
2161def _c_typo_cohérence_guillemets_doubles_fermants_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2162    return not look(sSentence[:m.start()], "\\w$")
2163def _c_typo_cohérence_guillemets_doubles_fermants_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2164    return not look(sSentence[m.end():], "^\\w")
2165def _c_typo_guillemet_simple_ouvrant_non_fermé_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2166    return look(sSentence[:m.start()], " $") or look(sSentence[:m.start()], "^ *$|, *$")
2167def _c_typo_guillemet_simple_fermant_non_ouvert_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2168    return look(sSentence[m.end():], "^ ") or look(sSentence[m.end():], "^ *$|^,")
2169def _c_num_grand_nombre_soudé_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2170    return not look(sSentence[:m.start()], "NF[  -]?(C|E|P|Q|X|Z|EN(?:[  -]ISO|)) *$")
2171def _c_num_grand_nombre_soudé_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2172    return m.group(0).__len__() > 4
2173def _s_num_grand_nombre_soudé_2 (sSentence, m):
2174    return formatNumber(m.group(0))
2175def _c_num_grand_nombre_soudé_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2176    return not bCondMemo and ((look(sSentence[m.end():], "^(?:,[0-9]+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹])") and not (re.search("^[01]+$", m.group(0)) and look(sSentence[m.end():], "^,[01]+\\b"))) or look(sSentence[m.end():], "^[   ]*(?:[kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|°C|℃)(?![\\w’'])"))
2177def _s_num_grand_nombre_soudé_3 (sSentence, m):
2178    return formatNumber(m.group(0))
2179def _c_num_nombre_quatre_chiffres_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2180    return morph(dTokenPos, (m.start(2), m.group(2)), ";S", ":[VCR]") or mbUnit(m.group(2))
2181def _s_num_nombre_quatre_chiffres_1 (sSentence, m):
2182    return formatNumber(m.group(1))
2183def _c_num_grand_nombre_avec_points_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2184    return option("num")
2185def _s_num_grand_nombre_avec_points_1 (sSentence, m):
2186    return m.group(0).replace(".", " ")
2187def _p_num_grand_nombre_avec_points_2 (sSentence, m):
2188    return m.group(0).replace(".", "_")
2189def _c_num_grand_nombre_avec_espaces_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2190    return option("num")
2191def _s_num_grand_nombre_avec_espaces_1 (sSentence, m):
2192    return m.group(0).replace(" ", " ")
2193def _p_num_grand_nombre_avec_espaces_2 (sSentence, m):
2194    return m.group(0).replace(" ", "_")
2195def _c_date_nombres_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2196    return m.group(2) == m.group(4) and not checkDate(m.group(1), m.group(3), m.group(5)) and not look(sSentence[:m.start()], "(?i)\\b(?:version|article|référence)s? +$")
2197def _c_redondances_paragraphe_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2198    return not morph(dTokenPos, (m.start(1), m.group(1)), ":(?:G|V0)|>(?:t(?:antôt|emps|rès)|loin|souvent|parfois|quelquefois|côte|petit|même)/") and not m.group(1)[0].isupper()
2199def _c_redondances_paragraphe_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2200    return bCondMemo
2201def _c_ocr_point_interrogation_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2202    return look(sSentence0[m.end():], "^(?: +[A-ZÉÈÂ(]|…|[.][.]+| *$)")
2203def _c_ocr_exclamation2_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2204    return not morph(dTokenPos, nextword1(sSentence, m.end()), ";S") and not morph(dTokenPos, prevword1(sSentence, m.start()), ":R")
2205def _c_ocr_nombres_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2206    return m.group(0) == "II"
2207def _c_ocr_nombres_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2208    return not bCondMemo and not m.group(0).isdigit()
2209def _s_ocr_nombres_2 (sSentence, m):
2210    return m.group(0).replace("O", "0").replace("I", "1")
2211def _s_ocr_casse_pronom_vconj_1 (sSentence, m):
2212    return m.group(1).lower()
2213def _c_mots_composés_inconnus_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2214    return not _oSpellChecker.isValid(m.group(0)) and not re.search("(?i)-(?:je|tu|on|nous|vous|ie?ls?|elles?|ce|là|ci|les?|la|leur|une?s|moi|toi|en|y)$", m.group(0))
2215def _c_ocr_caractères_rares_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2216    return m.group(0) != "<" and m.group(0) != ">"
2217def _c_ocr_le_la_les_regex_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2218    return m.group(0).endswith("e")
2219def _c_ocr_le_la_les_regex_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2220    return not bCondMemo and m.group(0).endswith("a")
2221def _c_ocr_le_la_les_regex_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2222    return not bCondMemo and m.group(0).endswith("à")
2223def _c_ocr_le_la_les_regex_4 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2224    return not bCondMemo
2225def _c_conf_1e_1a_1es_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2226    return m.group(0).endswith("e") and (morph(dTokenPos, nextword1(sSentence, m.end()), ":(?:N.*:[me]:[si]|V)", ":G") or morph(dTokenPos, prevword1(sSentence, m.start()), ">ne/"))
2227def _c_conf_1e_1a_1es_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2228    return m.group(0).endswith("a") and (morph(dTokenPos, nextword1(sSentence, m.end()), ":(?:N.*:[fe]:[si]|V)", ":G") or morph(dTokenPos, prevword1(sSentence, m.start()), ">ne/"))
2229def _c_conf_1e_1a_1es_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2230    return m.group(0).endswith("es") and (morph(dTokenPos, nextword1(sSentence, m.end()), ":(?:N.*:[pi]|V)", ":G") or morph(dTokenPos, prevword1(sSentence, m.start()), ">ne/"))
2231def _c_ocr_il_regex_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2232    return m.group(0).endswith("s")
2233def _c_ocr_il_regex_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2234    return not bCondMemo
2235def _p_p_trait_union_conditionnel1_1 (sSentence, m):
2236    return m.group(0).replace("‑", "")
2237def _p_p_trait_union_conditionnel2_1 (sSentence, m):
2238    return m.group(0).replace("‑", "")
2239def _c_doublon_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2240    return not re.search("(?i)^([nv]ous|faire|en|la|lui|donnant|œuvre|h[éoa]|hou|olé|joli|Bora|couvent|dément|sapiens|très|vroum|[0-9]+)$", m.group(1)) and not (re.search("^(?:est|une?)$", m.group(1)) and look(sSentence[:m.start()], "[’']$")) and not (m.group(1) == "mieux" and look(sSentence[:m.start()], "(?i)qui +$"))
2241def _c_num_lettre_O_zéro1_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2242    return not option("ocr")
2243def _s_num_lettre_O_zéro1_1 (sSentence, m):
2244    return m.group(0).replace("O", "0")
2245def _c_num_lettre_O_zéro2_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2246    return not option("ocr")
2247def _s_num_lettre_O_zéro2_1 (sSentence, m):
2248    return m.group(0).replace("O", "0")
2249def _c_d_eepi_écriture_épicène_pluriel_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2250    return morph(dTokenPos, (m.start(1), m.group(1)), ":[NAQ]", ":G")
2251def _d_d_eepi_écriture_épicène_pluriel_1 (sSentence, m, dTokenPos):
2252    return define(dTokenPos, m.start(1), ":N:A:Q:e:p")
2253def _c_d_eepi_écriture_épicène_singulier_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2254    return morph(dTokenPos, (m.start(1), m.group(1)), ":[NAQ]")
2255def _d_d_eepi_écriture_épicène_singulier_1 (sSentence, m, dTokenPos):
2256    return define(dTokenPos, m.start(1), ":N:A:Q:e:s")
2257def _c_p_références_aux_notes_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2258    return not morph(dTokenPos, (m.start(0), m.group(0)), ":") and morph(dTokenPos, (m.start(1), m.group(1)), ":")
2259def _c_tu_trait_union_douteux_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2260    return _oSpellChecker.isValid(m.group(1)+"-"+m.group(2)) and analyse(m.group(1)+"-"+m.group(2), ":")
2261def _c_tu_t_euphonique_incorrect_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2262    return re.search("(?i)^(?:ie?ls|elles|tu)$", m.group(2))
2263def _c_tu_t_euphonique_incorrect_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2264    return not bCondMemo and m.group(1) != "-t-" and m.group(1) != "-T-"
2265def _c_tu_t_euphonique_incorrect_3 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2266    return m.group(1) != "-t-"
2267def _c_tu_t_euphonique_superflu_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2268    return m.group(1) != "-t-"
2269def _c_redondances_phrase_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2270    return not morph(dTokenPos, (m.start(1), m.group(1)), ":(?:G|V0)|>même/")
2271def _c_redondances_phrase_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2272    return bCondMemo
2273def _c_mc_mot_composé_1 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2274    return not m.group(1).isdigit() and not m.group(2).isdigit() and not morph(dTokenPos, (m.start(0), m.group(0)), ":") and not morph(dTokenPos, (m.start(2), m.group(2)), ":G") and _oSpellChecker.isValid(m.group(1)+m.group(2))
2275def _c_mc_mot_composé_2 (sSentence, sSentence0, m, dTokenPos, sCountry, bCondMemo):
2276    return m.group(2) != "là" and not re.search("(?i)^(?:ex|mi|quasi|semi|non|demi|pro|anti|multi|pseudo|proto|extra)$", m.group(1)) and not m.group(1).isdigit() and not m.group(2).isdigit() and not morph(dTokenPos, (m.start(2), m.group(2)), ":G") and not morph(dTokenPos, (m.start(0), m.group(0)), ":") and not _oSpellChecker.isValid(m.group(1)+m.group(2))
2277
2278
2279
2280#### CALLABLES FOR GRAPH RULES (generated code)
2281
2282def _g_cond_g0_1 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2283    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 1) and g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 0, 1)
2284def _g_cond_g0_2 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2285    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 1)
2286def _g_cond_g0_3 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2287    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 0, 1)
2288def _g_cond_g0_4 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2289    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 0) and g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 0, 0)
2290def _g_cond_g0_5 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2291    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 0)
2292def _g_cond_g0_6 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2293    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 0, 0)
2294def _g_cond_g0_7 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2295    return not g_morph(lToken[nTokenOffset], ":1s")
2296def _g_da_g0_1 (lToken, nTokenOffset, nLastToken):
2297    return g_select(lToken[nTokenOffset+2], ":Ov")
2298def _g_cond_g0_8 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2299    return not g_morph(lToken[nTokenOffset], ":(?:2s|V0)")
2300def _g_cond_g0_9 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2301    return not g_morph(lToken[nTokenOffset], ":3s")
2302def _g_cond_g0_10 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2303    return not g_morph(lToken[nTokenOffset], ":(?:3s|R)")
2304def _g_cond_g0_11 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2305    return not g_morph(lToken[nTokenOffset], ":(?:1p|R)")
2306def _g_cond_g0_12 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2307    return not g_morph(lToken[nTokenOffset], ":(?:2p|R)")
2308def _g_cond_g0_13 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2309    return not g_morph(lToken[nTokenOffset], ":3p")
2310def _g_cond_g0_14 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2311    return not g_morph(lToken[nTokenOffset], ":(?:3p|R)")
2312def _g_cond_g0_15 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2313    return not g_value(lToken[nTokenOffset], "|ne|n’|me|m’|te|t’|se|s’|")
2314def _g_da_g0_2 (lToken, nTokenOffset, nLastToken):
2315    return g_select(lToken[nTokenOffset+1], ":D")
2316def _g_da_g0_3 (lToken, nTokenOffset, nLastToken):
2317    return g_exclude(lToken[nTokenOffset+2], ":Os")
2318def _g_cond_g0_16 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2319    return not g_morph(lToken[nTokenOffset+2], ":1p")
2320def _g_da_g0_4 (lToken, nTokenOffset, nLastToken):
2321    return g_exclude(lToken[nTokenOffset+1], ":Os")
2322def _g_cond_g0_17 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2323    return not g_morph(lToken[nTokenOffset+2], ":2p")
2324def _g_da_g0_5 (lToken, nTokenOffset, nLastToken):
2325    return g_select(lToken[nLastToken-1+1], ":V")
2326def _g_da_g0_6 (lToken, nTokenOffset, nLastToken):
2327    return g_select(lToken[nTokenOffset+3], ":(?:[123][sp]|P|Y)")
2328def _g_da_g0_7 (lToken, nTokenOffset, nLastToken):
2329    return g_select(lToken[nTokenOffset+2], ":(?:[123][sp]|P|Y)")
2330def _g_da_g0_8 (lToken, nTokenOffset, nLastToken):
2331    return g_select(lToken[nLastToken-1+1], ":[123][sp]")
2332def _g_cond_g0_18 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2333    return not g_morph(lToken[nTokenOffset], ":V0")
2334def _g_cond_g0_19 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2335    return not g_morph(lToken[nTokenOffset], ":R")
2336def _g_cond_g0_20 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2337    return lToken[nTokenOffset+2]["sValue"].islower() and g_morph(lToken[nTokenOffset], ":Cs|<start>")
2338def _g_da_g0_9 (lToken, nTokenOffset, nLastToken):
2339    return g_select(lToken[nTokenOffset+2], ":[123][sp]")
2340def _g_da_g0_10 (lToken, nTokenOffset, nLastToken):
2341    return g_select(lToken[nTokenOffset+2], ":M")
2342def _g_da_g0_11 (lToken, nTokenOffset, nLastToken):
2343    return g_exclude(lToken[nLastToken-1+1], ":E")
2344def _g_da_g0_12 (lToken, nTokenOffset, nLastToken):
2345    return g_exclude(lToken[nTokenOffset+4], ":N")
2346def _g_da_g0_13 (lToken, nTokenOffset, nLastToken):
2347    return g_exclude(lToken[nTokenOffset+2], ":N")
2348def _g_da_g0_14 (lToken, nTokenOffset, nLastToken):
2349    return g_select(lToken[nLastToken-1+1], ":Q")
2350def _g_cond_g0_21 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2351    return not g_value(lToken[nTokenOffset], "|l’|un|cet|quel|")
2352def _g_da_g0_15 (lToken, nTokenOffset, nLastToken):
2353    return g_exclude(lToken[nTokenOffset+1], ":N")
2354def _g_cond_g0_22 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2355    return g_morph(lToken[nTokenOffset], ":D")
2356def _g_da_g0_16 (lToken, nTokenOffset, nLastToken):
2357    return (lToken[nTokenOffset+1]["sValue"], ":W")
2358def _g_cond_g0_23 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2359    return not g_morph(lToken[nTokenOffset], ":D.*:[me]")
2360def _g_cond_g0_24 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2361    return not g_morph(lToken[nTokenOffset], ":D.*:p|>[a-z]+ième/")
2362def _g_da_g0_17 (lToken, nTokenOffset, nLastToken):
2363    return g_select(lToken[nTokenOffset+1], ":R")
2364def _g_da_g0_18 (lToken, nTokenOffset, nLastToken):
2365    return g_exclude(lToken[nTokenOffset+2], ":D")
2366def _g_da_g0_19 (lToken, nTokenOffset, nLastToken):
2367    return g_select(lToken[nTokenOffset+2], ":N")
2368def _g_da_g0_20 (lToken, nTokenOffset, nLastToken):
2369    return g_select(lToken[nTokenOffset+2], ":A")
2370def _g_cond_g0_25 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2371    return not g_value(lToken[nTokenOffset], "|je|ne|n’|le|la|l’|les|lui|nous|vous|leur|")
2372def _g_da_g0_21 (lToken, nTokenOffset, nLastToken):
2373    return g_exclude(lToken[nTokenOffset+1], ":V")
2374def _g_da_g0_22 (lToken, nTokenOffset, nLastToken):
2375    return g_exclude(lToken[nTokenOffset+1], ":D")
2376def _g_da_g0_23 (lToken, nTokenOffset, nLastToken):
2377    return g_exclude(lToken[nTokenOffset+1], ":G")
2378def _g_cond_g0_26 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2379    return not g_value(lToken[nLastToken+1], "|que|qu’|")
2380def _g_cond_g0_27 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2381    return not g_value(lToken[nTokenOffset], "|n’|j’|tu|t’|m’|s’|")
2382def _g_cond_g0_28 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2383    return bCondMemo
2384def _g_da_g0_24 (lToken, nTokenOffset, nLastToken):
2385    return g_define(lToken[nTokenOffset+1], ":G:R")
2386def _g_da_g0_25 (lToken, nTokenOffset, nLastToken):
2387    return g_define(lToken[nTokenOffset+2], ":N:m:s")
2388def _g_cond_g0_29 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2389    return not g_morph(lToken[nTokenOffset], ">entre/|:D")
2390def _g_da_g0_26 (lToken, nTokenOffset, nLastToken):
2391    return g_define(lToken[nTokenOffset+1], ":G")
2392def _g_da_g0_27 (lToken, nTokenOffset, nLastToken):
2393    return g_exclude(lToken[nTokenOffset+2], ":V")
2394def _g_cond_g0_30 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2395    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_1p_") and not g_value(lToken[nTokenOffset], "|n’|") and not g_value(lToken[nLastToken+1], "|nous|")
2396def _g_da_g0_28 (lToken, nTokenOffset, nLastToken):
2397    return g_select(lToken[nLastToken-1+1], ":N")
2398def _g_cond_g0_31 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2399    return g_morph(lToken[nTokenOffset], ":Y")
2400def _g_da_g0_29 (lToken, nTokenOffset, nLastToken):
2401    return g_define(lToken[nTokenOffset+1], ":N:e:i")
2402def _g_da_g0_30 (lToken, nTokenOffset, nLastToken):
2403    return g_exclude(lToken[nTokenOffset+2], ":(?:[123][sp]|P)")
2404def _g_da_g0_31 (lToken, nTokenOffset, nLastToken):
2405    return g_exclude(lToken[nTokenOffset+3], ":V")
2406def _g_cond_g0_32 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2407    return not g_value(lToken[nTokenOffset+3], "|plus|")
2408def _g_da_g0_32 (lToken, nTokenOffset, nLastToken):
2409    return g_select(lToken[nTokenOffset+3], ":[123][sp]")
2410def _g_da_g0_33 (lToken, nTokenOffset, nLastToken):
2411    return g_define(lToken[nTokenOffset+1], ":LN:m:p")
2412def _g_da_g0_34 (lToken, nTokenOffset, nLastToken):
2413    return g_define(lToken[nTokenOffset+1], ":LN:f:p")
2414def _g_cond_g0_33 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2415    return not g_morph(lToken[nLastToken-1+1], ":V0")
2416def _g_cond_g0_34 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2417    return not g_morph(lToken[nLastToken-1+1], ":V0") and not g_morph(lToken[nLastToken-1+1], ":3s")
2418def _g_cond_g0_35 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2419    return not g_value(lToken[nTokenOffset], "|tu|ne|n’|me|m’|te|t’|se|s’|nous|vous|") and g_morph(lToken[nTokenOffset+2], ":V1.*Ip.*:2s") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_") and not g_value(lToken[nLastToken+1], "|tu|pas|jamais|")
2420def _g_cond_g0_36 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2421    return not g_value(lToken[nTokenOffset], "|l’|quelqu’|quelqu|") and not g_value(lToken[nTokenOffset+2], "|a|fut|fût|est|fait|") and not g_morph(lToken[nTokenOffset+2], ":P")
2422def _g_cond_g0_37 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2423    return not g_value(lToken[nTokenOffset], "|semblant|")
2424def _g_da_g0_35 (lToken, nTokenOffset, nLastToken):
2425    return g_select(lToken[nTokenOffset+2], ":D")
2426def _g_da_g0_36 (lToken, nTokenOffset, nLastToken):
2427    return g_select(lToken[nTokenOffset+4], ":[NA]")
2428def _g_da_g0_37 (lToken, nTokenOffset, nLastToken):
2429    return g_exclude(lToken[nTokenOffset+4], ":[123][sp]")
2430def _g_cond_g0_38 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2431    return not g_value(lToken[nTokenOffset], "|ne|n’|j’|on|il|elle|iel|")
2432def _g_cond_g0_39 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2433    return not g_morph(lToken[nTokenOffset], ":D")
2434def _g_cond_g0_40 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2435    return g_morph(lToken[nTokenOffset], ":A.*:[me]:[si]")
2436def _g_da_g0_38 (lToken, nTokenOffset, nLastToken):
2437    return g_add_morph(lToken[nTokenOffset+1], ">nombre/:G:D")
2438def _g_cond_g0_41 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2439    return not bCondMemo
2440def _g_da_g0_39 (lToken, nTokenOffset, nLastToken):
2441    return g_define(lToken[nTokenOffset+1], ">nombre/:G:D")
2442def _g_da_g0_40 (lToken, nTokenOffset, nLastToken):
2443    return g_exclude(lToken[nTokenOffset+2], ":[123][sp]")
2444def _g_cond_g0_42 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2445    return not g_morph(lToken[nTokenOffset], ":D.*:m|>(?:être|(?:re|)devenir|rester|demeurer|sembler|para[iî]tre)/")
2446def _g_cond_g0_43 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2447    return g_morph(lToken[nTokenOffset], ">(?:être|(?:re|)devenir|rester|demeurer|sembler|para[iî]tre)/")
2448def _g_da_g0_41 (lToken, nTokenOffset, nLastToken):
2449    return g_define(lToken[nTokenOffset+1], ":LV")
2450def _g_da_g0_42 (lToken, nTokenOffset, nLastToken):
2451    return g_define(lToken[nTokenOffset+1], ":A:e:i")
2452def _g_cond_g0_44 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2453    return g_morph(lToken[nTokenOffset+1], ":(D.*:p|B)")
2454def _g_da_g0_43 (lToken, nTokenOffset, nLastToken):
2455    return g_exclude(lToken[nTokenOffset+2], ":A:e:i")
2456def _g_cond_g0_45 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2457    return not g_morph(lToken[nTokenOffset], ":D.*:f")
2458def _g_da_g0_44 (lToken, nTokenOffset, nLastToken):
2459    return g_add_morph(lToken[nTokenOffset+1], ">Concorde/:MP:m:i")
2460def _g_cond_g0_46 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2461    return not g_morph(lToken[nTokenOffset], ":D.*:m")
2462def _g_da_g0_45 (lToken, nTokenOffset, nLastToken):
2463    return g_add_morph(lToken[nTokenOffset+1], ">Mustang/:MP:f:i")
2464def _g_cond_g0_47 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2465    return not g_morph(lToken[nTokenOffset], ">ne/|:R")
2466def _g_cond_g0_48 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2467    return g_morph(lToken[nTokenOffset], ":R")
2468def _g_da_g0_46 (lToken, nTokenOffset, nLastToken):
2469    return g_define_from(lToken[nTokenOffset+1], 0, -3)
2470def _g_cond_g0_49 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2471    return lToken[nTokenOffset+1]["sValue"].isupper()
2472def _g_cond_g0_50 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2473    return g_morph(lToken[nLastToken-1+1], ":[NA]")
2474def _g_da_g0_47 (lToken, nTokenOffset, nLastToken):
2475    return g_define(lToken[nTokenOffset+1], ":Cs")
2476def _g_da_g0_48 (lToken, nTokenOffset, nLastToken):
2477    return g_change_meta(lToken[nTokenOffset+1], "WORD")
2478def _g_da_g0_49 (lToken, nTokenOffset, nLastToken):
2479    return g_define(lToken[nTokenOffset+1], ":N:m:i")
2480def _g_da_g0_50 (lToken, nTokenOffset, nLastToken):
2481    return g_define(lToken[nTokenOffset+1], ":N:f:p")
2482def _g_cond_g0_51 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2483    return g_morph(lToken[nTokenOffset], ":D.*:[mp]")
2484def _g_cond_g0_52 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2485    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 0) and g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 0)
2486def _g_cond_g0_53 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2487    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 0) and g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 0, 0) and g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nLastToken-1+1], ":N")
2488def _g_da_g0_51 (lToken, nTokenOffset, nLastToken):
2489    return g_define(lToken[nTokenOffset+1], ":M2:e:i")
2490def _g_cond_g0_54 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2491    return g_merged_analyse(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], " ", ":")
2492def _g_cond_g0_55 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2493    return not bCondMemo and g_morph(lToken[nTokenOffset+1], ":M") and g_morph(lToken[nTokenOffset+2], ":V", ":[GM]")
2494def _g_da_g0_52 (lToken, nTokenOffset, nLastToken):
2495    return g_define(lToken[nTokenOffset+2], ":M2")
2496def _g_da_g0_53 (lToken, nTokenOffset, nLastToken):
2497    return g_define(lToken[nTokenOffset+1], ":T")
2498def _g_da_g0_54 (lToken, nTokenOffset, nLastToken):
2499    return g_define(lToken[nTokenOffset+2], ":MP:f:s")
2500def _g_da_g0_55 (lToken, nTokenOffset, nLastToken):
2501    return g_define(lToken[nTokenOffset+2], ":MP:m:s")
2502def _g_da_g0_56 (lToken, nTokenOffset, nLastToken):
2503    return g_define(lToken[nTokenOffset+2], ":MP:e:s")
2504def _g_da_g0_57 (lToken, nTokenOffset, nLastToken):
2505    return g_define(lToken[nTokenOffset+2], ":MP:e:i")
2506def _g_cond_g0_56 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2507    return g_morph(lToken[nTokenOffset+2], ":V")
2508def _g_cond_g0_57 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2509    return g_morph(lToken[nTokenOffset+3], ":V")
2510def _g_cond_g0_58 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2511    return g_morph(lToken[nTokenOffset+4], ":V")
2512def _g_cond_g0_59 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2513    return not g_morph(lToken[nTokenOffset+2], ">[iî]le/")
2514def _g_cond_g0_60 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2515    return not g_value(lToken[nTokenOffset+2], "|un|une|")
2516def _g_cond_g0_61 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2517    return g_morphVC(lToken[nTokenOffset+1], ":V", ":1[sśŝ]")
2518def _g_sugg_g0_1 (lToken, nTokenOffset, nLastToken):
2519    return suggVerb(lToken[nTokenOffset+1]["sValue"], ":1ś", None, True)
2520def _g_cond_g0_62 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2521    return not bCondMemo and not g_morphVC(lToken[nTokenOffset+1], ":V")
2522def _g_sugg_g0_2 (lToken, nTokenOffset, nLastToken):
2523    return suggSimil(lToken[nTokenOffset+1]["sValue"], ":1[sśŝ]", False, True)
2524def _g_cond_g0_63 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2525    return g_morphVC(lToken[nTokenOffset+1], ":V", ":[ISK].*:2s")
2526def _g_sugg_g0_3 (lToken, nTokenOffset, nLastToken):
2527    return suggVerb(lToken[nTokenOffset+1]["sValue"], ":2s", None, True)
2528def _g_sugg_g0_4 (lToken, nTokenOffset, nLastToken):
2529    return suggSimil(lToken[nTokenOffset+1]["sValue"], ":2s", False, True)
2530def _g_cond_g0_64 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2531    return g_morphVC(lToken[nTokenOffset+1], ":3p", ":3s")
2532def _g_sugg_g0_5 (lToken, nTokenOffset, nLastToken):
2533    return suggVerb(lToken[nTokenOffset+1]["sValue"], ":3s", None, True) + "|" + lToken[nTokenOffset+1]["sValue"]+"s"
2534def _g_cond_g0_65 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2535    return not bCondMemo and g_morphVC(lToken[nTokenOffset+1], ":V", ":3s")
2536def _g_sugg_g0_6 (lToken, nTokenOffset, nLastToken):
2537    return suggVerb(lToken[nTokenOffset+1]["sValue"], ":3s", None, True)
2538def _g_cond_g0_66 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2539    return not bCondMemo and g_morphVC(lToken[nTokenOffset+1], ":", ":V|>(?:t|voilà)/")
2540def _g_sugg_g0_7 (lToken, nTokenOffset, nLastToken):
2541    return suggSimil(lToken[nTokenOffset+1]["sValue"], ":3s", False, True)
2542def _g_cond_g0_67 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2543    return not bCondMemo and g_morphVC(lToken[nTokenOffset+1], ":", ":V|>t/")
2544def _g_cond_g0_68 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2545    return g_morphVC(lToken[nTokenOffset+1], ":V", ":3s")
2546def _g_cond_g0_69 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2547    return g_morphVC(lToken[nTokenOffset+1], ":V", ":(?:3s|V0e.*:3p)")
2548def _g_cond_g0_70 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2549    return not bCondMemo and g_morphVC(lToken[nTokenOffset+1], ":", ":V")
2550def _g_cond_g0_71 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2551    return lToken[nTokenOffset+1]["sValue"].endswith("se")
2552def _g_sugg_g0_8 (lToken, nTokenOffset, nLastToken):
2553    return lToken[nTokenOffset+1]["sValue"][:-2]+"ce"
2554def _g_cond_g0_72 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2555    return g_morphVC(lToken[nTokenOffset+1], ":V", ":3p")
2556def _g_sugg_g0_9 (lToken, nTokenOffset, nLastToken):
2557    return suggVerb(lToken[nTokenOffset+1]["sValue"], ":3p", None, True)
2558def _g_sugg_g0_10 (lToken, nTokenOffset, nLastToken):
2559    return suggSimil(lToken[nTokenOffset+1]["sValue"], ":3p", False, True)
2560def _g_cond_g0_73 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2561    return g_morphVC(lToken[nTokenOffset+1], ":V", ":(?:1p|E:2[sp])")
2562def _g_sugg_g0_11 (lToken, nTokenOffset, nLastToken):
2563    return suggVerb(lToken[nTokenOffset+1]["sValue"], ":1p", None, True)
2564def _g_cond_g0_74 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2565    return not bCondMemo and g_morphVC(lToken[nTokenOffset+1], ":", ":V|>(?:chez|malgré)/")
2566def _g_sugg_g0_12 (lToken, nTokenOffset, nLastToken):
2567    return suggSimil(lToken[nTokenOffset+1]["sValue"], ":1p", False, True)
2568def _g_cond_g0_75 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2569    return g_morphVC(lToken[nTokenOffset+1], ":V", ":2p")
2570def _g_sugg_g0_13 (lToken, nTokenOffset, nLastToken):
2571    return suggVerb(lToken[nTokenOffset+1]["sValue"], ":2p", None, True)
2572def _g_cond_g0_76 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2573    return not bCondMemo and g_morphVC(lToken[nTokenOffset+1], ":", ":V|>chez/")
2574def _g_sugg_g0_14 (lToken, nTokenOffset, nLastToken):
2575    return suggSimil(lToken[nTokenOffset+1]["sValue"], ":2p", False, True)
2576def _g_da_g0_58 (lToken, nTokenOffset, nLastToken):
2577    return g_define(lToken[nLastToken-1+1], ":VCi1:2p")
2578def _g_cond_g0_77 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2579    return g_morphVC(lToken[nTokenOffset+1], ":V", ":E")
2580def _g_sugg_g0_15 (lToken, nTokenOffset, nLastToken):
2581    return suggVerbImpe(lToken[nTokenOffset+1]["sValue"], True)
2582def _g_sugg_g0_16 (lToken, nTokenOffset, nLastToken):
2583    return suggSimil(lToken[nTokenOffset+1]["sValue"], ":E", False, True)
2584def _g_sugg_g0_17 (lToken, nTokenOffset, nLastToken):
2585    return lToken[nTokenOffset+1]["sValue"].replace("-là-", "-la-")
2586def _g_cond_g0_78 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2587    return not bCondMemo and g_morphVC(lToken[nTokenOffset+1], ":", ":V") and not g_value(lToken[nTokenOffset], "|ce|cet|cette|ces|") and not g_value(lToken[nTokenOffset+1], "|par-la|de-la|jusque-la|celui-la|celle-la|ceux-la|celles-la|")
2588def _g_sugg_g0_18 (lToken, nTokenOffset, nLastToken):
2589    return suggSimil(lToken[nTokenOffset+1]["sValue"], ":E", False, True)+"|"+lToken[nTokenOffset+1]["sValue"][:-3]+" là"
2590def _g_sugg_g0_19 (lToken, nTokenOffset, nLastToken):
2591    return lToken[nTokenOffset+1]["sValue"][:-1]
2592def _g_cond_ocr_1 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2593    return look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "\\w") and (g_morph(lToken[nTokenOffset+1], ":G", ":M") or g_morph(lToken[nTokenOffset+1], ":[123][sp]", ":[MNA]|>Est/"))
2594def _g_sugg_ocr_1 (lToken, nTokenOffset, nLastToken):
2595    return lToken[nTokenOffset+1]["sValue"].lower()
2596def _g_cond_ocr_2 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2597    return look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "\\w") and not lToken[nTokenOffset+2]["sValue"].isupper()
2598def _g_cond_ocr_3 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2599    return re.search("^[aâeéèêiîouyh]", lToken[nTokenOffset+2]["sValue"])
2600def _g_cond_ocr_4 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2601    return not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "\\d[   ]+$") and not (lToken[nTokenOffset+1]["sValue"].isupper() and g_value(lToken[nLastToken+1], "|.|<end>|"))
2602def _g_cond_ocr_5 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2603    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 0) and not lToken[nTokenOffset+1]["sValue"].isupper() or g_value(lToken[nTokenOffset+1], "|à|")
2604def _g_cond_ocr_6 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2605    return not g_value(lToken[nTokenOffset], "|<start>|—|–|")
2606def _g_sugg_ocr_2 (lToken, nTokenOffset, nLastToken):
2607    return lToken[nTokenOffset+1]["sValue"].replace("a", "â").replace("A", "Â")
2608def _g_sugg_ocr_3 (lToken, nTokenOffset, nLastToken):
2609    return lToken[nTokenOffset+1]["sValue"].replace("n", "u")
2610def _g_cond_ocr_7 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2611    return not g_value(lToken[nTokenOffset], "|il|ne|n’|âne|ânesse|")
2612def _g_cond_ocr_8 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2613    return not g_value(lToken[nTokenOffset], "|il|ne|elle|")
2614def _g_cond_ocr_9 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2615    return not g_value(lToken[nTokenOffset], "|je|ne|le|la|les|")
2616def _g_cond_ocr_10 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2617    return not g_morph(lToken[nTokenOffset], ":D.*:f:[si]")
2618def _g_cond_ocr_11 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2619    return not g_value(lToken[nTokenOffset], "|j’|n’|l’|m’|t’|s’|il|on|elle|ça|cela|ceci|")
2620def _g_cond_ocr_12 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2621    return not g_value(lToken[nTokenOffset], "|et|ou|où|")
2622def _g_cond_ocr_13 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2623    return not g_morph(lToken[nTokenOffset], ":D.*:p")
2624def _g_cond_ocr_14 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2625    return not (g_value(lToken[nTokenOffset], "|grand|") and g_value(g_token(lToken, nTokenOffset+1-2), "|au|"))
2626def _g_sugg_ocr_4 (lToken, nTokenOffset, nLastToken):
2627    return lToken[nTokenOffset+1]["sValue"].replace("rn", "m").replace("in", "m")
2628def _g_cond_ocr_15 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2629    return not g_morph(lToken[nTokenOffset], ":D.*:m:[si]")
2630def _g_cond_ocr_16 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2631    return not g_morph(lToken[nTokenOffset], ":D.*:m:p")
2632def _g_cond_ocr_17 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2633    return not g_morph(lToken[nTokenOffset], ":D.*:[me]")
2634def _g_cond_ocr_18 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2635    return not g_value(lToken[nTokenOffset], "|au|de|en|par|")
2636def _g_cond_ocr_19 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2637    return g_morph(lToken[nTokenOffset], ":R|<start>|>,") or isNextVerb()
2638def _g_cond_ocr_20 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2639    return not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "[0-9] +$")
2640def _g_cond_ocr_21 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2641    return not g_value(lToken[nTokenOffset], "|tu|")
2642def _g_sugg_ocr_5 (lToken, nTokenOffset, nLastToken):
2643    return lToken[nTokenOffset+1]["sValue"].replace("ess", "ass").replace("ESS", "ASS")
2644def _g_sugg_ocr_6 (lToken, nTokenOffset, nLastToken):
2645    return lToken[nTokenOffset+1]["sValue"].replace("l", "i").replace("L", "I")
2646def _g_cond_ocr_22 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2647    return not g_value(lToken[nTokenOffset], "|il|elle|on|") and not g_value(g_token(lToken, nTokenOffset+1-2), "|il|elle|on|")
2648def _g_cond_ocr_23 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2649    return not bCondMemo and g_morph(lToken[nLastToken+1], ":(?:Ov|Y|W)")
2650def _g_cond_ocr_24 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2651    return g_morph(lToken[nTokenOffset+3], ":(?:O[on]|3s)")
2652def _g_cond_ocr_25 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2653    return not g_morph(lToken[nLastToken+1], ":N", "*")
2654def _g_sugg_ocr_7 (lToken, nTokenOffset, nLastToken):
2655    return lToken[nTokenOffset+1]["sValue"].replace("o", "e")
2656def _g_sugg_ocr_8 (lToken, nTokenOffset, nLastToken):
2657    return "l’"+lToken[nTokenOffset+1]["sValue"][2:] + "|L’"+lToken[nTokenOffset+1]["sValue"][2:] + "|j’"+lToken[nTokenOffset+1]["sValue"][2:] + "|J’"+lToken[nTokenOffset+1]["sValue"][2:]
2658def _g_cond_ocr_26 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2659    return look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "\\w") and not g_morph(lToken[nTokenOffset+2], ":Y")
2660def _g_cond_ocr_27 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2661    return lToken[nTokenOffset+1]["sValue"].istitle() and look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "\\w") and g_morph(lToken[nTokenOffset+1], ":", ":M")
2662def _g_cond_ocr_28 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2663    return _oSpellChecker.isValid(lToken[nTokenOffset+1]["sValue"][1:])
2664def _g_sugg_ocr_9 (lToken, nTokenOffset, nLastToken):
2665    return "v"+lToken[nTokenOffset+1]["sValue"][1:] + "|l’"+lToken[nTokenOffset+1]["sValue"][1:]
2666def _g_cond_ocr_29 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2667    return not bCondMemo
2668def _g_sugg_ocr_10 (lToken, nTokenOffset, nLastToken):
2669    return "v"+lToken[nTokenOffset+1]["sValue"][1:]
2670def _g_cond_ocr_30 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2671    return look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "\\w") and g_morph(lToken[nTokenOffset+1], ":", ":M") and _oSpellChecker.isValid(lToken[nTokenOffset+1]["sValue"][1:])
2672def _g_sugg_ocr_11 (lToken, nTokenOffset, nLastToken):
2673    return "l’"+lToken[nTokenOffset+1]["sValue"][1:] + "|p"+lToken[nTokenOffset+1]["sValue"][1:]
2674def _g_cond_ocr_31 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2675    return not g_morph(lToken[nTokenOffset], ":D.*:[me]:[si]")
2676def _g_sugg_ocr_12 (lToken, nTokenOffset, nLastToken):
2677    return lToken[nTokenOffset+1]["sValue"].replace("é", "e").replace("É", "E")
2678def _g_cond_ocr_32 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2679    return not g_morph(lToken[nTokenOffset], ":(?:V0|N.*:m:[si])")
2680def _g_cond_ocr_33 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2681    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 1)
2682def _g_cond_ocr_34 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2683    return not g_morph(lToken[nTokenOffset], ":D:[me]:p")
2684def _g_cond_ocr_35 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2685    return not g_morph(lToken[nTokenOffset], ":D:(?:m:s|e:p)")
2686def _g_cond_ocr_36 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2687    return not g_morph(lToken[nTokenOffset], ">(?:homme|ce|quel|être)/")
2688def _g_sugg_ocr_13 (lToken, nTokenOffset, nLastToken):
2689    return lToken[nTokenOffset+1]["sValue"].replace("â", "a").replace("Â", "A")
2690def _g_sugg_ocr_14 (lToken, nTokenOffset, nLastToken):
2691    return lToken[nTokenOffset+1]["sValue"].replace("ô", "ê").replace("Ô", "Ê")
2692def _g_sugg_ocr_15 (lToken, nTokenOffset, nLastToken):
2693    return lToken[nTokenOffset+1]["sValue"].replace("è", "ê").replace("È", "Ê")
2694def _g_sugg_ocr_16 (lToken, nTokenOffset, nLastToken):
2695    return lToken[nTokenOffset+1]["sValue"].replace("é", "ê").replace("É", "Ê").replace("o", "e").replace("O", "E")
2696def _g_cond_ocr_37 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2697    return not g_value(lToken[nTokenOffset], "|tu|ne|n’|")
2698def _g_sugg_ocr_17 (lToken, nTokenOffset, nLastToken):
2699    return lToken[nTokenOffset+1]["sValue"].replace("l", "t").replace("L", "T")+"|"+lToken[nTokenOffset+1]["sValue"].replace("l", "i").replace("L", "I")
2700def _g_cond_ocr_38 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2701    return not g_value(lToken[nTokenOffset], "|ne|il|on|elle|je|")
2702def _g_cond_ocr_39 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2703    return not g_value(lToken[nTokenOffset], "|ne|il|on|elle|")
2704def _g_cond_ocr_40 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2705    return not g_value(lToken[nTokenOffset], "|ne|tu|")
2706def _g_cond_ocr_41 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2707    return not g_morph(lToken[nTokenOffset], ":D.*:m:s")
2708def _g_cond_ocr_42 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2709    return not g_morph(lToken[nTokenOffset], ":D.*:f:s")
2710def _g_cond_ocr_43 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2711    return not g_morph(lToken[nTokenOffset], ":D.*:[me]:p")
2712def _g_cond_ocr_44 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2713    return not g_value(lToken[nTokenOffset], "|sine|")
2714def _g_cond_ocr_45 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2715    return not g_value(lToken[nTokenOffset], "|statu|")
2716def _g_cond_ocr_46 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2717    return g_value(lToken[nTokenOffset+1], "|raine|raines|")
2718def _g_sugg_ocr_18 (lToken, nTokenOffset, nLastToken):
2719    return lToken[nTokenOffset+1]["sValue"].replace("ain", "uin").replace("AIN", "UIN")
2720def _g_cond_ocr_47 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2721    return not g_value(lToken[nLastToken+1], "|generis|")
2722def _g_cond_ocr_48 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2723    return not g_value(lToken[nTokenOffset], "|le|ce|mon|ton|son|du|un|")
2724def _g_cond_ocr_49 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2725    return look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "\\w")
2726def _g_cond_ocr_50 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2727    return not g_value(lToken[nTokenOffset], "|je|il|elle|on|ne|ça|")
2728def _g_sugg_ocr_19 (lToken, nTokenOffset, nLastToken):
2729    return lToken[nTokenOffset+1]["sValue"].replace("a", "o").replace("A", "O")
2730def _g_sugg_ocr_20 (lToken, nTokenOffset, nLastToken):
2731    return lToken[nTokenOffset+1]["sValue"].replace("n", "u").replace("N", "U")
2732def _g_cond_ocr_51 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2733    return not g_morph(lToken[nTokenOffset], ":(?:N.*:f:p|V0e.*:3p)|>(?:tu|ne)/")
2734def _g_cond_ocr_52 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2735    return not g_value(lToken[nTokenOffset], "|ce|de|du|un|quel|leur|le|")
2736def _g_sugg_ocr_21 (lToken, nTokenOffset, nLastToken):
2737    return lToken[nTokenOffset+1]["sValue"].replace("l", "t").replace("L", "T")
2738def _g_cond_g1_1 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2739    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and not re.search("(?i)^(?:onz[ei]|énième|iourte|ouistiti|ouate|one-?step|ouf|Ouagadougou|I(?:I|V|X|er|ᵉʳ|ʳᵉ|è?re))", lToken[nTokenOffset+2]["sValue"]) and not g_morph(lToken[nTokenOffset+2], ":G")
2740def _g_sugg_g1_1 (lToken, nTokenOffset, nLastToken):
2741    return lToken[nTokenOffset+1]["sValue"][0:1]+"’"
2742def _g_cond_g1_2 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2743    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1)
2744def _g_cond_g1_3 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2745    return not lToken[nTokenOffset+1]["sValue"].isupper() and g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V", ":Q")
2746def _g_cond_g1_4 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2747    return not re.search("(?i)^(?:onz|énième|ouf|énième|ouistiti|one-?step|I(?:I|V|X|er|ᵉʳ))", lToken[nTokenOffset+2]["sValue"]) and g_morph(lToken[nTokenOffset+2], ":[NA].*:[me]")
2748def _g_cond_g1_5 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2749    return g_morphVC(lToken[nTokenOffset+1], "V1.*:1s") and lToken[nTokenOffset+1]["sValue"].endswith("e-je")
2750def _g_sugg_g1_2 (lToken, nTokenOffset, nLastToken):
2751    return lToken[nTokenOffset+1]["sValue"].replace("e-je", "é-je")+"|"+lToken[nTokenOffset+1]["sValue"].replace("e-je", "è-je")
2752def _g_cond_g1_6 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2753    return g_morph(lToken[nTokenOffset+2], ":[NA]") and not re.search("(?i)^(?:onz|énième|ouf|énième|I(?:I|V|X|i?[eè]?re|ʳᵉ))", lToken[nTokenOffset+2]["sValue"])
2754def _g_sugg_g1_3 (lToken, nTokenOffset, nLastToken):
2755    return lToken[nTokenOffset+1]["sValue"][0:1]+"on"
2756def _g_cond_g1_7 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2757    return not lToken[nTokenOffset+1]["sValue"].isupper() and g_morph(lToken[nTokenOffset+2], ":[NA]") and not re.search("(?i)^(?:onz|énième|ouf|énième|I(?:I|V|X|i?[eè]?re|ʳᵉ))", lToken[nTokenOffset+2]["sValue"])
2758def _g_cond_g1_8 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2759    return g_morph(lToken[nTokenOffset+2], ":[123][sp]")
2760def _g_sugg_g1_4 (lToken, nTokenOffset, nLastToken):
2761    return lToken[nTokenOffset+1]["sValue"][0:1]+"on|ça"
2762def _g_cond_g1_9 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2763    return not bCondMemo
2764def _g_cond_g1_10 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2765    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]:s", ":[123][sp]")
2766def _g_cond_g1_11 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2767    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[me]:s", ":[123][sp]")
2768def _g_cond_g1_12 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2769    return _sAppContext != "Writer"
2770def _g_cond_g1_13 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2771    return lToken[nTokenOffset+1]["sValue"] != "1e" and _sAppContext != "Writer"
2772def _g_sugg_g1_5 (lToken, nTokenOffset, nLastToken):
2773    return lToken[nTokenOffset+1]["sValue"][:-1]+"ᵉ"
2774def _g_cond_g1_14 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2775    return lToken[nTokenOffset+1]["sValue"] != "1es" and _sAppContext != "Writer"
2776def _g_sugg_g1_6 (lToken, nTokenOffset, nLastToken):
2777    return lToken[nTokenOffset+1]["sValue"][:-2]+"ᵉˢ"
2778def _g_cond_g1_15 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2779    return lToken[nTokenOffset+1]["sValue"].endswith("s")
2780def _g_sugg_g1_7 (lToken, nTokenOffset, nLastToken):
2781    return lToken[nTokenOffset+1]["sValue"].replace("mes", "").replace("è", "").replace("e", "").replace("i", "") + "ᵉˢ"
2782def _g_sugg_g1_8 (lToken, nTokenOffset, nLastToken):
2783    return lToken[nTokenOffset+1]["sValue"].replace("me", "").replace("è", "").replace("e", "").replace("i", "") + "ᵉ"
2784def _g_cond_g1_16 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2785    return _sAppContext != "Writer" and not option("romain")
2786def _g_cond_g1_17 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2787    return not g_morph(lToken[nTokenOffset+1], ":G")
2788def _g_cond_g1_18 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2789    return lToken[nTokenOffset+1]["sValue"].endswith("s") or lToken[nTokenOffset+1]["sValue"].endswith("S")
2790def _g_sugg_g1_9 (lToken, nTokenOffset, nLastToken):
2791    return lToken[nTokenOffset+1]["sValue"].replace("1", "₁").replace("2", "₂").replace("3", "₃").replace("4", "₄").replace("5", "₅").replace("6", "₆").replace("7", "₇").replace("8", "₈").replace("9", "₉").replace("0", "₀")
2792def _g_cond_g1_19 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2793    return lToken[nTokenOffset+1]["sValue"].isdigit()
2794def _g_da_g1_1 (lToken, nTokenOffset, nLastToken):
2795    return g_change_meta(lToken[nTokenOffset+1], "DATE")
2796def _g_cond_g1_20 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2797    return not checkDate(lToken[nTokenOffset+1]["sValue"], lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
2798def _g_cond_g1_21 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2799    return not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(lToken[nTokenOffset+1]["sValue"], lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+4]["sValue"], lToken[nTokenOffset+6]["sValue"])
2800def _g_sugg_g1_10 (lToken, nTokenOffset, nLastToken):
2801    return getDay(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+4]["sValue"], lToken[nTokenOffset+6]["sValue"])
2802def _g_cond_g1_22 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2803    return not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(lToken[nTokenOffset+1]["sValue"], lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+5]["sValue"], lToken[nTokenOffset+7]["sValue"])
2804def _g_sugg_g1_11 (lToken, nTokenOffset, nLastToken):
2805    return getDay(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+5]["sValue"], lToken[nTokenOffset+7]["sValue"])
2806def _g_cond_g1_23 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2807    return not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(lToken[nTokenOffset+1]["sValue"], lToken[nTokenOffset+4]["sValue"], lToken[nTokenOffset+6]["sValue"], lToken[nTokenOffset+8]["sValue"])
2808def _g_sugg_g1_12 (lToken, nTokenOffset, nLastToken):
2809    return getDay(lToken[nTokenOffset+4]["sValue"], lToken[nTokenOffset+6]["sValue"], lToken[nTokenOffset+8]["sValue"])
2810def _g_cond_g1_24 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2811    return not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(lToken[nTokenOffset+1]["sValue"], lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
2812def _g_sugg_g1_13 (lToken, nTokenOffset, nLastToken):
2813    return getDay(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
2814def _g_cond_g1_25 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2815    return not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(lToken[nTokenOffset+1]["sValue"], lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"], lToken[nTokenOffset+5]["sValue"])
2816def _g_sugg_g1_14 (lToken, nTokenOffset, nLastToken):
2817    return getDay(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"], lToken[nTokenOffset+5]["sValue"])
2818def _g_cond_g1_26 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2819    return not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(lToken[nTokenOffset+1]["sValue"], lToken[nTokenOffset+4]["sValue"], lToken[nTokenOffset+5]["sValue"], lToken[nTokenOffset+6]["sValue"])
2820def _g_sugg_g1_15 (lToken, nTokenOffset, nLastToken):
2821    return getDay(lToken[nTokenOffset+4]["sValue"], lToken[nTokenOffset+5]["sValue"], lToken[nTokenOffset+6]["sValue"])
2822def _g_cond_g1_27 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2823    return g_morph(lToken[nTokenOffset+2], ":[NB]", ":V0e") and not g_value(lToken[nLastToken+1], "|où|")
2824def _g_cond_g1_28 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2825    return g_morph(lToken[nTokenOffset+2], ":[NB]", ":V0e")
2826def _g_cond_g1_29 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2827    return g_morph(lToken[nTokenOffset+2], ":[NB]")
2828def _g_cond_g1_30 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2829    return not g_value(lToken[nTokenOffset+3], "|aequo|nihilo|cathedra|absurdo|abrupto|")
2830def _g_cond_g1_31 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2831    return not g_value(lToken[nTokenOffset+2], "|aequo|nihilo|cathedra|absurdo|abrupto|") and not g_value(lToken[nTokenOffset], "|l’|")
2832def _g_cond_g1_32 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2833    return not g_value(lToken[nTokenOffset], "|drive|plug|sit|")
2834def _g_cond_g1_33 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2835    return not g_value(lToken[nTokenOffset+2], "|a|")
2836def _g_cond_g1_34 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2837    return g_morph(lToken[nTokenOffset], ":D")
2838def _g_cond_g1_35 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2839    return g_morph(lToken[nTokenOffset+1], ":[WA]", ":N", 6)
2840def _g_sugg_g1_16 (lToken, nTokenOffset, nLastToken):
2841    return "quasi " + lToken[nTokenOffset+1]["sValue"][6:]
2842def _g_cond_g1_36 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2843    return g_merged_analyse(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], "-", ":")
2844def _g_cond_g1_37 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2845    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and (g_morph(lToken[nTokenOffset+2], ":N") or g_merged_analyse(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], "-", ":"))
2846def _g_cond_g1_38 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2847    return g_morph(lToken[nTokenOffset], ":D|<start>|>,") and g_merged_analyse(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], "-", ":")
2848def _g_cond_g1_39 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2849    return g_morph(lToken[nTokenOffset], ":D") and g_merged_analyse(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], "-", ":")
2850def _g_cond_g1_40 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2851    return not(lToken[nTokenOffset+2]["sValue"] == "forme" and g_value(lToken[nLastToken+1], "|de|d’|")) and g_morph(lToken[nTokenOffset], ":D") and g_merged_analyse(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], "-", ":")
2852def _g_da_g1_2 (lToken, nTokenOffset, nLastToken):
2853    return g_define_from(lToken[nTokenOffset+1], 7)
2854def _g_cond_g1_41 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2855    return not g_morph(lToken[nTokenOffset+2], ":[GYB]") and g_morph(lToken[nTokenOffset], ":(?:D|V0e)|<start>|>,") and g_merged_analyse(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], "-", ":N")
2856def _g_cond_g1_42 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2857    return g_morph(lToken[nTokenOffset+3], ":V") and g_merged_analyse(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], "-", ":V")
2858def _g_cond_g1_43 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2859    return g_morph(lToken[nTokenOffset+4], ":V") and g_merged_analyse(lToken[nTokenOffset+3], lToken[nTokenOffset+3+1], "-", ":V") and not g_morph(lToken[nTokenOffset], ":R")
2860def _g_cond_g1_44 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2861    return g_morph(lToken[nTokenOffset], ":(?:D|V0e)|<start>|>,") and g_merged_analyse(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], "-", ":N")
2862def _g_cond_g1_45 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2863    return lToken[nTokenOffset+2]["sValue"].islower()
2864def _g_cond_g1_46 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2865    return not g_morph(lToken[nLastToken+1], ":[WA]")
2866def _g_cond_g1_47 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2867    return not g_value(lToken[nLastToken+1], "|si|s’|")
2868def _g_cond_g1_48 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2869    return not (g_value(lToken[nLastToken+1], "|et|") and g_morph(g_token(lToken, nLastToken+2), ":N"))
2870def _g_cond_g1_49 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2871    return g_morph(lToken[nTokenOffset], ":G")
2872def _g_cond_g1_50 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2873    return not (g_value(lToken[nTokenOffset], "|par|") and g_value(g_token(lToken, nTokenOffset+1-2), "|un|"))
2874def _g_cond_g1_51 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2875    return g_morph(lToken[nTokenOffset] , ":D")
2876def _g_cond_g1_52 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2877    return g_morph(lToken[nTokenOffset], ":D.*:[me]")
2878def _g_cond_g1_53 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2879    return not g_morph(lToken[nLastToken+1], ":A.*:[me]:[si]")
2880def _g_cond_g1_54 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2881    return not g_morph(lToken[nTokenOffset], ":O[sv]")
2882def _g_cond_g1_55 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2883    return g_morph(lToken[nTokenOffset], ":[DR]|<start>|>,")
2884def _g_cond_g1_56 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2885    return not ( g_morph(lToken[nTokenOffset], ":R") and g_value(lToken[nLastToken+1], "|que|qu’|") )
2886def _g_cond_g1_57 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2887    return not g_value(lToken[nLastToken+1], "|de|d’|")
2888def _g_cond_g1_58 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2889    return g_morph(lToken[nTokenOffset], ">en/|:D")
2890def _g_cond_g1_59 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2891    return not g_value(lToken[nLastToken+1], "|guerre|guerres|")
2892def _g_cond_g1_60 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2893    return g_morph(lToken[nTokenOffset], ":Cs|<start>") and g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1)
2894def _g_cond_g1_61 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2895    return not g_value(lToken[nTokenOffset], "|<start>|") and g_morph(lToken[nTokenOffset+2], ":M")
2896def _g_cond_g1_62 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2897    return not g_value(lToken[nTokenOffset], "|quatre|")
2898def _g_cond_g1_63 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2899    return not g_morph(lToken[nLastToken+1], ":B:e:p")
2900def _g_sugg_g1_17 (lToken, nTokenOffset, nLastToken):
2901    return lToken[nTokenOffset+1]["sValue"].replace("-", " ")
2902def _g_sugg_g1_18 (lToken, nTokenOffset, nLastToken):
2903    return lToken[nTokenOffset+2]["sValue"].replace("-", " ")
2904def _g_cond_g1_64 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2905    return not g_value(lToken[nLastToken+1], "|centre|aile|") and not look(sSentence[lToken[nLastToken]["nEnd"]:], "équipe")
2906def _g_cond_g1_65 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2907    return not look(sSentence[lToken[nLastToken]["nEnd"]:], "équipe")
2908def _g_cond_g1_66 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2909    return not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "[Pp]ar[ -]ci ?,? *$")
2910def _g_cond_g1_67 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2911    return g_morph(lToken[nTokenOffset+1], ":V0", "", 2)
2912def _g_sugg_g1_19 (lToken, nTokenOffset, nLastToken):
2913    return "y " + lToken[nTokenOffset+1]["sValue"][2:]
2914def _g_sugg_g1_20 (lToken, nTokenOffset, nLastToken):
2915    return lToken[nTokenOffset+1]["sValue"].replace(" ", "-")
2916def _g_cond_g1_68 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2917    return not g_value(lToken[nTokenOffset], "|dès|des|")
2918def _g_sugg_g1_21 (lToken, nTokenOffset, nLastToken):
2919    return lToken[nTokenOffset+1]["sValue"].replace("’", "-")
2920def _g_tp_g1_1 (lToken, nTokenOffset, nLastToken):
2921    return lToken[nTokenOffset+1]["sValue"].replace("’", "-")
2922def _g_cond_g1_69 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2923    return g_space_between_tokens(lToken[nLastToken-2+1], lToken[nLastToken-2+2], 1, 1) and g_morph(lToken[nLastToken-2+1], ":V.*:1p", ":[GW]") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_1p_")
2924def _g_cond_g1_70 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2925    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:1p", ":[GW]") and not g_value(lToken[nTokenOffset+2], "|veuillons|sachons|")
2926def _g_cond_g1_71 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2927    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:1p", ":[GW]") and not g_value(lToken[nTokenOffset+2], "|veuillons|sachons|allons|venons|partons|")
2928def _g_cond_g1_72 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2929    return g_space_between_tokens(lToken[nLastToken-2+1], lToken[nLastToken-2+2], 1, 1) and g_morph(lToken[nLastToken-2+1], ":V.*:2p", ":[GW]") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2p_")
2930def _g_cond_g1_73 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2931    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:2p", ":[GW]") and not g_value(lToken[nTokenOffset+2], "|veuillez|sachez|")
2932def _g_cond_g1_74 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2933    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:2p", ":[GW]") and not g_value(lToken[nTokenOffset+2], "|veuillez|sachez|allez|venez|partez|")
2934def _g_cond_g1_75 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2935    return g_morph(lToken[nTokenOffset+1], ":E", "", 0, -4)
2936def _g_cond_g1_76 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2937    return g_morph(lToken[nTokenOffset+1], ":E", "", 0, -3)
2938def _g_cond_g1_77 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2939    return not g_value(lToken[nTokenOffset+2], "|appeler|") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_comme_")
2940def _g_cond_g1_78 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2941    return g_morph(lToken[nTokenOffset+2], ":[123][sp]", ">appeler/|:[NA]") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_comme_")
2942def _g_cond_g1_79 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2943    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1)
2944def _g_sugg_g1_22 (lToken, nTokenOffset, nLastToken):
2945    return lToken[nTokenOffset+2]["sValue"]+"’"
2946def _g_cond_g1_80 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2947    return not g_value(lToken[nTokenOffset+3], "|t’|priori|posteriori|postériori|contrario|capella|fortiori|giorno|")
2948def _g_cond_g1_81 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2949    return not g_value(lToken[nTokenOffset+4], "|il|ils|elle|elles|iel|iels|on|ont|")
2950def _g_sugg_g1_23 (lToken, nTokenOffset, nLastToken):
2951    return "É"+lToken[nTokenOffset+1]["sValue"][1:]
2952def _g_tp_g1_2 (lToken, nTokenOffset, nLastToken):
2953    return "É"+lToken[nTokenOffset+1]["sValue"][1:]
2954def _g_cond_g1_82 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2955    return not g_morph(lToken[nTokenOffset], ":D.*:[me]")
2956def _g_cond_g1_83 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2957    return not lToken[nTokenOffset+1]["sValue"].isupper() and not lToken[nTokenOffset+2]["sValue"].isupper()
2958def _g_sugg_g1_24 (lToken, nTokenOffset, nLastToken):
2959    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[NA].*:[si]", True)
2960def _g_cond_g1_84 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2961    return not lToken[nTokenOffset+1]["sValue"].isupper() and not lToken[nTokenOffset+2]["sValue"].isupper() and not g_value(lToken[nTokenOffset], "|tel|telle|")
2962def _g_sugg_g1_25 (lToken, nTokenOffset, nLastToken):
2963    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[NA].*:[pi]", True)
2964def _g_cond_g1_85 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2965    return not lToken[nTokenOffset+1]["sValue"].isupper() and not lToken[nTokenOffset+2]["sValue"].isupper() and not g_value(lToken[nTokenOffset], "|tels|telles|")
2966def _g_cond_g1_86 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2967    return not g_value(lToken[nTokenOffset], "|l’|")
2968def _g_cond_g1_87 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2969    return not g_value(lToken[nTokenOffset+3], "|peu|") or not g_value(lToken[nTokenOffset+2], "|sous|")
2970def _g_cond_g1_88 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2971    return not look(sSentence[lToken[nLastToken]["nEnd"]:], " en (?:a|aie|aies|ait|eut|eût|aura|aurait|avait)\\b")
2972def _g_cond_g1_89 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2973    return not g_value(lToken[nLastToken+1], "|nuit|")
2974def _g_sugg_g1_26 (lToken, nTokenOffset, nLastToken):
2975    return lToken[nTokenOffset+2]["sValue"].replace("vrai", "exact")
2976def _g_cond_g1_90 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2977    return g_morph(lToken[nTokenOffset], ":A|>un")
2978def _g_cond_g1_91 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2979    return not g_value(lToken[nLastToken+1], "|de|des|du|d’|")
2980def _g_sugg_g1_27 (lToken, nTokenOffset, nLastToken):
2981    return suggPlur(lToken[nTokenOffset+3]["sValue"], "", True)
2982def _g_cond_g1_92 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2983    return not g_morph(lToken[nLastToken+1], ":D")
2984def _g_cond_g1_93 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2985    return not (g_morph(lToken[nLastToken-1+1], ":[PQ]") and g_morph(lToken[nTokenOffset], ":V0.*:1s"))
2986def _g_sugg_g1_28 (lToken, nTokenOffset, nLastToken):
2987    return suggVerb(lToken[nLastToken-1+1]["sValue"], ":1s")
2988def _g_cond_g1_94 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2989    return g_value(lToken[nLastToken-1+1], "|est|es|")
2990def _g_cond_g1_95 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2991    return not g_value(lToken[nTokenOffset+2], "|soussigné|soussignée|") and not g_morph(lToken[nTokenOffset], ":1s")
2992def _g_sugg_g1_29 (lToken, nTokenOffset, nLastToken):
2993    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":(?:1s|Ov)", False)
2994def _g_sugg_g1_30 (lToken, nTokenOffset, nLastToken):
2995    return suggSimil(lToken[nLastToken-1+1]["sValue"], ":(?:1s|Ov)", False)
2996def _g_cond_g1_96 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
2997    return not g_morph(lToken[nTokenOffset], ":V0")
2998def _g_sugg_g1_31 (lToken, nTokenOffset, nLastToken):
2999    return suggVerb(lToken[nLastToken-1+1]["sValue"], ":2s")
3000def _g_cond_g1_97 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3001    return not g_morph(lToken[nTokenOffset], ":(?:2s|V0|R)")
3002def _g_sugg_g1_32 (lToken, nTokenOffset, nLastToken):
3003    return suggSimil(lToken[nLastToken-1+1]["sValue"], ":(?:2s|Ov)", False)
3004def _g_cond_g1_98 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3005    return not (g_morph(lToken[nTokenOffset+2], ":[PQ]") and g_morph(lToken[nTokenOffset], ":V0.*:3s"))
3006def _g_sugg_g1_33 (lToken, nTokenOffset, nLastToken):
3007    return suggVerb(lToken[nTokenOffset+2]["sValue"], ":3s")
3008def _g_cond_g1_99 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3009    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":3p")
3010def _g_sugg_g1_34 (lToken, nTokenOffset, nLastToken):
3011    return suggVerb(lToken[nLastToken-1+1]["sValue"], ":3s")
3012def _g_cond_g1_100 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3013    return g_morph(lToken[nLastToken-1+1], ":3p")
3014def _g_cond_g1_101 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3015    return not g_morph(lToken[nTokenOffset], ":3s") and not g_value(lToken[nTokenOffset], "|t’|") and not g_value(lToken[nLastToken-1+1], "|c’|ce|ou|si|")
3016def _g_sugg_g1_35 (lToken, nTokenOffset, nLastToken):
3017    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":(?:3s|Ov)", False)
3018def _g_cond_g1_102 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3019    return not g_morph(lToken[nTokenOffset], ":3s") and not g_value(lToken[nTokenOffset], "|t’|") and not g_value(lToken[nLastToken-1+1], "|c’|ce|")
3020def _g_sugg_g1_36 (lToken, nTokenOffset, nLastToken):
3021    return suggSimil(lToken[nLastToken-1+1]["sValue"], ":(?:3s|Ov)", False)
3022def _g_cond_g1_103 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3023    return not g_morph(lToken[nTokenOffset], ":3s") and not g_value(lToken[nTokenOffset], "|n’|m’|t’|s’|") and not g_value(lToken[nLastToken-1+1], "|c’|ce|si|")
3024def _g_sugg_g1_37 (lToken, nTokenOffset, nLastToken):
3025    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":(?:3s|Oo)", False)
3026def _g_cond_g1_104 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3027    return not g_morph(lToken[nTokenOffset], ":3s") and not g_value(lToken[nTokenOffset], "|n’|m’|t’|s’|") and not g_value(lToken[nLastToken-1+1], "|c’|ce|")
3028def _g_sugg_g1_38 (lToken, nTokenOffset, nLastToken):
3029    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":3s", False)
3030def _g_cond_g1_105 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3031    return g_morph(lToken[nTokenOffset+3], ">(?:être|devoir|devenir|pouvoir|vouloir|savoir)/:V", ":3s")
3032def _g_sugg_g1_39 (lToken, nTokenOffset, nLastToken):
3033    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":3s")
3034def _g_cond_g1_106 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3035    return g_morph(lToken[nTokenOffset+3], ":[YP]") or g_morph(lToken[nTokenOffset+3], ":V", ">(?:être|devoir|devenir|pouvoir|vouloir|savoir)/")
3036def _g_sugg_g1_40 (lToken, nTokenOffset, nLastToken):
3037    return lToken[nLastToken-1+1]["sValue"][:-1]+"t"
3038def _g_cond_g1_107 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3039    return not g_value(lToken[nLastToken+1], "|je|tu|il|elle|on|nous|vous|ils|elles|iel|iels|")
3040def _g_sugg_g1_41 (lToken, nTokenOffset, nLastToken):
3041    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":1p")
3042def _g_sugg_g1_42 (lToken, nTokenOffset, nLastToken):
3043    return suggVerb(lToken[nLastToken-1+1]["sValue"], ":1p")
3044def _g_sugg_g1_43 (lToken, nTokenOffset, nLastToken):
3045    return suggVerb(lToken[nLastToken-1+1]["sValue"], ":2p")
3046def _g_sugg_g1_44 (lToken, nTokenOffset, nLastToken):
3047    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":2p")
3048def _g_cond_g1_108 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3049    return not (g_morph(lToken[nTokenOffset+2], ":[PQ]") and g_morph(lToken[nTokenOffset], ":V0.*:3p"))
3050def _g_sugg_g1_45 (lToken, nTokenOffset, nLastToken):
3051    return suggVerb(lToken[nTokenOffset+2]["sValue"], ":3p")
3052def _g_cond_g1_109 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3053    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":3s")
3054def _g_sugg_g1_46 (lToken, nTokenOffset, nLastToken):
3055    return suggVerb(lToken[nLastToken-1+1]["sValue"], ":3p")
3056def _g_cond_g1_110 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3057    return g_morph(lToken[nLastToken-1+1], ":3s")
3058def _g_cond_g1_111 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3059    return not g_morph(lToken[nTokenOffset], ":3p") and not g_value(lToken[nTokenOffset], "|t’|")
3060def _g_sugg_g1_47 (lToken, nTokenOffset, nLastToken):
3061    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":(?:3p|Ov)", False)
3062def _g_sugg_g1_48 (lToken, nTokenOffset, nLastToken):
3063    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":(?:3p|Ov)", False)
3064def _g_cond_g1_112 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3065    return g_morph(lToken[nLastToken-1+1], ":[12]s")
3066def _g_cond_g1_113 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3067    return not bCondMemo and g_morph(lToken[nLastToken-1+1], ":1p")
3068def _g_cond_g1_114 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3069    return not bCondMemo and g_morph(lToken[nLastToken-1+1], ":2p")
3070def _g_sugg_g1_49 (lToken, nTokenOffset, nLastToken):
3071    return suggVerbInfi(lToken[nLastToken-1+1]["sValue"])
3072def _g_sugg_g1_50 (lToken, nTokenOffset, nLastToken):
3073    return suggSimil(lToken[nTokenOffset+4]["sValue"], ":(?:[123][sp]|Y)", False)
3074def _g_sugg_g1_51 (lToken, nTokenOffset, nLastToken):
3075    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":(?:[123][sp]|Y)", False)
3076def _g_cond_g1_115 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3077    return not g_morph(lToken[nTokenOffset], ":R")
3078def _g_sugg_g1_52 (lToken, nTokenOffset, nLastToken):
3079    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":(?:[123][sp]|Y)", False)
3080def _g_cond_g1_116 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3081    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_1s_") and g_morph(lToken[nLastToken-1+1], ":1s", ":(?:E|G|W|M|J|3[sp])")
3082def _g_cond_g1_117 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3083    return not g_tag_before(lToken[nLastToken-1+1], dTags, "_1s_") and not g_morph(lToken[nTokenOffset], ":R") and g_morph(lToken[nLastToken-1+1], ":1s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
3084def _g_cond_g1_118 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3085    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_1s_") and g_morph(lToken[nTokenOffset+1], ":1s", ":(?:E|G|W|M|J|3[sp]|N|A|Q)") and not (lToken[nTokenOffset+1]["sValue"].istitle() and look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], "\\w"))
3086def _g_sugg_g1_53 (lToken, nTokenOffset, nLastToken):
3087    return suggVerb(lToken[nTokenOffset+1]["sValue"], ":3s")
3088def _g_cond_g1_119 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3089    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_") and g_morph(lToken[nLastToken-1+1], ":2s", ":(?:E|G|W|M|J|3[sp]|1p)")
3090def _g_cond_g1_120 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3091    return not g_tag_before(lToken[nLastToken-1+1], dTags, "_2s_") and g_morph(lToken[nLastToken-1+1], ":2s", ":(?:E|G|W|M|J|3[sp]|1p)")
3092def _g_cond_g1_121 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3093    return not g_tag_before(lToken[nLastToken-1+1], dTags, "_2s_") and not g_morph(lToken[nTokenOffset], ":R") and g_morph(lToken[nLastToken-1+1], ":2s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
3094def _g_cond_g1_122 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3095    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_") and g_morph(lToken[nTokenOffset+1], ":2s", ":(?:E|G|W|M|J|3[sp]|N|A|Q|1p)") and not (lToken[nTokenOffset+1]["sValue"].istitle() and look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], "\\w"))
3096def _g_cond_g1_123 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3097    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_1s_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_") and g_morph(lToken[nLastToken-1+1], ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
3098def _g_cond_g1_124 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3099    return not g_tag_before(lToken[nLastToken-1+1], dTags, "_1s_") and not g_tag_before(lToken[nLastToken-1+1], dTags, "_2s_") and g_morph(lToken[nLastToken-1+1], ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
3100def _g_cond_g1_125 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3101    return not g_tag_before(lToken[nLastToken-1+1], dTags, "_1s_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_") and not g_morph(lToken[nTokenOffset], ":R") and g_morph(lToken[nLastToken-1+1], ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
3102def _g_cond_g1_126 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3103    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_1s_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_") and not (lToken[nTokenOffset+1]["sValue"].istitle() and look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], "\\w")) and not g_morph(lToken[nTokenOffset], ":[DA].*:p")
3104def _g_cond_g1_127 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3105    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_1s_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_") and g_morph(lToken[nTokenOffset+1], ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p|V0e|N|A|Q)") and not (lToken[nTokenOffset+1]["sValue"].istitle() and look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], "\\w"))
3106def _g_cond_g1_128 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3107    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_1s_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_")
3108def _g_cond_g1_129 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3109    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_1s_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_") and not (lToken[nTokenOffset+1]["sValue"].istitle() and look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], "\\w")) and not g_morph(lToken[nTokenOffset], ":(?:R|D.*:p)")
3110def _g_cond_g1_130 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3111    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_1s_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_") and not (lToken[nTokenOffset+1]["sValue"].istitle() and look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], "\\w"))
3112def _g_cond_g1_131 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3113    return g_morph(lToken[nTokenOffset+1], ":1p", ":[EGMNAJ]") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_1p_") and not (lToken[nTokenOffset+1]["sValue"].istitle() and look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], "\\w"))
3114def _g_sugg_g1_54 (lToken, nTokenOffset, nLastToken):
3115    return suggVerb(lToken[nTokenOffset+1]["sValue"], ":3p")
3116def _g_cond_g1_132 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3117    return g_morph(lToken[nTokenOffset+1], ":2p", ":[EGMNAJ]") and not g_tag_before(lToken[nTokenOffset+2], dTags, "_2p_") and not (lToken[nTokenOffset+1]["sValue"].istitle() and look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], "\\w"))
3118def _g_cond_g1_133 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3119    return g_morph(lToken[nTokenOffset+4], ":K:1s", ">(?:aimer|vouloir)/")
3120def _g_sugg_g1_55 (lToken, nTokenOffset, nLastToken):
3121    return lToken[nTokenOffset+4]["sValue"][:-1]
3122def _g_cond_g1_134 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3123    return g_morph(lToken[nTokenOffset+5], ":K:1s", ">(?:aimer|vouloir)/")
3124def _g_sugg_g1_56 (lToken, nTokenOffset, nLastToken):
3125    return lToken[nTokenOffset+5]["sValue"][:-1]
3126def _g_cond_g1_135 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3127    return g_morph(lToken[nTokenOffset+6], ":K:1s", ">(?:aimer|vouloir)/")
3128def _g_sugg_g1_57 (lToken, nTokenOffset, nLastToken):
3129    return lToken[nTokenOffset+6]["sValue"][:-1]
3130def _g_cond_g1_136 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3131    return g_morph(lToken[nTokenOffset+7], ":K:1s", ">(?:aimer|vouloir)/")
3132def _g_sugg_g1_58 (lToken, nTokenOffset, nLastToken):
3133    return lToken[nTokenOffset+7]["sValue"][:-1]
3134def _g_cond_g1_137 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3135    return not lToken[nTokenOffset+1]["sValue"].isupper() and lToken[nTokenOffset+2]["sValue"].islower()
3136def _g_cond_g1_138 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3137    return lToken[nTokenOffset+2]["sValue"] == "l’"
3138def _g_cond_g1_139 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3139    return not lToken[nTokenOffset+1]["sValue"].isupper() and lToken[nTokenOffset+3]["sValue"].islower()
3140def _g_sugg_g1_59 (lToken, nTokenOffset, nLastToken):
3141    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[NA]:[fe]:[si]", True)
3142def _g_cond_g1_140 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3143    return lToken[nTokenOffset+2]["sValue"].islower() and not g_value(lToken[nTokenOffset], "|le|la|les|") and hasSimil(lToken[nTokenOffset+2]["sValue"], ":[NA]:[fe]:[si]")
3144def _g_cond_g1_141 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3145    return g_morph(lToken[nTokenOffset+2], "V.....[pqx]")
3146def _g_cond_g1_142 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3147    return not g_morph(lToken[nTokenOffset+2], ":V0") and hasSimil(lToken[nTokenOffset+2]["sValue"])
3148def _g_cond_g1_143 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3149    return not lToken[nTokenOffset+1]["sValue"].isupper()
3150def _g_sugg_g1_60 (lToken, nTokenOffset, nLastToken):
3151    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[NA]:[me]:[si]", True)
3152def _g_cond_g1_144 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3153    return lToken[nTokenOffset+2]["sValue"].islower() and not g_value(lToken[nTokenOffset], "|le|la|les|")
3154def _g_cond_g1_145 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3155    return lToken[nTokenOffset+2]["sValue"].islower() and not g_value(lToken[nTokenOffset+2], "|sortir|")
3156def _g_cond_g1_146 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3157    return lToken[nTokenOffset+2]["sValue"].islower() and not g_value(lToken[nTokenOffset+2], "|faire|sont|soit|fut|fût|serait|sera|seront|soient|furent|fussent|seraient|peut|pouvait|put|pût|pourrait|pourra|doit|dut|dût|devait|devrait|devra|") and hasSimil(lToken[nTokenOffset+2]["sValue"])
3158def _g_sugg_g1_61 (lToken, nTokenOffset, nLastToken):
3159    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[NA]:.:[si]", True)
3160def _g_cond_g1_147 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3161    return lToken[nTokenOffset+3]["sValue"].islower()
3162def _g_sugg_g1_62 (lToken, nTokenOffset, nLastToken):
3163    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":[NA]:[me]:[si]", True)
3164def _g_cond_g1_148 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3165    return not g_value(lToken[nTokenOffset], "|dont|l’|d’|sauf|excepté|qu’|") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\bun à +$") and not g_morph(lToken[nTokenOffset+2], ":V0")
3166def _g_sugg_g1_63 (lToken, nTokenOffset, nLastToken):
3167    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[NAQ]:[me]:[si]", True)
3168def _g_sugg_g1_64 (lToken, nTokenOffset, nLastToken):
3169    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[NA]:.:[pi]", True)
3170def _g_cond_g1_149 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3171    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":1p")
3172def _g_cond_g1_150 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3173    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":2p")
3174def _g_sugg_g1_65 (lToken, nTokenOffset, nLastToken):
3175    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[NA]:[me]:[pi]", True)
3176def _g_cond_g1_151 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3177    return lToken[nTokenOffset+2]["sValue"].islower() and not g_value(lToken[nTokenOffset], "|le|la|les|") and hasSimil(lToken[nTokenOffset+2]["sValue"], ":[NA]:[fe]:[pi]")
3178def _g_sugg_g1_66 (lToken, nTokenOffset, nLastToken):
3179    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[NA]:[fe]:[pi]", True)
3180def _g_cond_g1_152 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3181    return lToken[nTokenOffset+2]["sValue"].islower() and not g_value(lToken[nTokenOffset+2], "|soient|soit|sois|puisse|puisses|puissent|")
3182def _g_sugg_g1_67 (lToken, nTokenOffset, nLastToken):
3183    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":[NA]", True)
3184def _g_cond_g1_153 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3185    return not g_value(lToken[nTokenOffset], "|un|une|")
3186def _g_cond_g1_154 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3187    return not lToken[nTokenOffset+2]["sValue"].istitle() and not g_value(lToken[nTokenOffset+2], "|jure|")
3188def _g_sugg_g1_68 (lToken, nTokenOffset, nLastToken):
3189    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[NA]", True)
3190def _g_cond_g1_155 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3191    return not lToken[nTokenOffset+3]["sValue"].istitle()
3192def _g_sugg_g1_69 (lToken, nTokenOffset, nLastToken):
3193    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":[NA]:.:[si]", True)
3194def _g_cond_g1_156 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3195    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 1) and g_morph(lToken[nTokenOffset+3], ":[NAQ].*:[me]", ":[YG]") and not lToken[nTokenOffset+3]["sValue"].istitle() and not (g_value(lToken[nTokenOffset+3], "|mal|") and g_morph(lToken[nLastToken+1], ":Y"))
3196def _g_cond_g1_157 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3197    return g_morph(lToken[nTokenOffset+3], ":[123][sp]")
3198def _g_sugg_g1_70 (lToken, nTokenOffset, nLastToken):
3199    return suggVerbInfi(lToken[nTokenOffset+3]["sValue"])
3200def _g_cond_g1_158 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3201    return g_morph(lToken[nTokenOffset+3], ":[123][sp]", ":[NAQ]") and not lToken[nTokenOffset+3]["sValue"].istitle()
3202def _g_cond_g1_159 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3203    return g_morph(lToken[nTokenOffset+3], ":V1.*:(?:Iq|Ip:2p)", ":1p")
3204def _g_cond_g1_160 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3205    return hasSimil(lToken[nTokenOffset+3]["sValue"], ":(?:[NA]:[fe]:[si])")
3206def _g_sugg_g1_71 (lToken, nTokenOffset, nLastToken):
3207    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":(?:[NA]:[fe]:[si])", True)
3208def _g_cond_g1_161 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3209    return not lToken[nTokenOffset+3]["sValue"].istitle() and not g_value(lToken[nTokenOffset], "|plus|moins|")
3210def _g_cond_g1_162 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3211    return not lToken[nLastToken-1+1]["sValue"].istitle()
3212def _g_sugg_g1_72 (lToken, nTokenOffset, nLastToken):
3213    return suggSimil(lToken[nLastToken-1+1]["sValue"], ":[NA]", True)
3214def _g_cond_g1_163 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3215    return not lToken[nTokenOffset+3]["sValue"].istitle() and not g_value(lToken[nTokenOffset], "|un|une|")
3216def _g_cond_g1_164 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3217    return not lToken[nTokenOffset+2]["sValue"].istitle()
3218def _g_cond_g1_165 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3219    return not g_morph(lToken[nTokenOffset], ":V[123].*:[123][sp]|>(?:pouvoir|vouloir|falloir)/")
3220def _g_sugg_g1_73 (lToken, nTokenOffset, nLastToken):
3221    return suggVerbPpas(lToken[nTokenOffset+5]["sValue"])
3222def _g_cond_g1_166 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3223    return g_morph(lToken[nTokenOffset+2], ":", ":P")
3224def _g_cond_g1_167 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3225    return not g_morph(lToken[nTokenOffset], ":R") and g_morph(lToken[nTokenOffset+2], ":[NAQ]", ":[PG]")
3226def _g_cond_g1_168 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3227    return g_morph(lToken[nTokenOffset+3], ":3p")
3228def _g_sugg_g1_74 (lToken, nTokenOffset, nLastToken):
3229    return suggVerbTense(lToken[nTokenOffset+3]["sValue"], ":PQ", ":P")
3230def _g_cond_g1_169 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3231    return g_value(lToken[nTokenOffset+2], "|m’|t’|s’|")
3232def _g_sugg_g1_75 (lToken, nTokenOffset, nLastToken):
3233    return lToken[nTokenOffset+2]["sValue"][0:1] + "’en"
3234def _g_cond_g1_170 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3235    return not g_morph(lToken[nTokenOffset+3], ":[NA]")
3236def _g_cond_g1_171 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3237    return not lToken[nTokenOffset+1]["sValue"].isupper() and not g_value(lToken[nTokenOffset+3], "|importe|")
3238def _g_cond_g1_172 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3239    return not g_value(lToken[nTokenOffset], "|n’|")
3240def _g_cond_g1_173 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3241    return g_morph(lToken[nLastToken-1+1], ":Q") and not g_morph(lToken[nTokenOffset], ":(?:V0a|R)")
3242def _g_sugg_g1_76 (lToken, nTokenOffset, nLastToken):
3243    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":m:s")+"|"+suggVerbInfi(lToken[nLastToken-1+1]["sValue"])+"|"+suggVerbTense(lToken[nLastToken-1+1]["sValue"], ":Iq", ":3s")
3244def _g_sugg_g1_77 (lToken, nTokenOffset, nLastToken):
3245    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":f:s")+"|"+suggVerbTense(lToken[nLastToken-1+1]["sValue"], ":Iq", ":3s")
3246def _g_sugg_g1_78 (lToken, nTokenOffset, nLastToken):
3247    return suggSimil(lToken[nLastToken-1+1]["sValue"], ":[NA]")
3248def _g_cond_g1_174 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3249    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_") and not g_value(lToken[nTokenOffset], "|ou|")
3250def _g_cond_g1_175 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3251    return not lToken[nTokenOffset+2]["sValue"].istitle() and not g_morph(lToken[nTokenOffset], ":[NA]:[me]:si")
3252def _g_cond_g1_176 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3253    return g_morphVC(lToken[nTokenOffset+3], ">(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)/") and g_morph(lToken[nTokenOffset+2], ":(?:Y|[123][sp])", ":[AQ]")
3254def _g_sugg_g1_79 (lToken, nTokenOffset, nLastToken):
3255    return suggVerbPpas(lToken[nTokenOffset+2]["sValue"])
3256def _g_cond_g1_177 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3257    return g_morphVC(lToken[nTokenOffset+3], ">(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)/") and g_morph(lToken[nTokenOffset+2], ":A.*:p", ":[si]")
3258def _g_sugg_g1_80 (lToken, nTokenOffset, nLastToken):
3259    return suggSing(lToken[nTokenOffset+2]["sValue"])
3260def _g_cond_g1_178 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3261    return g_morphVC(lToken[nTokenOffset+3], ">(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)/") and g_morph(lToken[nTokenOffset+2], ":A.*:[fp]", ":[me]:[si]")
3262def _g_sugg_g1_81 (lToken, nTokenOffset, nLastToken):
3263    return suggMasSing(lToken[nTokenOffset+2]["sValue"])
3264def _g_cond_g1_179 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3265    return g_morphVC(lToken[nTokenOffset+3], ">(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)/") and g_morph(lToken[nTokenOffset+2], ":A.*:[mp]", ":[fe]:[si]")
3266def _g_sugg_g1_82 (lToken, nTokenOffset, nLastToken):
3267    return suggFemSing(lToken[nTokenOffset+2]["sValue"])
3268def _g_cond_g1_180 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3269    return g_morphVC(lToken[nTokenOffset+3], ">(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)/") and g_morph(lToken[nTokenOffset+2], ":A.*:s", ":[pi]")
3270def _g_sugg_g1_83 (lToken, nTokenOffset, nLastToken):
3271    return suggPlur(lToken[nTokenOffset+2]["sValue"])
3272def _g_cond_g1_181 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3273    return g_morphVC(lToken[nTokenOffset+3], ">(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)/") and g_morph(lToken[nTokenOffset+2], ":A.*:[sf]", ":[me]:[pi]")
3274def _g_sugg_g1_84 (lToken, nTokenOffset, nLastToken):
3275    return suggMasPlur(lToken[nTokenOffset+2]["sValue"])
3276def _g_cond_g1_182 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3277    return g_morphVC(lToken[nTokenOffset+3], ">(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)/") and g_morph(lToken[nTokenOffset+2], ":A.*:[sm]", ":[fe]:[pi]")
3278def _g_sugg_g1_85 (lToken, nTokenOffset, nLastToken):
3279    return suggFemPlur(lToken[nTokenOffset+2]["sValue"])
3280def _g_cond_g1_183 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3281    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_")
3282def _g_cond_g1_184 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3283    return not g_value(lToken[nTokenOffset+2], "|envie|")
3284def _g_sugg_g1_86 (lToken, nTokenOffset, nLastToken):
3285    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[AW]", True)
3286def _g_cond_g1_185 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3287    return g_morph(lToken[nTokenOffset+2], ":V1.*:Y", ":[AW]")
3288def _g_cond_g1_186 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3289    return lToken[nTokenOffset+4]["sValue"] == "soie" or lToken[nTokenOffset+4]["sValue"] == "soies"
3290def _g_cond_g1_187 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3291    return g_morph(lToken[nTokenOffset+4], ":V", ":3[sp]")
3292def _g_cond_g1_188 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3293    return g_morph(lToken[nTokenOffset+2], ":A.*:p", ":[is]")
3294def _g_cond_g1_189 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3295    return g_morph(lToken[nTokenOffset+2], ":A.*:s", ":[ip]")
3296def _g_cond_g1_190 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3297    return not g_value(lToken[nLastToken+1], "|moins|plus|mieux|")
3298def _g_cond_g1_191 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3299    return not lToken[nTokenOffset+1]["sValue"].isupper() and not g_value(lToken[nLastToken+1], "|côté|coup|pic|peine|peu|plat|propos|valoir|")
3300def _g_cond_g1_192 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3301    return not lToken[nTokenOffset+1]["sValue"].isupper() and not g_value(lToken[nLastToken+1], "|côté|coup|pic|peine|peu|plat|propos|valoir|") and not g_morph(lToken[nTokenOffset], ">venir/")
3302def _g_cond_g1_193 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3303    return not g_morph(lToken[nTokenOffset], ":(?:3s|R)") and not g_morph(lToken[nLastToken+1], ":Oo|>quo?i/")
3304def _g_cond_g1_194 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3305    return not g_morph(lToken[nTokenOffset], ":D")
3306def _g_cond_g1_195 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3307    return lToken[nTokenOffset+2]["sValue"].islower() and not g_value(lToken[nTokenOffset+2], "|coté|sont|")
3308def _g_cond_g1_196 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3309    return g_morph(lToken[nTokenOffset+2], ":(?:V.......[_z][az].*:Q|V1.*:Ip:2p)", ":[MGWNY]")
3310def _g_cond_g1_197 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3311    return bCondMemo and g_morph(lToken[nTokenOffset+2], "V1.*:(?:Ip:2p|Q)", "*") and not g_value(lToken[nTokenOffset], "|il|elle|on|n’|les|l’|m’|t’|s’|d’|en|y|lui|nous|vous|leur|")
3312def _g_sugg_g1_87 (lToken, nTokenOffset, nLastToken):
3313    return suggVerbInfi(lToken[nTokenOffset+2]["sValue"])
3314def _g_cond_g1_198 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3315    return not bCondMemo and g_morph(lToken[nTokenOffset+2], ":[123][sp]", "*") and not g_value(lToken[nTokenOffset+2], "|tord|tords|")
3316def _g_cond_g1_199 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3317    return g_morph(lToken[nTokenOffset+2], ":V2.*:I[ps]:3s", "*")
3318def _g_sugg_g1_88 (lToken, nTokenOffset, nLastToken):
3319    return suggVerbPpas(lToken[nTokenOffset+2]["sValue"], ":m:s")
3320def _g_cond_g1_200 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3321    return bCondMemo
3322def _g_cond_g1_201 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3323    return not g_value(lToken[nTokenOffset], "|il|elle|iel|on|n’|m’|t’|l’|") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\bqu[e’] |n’(?:en|y) +$")
3324def _g_cond_g1_202 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3325    return g_morph(lToken[nTokenOffset+1], ":N", ":Ov")
3326def _g_cond_g1_203 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3327    return not g_morph(lToken[nTokenOffset], ":(?:D.*:f:s|A.*:[fe]:[si])|>en/")
3328def _g_cond_g1_204 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3329    return g_morph(lToken[nTokenOffset], ":[VN]|<start>", "*")
3330def _g_cond_g1_205 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3331    return not g_morph(lToken[nTokenOffset], ":Ov|>(?:il|elle)/")
3332def _g_cond_g1_206 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3333    return not (g_value(lToken[nTokenOffset+3], "|sur|") and g_value(lToken[nTokenOffset], "|tout|par|") and g_value(lToken[nTokenOffset+2], "|coup|"))
3334def _g_cond_g1_207 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3335    return not g_morph(lToken[nTokenOffset], ">(?:cadeau|offrande|présent)")
3336def _g_cond_g1_208 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3337    return not (g_value(lToken[nTokenOffset+1], "|à|") and g_value(lToken[nTokenOffset+2], "|tue-tête|"))
3338def _g_cond_g1_209 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3339    return not g_value(lToken[nTokenOffset], "|l’|n’|il|elle|on|y|") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)n’en +$")
3340def _g_cond_g1_210 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3341    return lToken[nTokenOffset+2]["sValue"].islower() and not g_value(lToken[nTokenOffset+3], "|accès|bon|bonne|beau|besoin|charge|confiance|connaissance|conscience|crainte|droit|envie|été|faim|grand|grande|hâte|honte|interdiction|lieu|mauvaise|peine|peur|raison|rapport|recours|soif|tendance|terre|tort|vent|vocation|") and g_morph(lToken[nTokenOffset+1], ":N", "*")
3342def _g_cond_g1_211 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3343    return g_morph(lToken[nTokenOffset], ">(?:falloir|aller|pouvoir)/", ">que/")
3344def _g_cond_g1_212 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3345    return g_morph(lToken[nTokenOffset], ">(?:être|rester|demeurer)/")
3346def _g_cond_g1_213 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3347    return not g_value(lToken[nTokenOffset], "|l’|d’|") and not g_tag(lToken[nTokenOffset], "_en_")
3348def _g_cond_g1_214 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3349    return g_morph(lToken[nTokenOffset], ":V", "*") and not g_tag(lToken[nTokenOffset], "_en_")
3350def _g_cond_g1_215 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3351    return not g_value(lToken[nTokenOffset], "|le|du|")
3352def _g_cond_g1_216 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3353    return not g_value(lToken[nTokenOffset], "|les|des|")
3354def _g_sugg_g1_89 (lToken, nTokenOffset, nLastToken):
3355    return lToken[nTokenOffset+2]["sValue"].replace("scé", "cé").replace("SCÉ", "CÉ")
3356def _g_sugg_g1_90 (lToken, nTokenOffset, nLastToken):
3357    return lToken[nTokenOffset+2]["sValue"].replace("cé", "scé").replace("CÉ", "SCÉ")
3358def _g_sugg_g1_91 (lToken, nTokenOffset, nLastToken):
3359    return lToken[nTokenOffset+2]["sValue"].replace("a", "â").replace("A", "Â")
3360def _g_cond_g1_217 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3361    return g_morph(lToken[nTokenOffset], "<start>|,|:D")
3362def _g_sugg_g1_92 (lToken, nTokenOffset, nLastToken):
3363    return "à "+ lToken[nTokenOffset+2]["sValue"].replace("on", "es").replace("ON", "ES").replace("otre", "os").replace("OTRE", "OS").replace("eur", "eurs").replace("EUR", "EURS") + " dépens"
3364def _g_sugg_g1_93 (lToken, nTokenOffset, nLastToken):
3365    return lToken[nLastToken-1+1]["sValue"].replace("é", "ée").replace("É", "ÉE")
3366def _g_cond_g1_218 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3367    return not g_value(lToken[nTokenOffset], "|du|")
3368def _g_cond_g1_219 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3369    return not g_morph(lToken[nTokenOffset], ">(?:appeler|considérer|trouver)/")
3370def _g_cond_g1_220 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3371    return not (g_value(lToken[nTokenOffset+2], "|ou|") and g_value(lToken[nLastToken+1], "|son|ses|")) and g_morph(lToken[nTokenOffset+1], ":D")
3372def _g_cond_g1_221 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3373    return lToken[nTokenOffset+1]["sValue"] != "SA"
3374def _g_cond_g1_222 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3375    return not g_value(lToken[nTokenOffset], "|oh|ah|") and not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +et là")
3376def _g_cond_g1_223 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3377    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 0, 0) and not (g_value(lToken[nTokenOffset+2], "|a|") and g_value(lToken[nLastToken+1], "|été|"))
3378def _g_cond_g1_224 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3379    return g_value(lToken[nLastToken+1], "|été|")
3380def _g_cond_g1_225 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3381    return not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +en +heure")
3382def _g_sugg_g1_94 (lToken, nTokenOffset, nLastToken):
3383    return lToken[nTokenOffset+1]["sValue"].replace("o", "a").replace("O", "A")
3384def _g_cond_g1_226 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3385    return g_morphVC(lToken[nTokenOffset+2], ":[NA]")
3386def _g_cond_g1_227 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3387    return not lToken[nTokenOffset+1]["sValue"].isupper() and lToken[nTokenOffset+2]["sValue"].islower() and not g_value(lToken[nTokenOffset+2], "|faire|")
3388def _g_cond_g1_228 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3389    return not lToken[nTokenOffset+1]["sValue"].isupper() and not g_value(lToken[nTokenOffset+2], "|quelques|")
3390def _g_cond_g1_229 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3391    return not g_value(lToken[nTokenOffset], "|que|qu’|")
3392def _g_cond_g1_230 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3393    return lToken[nTokenOffset+2]["sValue"] == "a"
3394def _g_cond_g1_231 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3395    return not (lToken[nTokenOffset+3]["sValue"] == "ce" and g_value(lToken[nLastToken+1], "|moment|"))
3396def _g_sugg_g1_95 (lToken, nTokenOffset, nLastToken):
3397    return lToken[nTokenOffset+1]["sValue"].replace("tt", "t").replace("TT", "T")
3398def _g_cond_g1_232 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3399    return not g_morph(lToken[nTokenOffset+1], ":Q|>(?:profiter|bénéficier|nombre|tant)/") and not g_morph(lToken[nLastToken+1], ">(?:financi[eè]re?|pécuni(?:er|aire)|sociaux)s?/")
3400def _g_cond_g1_233 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3401    return not g_morphVC(lToken[nTokenOffset+1], ">(?:profiter|bénéficier)/") and not g_morph(lToken[nLastToken+1], ">(?:financière|pécuni(?:er|aire)|sociale)/")
3402def _g_sugg_g1_96 (lToken, nTokenOffset, nLastToken):
3403    return lToken[nTokenOffset+1]["sValue"].replace("nud", "nu").replace("NUD", "NU")
3404def _g_cond_g1_234 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3405    return not g_morph(lToken[nTokenOffset], ":(?:D.*:p|B)|>de/")
3406def _g_cond_g1_235 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3407    return not g_value(lToken[nTokenOffset], "|un|une|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|")
3408def _g_cond_g1_236 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3409    return bCondMemo and hasSimil(lToken[nTokenOffset+2]["sValue"], ":[NA].*:[pi]")
3410def _g_cond_g1_237 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3411    return not g_value(lToken[nTokenOffset], "|%|") and not g_morph(lToken[nTokenOffset], ":B|>(?:pourcent|barre|seuil|aucun|plusieurs|certaine?s|une?)/")
3412def _g_cond_g1_238 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3413    return not g_morph(lToken[nTokenOffset], ":R|>(?:approcher|anniversaire|cap|célébration|commémoration|occasion|passage|programme|terme|classe|délai|échéance|autour|celui|ceux|celle|celles)/") and not g_value(lToken[nLastToken+1], "|de|du|des|d’|") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "% +$")
3414def _g_cond_g1_239 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3415    return not g_morph(lToken[nTokenOffset], ":R|>(?:approcher|cap|passage|programme|terme|classe|autour|celui|ceux|celle|celles|au-delà)/") and not g_value(lToken[nLastToken+1], "|de|du|des|d’|") and not g_value(lToken[nTokenOffset+2], "|35|39|40|48|")
3416def _g_cond_g1_240 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3417    return not g_morph(lToken[nTokenOffset], ":R|>(?:approcher|cap|passage|programme|terme|classe|autour|celui|ceux|celle|celles)/") and not g_value(lToken[nLastToken+1], "|de|du|des|d’|")
3418def _g_cond_g1_241 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3419    return not g_morph(lToken[nTokenOffset], ":E")
3420def _g_sugg_g1_97 (lToken, nTokenOffset, nLastToken):
3421    return lToken[nTokenOffset+2]["sValue"].replace("que", "c").replace("QUE", "C")
3422def _g_cond_g1_242 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3423    return g_morph(lToken[nTokenOffset], ":W")
3424def _g_sugg_g1_98 (lToken, nTokenOffset, nLastToken):
3425    return lToken[nTokenOffset+1]["sValue"].replace("nd", "nt").replace("ND", "NT")
3426def _g_sugg_g1_99 (lToken, nTokenOffset, nLastToken):
3427    return lToken[nLastToken-1+1]["sValue"].replace("nd", "nt").replace("ND", "NT")
3428def _g_cond_g1_243 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3429    return g_morph(lToken[nTokenOffset+1], ":[NA].*:[fe]:[pi]", ":G")
3430def _g_cond_g1_244 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3431    return g_morph(lToken[nTokenOffset+1], ":[DB]") and g_morph(lToken[nTokenOffset+2], ":N", ":[GAWM]")
3432def _g_cond_g1_245 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3433    return not g_value(lToken[nLastToken+1], "|de|d’|des|du|") and not g_value(g_token(lToken, nLastToken+2), "|de|d’|des|du|")
3434def _g_cond_g1_246 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3435    return not g_morph(lToken[nLastToken+1], ":[NA].*:[me]")
3436def _g_cond_g1_247 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3437    return not g_value(lToken[nLastToken+1], "|que|qu’|sûr|davantage|entendu|d’|avant|souvent|longtemps|des|moins|plus|trop|loin|au-delà|") and not g_morph(lToken[nLastToken+1], ":[YAW]")
3438def _g_cond_g1_248 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3439    return not (g_value(lToken[nTokenOffset+1], "|emballé|") and g_value(lToken[nLastToken-1+1], "|pesé|")) and g_morph(lToken[nTokenOffset], ":C|<start>|>,")
3440def _g_cond_g1_249 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3441    return g_morph(lToken[nTokenOffset], ":V", ":A")
3442def _g_cond_g1_250 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3443    return not g_value(lToken[nTokenOffset], "|n’|") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2p_")
3444def _g_sugg_g1_100 (lToken, nTokenOffset, nLastToken):
3445    return lToken[nTokenOffset+1]["sValue"].replace("a", "").replace("A", "")
3446def _g_cond_g1_251 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3447    return not g_value(lToken[nTokenOffset], "|il|ils|ne|en|y|leur|lui|nous|vous|me|te|se|la|le|les|qui|<start>|,|")
3448def _g_sugg_g1_101 (lToken, nTokenOffset, nLastToken):
3449    return lToken[nTokenOffset+1]["sValue"].replace("c", "").replace("C", "")
3450def _g_sugg_g1_102 (lToken, nTokenOffset, nLastToken):
3451    return lToken[nTokenOffset+1]["sValue"].replace("an", "anc").replace("AN", "ANC")
3452def _g_sugg_g1_103 (lToken, nTokenOffset, nLastToken):
3453    return lToken[nTokenOffset+1]["sValue"].replace("au", "o").replace("AU", "O")
3454def _g_sugg_g1_104 (lToken, nTokenOffset, nLastToken):
3455    return lToken[nTokenOffset+1]["sValue"].replace("o", "au").replace("O", "AU")
3456def _g_cond_g1_252 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3457    return g_morph(lToken[nTokenOffset], ":(?:[123][sp]|Y)", "*") and not g_value(lToken[nLastToken+1], "|civile|commerciale|froide|mondiale|nucléaire|préventive|psychologique|sainte|totale|")
3458def _g_cond_g1_253 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3459    return g_morph(lToken[nTokenOffset], ":D.*:f:s")
3460def _g_sugg_g1_105 (lToken, nTokenOffset, nLastToken):
3461    return lToken[nTokenOffset+1]["sValue"].replace("û", "u")
3462def _g_cond_g1_254 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3463    return g_morph(lToken[nLastToken-1+1], ":[123][sp]", ":[GQ]")
3464def _g_cond_g1_255 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3465    return g_morph(lToken[nTokenOffset+4], ":[123][sp]", ":[GQ]")
3466def _g_cond_g1_256 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3467    return g_morph(lToken[nTokenOffset+5], ":[123][sp]", ":[GQ]")
3468def _g_cond_g1_257 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3469    return not lToken[nTokenOffset+1]["sValue"].isupper() and not lToken[nTokenOffset+2]["sValue"].isupper() and not g_morph(lToken[nTokenOffset], ":E|>le/")
3470def _g_sugg_g1_106 (lToken, nTokenOffset, nLastToken):
3471    return lToken[nTokenOffset+2]["sValue"][:-2]+"là"
3472def _g_sugg_g1_107 (lToken, nTokenOffset, nLastToken):
3473    return lToken[nTokenOffset+1]["sValue"][:-2]+"là"
3474def _g_cond_g1_258 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3475    return g_morph(lToken[nTokenOffset+1], ":V", ":[NA]", 0, -3)
3476def _g_cond_g1_259 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3477    return g_morph(lToken[nTokenOffset+1], ":V...t")
3478def _g_sugg_g1_108 (lToken, nTokenOffset, nLastToken):
3479    return lToken[nTokenOffset+1]["sValue"][:-3]+"-la|" + lToken[nTokenOffset+1]["sValue"][:-3]+" là"
3480def _g_sugg_g1_109 (lToken, nTokenOffset, nLastToken):
3481    return lToken[nTokenOffset+1]["sValue"][:-3]+" là"
3482def _g_cond_g1_260 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3483    return g_morph(lToken[nTokenOffset], ":D|<start>|,")
3484def _g_cond_g1_261 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3485    return g_morph(lToken[nTokenOffset], ":V") and not g_tag(lToken[nTokenOffset], "_en_")
3486def _g_cond_g1_262 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3487    return not g_morph(lToken[nTokenOffset], ">[ld]es/")
3488def _g_cond_g1_263 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3489    return not g_morph(lToken[nTokenOffset], ":3s")
3490def _g_cond_g1_264 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3491    return g_morph(lToken[nTokenOffset], "<start>|:C|>,/")
3492def _g_cond_g1_265 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3493    return g_morph(lToken[nTokenOffset], "<start>|:C|>,/") and g_analyse(lToken[nLastToken-1+1], ":(?:Q|V1.*:Y)", ":N.*:[fe]")
3494def _g_cond_g1_266 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3495    return g_analyse(lToken[nLastToken-1+1], ":(?:Q|V1.*:Y)", ":N.*:[fe]")
3496def _g_cond_g1_267 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3497    return not g_morph(lToken[nTokenOffset], ":(?:3p|D)")
3498def _g_cond_g1_268 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3499    return (lToken[nTokenOffset+1]["sValue"].islower() or g_value(lToken[nTokenOffset], "|<start>|,|")) and lToken[nTokenOffset+2]["sValue"].islower()
3500def _g_cond_g1_269 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3501    return not g_value(lToken[nLastToken+1], "|père|")
3502def _g_cond_g1_270 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3503    return not g_value(lToken[nTokenOffset], "|le|la|les|du|des|au|aux|")
3504def _g_cond_g1_271 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3505    return not g_morph(lToken[nTokenOffset], ":D.*:m:[si]")
3506def _g_cond_g1_272 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3507    return not g_morph(lToken[nTokenOffset], ":V.*:3s") and not look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], "’$")
3508def _g_cond_g1_273 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3509    return not g_morph(lToken[nTokenOffset], ":[VR]|<start>") and not g_morph(lToken[nLastToken+1], ":(?:3s|Ov)")
3510def _g_cond_g1_274 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3511    return not g_value(lToken[nLastToken+1], "|il|ils|elle|elles|iel|iels|")
3512def _g_sugg_g1_110 (lToken, nTokenOffset, nLastToken):
3513    return lToken[nTokenOffset+1]["sValue"][:-1]
3514def _g_cond_g1_275 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3515    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and not g_value(lToken[nTokenOffset+2], "|soit|") and g_morph(lToken[nTokenOffset+2], ":3s")
3516def _g_cond_g1_276 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3517    return not g_morph(lToken[nTokenOffset], ":D") and not g_value(lToken[nLastToken+1], "|depuis|à|")
3518def _g_sugg_g1_111 (lToken, nTokenOffset, nLastToken):
3519    return lToken[nTokenOffset+1]["sValue"].replace("a", "â").replace("A", "Â")
3520def _g_cond_g1_277 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3521    return not g_morph(lToken[nTokenOffset], ":D.*:[me]|>(?:grande|petite)/")
3522def _g_cond_g1_278 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3523    return g_morph(lToken[nLastToken-3+1], ":V")
3524def _g_cond_g1_279 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3525    return not g_morph(lToken[nTokenOffset], ":V")
3526def _g_sugg_g1_112 (lToken, nTokenOffset, nLastToken):
3527    return lToken[nTokenOffset+3]["sValue"].replace("pé", "pê").replace("Pé", "Pê").replace("PÉ", "PÊ")
3528def _g_sugg_g1_113 (lToken, nTokenOffset, nLastToken):
3529    return lToken[nTokenOffset+1]["sValue"].replace("pé", "pê").replace("Pé", "Pê").replace("PÉ", "PÊ")
3530def _g_cond_g1_280 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3531    return not g_morph(lToken[nTokenOffset], ">(?:très|en|un|de|du)/")
3532def _g_cond_g1_281 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3533    return g_morph(lToken[nTokenOffset], ":C|<start>")
3534def _g_cond_g1_282 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3535    return not g_value(lToken[nTokenOffset], "|quelqu’|l’|d’|sauf|")
3536def _g_cond_g1_283 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3537    return not g_morph(lToken[nTokenOffset+2], ">seul/") and not g_morph(lToken[nTokenOffset], ">(?:je|tu|il|on|ne)/")
3538def _g_sugg_g1_114 (lToken, nTokenOffset, nLastToken):
3539    return lToken[nTokenOffset+1]["sValue"].replace("n", "nt").replace("N", "NT")
3540def _g_cond_g1_284 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3541    return not g_value(lToken[nTokenOffset], "|la|en|une|") and not g_value(lToken[nLastToken+1], "|position|dance|")
3542def _g_cond_g1_285 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3543    return g_morph(lToken[nTokenOffset+1], ":Y|<start>")
3544def _g_sugg_g1_115 (lToken, nTokenOffset, nLastToken):
3545    return lToken[nTokenOffset+1]["sValue"].replace("om", "au").replace("OM", "AU")
3546def _g_sugg_g1_116 (lToken, nTokenOffset, nLastToken):
3547    return lToken[nTokenOffset+1]["sValue"].replace("au", "om").replace("AU", "OM")
3548def _g_cond_g1_286 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3549    return not g_value(lToken[nTokenOffset], "|peu|de|") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\bau plus $")
3550def _g_cond_g1_287 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3551    return not g_morph(lToken[nTokenOffset], ":D") and not g_morph(g_token(lToken, nTokenOffset+1-2), ">obtenir/")
3552def _g_cond_g1_288 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3553    return g_morph(lToken[nTokenOffset], ":D.*:[pm]")
3554def _g_cond_g1_289 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3555    return g_morph(lToken[nTokenOffset], ":D.*:[mp]|<start>")
3556def _g_cond_g1_290 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3557    return not g_morph(lToken[nTokenOffset], ">(?:arriver|venir|à|revenir|partir|repartir|aller|de)/") and not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +[mts]on tour[, ]")
3558def _g_cond_g1_291 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3559    return not g_morph(lToken[nTokenOffset], ">(?:arriver|venir|à|revenir|partir|repartir|aller|de)/")
3560def _g_cond_g1_292 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3561    return not g_value(lToken[nTokenOffset+2], "|à|au|aux|")
3562def _g_cond_g1_293 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3563    return not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ ne s(?:ai[st]|u[ts]|avai(?:s|t|ent)|urent) ")
3564def _g_cond_g1_294 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3565    return g_morphVC(lToken[nTokenOffset+2], ">(?:déduire|penser)/")
3566def _g_cond_g1_295 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3567    return not (g_value(lToken[nTokenOffset+2], "|en|ne|")  and g_morph(lToken[nLastToken+1], ":V0e"))
3568def _g_cond_g1_296 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3569    return lToken[nTokenOffset+2]["sValue"].islower() and not (g_morph(lToken[nTokenOffset+2], ">(?:pouvoir|devoir|aller)/") and (g_morph(lToken[nLastToken+1], ":V0e") or g_morph(g_token(lToken, nLastToken+2), ":V0e"))) and not (g_morph(lToken[nTokenOffset+2], ":V0a") and g_value(lToken[nLastToken+1], "|été|"))
3570def _g_cond_g1_297 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3571    return not (g_value(lToken[nTokenOffset+2], "|en|ne|") and g_morph(lToken[nLastToken+1], ":V0e"))
3572def _g_sugg_g1_117 (lToken, nTokenOffset, nLastToken):
3573    return lToken[nTokenOffset+2]["sValue"].replace("éson", "aison").replace("ÉSON", "AISON")
3574def _g_sugg_g1_118 (lToken, nTokenOffset, nLastToken):
3575    return lToken[nTokenOffset+1]["sValue"].replace("è", "ai").replace("È", "AI")
3576def _g_sugg_g1_119 (lToken, nTokenOffset, nLastToken):
3577    return lToken[nLastToken-1+1]["sValue"].replace("ai", "è").replace("AI", "È")
3578def _g_sugg_g1_120 (lToken, nTokenOffset, nLastToken):
3579    return lToken[nTokenOffset+1]["sValue"].replace("ai", "è").replace("AI", "È")
3580def _g_cond_g1_298 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3581    return g_morph(lToken[nTokenOffset], ":(?:R|[123][sp])|<start>")
3582def _g_sugg_g1_121 (lToken, nTokenOffset, nLastToken):
3583    return lToken[nTokenOffset+2]["sValue"].replace("sen", "cen").replace("Cen", "Sen").replace("CEN", "SEN")
3584def _g_cond_g1_299 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3585    return g_morph(lToken[nTokenOffset+3], ":(?:[123]s|Q)")
3586def _g_cond_g1_300 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3587    return not bCondMemo and g_morph(lToken[nTokenOffset+3], ":(?:[123]p|Y|P)")
3588def _g_cond_g1_301 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3589    return not lToken[nTokenOffset+1]["sValue"].isupper() and not g_value(lToken[nTokenOffset], "|ne|il|ils|on|")
3590def _g_sugg_g1_122 (lToken, nTokenOffset, nLastToken):
3591    return suggSimil(lToken[nTokenOffset+2]["sValue"], ":[AWGT]", True)
3592def _g_cond_g1_302 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3593    return not lToken[nTokenOffset+1]["sValue"].isupper() and not g_value(lToken[nTokenOffset], "|ne|il|ils|on|") and not (g_morph(lToken[nTokenOffset+2], ":V0") and g_morph(lToken[nTokenOffset+3], ":[QY]"))
3594def _g_cond_g1_303 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3595    return lToken[nLastToken-2+1]["sValue"].islower() and g_morph(lToken[nTokenOffset+2], ":M")
3596def _g_cond_g1_304 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3597    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[si]")
3598def _g_cond_g1_305 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3599    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]")
3600def _g_cond_g1_306 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3601    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]", ":3p")
3602def _g_cond_g1_307 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3603    return not (g_value(lToken[nLastToken-1+1], "|soit|") and look(sSentence[lToken[nLastToken]["nEnd"]:], " soit "))
3604def _g_cond_g1_308 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3605    return g_morph(lToken[nLastToken+1], ":[GY]|<end>", ">à/") and not g_value(lToken[nTokenOffset], "|il|on|elle|n’|m’|t’|s’|") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)quel(?:s|les?|) qu[’ ]$") and not look(sSentence[lToken[nLastToken]["nEnd"]:], " soit ")
3606def _g_cond_g1_309 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3607    return not look(sSentence[lToken[nLastToken]["nEnd"]:], " soit ")
3608def _g_cond_g1_310 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3609    return g_morph(lToken[nTokenOffset], ":[YQ]|>(?:avec|contre|par|pour|sur)/|<start>|>,")
3610def _g_cond_g1_311 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3611    return g_morph(lToken[nTokenOffset+1], "[123][sp]")
3612def _g_cond_g1_312 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3613    return g_morph(lToken[nTokenOffset], ":(?:V|Cs|R)", ":(?:[NA].*:[pi]|Ov)") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_")
3614def _g_cond_g1_313 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3615    return not g_value(lToken[nTokenOffset], "|ils|elles|iels|leur|lui|nous|vous|m’|t’|s’|l’|") and not g_tag(lToken[nTokenOffset], "_ceque_")
3616def _g_cond_g1_314 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3617    return not g_morph(lToken[nTokenOffset], ":D.*:m:s")
3618def _g_sugg_g1_123 (lToken, nTokenOffset, nLastToken):
3619    return lToken[nTokenOffset+1]["sValue"].replace("u", "û").replace("U", "Û")
3620def _g_sugg_g1_124 (lToken, nTokenOffset, nLastToken):
3621    return lToken[nTokenOffset+3]["sValue"].replace("u", "û").replace("U", "Û")
3622def _g_cond_g1_315 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3623    return not (g_value(lToken[nTokenOffset+2], "|temps|") and g_value(lToken[nTokenOffset], "|temps|"))
3624def _g_cond_g1_316 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3625    return g_value(lToken[nLastToken+1], "|tel|tels|telle|telles|")
3626def _g_cond_g1_317 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3627    return not g_value(lToken[nTokenOffset], "|je|tu|il|elle|iel|on|ne|n’|le|la|les|l’|me|m’|te|t’|se|s’|")
3628def _g_sugg_g1_125 (lToken, nTokenOffset, nLastToken):
3629    return lToken[nTokenOffset+1]["sValue"].replace("au", "ô").replace("AU", "Ô")
3630def _g_sugg_g1_126 (lToken, nTokenOffset, nLastToken):
3631    return lToken[nTokenOffset+1]["sValue"].replace("è", "ê").replace("È", "Ê")
3632def _g_cond_g1_318 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3633    return not (g_morph(lToken[nTokenOffset+2], ">trait/") and g_morph(lToken[nTokenOffset+3], ">(?:facial|vertical|horizontal|oblique|diagonal)/"))
3634def _g_cond_g1_319 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3635    return g_morph(lToken[nTokenOffset], ":(?:D|A.*:m)")
3636def _g_cond_g1_320 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3637    return g_morph(lToken[nTokenOffset], ":D|<start>|>,")
3638def _g_cond_g1_321 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3639    return not lToken[nTokenOffset+2]["sValue"].istitle() and not g_morph(lToken[nTokenOffset], ":O[os]|>(?:[ndmts]e|aller|falloir|pouvoir|savoir|vouloir|préférer|faire|penser|imaginer|souhaiter|désirer|espérer|de|à)/") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\b[ndmts](?:e |’(?:en |y ))(?:pas |jamais |) *$")
3640def _g_cond_g1_322 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3641    return not g_value(lToken[nLastToken+1], "|part|")
3642def _g_cond_g1_323 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3643    return not g_morph(lToken[nTokenOffset], ">agir/")
3644def _g_cond_g1_324 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3645    return not g_value(lToken[nTokenOffset], "|j’|n’|il|elle|on|")
3646def _g_cond_g1_325 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3647    return not g_value(lToken[nLastToken-1+1], "|avenu|")
3648def _g_cond_g1_326 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3649    return not g_value(lToken[nLastToken-1+1], "|avenue|")
3650def _g_cond_g1_327 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3651    return not g_value(lToken[nLastToken-1+1], "|avenus|")
3652def _g_cond_g1_328 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3653    return not g_value(lToken[nLastToken-1+1], "|avenues|")
3654def _g_cond_g1_329 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3655    return lToken[nTokenOffset+1]["sValue"].lower() != lToken[nLastToken-1+1]["sValue"].lower()
3656def _g_cond_g1_330 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3657    return lToken[nTokenOffset+1]["sValue"].lower() != lToken[nLastToken-2+1]["sValue"].lower()
3658def _g_sugg_g1_127 (lToken, nTokenOffset, nLastToken):
3659    return suggSing(lToken[nTokenOffset+3]["sValue"])
3660def _g_sugg_g1_128 (lToken, nTokenOffset, nLastToken):
3661    return lToken[nTokenOffset+2]["sValue"][:-1]
3662def _g_cond_g1_331 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3663    return not lToken[nTokenOffset+2]["sValue"].isupper() and not g_value(lToken[nLastToken+1], "|saint|")
3664def _g_sugg_g1_129 (lToken, nTokenOffset, nLastToken):
3665    return lToken[nTokenOffset+2]["sValue"].lower()
3666def _g_cond_g1_332 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3667    return not lToken[nTokenOffset+2]["sValue"].isupper() and not g_value(lToken[nLastToken+1], "|gras|saint|")
3668def _g_cond_g1_333 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3669    return not g_morph(lToken[nTokenOffset+1], ":M1") and not lToken[nTokenOffset+2]["sValue"].isupper()
3670def _g_cond_g1_334 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3671    return not lToken[nTokenOffset+2]["sValue"].isupper()
3672def _g_cond_g1_335 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3673    return lToken[nTokenOffset+1]["sValue"] == "assemblée"
3674def _g_sugg_g1_130 (lToken, nTokenOffset, nLastToken):
3675    return lToken[nTokenOffset+3]["sValue"].capitalize()
3676def _g_cond_g1_336 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3677    return lToken[nTokenOffset+4]["sValue"].islower()
3678def _g_sugg_g1_131 (lToken, nTokenOffset, nLastToken):
3679    return lToken[nTokenOffset+4]["sValue"].capitalize()
3680def _g_cond_g1_337 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3681    return lToken[nTokenOffset+1]["sValue"] == "état"
3682def _g_cond_g1_338 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3683    return lToken[nTokenOffset+1]["sValue"] == "états"
3684def _g_cond_g1_339 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3685    return lToken[nTokenOffset+3]["sValue"] == "état"
3686def _g_cond_g1_340 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3687    return lToken[nTokenOffset+4]["sValue"] == "état"
3688def _g_cond_g1_341 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3689    return lToken[nTokenOffset+1]["sValue"][0:1] == "é"
3690def _g_sugg_g1_132 (lToken, nTokenOffset, nLastToken):
3691    return lToken[nTokenOffset+1]["sValue"].replace("é", "É")
3692def _g_cond_g1_342 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3693    return lToken[nTokenOffset+1]["sValue"].istitle() and g_morph(lToken[nTokenOffset], ":N", ":(?:A|V0e|D|R|B|X)")
3694def _g_sugg_g1_133 (lToken, nTokenOffset, nLastToken):
3695    return lToken[nTokenOffset+1]["sValue"].lower()
3696def _g_cond_g1_343 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3697    return lToken[nTokenOffset+1]["sValue"].islower() and not lToken[nTokenOffset+1]["sValue"].startswith("canadienne") and ( g_value(lToken[nTokenOffset], "|certains|certaines|ce|cet|cette|ces|des|les|nos|vos|leurs|quelques|plusieurs|chaque|une|aux|la|ma|ta|sa|") or ( g_morph(lToken[nTokenOffset], ":B:e:p") and not g_morph(g_token(lToken, nTokenOffset+1-2), ">numéro/") ) or ( g_value(lToken[nTokenOffset], "|l’|") and g_morph(lToken[nTokenOffset+1], ":N.*:f:[si]") ) or ( g_value(lToken[nTokenOffset], "|de|d’|") and g_morph(g_token(lToken, nTokenOffset+1-2), ">(?:beaucoup|énormément|multitude|tant|tellement|poignée|groupe|car|bus|équipe|plus|moins|pas|trop|majorité|millier|million|centaine|dizaine|douzaine|combien|photo|complot|enlèvement|témoignage|viol|meurtre|assassinat|duel|tiers|quart|pourcentage|proportion|génération|portrait|rencontre|reportage|parole|communauté|vie|rassemblement|bataillon|armée|émigration|immigration|invasion|trio|couple|famille|descendante|action|attente|désir|souhait|vote|volonté)/") ) or ( g_value(lToken[nTokenOffset], "|un|") and not g_value(g_token(lToken, nTokenOffset+1-2), "|dans|numéro|") and not look(sSentence[lToken[nLastToken]["nEnd"]:], "(?:approximatif|correct|courant|parfait|facile|aisé|impeccable|incompréhensible)") ) )
3698def _g_sugg_g1_134 (lToken, nTokenOffset, nLastToken):
3699    return lToken[nTokenOffset+1]["sValue"].capitalize()
3700def _g_sugg_g1_135 (lToken, nTokenOffset, nLastToken):
3701    return lToken[nTokenOffset+2]["sValue"].capitalize()
3702def _g_cond_g1_344 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3703    return not lToken[nTokenOffset+3]["sValue"].isupper()
3704def _g_sugg_g1_136 (lToken, nTokenOffset, nLastToken):
3705    return lToken[nTokenOffset+3]["sValue"].lower()
3706def _g_cond_g1_345 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3707    return lToken[nTokenOffset+1]["sValue"].islower() and lToken[nTokenOffset+2]["sValue"].islower()
3708def _g_cond_g1_346 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3709    return g_morph(lToken[nTokenOffset], ":(?:D.*:p|R|C)")
3710def _g_cond_g1_347 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3711    return not g_morph(lToken[nTokenOffset], ">(?:d[eu]|avant|après|malgré)/")
3712def _g_cond_g1_348 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3713    return bCondMemo and hasFemForm(lToken[nTokenOffset+4]["sValue"])
3714def _g_sugg_g1_137 (lToken, nTokenOffset, nLastToken):
3715    return suggMasPlur(lToken[nTokenOffset+4]["sValue"], True)
3716def _g_cond_g1_349 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3717    return g_morph(lToken[nTokenOffset], ":", ":(?:R|[123][sp]|Q)|>(?:[nv]ous|eux)/")
3718def _g_cond_g1_350 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3719    return bCondMemo and hasFemForm(lToken[nTokenOffset+3]["sValue"])
3720def _g_sugg_g1_138 (lToken, nTokenOffset, nLastToken):
3721    return suggMasPlur(lToken[nTokenOffset+3]["sValue"], True)
3722def _g_sugg_g1_139 (lToken, nTokenOffset, nLastToken):
3723    return suggFemPlur(lToken[nTokenOffset+4]["sValue"], True)
3724def _g_sugg_g1_140 (lToken, nTokenOffset, nLastToken):
3725    return suggFemPlur(lToken[nTokenOffset+3]["sValue"], True)
3726def _g_sugg_g1_141 (lToken, nTokenOffset, nLastToken):
3727    return suggMasSing(lToken[nTokenOffset+3]["sValue"], True)
3728def _g_cond_g1_351 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3729    return g_morph(lToken[nTokenOffset], ":R", ":D.*:p")
3730def _g_sugg_g1_142 (lToken, nTokenOffset, nLastToken):
3731    return suggMasSing(lToken[nTokenOffset+2]["sValue"], True)
3732def _g_cond_g1_352 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3733    return g_morph(lToken[nTokenOffset], ":R")
3734def _g_sugg_g1_143 (lToken, nTokenOffset, nLastToken):
3735    return suggMasPlur(lToken[nTokenOffset+2]["sValue"], True)
3736def _g_sugg_g1_144 (lToken, nTokenOffset, nLastToken):
3737    return suggFemSing(lToken[nTokenOffset+3]["sValue"], True)
3738def _g_cond_g1_353 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3739    return g_morph(lToken[nTokenOffset+3], ":[NA].*:f:p")
3740def _g_sugg_g1_145 (lToken, nTokenOffset, nLastToken):
3741    return suggFemSing(lToken[nTokenOffset+2]["sValue"], True)
3742def _g_cond_g1_354 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3743    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":[NA].*:f:p")
3744def _g_cond_g1_355 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3745    return g_morph(lToken[nTokenOffset+3], ":[NA].*:f:s")
3746def _g_sugg_g1_146 (lToken, nTokenOffset, nLastToken):
3747    return suggFemPlur(lToken[nTokenOffset+2]["sValue"], True)
3748def _g_cond_g1_356 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3749    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":[NA].*:f:s")
3750def _g_cond_g1_357 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3751    return g_morph(lToken[nTokenOffset+3], ">[aâeéêiîoôuœæ]")
3752def _g_cond_g1_358 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3753    return g_analyse(lToken[nLastToken-1+1], ":V")
3754def _g_sugg_g1_147 (lToken, nTokenOffset, nLastToken):
3755    return suggVerbTense(lToken[nTokenOffset+3]["sValue"], ":E", ":2p")
3756def _g_sugg_g1_148 (lToken, nTokenOffset, nLastToken):
3757    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":2s")
3758def _g_cond_g1_359 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3759    return g_morph(lToken[nLastToken-1+1], ":V")
3760def _g_sugg_g1_149 (lToken, nTokenOffset, nLastToken):
3761    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":m:s")
3762def _g_sugg_g1_150 (lToken, nTokenOffset, nLastToken):
3763    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":m:p")
3764def _g_sugg_g1_151 (lToken, nTokenOffset, nLastToken):
3765    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":f:s")
3766def _g_sugg_g1_152 (lToken, nTokenOffset, nLastToken):
3767    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":f:p")
3768def _g_cond_g1_360 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3769    return g_morph(lToken[nLastToken-1+1], ":V[123].*:Iq.*:[32]s")
3770def _g_sugg_g1_153 (lToken, nTokenOffset, nLastToken):
3771    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"])
3772def _g_cond_g1_361 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3773    return not g_value(lToken[nTokenOffset], "|n’importe|ce|se|") and not g_morph(lToken[nTokenOffset], ":R")
3774def _g_sugg_g1_154 (lToken, nTokenOffset, nLastToken):
3775    return "l’a " + suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":m:s") + "|la " + lToken[nTokenOffset+3]["sValue"][:-2] + "ait"
3776def _g_cond_g1_362 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3777    return lToken[nLastToken-2+1]["sValue"].isdigit() and lToken[nLastToken-2+1]["sValue"] != "1" and lToken[nLastToken-2+1]["sValue"] != "01"
3778def _g_cond_g1_363 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3779    return not g_morph(lToken[nLastToken+1], ":A.*:[me]:[pi]")
3780def _g_cond_g1_364 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3781    return not g_morph(lToken[nLastToken+1], ":A.*:[fe]:[pi]") and not (g_value(lToken[nLastToken-1+1], "|année|") and re.search("^[0-9]+$", lToken[nLastToken+1]["sValue"]))
3782def _g_cond_g1_365 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3783    return not g_morph(lToken[nLastToken+1], ":A.*:[fe]:[pi]")
3784def _g_da_g1_3 (lToken, nTokenOffset, nLastToken):
3785    return g_define(lToken[nTokenOffset+1], ":LP")
3786def _g_da_g1_4 (lToken, nTokenOffset, nLastToken):
3787    return g_define(lToken[nTokenOffset+1], ":G:R:LR")
3788def _g_cond_g1_366 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3789    return not g_value(lToken[nLastToken+1], "|que|qu’|")
3790def _g_cond_g1_367 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3791    return not g_value(lToken[nTokenOffset], "|ne|n’|")
3792def _g_da_g1_5 (lToken, nTokenOffset, nLastToken):
3793    return g_define(lToken[nTokenOffset+1], ":LN:m:p")
3794def _g_cond_g1_368 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3795    return g_morph(lToken[nTokenOffset], ":[NV]", ":A:[em]:[is]")
3796def _g_da_g1_6 (lToken, nTokenOffset, nLastToken):
3797    return g_exclude(lToken[nTokenOffset+1], ":N")
3798def _g_cond_g1_369 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3799    return not g_value(lToken[nTokenOffset], "|une|la|cet|cette|ma|ta|sa|notre|votre|leur|de|quelque|certaine|")
3800def _g_cond_g1_370 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3801    return not g_morph(lToken[nLastToken+1], ":E")
3802def _g_da_g1_7 (lToken, nTokenOffset, nLastToken):
3803    return g_define(lToken[nTokenOffset+2], ">numéro/:N:f:s")
3804def _g_cond_g1_371 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3805    return g_morph(lToken[nTokenOffset+1], ":[NA]", ":G", 0, -3)
3806def _g_tp_g1_3 (lToken, nTokenOffset, nLastToken):
3807    return lToken[nTokenOffset+1]["sValue"][:-3]
3808def _g_da_g1_8 (lToken, nTokenOffset, nLastToken):
3809    return g_define(lToken[nTokenOffset+1], ":B:e:p")
3810def _g_cond_g1_372 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3811    return not g_value(lToken[nTokenOffset], "|d’|")
3812def _g_cond_g1_373 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3813    return g_morph(lToken[nTokenOffset], ":[NAQR]|>que/")
3814def _g_cond_g1_374 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3815    return g_morph(lToken[nTokenOffset], ":[NA]", ":V0")
3816def _g_cond_g1_375 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3817    return g_morph(lToken[nTokenOffset], ":[NA]", ":V0") and not g_morph(lToken[nLastToken+1], ":(?:Ov|3s)")
3818def _g_cond_g1_376 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3819    return g_morph(lToken[nTokenOffset], ":[NA]", ":V0") and not g_morph(lToken[nLastToken+1], ":(?:Ov|1p)")
3820def _g_cond_g1_377 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3821    return g_morph(lToken[nTokenOffset], ":[NA]", ":V0") and not g_morph(lToken[nLastToken+1], ":(?:Ov|2p)")
3822def _g_cond_g1_378 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3823    return g_morph(lToken[nTokenOffset], ":[NA]", ":V0") and not g_morph(lToken[nLastToken+1], ":(?:Ov|3p)")
3824def _g_cond_g1_379 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3825    return g_morph(lToken[nTokenOffset], ":V[123]")
3826def _g_cond_g1_380 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3827    return not g_morph(lToken[nTokenOffset], ":D.*:[me]:[si]")
3828def _g_cond_g1_381 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3829    return g_morph(lToken[nLastToken+1], ":A")
3830def _g_cond_g1_382 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3831    return not g_morph(lToken[nTokenOffset], ":Ov|>(?:il|on|elle)|>d’")
3832def _g_cond_g1_383 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3833    return not g_value(lToken[nTokenOffset], "|en|de|d’|")
3834def _g_cond_g1_384 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3835    return not g_morph(lToken[nTokenOffset], ":(?:X|Ov)") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_2s_")
3836def _g_cond_g1_385 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3837    return g_morph(lToken[nTokenOffset+2], ":N.*:[me]:[si]")
3838def _g_cond_g1_386 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3839    return g_morph(lToken[nTokenOffset+2], ":N.*:[fe]:[si]")
3840def _g_cond_g1_387 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3841    return g_morph(lToken[nTokenOffset+2], ":N.*:[me]:[pi]")
3842def _g_cond_g1_388 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3843    return g_morph(lToken[nTokenOffset+2], ":N.*:[fe]:[pi]")
3844def _g_cond_g1_389 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3845    return not g_morph(lToken[nTokenOffset], ":(?:D.*:p|N|V)")
3846def _g_cond_g1_390 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3847    return not g_morph(lToken[nTokenOffset], ":D.*:f:[si]")
3848def _g_cond_g1_391 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3849    return g_morph(lToken[nTokenOffset], ":(?:R|C[sc])")
3850def _g_cond_g1_392 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3851    return g_morph(lToken[nTokenOffset+3], ":[AW]") and not g_morph(lToken[nTokenOffset], ":D")
3852def _g_cond_g1_393 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3853    return g_morph(lToken[nTokenOffset], ":(?:V|N:f)", ":G")
3854def _g_cond_g1_394 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3855    return g_morph(lToken[nTokenOffset], ":[NV]", ":D.*:[fe]:[si]")
3856def _g_cond_g1_395 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3857    return g_value(lToken[nTokenOffset], "|recettes|réponses|solutions|")
3858def _g_cond_g1_396 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3859    return not (g_morph(lToken[nTokenOffset+1], ":[123][sp]") and g_morph(lToken[nTokenOffset], ":O[sv]"))
3860def _g_da_g1_9 (lToken, nTokenOffset, nLastToken):
3861    return g_select(lToken[nTokenOffset+1], ":[NA]")
3862def _g_da_g1_10 (lToken, nTokenOffset, nLastToken):
3863    return g_select(lToken[nTokenOffset+1], ":N")
3864def _g_cond_g1_397 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3865    return g_morph(lToken[nTokenOffset+1], ":N") and not g_morph(lToken[nLastToken+1], ":A.*:[me]:[si]")
3866def _g_cond_g1_398 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3867    return g_morph(lToken[nTokenOffset+1], ":N") and not g_morph(lToken[nLastToken+1], ":A.*:[fe]:[si]")
3868def _g_cond_g1_399 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3869    return g_morph(lToken[nTokenOffset], ":(?:N|A|Q|W|V0e)", ":D")
3870def _g_cond_g1_400 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3871    return g_morph(lToken[nTokenOffset], ":[NA]", ":D")
3872def _g_cond_g1_401 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3873    return not bCondMemo and g_morph(lToken[nTokenOffset], ":D|>(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)")
3874def _g_da_g1_11 (lToken, nTokenOffset, nLastToken):
3875    return g_define(lToken[nTokenOffset+1], ":A:e:i")
3876def _g_cond_g1_402 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3877    return lToken[nTokenOffset+2]["sValue"].istitle() and g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) or re.search("^[MDCLXVI]+$", lToken[nTokenOffset+2]["sValue"])
3878def _g_cond_g1_403 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3879    return lToken[nTokenOffset+2]["sValue"].istitle()
3880def _g_cond_g1_404 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3881    return lToken[nTokenOffset+3]["sValue"].istitle()
3882def _g_cond_g1_405 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3883    return lToken[nTokenOffset+2]["sValue"].istitle() and lToken[nTokenOffset+4]["sValue"].istitle()
3884def _g_cond_g1_406 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3885    return g_morph(lToken[nTokenOffset+2], ":1s")
3886def _g_cond_g1_407 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3887    return g_morph(lToken[nTokenOffset+2], ":2s")
3888def _g_cond_g1_408 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3889    return g_morph(lToken[nTokenOffset+2], ":3s")
3890def _g_cond_g1_409 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3891    return g_morph(lToken[nTokenOffset+2], ":1p")
3892def _g_cond_g1_410 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3893    return g_morph(lToken[nTokenOffset+2], ":2p")
3894def _g_cond_g1_411 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3895    return g_morph(lToken[nTokenOffset+2], ":3p")
3896def _g_da_g1_12 (lToken, nTokenOffset, nLastToken):
3897    return g_define(lToken[nTokenOffset+2], ":LV")
3898def _g_da_g1_13 (lToken, nTokenOffset, nLastToken):
3899    return g_define(lToken[nTokenOffset+3], ":LV")
3900def _g_cond_g1_412 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3901    return g_morphVC(lToken[nTokenOffset+1], ">(?:être|devenir|rester)")
3902def _g_cond_g1_413 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3903    return g_morph(lToken[nLastToken+1], ":[QY]")
3904def _g_cond_g1_414 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3905    return g_morphVC(lToken[nTokenOffset+1], ">(?:être|devenir|rester)") and g_morph(lToken[nLastToken+1], ":[QY]")
3906def _g_cond_g1_415 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3907    return g_morph(lToken[nTokenOffset], ":(?:V0e|N)") and g_morph(lToken[nLastToken+1], ":[AQ]")
3908def _g_cond_g1_416 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3909    return g_morphVC(lToken[nTokenOffset+1], ":V0a")
3910def _g_cond_g1_417 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3911    return g_morphVC(lToken[nTokenOffset+1], ":V0a") and g_morph(lToken[nLastToken+1], ":[QY]")
3912def _g_cond_g1_418 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3913    return g_morph(lToken[nTokenOffset], ":[VW]", ":G")
3914def _g_cond_g1_419 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3915    return g_morph(lToken[nTokenOffset], ":V") and not g_value(lToken[nLastToken+1], "|qui|de|d’|")
3916def _g_cond_g1_420 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3917    return not g_value(lToken[nLastToken+1], "|qui|de|d’|")
3918def _g_cond_g1_421 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3919    return g_morph(lToken[nTokenOffset+1], ":V")
3920def _g_cond_g1_422 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3921    return not g_value(lToken[nLastToken+1], "|de|d’|des|du|")
3922def _g_cond_g1_423 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3923    return g_morph(lToken[nLastToken+1], ":[AW]")
3924def _g_cond_g1_424 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3925    return not g_value(lToken[nTokenOffset], "|un|le|ce|du|mon|ton|son|notre|votre|leur|")
3926def _g_cond_g1_425 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3927    return not (g_value(lToken[nTokenOffset+2], "|bien|") and g_value(lToken[nLastToken+1], "|que|qu’|")) and not g_value(lToken[nTokenOffset+2], "|tant|")
3928def _g_cond_g1_426 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3929    return g_morph(lToken[nLastToken+1], ":A", ":G")
3930def _g_cond_g1_427 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3931    return not g_morph(lToken[nTokenOffset], ":D.*:(?:m:s|[me]:p)")
3932def _g_cond_g1_428 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3933    return g_morph(lToken[nTokenOffset+2], ":W", ":3p")
3934def _g_cond_g1_429 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3935    return g_morph(lToken[nTokenOffset+4], ":W", ":A")
3936def _g_cond_g1_430 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3937    return not g_morph(lToken[nTokenOffset], ":D.*:m")
3938def _g_cond_g1_431 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3939    return g_morph(lToken[nTokenOffset+1], ":W", ":(?:3p|N)")
3940def _g_cond_pp2_1 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3941    return g_morph(lToken[nTokenOffset], ":N", ":D")
3942def _g_cond_pp2_2 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3943    return not g_morph(lToken[nTokenOffset], ":R")
3944def _g_cond_pp2_3 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3945    return g_morph(lToken[nTokenOffset], ":N", ":V")
3946def _g_cond_pp2_4 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3947    return g_morph(lToken[nTokenOffset+1], ":N")
3948def _g_cond_pp2_5 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3949    return not g_value(lToken[nTokenOffset], "|je|tu|n’|il|on|elle|iel|")
3950def _g_cond_pp2_6 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3951    return not g_value(lToken[nTokenOffset], "|j’|tu|il|elle|on|n’|")
3952def _g_cond_pp2_7 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3953    return not g_value(lToken[nLastToken+1], "|de|du|d’|des|")
3954def _g_cond_pp2_8 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3955    return not g_morph(lToken[nTokenOffset], ":D")
3956def _g_cond_pp2_9 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3957    return not g_value(lToken[nTokenOffset], "|ça|cela|ceci|me|m’|te|t’|lui|nous|vous|leur|ne|n’|")
3958def _g_cond_pp2_10 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3959    return not g_value(lToken[nTokenOffset], "|il|ne|n’|")
3960def _g_cond_pp2_11 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3961    return not g_morph(lToken[nTokenOffset], ":D") and not g_morph(lToken[nLastToken+1], ":A.*:[fe]:[si]")
3962def _g_cond_pp2_12 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3963    return g_morph(lToken[nTokenOffset+1], ":[123]p") or (lToken[nTokenOffset+1]["sValue"] == "fait" and g_value(lToken[nTokenOffset], "|on|"))
3964def _g_cond_pp2_13 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3965    return g_morph(lToken[nTokenOffset+1], ":[123]p")
3966def _g_cond_pp2_14 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3967    return g_morph(lToken[nLastToken-2+1], ":[123]s")
3968def _g_cond_pp3_1 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3969    return not g_value(lToken[nTokenOffset+1], "|que|qu’|")
3970def _g_cond_pp3_2 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3971    return bCondMemo
3972def _g_cond_pp3_3 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3973    return g_morph(lToken[nLastToken-3+1], ":[123][sp]")
3974def _g_da_pp3_1 (lToken, nTokenOffset, nLastToken):
3975    return g_select(lToken[nLastToken-2+1], ":D") and g_exclude(lToken[nLastToken-1+1], ":[123][sp]")
3976def _g_cond_pp3_4 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3977    return g_morph(lToken[nTokenOffset+3], ":[NA]", ":(?:G|V0)") and g_morph(lToken[nTokenOffset+4], ":[NA]", ":(?:[PG]|V[023])")
3978def _g_da_pp3_2 (lToken, nTokenOffset, nLastToken):
3979    return g_exclude(lToken[nTokenOffset+4], ":V")
3980def _g_cond_pp3_5 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3981    return g_morph(lToken[nTokenOffset+2], ":p") and g_morph(lToken[nTokenOffset+3], ":[NA].*:p", ":(?:G|V0)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:p", ":(?:[PGQ]|V[023])")
3982def _g_cond_pp3_6 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3983    return not bCondMemo and g_morph(lToken[nTokenOffset+2], ":s") and g_morph(lToken[nTokenOffset+3], ":[NA].*:s", ":(?:G|V0)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:s", ":(?:[PGQ]|V[023])") and not g_morph(lToken[nTokenOffset+5], ":A.*:[si]")
3984def _g_da_pp3_3 (lToken, nTokenOffset, nLastToken):
3985    return g_exclude(lToken[nTokenOffset+3], ":V")
3986def _g_cond_pp3_7 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3987    return not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], ":O[vs]")
3988def _g_da_pp3_4 (lToken, nTokenOffset, nLastToken):
3989    return g_exclude(lToken[nTokenOffset+2], ":V") and g_exclude(lToken[nTokenOffset+3], ":V")
3990def _g_da_pp3_5 (lToken, nTokenOffset, nLastToken):
3991    return g_define(lToken[nTokenOffset+2], ":LV")
3992def _g_cond_pp3_8 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3993    return not g_value(lToken[nTokenOffset+1], "|avoir|avoirs|") and not g_morph(lToken[nTokenOffset], ":D")
3994def _g_da_pp3_6 (lToken, nTokenOffset, nLastToken):
3995    return g_rewrite(lToken[nTokenOffset+2], ":A", "")
3996def _g_cond_pp3_9 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3997    return not g_value(lToken[nTokenOffset+1], "|être|êtres|") and not g_morph(lToken[nTokenOffset], ":D")
3998def _g_cond_pp3_10 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
3999    return not (g_morph(lToken[nTokenOffset], ":V0a") and g_value(lToken[nLastToken+1], "|fait|"))
4000def _g_cond_g2_1 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4001    return g_morphVC(lToken[nTokenOffset+2], ">avoir/")
4002def _g_cond_g2_2 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4003    return lToken[nLastToken-1+1]["sValue"] != "A" and not g_tag_before(lToken[nTokenOffset+1], dTags, "_àCOI_") and not g_value(lToken[nLastToken+1], "|été|")
4004def _g_cond_g2_3 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4005    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_propsub_") and not g_morph(lToken[nTokenOffset+1], ":[YNA]") and not g_value(lToken[nLastToken+1], "|été|")
4006def _g_cond_g2_4 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4007    return lToken[nLastToken-1+1]["sValue"] != "A" and not g_tag_before(lToken[nTokenOffset+1], dTags, "_propsub_") and not g_morph(lToken[nLastToken+1], ":Q")
4008def _g_cond_g2_5 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4009    return not g_value(lToken[nTokenOffset+1], "|rendez-vous|")
4010def _g_cond_g2_6 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4011    return g_morph(lToken[nTokenOffset], ":Cs|<start>|>,")
4012def _g_sugg_g2_1 (lToken, nTokenOffset, nLastToken):
4013    return lToken[nTokenOffset+2]["sValue"].replace("â", "a").replace("Â", "A")
4014def _g_sugg_g2_2 (lToken, nTokenOffset, nLastToken):
4015    return lToken[nTokenOffset+2]["sValue"].replace("a", "â").replace("A", "Â")
4016def _g_sugg_g2_3 (lToken, nTokenOffset, nLastToken):
4017    return lToken[nTokenOffset+2]["sValue"].replace("oc", "o")
4018def _g_sugg_g2_4 (lToken, nTokenOffset, nLastToken):
4019    return lToken[nTokenOffset+1]["sValue"].replace("oc", "o")
4020def _g_sugg_g2_5 (lToken, nTokenOffset, nLastToken):
4021    return lToken[nTokenOffset+3]["sValue"].replace("ro", "roc")
4022def _g_cond_g2_7 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4023    return g_morphVC(lToken[nTokenOffset+1], ">faire")
4024def _g_cond_g2_8 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4025    return not g_morph(lToken[nLastToken+1], ":Y")
4026def _g_sugg_g2_6 (lToken, nTokenOffset, nLastToken):
4027    return lToken[nTokenOffset+3]["sValue"].replace("auspice", "hospice")
4028def _g_sugg_g2_7 (lToken, nTokenOffset, nLastToken):
4029    return lToken[nTokenOffset+1]["sValue"].replace("auspice", "hospice").replace("Auspice", "Hospice")
4030def _g_sugg_g2_8 (lToken, nTokenOffset, nLastToken):
4031    return lToken[nTokenOffset+1]["sValue"].replace("âill", "ay").replace("aill", "ay").replace("ÂILL", "AY").replace("AILL", "AY")
4032def _g_sugg_g2_9 (lToken, nTokenOffset, nLastToken):
4033    return "arrière-"+lToken[nTokenOffset+2]["sValue"].replace("c", "").replace("C", "")
4034def _g_sugg_g2_10 (lToken, nTokenOffset, nLastToken):
4035    return lToken[nTokenOffset+1]["sValue"].replace("c", "").replace("C", "")
4036def _g_cond_g2_9 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4037    return not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +des accusés")
4038def _g_sugg_g2_11 (lToken, nTokenOffset, nLastToken):
4039    return lToken[nTokenOffset+3]["sValue"].replace("an", "anc").replace("AN", "ANC")
4040def _g_sugg_g2_12 (lToken, nTokenOffset, nLastToken):
4041    return lToken[nTokenOffset+1]["sValue"].replace("an", "anc").replace("AN", "ANC")
4042def _g_cond_g2_10 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4043    return (g_morph(lToken[nLastToken+1], ":[AQR]") or g_morph(lToken[nTokenOffset], ":V", ">être")) and not g_value(lToken[nLastToken+1], "|que|qu’|sûr|")
4044def _g_sugg_g2_13 (lToken, nTokenOffset, nLastToken):
4045    return lToken[nTokenOffset+1]["sValue"].replace("ite", "itte")
4046def _g_sugg_g2_14 (lToken, nTokenOffset, nLastToken):
4047    return lToken[nLastToken-1+1]["sValue"].replace("itte", "ite")
4048def _g_sugg_g2_15 (lToken, nTokenOffset, nLastToken):
4049    return lToken[nTokenOffset+1]["sValue"].replace("itte", "ite")
4050def _g_sugg_g2_16 (lToken, nTokenOffset, nLastToken):
4051    return lToken[nTokenOffset+1]["sValue"].replace("ane", "anne")
4052def _g_sugg_g2_17 (lToken, nTokenOffset, nLastToken):
4053    return lToken[nTokenOffset+4]["sValue"].replace("ane", "anne")
4054def _g_cond_g2_11 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4055    return not g_value(lToken[nTokenOffset+3], "|Cannes|CANNES|")
4056def _g_cond_g2_12 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4057    return g_morph(lToken[nTokenOffset], "<start>|>[,(]")
4058def _g_cond_g2_13 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4059    return g_morph(lToken[nTokenOffset], "<start>|>[,(]") and not (g_value(lToken[nTokenOffset+1], "|c’|") and g_value(lToken[nTokenOffset+2], "|en|"))
4060def _g_cond_g2_14 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4061    return g_morph(lToken[nTokenOffset], ":C|<start>|>[,(]")
4062def _g_cond_g2_15 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4063    return g_morph(lToken[nTokenOffset+2], ":A")
4064def _g_sugg_g2_18 (lToken, nTokenOffset, nLastToken):
4065    return lToken[nTokenOffset+1]["sValue"].replace("omp", "on").replace("OMP", "ON")
4066def _g_sugg_g2_19 (lToken, nTokenOffset, nLastToken):
4067    return lToken[nTokenOffset+1]["sValue"].replace("omt", "ompt").replace("OMT", "OMPT").replace("ont", "ompt").replace("ONT", "OMPT")
4068def _g_cond_g2_16 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4069    return not g_value(lToken[nTokenOffset], "|ils|elles|iels|ne|eux|")
4070def _g_sugg_g2_20 (lToken, nTokenOffset, nLastToken):
4071    return lToken[nTokenOffset+1]["sValue"].replace("nt", "mp")
4072def _g_cond_g2_17 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4073    return not g_value(lToken[nTokenOffset], "|l’|un|les|des|ces|")
4074def _g_sugg_g2_21 (lToken, nTokenOffset, nLastToken):
4075    return lToken[nTokenOffset+2]["sValue"].replace("sens", "cens").replace("Sens", "Cens").replace("SENS", "CENS")
4076def _g_sugg_g2_22 (lToken, nTokenOffset, nLastToken):
4077    return lToken[nTokenOffset+1]["sValue"].replace("cens", "sens").replace("Cens", "Sens").replace("CENS", "SENS")
4078def _g_cond_g2_18 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4079    return g_morph(lToken[nTokenOffset], ":[VR]")
4080def _g_sugg_g2_23 (lToken, nTokenOffset, nLastToken):
4081    return lToken[nTokenOffset+1]["sValue"].replace("o", "ô").replace("tt", "t")
4082def _g_sugg_g2_24 (lToken, nTokenOffset, nLastToken):
4083    return lToken[nTokenOffset+1]["sValue"].replace("ô", "o").replace("tt", "t")
4084def _g_sugg_g2_25 (lToken, nTokenOffset, nLastToken):
4085    return lToken[nTokenOffset+1]["sValue"].replace("ô", "o").replace("t", "tt")
4086def _g_sugg_g2_26 (lToken, nTokenOffset, nLastToken):
4087    return lToken[nTokenOffset+1]["sValue"].replace("t", "tt").replace("T", "TT")
4088def _g_cond_g2_19 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4089    return g_morph(lToken[nTokenOffset+2], ":A.*:f")
4090def _g_sugg_g2_27 (lToken, nTokenOffset, nLastToken):
4091    return lToken[nTokenOffset+1]["sValue"].replace("tt", "t").replace("TT", "T")
4092def _g_sugg_g2_28 (lToken, nTokenOffset, nLastToken):
4093    return lToken[nTokenOffset+1]["sValue"].replace("ssa", "ça").replace("ss", "c")
4094def _g_cond_g2_20 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4095    return g_morph(lToken[nLastToken-1+1], ":Q")
4096def _g_sugg_g2_29 (lToken, nTokenOffset, nLastToken):
4097    return lToken[nTokenOffset+1]["sValue"].replace("nud", "nu").replace("NUD", "NU")
4098def _g_sugg_g2_30 (lToken, nTokenOffset, nLastToken):
4099    return lToken[nLastToken-1+1]["sValue"].replace("escell", "écel").replace("essell", "écel")
4100def _g_sugg_g2_31 (lToken, nTokenOffset, nLastToken):
4101    return lToken[nTokenOffset+1]["sValue"].replace("escell", "écel").replace("essell", "écel")
4102def _g_cond_g2_21 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4103    return g_morph(lToken[nTokenOffset], ">(?:être|voyager|surprendre|venir|arriver|partir|aller)/") or look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "-(?:ils?|elles?|on|je|tu|nous|vous) +$")
4104def _g_cond_g2_22 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4105    return g_value(lToken[nTokenOffset], "|avec|sans|quel|quelle|quels|quelles|cet|votre|notre|mon|leur|l’|d’|")
4106def _g_cond_g2_23 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4107    return lToken[nTokenOffset+2]["sValue"].islower()
4108def _g_sugg_g2_32 (lToken, nTokenOffset, nLastToken):
4109    return lToken[nTokenOffset+1]["sValue"].replace("imm", "ém").replace("Imm", "Ém")
4110def _g_cond_g2_24 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4111    return g_morph(lToken[nTokenOffset], ":D")
4112def _g_sugg_g2_33 (lToken, nTokenOffset, nLastToken):
4113    return lToken[nTokenOffset+2]["sValue"].replace("imm", "ém").replace("Imm", "Ém")
4114def _g_sugg_g2_34 (lToken, nTokenOffset, nLastToken):
4115    return lToken[nLastToken-1+1]["sValue"].replace("émi", "immi").replace("Émi", "Immi")
4116def _g_sugg_g2_35 (lToken, nTokenOffset, nLastToken):
4117    return lToken[nTokenOffset+1]["sValue"].replace("end", "ind").replace("End", "Ind").replace("END", "IND")
4118def _g_sugg_g2_36 (lToken, nTokenOffset, nLastToken):
4119    return lToken[nTokenOffset+3]["sValue"].replace("end", "ind").replace("End", "Ind").replace("END", "IND")
4120def _g_sugg_g2_37 (lToken, nTokenOffset, nLastToken):
4121    return lToken[nTokenOffset+1]["sValue"].replace("ind", "end").replace("Ind", "End").replace("IND", "END")
4122def _g_cond_g2_25 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4123    return g_morph(lToken[nTokenOffset], "<start>|:C||>,/") and g_morph(lToken[nTokenOffset+2], ":N", ":[AG]")
4124def _g_cond_g2_26 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4125    return g_morph(lToken[nTokenOffset], "<start>|:C||>,/") and g_morph(lToken[nTokenOffset+2], ":N.*:[fe]")
4126def _g_cond_g2_27 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4127    return g_morph(lToken[nTokenOffset], "<start>|:C||>,/") and g_morph(lToken[nTokenOffset+2], ":N", ":A.*:[me]:[si]")
4128def _g_cond_g2_28 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4129    return g_morph(lToken[nTokenOffset], "<start>|:C||>,/") and g_morph(lToken[nTokenOffset+2], ":[NA]") and g_morph(lToken[nTokenOffset+3], ":N", ":[AG]")
4130def _g_cond_g2_29 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4131    return g_morph(lToken[nTokenOffset], "<start>|:C||>,/") and g_morph(lToken[nTokenOffset+2], ":[NA].*:[fe]:[si]") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]:[si]")
4132def _g_cond_g2_30 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4133    return g_morph(lToken[nTokenOffset], "<start>|:C||>,/") and ( (g_morph(lToken[nTokenOffset+2], ":N", "*") and g_morph(lToken[nTokenOffset+3], ":A")) or (g_morph(lToken[nTokenOffset+2], ":[NA]") and g_morph(lToken[nTokenOffset+3], ":N", ":A.*:[me]:[si]")) )
4134def _g_cond_g2_31 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4135    return not g_morph(lToken[nTokenOffset], ">(?:abandonner|céder|résister)/") and not g_value(lToken[nLastToken+1], "|de|d’|")
4136def _g_cond_g2_32 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4137    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[is]", ":G") and g_morph(lToken[nLastToken-2+1], ":[QA]", ":M") and lToken[nLastToken-2+1]["sValue"].islower()
4138def _g_cond_g2_33 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4139    return g_morph(lToken[nTokenOffset+3], ":N.*:[is]", ":[GA]") and g_morph(lToken[nLastToken-2+1], ":[QA]", ":M") and lToken[nLastToken-2+1]["sValue"].islower()
4140def _g_cond_g2_34 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4141    return g_morph(lToken[nTokenOffset+2], ":M", ":[GA]") and g_morph(lToken[nLastToken-2+1], ":[QA]", ":M") and lToken[nLastToken-2+1]["sValue"].islower()
4142def _g_cond_g2_35 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4143    return g_morph(lToken[nTokenOffset+2], ":N.*:m:[si]", ":(?:[AWG]|V0a)") and g_morph(lToken[nTokenOffset], ":Cs|<start>|>,")
4144def _g_cond_g2_36 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4145    return g_morph(lToken[nTokenOffset+2], ":N.*:f:[si]", ":(?:[AWG]|V0a)") and g_morph(lToken[nTokenOffset], ":Cs|<start>|>,")
4146def _g_cond_g2_37 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4147    return g_morph(lToken[nTokenOffset+2], ":N.*:[pi]", ":(?:[AWG]|V0a)") and g_morph(lToken[nTokenOffset], ":Cs|<start>|>,")
4148def _g_cond_g2_38 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4149    return not g_morph(lToken[nTokenOffset], ":R")
4150def _g_cond_g2_39 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4151    return not g_morph(lToken[nTokenOffset], ":D.*:[me]:[sp]")
4152def _g_sugg_g2_38 (lToken, nTokenOffset, nLastToken):
4153    return lToken[nTokenOffset+2]["sValue"].replace("î", "i")
4154def _g_sugg_g2_39 (lToken, nTokenOffset, nLastToken):
4155    return lToken[nTokenOffset+3]["sValue"].replace("o", "au").replace("O", "AU")
4156def _g_sugg_g2_40 (lToken, nTokenOffset, nLastToken):
4157    return lToken[nLastToken-1+1]["sValue"].replace("n", "nc").replace("N", "NC")
4158def _g_sugg_g2_41 (lToken, nTokenOffset, nLastToken):
4159    return lToken[nTokenOffset+1]["sValue"].replace("and", "ant")
4160def _g_cond_g2_40 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4161    return not (g_value(lToken[nTokenOffset], "|une|") and look(sSentence[lToken[nLastToken]["nEnd"]:], "(?i)^ +pour toute") )
4162def _g_cond_g2_41 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4163    return g_morph(lToken[nTokenOffset], ":D.*:(?:f|e:p)")
4164def _g_sugg_g2_42 (lToken, nTokenOffset, nLastToken):
4165    return lToken[nTokenOffset+1]["sValue"].replace("iai", "iè")
4166def _g_sugg_g2_43 (lToken, nTokenOffset, nLastToken):
4167    return lToken[nTokenOffset+1]["sValue"].replace("iè", "iai")
4168def _g_sugg_g2_44 (lToken, nTokenOffset, nLastToken):
4169    return lToken[nTokenOffset+1]["sValue"].replace("û", "u").replace("t", "tt").replace("Û", "U").replace("T", "TT")
4170def _g_cond_g2_42 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4171    return not g_value(lToken[nLastToken-2+1], "|de|")
4172def _g_sugg_g2_45 (lToken, nTokenOffset, nLastToken):
4173    return lToken[nTokenOffset+1]["sValue"].replace("outt", "oût").replace("OUTT", "OÛT")
4174def _g_sugg_g2_46 (lToken, nTokenOffset, nLastToken):
4175    return lToken[nLastToken-1+1]["sValue"].replace("oût", "outt").replace("OÛT", "OUTT").replace("out", "outt").replace("OUT", "OUTT")
4176def _g_sugg_g2_47 (lToken, nTokenOffset, nLastToken):
4177    return lToken[nLastToken-1+1]["sValue"].replace("outt", "oût").replace("OUTT", "OÛT")
4178def _g_cond_g2_43 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4179    return not g_morph(lToken[nLastToken-1+1], ":1p")
4180def _g_cond_g2_44 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4181    return not g_morph(lToken[nLastToken-1+1], ":2p")
4182def _g_sugg_g2_48 (lToken, nTokenOffset, nLastToken):
4183    return lToken[nTokenOffset+1]["sValue"].replace("u", "û").replace("U", "Û")
4184def _g_sugg_g2_49 (lToken, nTokenOffset, nLastToken):
4185    return lToken[nTokenOffset+1]["sValue"].replace("û", "u").replace("Û", "U")
4186def _g_sugg_g2_50 (lToken, nTokenOffset, nLastToken):
4187    return lToken[nTokenOffset+1]["sValue"][3:]
4188def _g_sugg_g2_51 (lToken, nTokenOffset, nLastToken):
4189    return lToken[nTokenOffset+1]["sValue"].lower().replace("cha", "lâ")
4190def _g_cond_g2_45 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4191    return g_morph(lToken[nTokenOffset+2], ":Q")
4192def _g_cond_g2_46 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4193    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 4)
4194def _g_sugg_g2_52 (lToken, nTokenOffset, nLastToken):
4195    return lToken[nTokenOffset+1]["sValue"].replace("a", "â").replace("A", "Â")
4196def _g_sugg_g2_53 (lToken, nTokenOffset, nLastToken):
4197    return lToken[nTokenOffset+1]["sValue"].replace("ât", "at").replace("ÂT", "AT")
4198def _g_sugg_g2_54 (lToken, nTokenOffset, nLastToken):
4199    return lToken[nLastToken-1+1]["sValue"].replace("u", "û").replace("U", "Û")
4200def _g_cond_g2_47 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4201    return g_morph(lToken[nTokenOffset+2], ":D", ">de/")
4202def _g_sugg_g2_55 (lToken, nTokenOffset, nLastToken):
4203    return lToken[nTokenOffset+1]["sValue"].replace("en", "an").replace("EN", "AN")
4204def _g_sugg_g2_56 (lToken, nTokenOffset, nLastToken):
4205    return lToken[nTokenOffset+1]["sValue"].replace("an", "en").replace("AN", "EN")
4206def _g_sugg_g2_57 (lToken, nTokenOffset, nLastToken):
4207    return lToken[nLastToken-1+1]["sValue"].replace("a", "â").replace("A", "Â")
4208def _g_cond_g2_48 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4209    return g_morph(lToken[nLastToken-3+1], ":V")
4210def _g_sugg_g2_58 (lToken, nTokenOffset, nLastToken):
4211    return lToken[nLastToken-1+1]["sValue"].replace("êch", "éch").replace("er", "é").replace("ÊCH", "ÉCH").replace("ER", "É")
4212def _g_sugg_g2_59 (lToken, nTokenOffset, nLastToken):
4213    return lToken[nTokenOffset+1]["sValue"].replace("éch", "êch").replace("èch", "êch").replace("ÉCH", "ÊCH").replace("ÈCH", "ÊCH")
4214def _g_cond_g2_49 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4215    return not g_value(lToken[nTokenOffset], "|je|tu|il|elle|on|ne|n’|") and g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 3)
4216def _g_cond_g2_50 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4217    return g_morph(lToken[nTokenOffset+3], ":N")
4218def _g_cond_g2_51 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4219    return bCondMemo and g_morph(lToken[nLastToken-1+1], ":V1..t") and g_morph(lToken[nLastToken+1], ":(?:Ov|[123][sp]|P)|<end>|>(?:,|par)/")
4220def _g_sugg_g2_60 (lToken, nTokenOffset, nLastToken):
4221    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":m:s")
4222def _g_sugg_g2_61 (lToken, nTokenOffset, nLastToken):
4223    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":f:s")
4224def _g_sugg_g2_62 (lToken, nTokenOffset, nLastToken):
4225    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":s")
4226def _g_cond_g2_52 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4227    return g_morph(lToken[nTokenOffset+3], ":[NA]") and g_morph(lToken[nTokenOffset+4], ":[NA]", ":V0")
4228def _g_cond_g2_53 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4229    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+1], ":V", ":[NAQGM]")
4230def _g_cond_g2_54 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4231    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1)
4232def _g_sugg_g2_63 (lToken, nTokenOffset, nLastToken):
4233    return lToken[nTokenOffset+3]["sValue"].replace("t", "g").replace("T", "G")
4234def _g_cond_g2_55 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4235    return g_morph(lToken[nTokenOffset+2], ":A") and g_morph(lToken[nTokenOffset], ":D")
4236def _g_sugg_g2_64 (lToken, nTokenOffset, nLastToken):
4237    return lToken[nTokenOffset+1]["sValue"].replace("t", "g").replace("T", "G")
4238def _g_cond_g2_56 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4239    return not g_value(lToken[nTokenOffset], "|n’|")
4240def _g_cond_g2_57 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4241    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1)
4242def _g_sugg_g2_65 (lToken, nTokenOffset, nLastToken):
4243    return lToken[nTokenOffset+1]["sValue"].replace("out", "oot").replace("OUT", "OOT")
4244def _g_sugg_g2_66 (lToken, nTokenOffset, nLastToken):
4245    return lToken[nTokenOffset+1]["sValue"].replace("etr", "ebr").replace("ETR", "EBR").replace("dét", "reb").replace("Dét", "Reb").replace("DÉT", "REB")
4246def _g_sugg_g2_67 (lToken, nTokenOffset, nLastToken):
4247    return lToken[nTokenOffset+1]["sValue"].replace("ô", "o").replace("Ô", "O")
4248def _g_sugg_g2_68 (lToken, nTokenOffset, nLastToken):
4249    return lToken[nTokenOffset+1]["sValue"].replace("od", "ôd").replace("OD", "ÔD")
4250def _g_sugg_g2_69 (lToken, nTokenOffset, nLastToken):
4251    return lToken[nTokenOffset+1]["sValue"].replace("ale", "alle")
4252def _g_sugg_g2_70 (lToken, nTokenOffset, nLastToken):
4253    return lToken[nTokenOffset+2]["sValue"].replace("alle", "ale")
4254def _g_cond_g2_58 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4255    return g_morph(lToken[nTokenOffset], ":D.*:[me]")
4256def _g_sugg_g2_71 (lToken, nTokenOffset, nLastToken):
4257    return lToken[nTokenOffset+2]["sValue"].replace("scep","sep")
4258def _g_cond_g2_59 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4259    return not g_morph(lToken[nTokenOffset], ">plaie/")
4260def _g_sugg_g2_72 (lToken, nTokenOffset, nLastToken):
4261    return lToken[nTokenOffset+2]["sValue"].replace("sep", "scep")
4262def _g_cond_g2_60 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4263    return g_analyse(lToken[nTokenOffset+3], ":N.*:[me]:[si]", ":Y")
4264def _g_cond_g2_61 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4265    return g_analyse(lToken[nTokenOffset+3], ":[NA]", ":Y")
4266def _g_cond_g2_62 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4267    return not look(sSentence[lToken[nLastToken]["nEnd"]:], " soit ")
4268def _g_cond_g2_63 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4269    return not g_value(lToken[nTokenOffset], "|lourde|lourdes|") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "[aA]ccompl|[dD]él[éè]gu")
4270def _g_sugg_g2_73 (lToken, nTokenOffset, nLastToken):
4271    return lToken[nTokenOffset+1]["sValue"].replace("â", "a").replace("Â", "A")
4272def _g_sugg_g2_74 (lToken, nTokenOffset, nLastToken):
4273    return lToken[nLastToken-1+1]["sValue"].replace("â", "a").replace("Â", "A")
4274def _g_sugg_g2_75 (lToken, nTokenOffset, nLastToken):
4275    return lToken[nTokenOffset+3]["sValue"].replace("a", "â").replace("A", "Â")
4276def _g_cond_g2_64 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4277    return g_morph(lToken[nTokenOffset+2], ":D", ":R")
4278def _g_sugg_g2_76 (lToken, nTokenOffset, nLastToken):
4279    return lToken[nTokenOffset+3]["sValue"].replace("ach", "âch").replace("ACH", "ÂCH")
4280def _g_sugg_g2_77 (lToken, nTokenOffset, nLastToken):
4281    return lToken[nTokenOffset+1]["sValue"].replace("au", "ô").replace("AU", "Ô")
4282def _g_sugg_g2_78 (lToken, nTokenOffset, nLastToken):
4283    return lToken[nTokenOffset+1]["sValue"].replace("énén", "enim").replace("ÉNÉN", "ENIM")
4284def _g_sugg_g2_79 (lToken, nTokenOffset, nLastToken):
4285    return lToken[nTokenOffset+1]["sValue"].replace("enim", "énén").replace("ENIM", "ÉNÉN")
4286def _g_sugg_g2_80 (lToken, nTokenOffset, nLastToken):
4287    return suggSing(lToken[nTokenOffset+2]["sValue"])
4288def _g_cond_g2_65 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4289    return not g_value(lToken[nTokenOffset], "|et|ou|de|") and not g_value(lToken[nTokenOffset+2], "|air|") and not g_morph(lToken[nTokenOffset+3], ">seul/")
4290def _g_cond_g2_66 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4291    return ( (g_morph(lToken[nTokenOffset+2], ":m", "*") and g_morph(lToken[nTokenOffset+3], ":f", "*")) or (g_morph(lToken[nTokenOffset+2], ":f", "*") and g_morph(lToken[nTokenOffset+3], ":m", "*")) ) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4292def _g_sugg_g2_81 (lToken, nTokenOffset, nLastToken):
4293    return switchGender(lToken[nTokenOffset+3]["sValue"], False)
4294def _g_cond_g2_67 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4295    return bCondMemo and hasFemForm(lToken[nTokenOffset+2]["sValue"])
4296def _g_sugg_g2_82 (lToken, nTokenOffset, nLastToken):
4297    return switchGender(lToken[nTokenOffset+2]["sValue"])
4298def _g_cond_g2_68 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4299    return g_morph(lToken[nTokenOffset+2], ":[si]", "*") and g_morph(lToken[nTokenOffset+3], ":p", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4300def _g_sugg_g2_83 (lToken, nTokenOffset, nLastToken):
4301    return suggSing(lToken[nTokenOffset+3]["sValue"])
4302def _g_cond_g2_69 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4303    return not g_value(lToken[nTokenOffset+3], "|air|") and not g_morph(lToken[nTokenOffset+4], ">seul/")
4304def _g_cond_g2_70 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4305    return ( (g_morph(lToken[nTokenOffset+3], ":m", "*") and g_morph(lToken[nTokenOffset+4], ":f", "*")) or (g_morph(lToken[nTokenOffset+3], ":f", "*") and g_morph(lToken[nTokenOffset+4], ":m", "*")) ) and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"]) and not g_morph(lToken[nTokenOffset], ":[NA]")
4306def _g_sugg_g2_84 (lToken, nTokenOffset, nLastToken):
4307    return switchGender(lToken[nTokenOffset+4]["sValue"], False)
4308def _g_cond_g2_71 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4309    return bCondMemo and hasFemForm(lToken[nTokenOffset+3]["sValue"])
4310def _g_sugg_g2_85 (lToken, nTokenOffset, nLastToken):
4311    return switchGender(lToken[nTokenOffset+3]["sValue"])
4312def _g_cond_g2_72 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4313    return g_morph(lToken[nTokenOffset+3], ":[si]", "*") and g_morph(lToken[nTokenOffset+4], ":p", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"]) and not g_morph(lToken[nTokenOffset], ":[NA]")
4314def _g_sugg_g2_86 (lToken, nTokenOffset, nLastToken):
4315    return suggSing(lToken[nTokenOffset+4]["sValue"])
4316def _g_cond_g2_73 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4317    return g_morph(lToken[nTokenOffset+3], ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)")
4318def _g_sugg_g2_87 (lToken, nTokenOffset, nLastToken):
4319    return suggLesLa(lToken[nTokenOffset+3]["sValue"])
4320def _g_cond_g2_74 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4321    return bCondMemo and hasMasForm(lToken[nTokenOffset+3]["sValue"])
4322def _g_sugg_g2_88 (lToken, nTokenOffset, nLastToken):
4323    return suggMasSing(lToken[nTokenOffset+3]["sValue"], True)
4324def _g_cond_g2_75 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4325    return not bCondMemo and g_morph(lToken[nTokenOffset+3], ":[NA].*:p", ":[siGW]")
4326def _g_sugg_g2_89 (lToken, nTokenOffset, nLastToken):
4327    return suggMasSing(lToken[nTokenOffset+3]["sValue"])
4328def _g_cond_g2_76 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4329    return bCondMemo
4330def _g_cond_g2_77 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4331    return g_morph(lToken[nTokenOffset+2], ":D")
4332def _g_cond_g2_78 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4333    return g_morph(lToken[nTokenOffset+3], ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") or ( g_morph(lToken[nTokenOffset+3], ":[NA].*:f", ":[me]") and g_morph(lToken[nTokenOffset+1], ":R", ">(?:e[tn]|ou)/") and not (g_morph(lToken[nTokenOffset+1], ":Rv") and g_morph(lToken[nTokenOffset+3], ":Y")) )
4334def _g_cond_g2_79 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4335    return not bCondMemo and g_morph(lToken[nTokenOffset+3], ":[NA].*:p", "*") or ( g_morph(lToken[nTokenOffset+3], ":[NA].*:p", ":[si]") and g_morph(lToken[nTokenOffset+1], ":[RC]", ">(?:e[tn]|ou)/") and not (g_morph(lToken[nTokenOffset+1], ":Rv") and g_morph(lToken[nTokenOffset+3], ":Y")) )
4336def _g_cond_g2_80 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4337    return g_morph(lToken[nTokenOffset+3], ":[NA].*:f", ":(?:e|m|P|G|W|Y)")
4338def _g_cond_g2_81 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4339    return g_morph(lToken[nTokenOffset+1], ":D") and not g_value(lToken[nTokenOffset], "|et|ou|de|") and not g_morph(lToken[nTokenOffset+3], ">seul/")
4340def _g_cond_g2_82 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4341    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[me]", ":(?:B|G|V0)") and g_morph(lToken[nTokenOffset+3], ":[NA].*:f", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4342def _g_cond_g2_83 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4343    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[si]", ":G") and g_morph(lToken[nTokenOffset+3], ":[NA].*:p", ":[GWsi]") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4344def _g_cond_g2_84 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4345    return g_morph(lToken[nTokenOffset+2], ":D") and not g_morph(lToken[nTokenOffset], ":[NA]") and not g_morph(lToken[nTokenOffset+4], ">seul/")
4346def _g_cond_g2_85 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4347    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]", ":(?:B|G|V0|f)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:f", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
4348def _g_sugg_g2_90 (lToken, nTokenOffset, nLastToken):
4349    return suggMasSing(lToken[nTokenOffset+4]["sValue"], True)
4350def _g_cond_g2_86 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4351    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[si]", ":G") and g_morph(lToken[nTokenOffset+4], ":[NA].*:p", ":[GWsi]") and not apposition(lToken[nTokenOffset+4]["sValue"], lToken[nTokenOffset+4]["sValue"])
4352def _g_sugg_g2_91 (lToken, nTokenOffset, nLastToken):
4353    return suggMasSing(lToken[nTokenOffset+4]["sValue"])
4354def _g_cond_g2_87 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4355    return g_morph(lToken[nTokenOffset+3], ":[NA].*:m", ":(?:e|f|P|G|W|M|[1-3][sp]|Y)")
4356def _g_sugg_g2_92 (lToken, nTokenOffset, nLastToken):
4357    return suggFemSing(lToken[nTokenOffset+3]["sValue"], True)
4358def _g_cond_g2_88 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4359    return not bCondMemo and g_morph(lToken[nTokenOffset+3], ":[NA].*:p")
4360def _g_sugg_g2_93 (lToken, nTokenOffset, nLastToken):
4361    return suggFemSing(lToken[nTokenOffset+3]["sValue"])
4362def _g_cond_g2_89 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4363    return g_morph(lToken[nTokenOffset+3], ":[NA].*:m", ":(?:e|f|P|G|W|M|[1-3][sp]|Y)") or ( g_morph(lToken[nTokenOffset+3], ":[NA].*:m", ":[Mfe]") and g_morph(lToken[nTokenOffset+1], ":[RC]", ">(?:e[tn]|ou)/") and not (g_morph(lToken[nTokenOffset+1], ":(?:Rv|C)") and g_morph(lToken[nTokenOffset+3], ":Y")) )
4364def _g_cond_g2_90 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4365    return not bCondMemo and g_morph(lToken[nTokenOffset+3], ":[NA].*:p", "*") or ( g_morph(lToken[nTokenOffset+3], ":[NA].*:p", ":[Msi]") and g_morph(lToken[nTokenOffset+1], ":[RC]", ">(?:e[tn]|ou)/") and not (g_morph(lToken[nTokenOffset+1], ":Rv") and g_morph(lToken[nTokenOffset+3], ":Y")) )
4366def _g_cond_g2_91 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4367    return g_morph(lToken[nTokenOffset+3], ":[NA].*:m", ":[efPGWMY]")
4368def _g_cond_g2_92 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4369    return g_morph(lToken[nTokenOffset+1], ":D") and not g_value(lToken[nTokenOffset], "|et|ou|de|d’|") and not g_morph(lToken[nTokenOffset+3], ">seul/")
4370def _g_cond_g2_93 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4371    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[fe]", ":(?:B|G|V0)") and g_morph(lToken[nTokenOffset+3], ":[NA].*:m", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4372def _g_cond_g2_94 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4373    return g_morph(lToken[nTokenOffset+2], ":D") and not g_morph(lToken[nTokenOffset], ":[NA]|>(?:et|ou)/") and not g_morph(lToken[nTokenOffset+4], ">seul/")
4374def _g_cond_g2_95 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4375    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]", ":(?:B|G|V0|m)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:m", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
4376def _g_sugg_g2_94 (lToken, nTokenOffset, nLastToken):
4377    return suggFemSing(lToken[nTokenOffset+4]["sValue"], True)
4378def _g_cond_g2_96 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4379    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[si]", ":G") and g_morph(lToken[nTokenOffset+4], ":[NA].*:p", ":[GWsi]") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
4380def _g_sugg_g2_95 (lToken, nTokenOffset, nLastToken):
4381    return suggFemSing(lToken[nTokenOffset+4]["sValue"])
4382def _g_cond_g2_97 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4383    return g_morph(lToken[nTokenOffset+3], ":[NA].*:p", "*")
4384def _g_cond_g2_98 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4385    return g_morph(lToken[nTokenOffset+3], ":[NA].*:p", "*") or ( g_morph(lToken[nTokenOffset+3], ":[NA].*:p", ":[si]") and g_morph(lToken[nTokenOffset+1], ":[RC]", ">(?:e[tn]|ou)/") and not (g_morph(lToken[nTokenOffset+1], ":Rv") and g_morph(lToken[nTokenOffset+3], ":Y")) )
4386def _g_cond_g2_99 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4387    return g_morph(lToken[nTokenOffset+3], ":[NA].*:p", ":[siGW]")
4388def _g_cond_g2_100 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4389    return ((g_morph(lToken[nTokenOffset+2], ":[NA].*:m", ":(?:B|e|G|V0|f)") and g_morph(lToken[nTokenOffset+3], ":[NA].*:f", "*")) or (g_morph(lToken[nTokenOffset+2], ":[NA].*:f", ":(?:B|e|G|V0|m)") and g_morph(lToken[nTokenOffset+3], ":[NA].*:m", "*"))) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4390def _g_sugg_g2_96 (lToken, nTokenOffset, nLastToken):
4391    return switchGender(lToken[nTokenOffset+2]["sValue"], False)
4392def _g_cond_g2_101 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4393    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":[NA].*:i")
4394def _g_cond_g2_102 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4395    return ((g_morph(lToken[nTokenOffset+3], ":[NA].*:m", ":(?:B|e|G|V0|f)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:f", "*")) or (g_morph(lToken[nTokenOffset+3], ":[NA].*:f", ":(?:B|e|G|V0|m)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:m", "*"))) and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
4396def _g_cond_g2_103 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4397    return bCondMemo and g_morph(lToken[nTokenOffset+3], ":[NA].*:i")
4398def _g_cond_g2_104 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4399    return not g_value(lToken[nTokenOffset], "|et|ou|") and g_morph(lToken[nTokenOffset+1], ":D") and g_morph(lToken[nTokenOffset+2], ":[NA].*:[si]", ":(?:[123][sp]|G)") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[si]", ":(?:[123][sp]|G|P)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:p", "*") and lToken[nTokenOffset+4]["sValue"].islower()
4400def _g_cond_g2_105 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4401    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f", ":[GWme]")
4402def _g_cond_g2_106 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4403    return bCondMemo and hasMasForm(lToken[nTokenOffset+2]["sValue"])
4404def _g_sugg_g2_97 (lToken, nTokenOffset, nLastToken):
4405    return suggMasSing(lToken[nTokenOffset+2]["sValue"], True)
4406def _g_cond_g2_107 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4407    return g_morph(lToken[nTokenOffset+2], ":[NA].*:p", ":[siGW]")
4408def _g_sugg_g2_98 (lToken, nTokenOffset, nLastToken):
4409    return suggMasSing(lToken[nTokenOffset+2]["sValue"])
4410def _g_cond_g2_108 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4411    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m", ":[efGW]")
4412def _g_sugg_g2_99 (lToken, nTokenOffset, nLastToken):
4413    return suggFemSing(lToken[nTokenOffset+2]["sValue"], True)
4414def _g_sugg_g2_100 (lToken, nTokenOffset, nLastToken):
4415    return suggFemSing(lToken[nTokenOffset+2]["sValue"])
4416def _g_cond_g2_109 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4417    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f", ":(?:e|m|G|W|V0|3s|Y)")
4418def _g_cond_g2_110 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4419    return g_morph(lToken[nTokenOffset+3], ":[NA].*:f", ":(?:e|m|G|W|V0|3s)")
4420def _g_sugg_g2_101 (lToken, nTokenOffset, nLastToken):
4421    return suggMasPlur(lToken[nTokenOffset+3]["sValue"], True)
4422def _g_cond_g2_111 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4423    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m", ":(?:e|f|G|W|V0|3s|P)") and not ( lToken[nTokenOffset+2]["sValue"] == "demi" and g_morph(lToken[nLastToken+1], ":N.*:f", "*") )
4424def _g_cond_g2_112 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4425    return g_morph(lToken[nTokenOffset+3], ":[NA].*:m", ":(?:e|f|G|W|V0|3s)")
4426def _g_sugg_g2_102 (lToken, nTokenOffset, nLastToken):
4427    return suggFemPlur(lToken[nTokenOffset+3]["sValue"], True)
4428def _g_cond_g2_113 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4429    return not g_value(lToken[nTokenOffset], "|et|ou|d’|") and not g_morph(lToken[nTokenOffset+3], ">seul/")
4430def _g_cond_g2_114 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4431    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[si]", ":G") and g_morph(lToken[nTokenOffset+3], ":[NA].*:p", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4432def _g_cond_g2_115 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4433    return not g_morph(lToken[nTokenOffset], ":[NA]|>(?:et|ou)/") and not g_morph(lToken[nTokenOffset+4], ">seul/")
4434def _g_cond_g2_116 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4435    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[si]", ":G") and g_morph(lToken[nTokenOffset+4], ":[NA].*:p", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
4436def _g_cond_g2_117 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4437    return lToken[nTokenOffset+2]["sValue"] != "fois" and g_morph(lToken[nTokenOffset+2], ":[NA].*:[si]", ":G") and g_morph(lToken[nTokenOffset+3], ":[NA].*:p", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4438def _g_cond_g2_118 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4439    return lToken[nTokenOffset+3]["sValue"] != "fois" and g_morph(lToken[nTokenOffset+3], ":[NA].*:[si]", ":G") and g_morph(lToken[nTokenOffset+4], ":[NA].*:p", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
4440def _g_cond_g2_119 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4441    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f", ":(?:3s|[GWme])")
4442def _g_cond_g2_120 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4443    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f", ":[GWme]") and g_morph(lToken[nTokenOffset+2], ":3s")
4444def _g_cond_g2_121 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4445    return g_morph(lToken[nTokenOffset+2], ">[bcçdfgjklmnpqrstvwxz].+:[NA].*:m", ":[efGW]")
4446def _g_sugg_g2_103 (lToken, nTokenOffset, nLastToken):
4447    return suggCeOrCet(lToken[nTokenOffset+2]["sValue"])
4448def _g_cond_g2_122 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4449    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f:s", ":[GWme]")
4450def _g_cond_g2_123 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4451    return not g_value(lToken[nTokenOffset], "|et|ou|de|d’|") and not g_morph(lToken[nTokenOffset+3], ">seul/")
4452def _g_cond_g2_124 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4453    return g_morph(lToken[nTokenOffset+1], ":D")
4454def _g_cond_g2_125 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4455    return g_morph(lToken[nTokenOffset+2], ">[bcdfgjklmnpqrstvwxz].*:[NA].*:f", ":[GWme]")
4456def _g_sugg_g2_104 (lToken, nTokenOffset, nLastToken):
4457    return lToken[nTokenOffset+1]["sValue"].replace("on", "a").replace("ON", "A")
4458def _g_cond_g2_126 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4459    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m", ":(?:B|G|e|V0|f)") and g_morph(lToken[nTokenOffset+3], ":[NA].*:f", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4460def _g_cond_g2_127 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4461    return g_morph(lToken[nTokenOffset+2], ">[aâeéèêiîoôuûyœæ].*:[NA].*:f", ":(?:B|G|e|V0|m)") and g_morph(lToken[nTokenOffset+3], ":[NA].*:m", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4462def _g_cond_g2_128 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4463    return g_morph(lToken[nTokenOffset+3], ":[NA].*:m", ":(?:B|G|e|V0|f)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:f", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
4464def _g_cond_g2_129 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4465    return g_morph(lToken[nTokenOffset+3], ">[aâeéèêiîoôuûyœæ].*:[NA].*:f", ":(?:B|G|e|V0|m)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:m", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
4466def _g_cond_g2_130 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4467    return not (g_tag(lToken[nTokenOffset+1], "_CAP_") and g_morph(lToken[nTokenOffset+1], ":N"))
4468def _g_sugg_g2_105 (lToken, nTokenOffset, nLastToken):
4469    return lToken[nTokenOffset+1]["sValue"][:-1]+"on"
4470def _g_cond_g2_131 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4471    return bCondMemo and not re.search("(?i)^[aâeéèêiîoôuûyœæ]", lToken[nTokenOffset+2]["sValue"]) and hasFemForm(lToken[nTokenOffset+2]["sValue"])
4472def _g_cond_g2_132 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4473    return g_morph(lToken[nTokenOffset+2], ":[NAQ].*:[fe]", ":(?:B|G|V0)") and g_morph(lToken[nTokenOffset+3], ":[NAQ].*:m", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4474def _g_cond_g2_133 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4475    return g_morph(lToken[nTokenOffset+2], ":[NAQ].*:[si]", ":G") and g_morph(lToken[nTokenOffset+3], ":[NAQ].*:p", ":[GWsi]") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4476def _g_cond_g2_134 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4477    return not g_morph(lToken[nTokenOffset], ":[NAQ]|>(?:et|ou)/") and not g_morph(lToken[nTokenOffset+4], ">seul/")
4478def _g_cond_g2_135 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4479    return g_morph(lToken[nTokenOffset+3], ":[NAQ].*:[fe]", ":(?:B|G|V0|m)") and g_morph(lToken[nTokenOffset+4], ":[NAQ].*:m", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
4480def _g_cond_g2_136 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4481    return g_morph(lToken[nTokenOffset+3], ":[NAQ].*:[si]", ":G") and g_morph(lToken[nTokenOffset+4], ":[NAQ].*:p", ":[GWsi]") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"])
4482def _g_cond_g2_137 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4483    return g_morph(lToken[nTokenOffset+2], ":[NA].*:p", ":[siG]") and not g_value(lToken[nLastToken+1], "|que|qu’|")
4484def _g_cond_g2_138 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4485    return not g_value(lToken[nTokenOffset], "|et|ou|") and g_morph(lToken[nTokenOffset+2], ":[NA].*:[si]") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[si]", ":(?:[123][sp]|G|P|B)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:p", "*") and lToken[nTokenOffset+4]["sValue"].islower()
4486def _g_cond_g2_139 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4487    return g_morph(lToken[nTokenOffset+3], ":[NA].*:s", "*") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":[NA]"))
4488def _g_sugg_g2_106 (lToken, nTokenOffset, nLastToken):
4489    return suggPlur(lToken[nTokenOffset+3]["sValue"])
4490def _g_cond_g2_140 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4491    return g_morph(lToken[nTokenOffset+2], ":D") and ( g_morph(lToken[nTokenOffset+3], ":[NA].*:s", "*") or (g_morph(lToken[nTokenOffset+3], ":[NA].*:s", ":[pi]|>avoir/") and g_morph(lToken[nTokenOffset+1], ":[RC]", ">(?:e[tn]|ou|puis)/") and not (g_morph(lToken[nTokenOffset+1], ":Rv") and g_morph(lToken[nTokenOffset+3], ":Y"))) ) and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":[NA]")) and not (g_value(lToken[nTokenOffset+1], "|que|") and g_morph(lToken[nTokenOffset], ">tel/") and g_morph(lToken[nTokenOffset+3], ":3[sp]"))
4492def _g_cond_g2_141 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4493    return g_morph(lToken[nTokenOffset+3], ":[NA].*:s", ":[ipYPGW]") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":[NA]"))
4494def _g_sugg_g2_107 (lToken, nTokenOffset, nLastToken):
4495    return switchGender(lToken[nTokenOffset+3]["sValue"], True)
4496def _g_sugg_g2_108 (lToken, nTokenOffset, nLastToken):
4497    return switchGender(lToken[nTokenOffset+2]["sValue"], True)
4498def _g_cond_g2_142 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4499    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[pi]") and g_morph(lToken[nTokenOffset+3], ":[NA].*:s", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"]) and not (g_value(lToken[nLastToken+1], "|et|,|") and g_morph(g_token(lToken, nLastToken+2), ":A"))
4500def _g_cond_g2_143 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4501    return g_morph(lToken[nTokenOffset+2], ":D") and not g_morph(lToken[nTokenOffset], ":[NA]") and not g_morph(lToken[nTokenOffset+3], ">seul/")
4502def _g_sugg_g2_109 (lToken, nTokenOffset, nLastToken):
4503    return switchGender(lToken[nTokenOffset+4]["sValue"], True)
4504def _g_cond_g2_144 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4505    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]") and g_morph(lToken[nTokenOffset+4], ":[NA].*:s", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"]) and not (g_value(lToken[nLastToken+1], "|et|,|") and g_morph(g_token(lToken, nLastToken+2), ":A"))
4506def _g_sugg_g2_110 (lToken, nTokenOffset, nLastToken):
4507    return suggPlur(lToken[nTokenOffset+4]["sValue"])
4508def _g_cond_g2_145 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4509    return g_morph(lToken[nTokenOffset+2], ":[NA].*:s", ":(?:[ipGW]|[123][sp])") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":[NA]"))
4510def _g_sugg_g2_111 (lToken, nTokenOffset, nLastToken):
4511    return suggPlur(lToken[nTokenOffset+2]["sValue"])
4512def _g_cond_g2_146 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4513    return g_morph(lToken[nTokenOffset+2], ":[NA].*:s", ":[ipGW]") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":[NA]"))
4514def _g_cond_g2_147 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4515    return bCondMemo and g_morph(lToken[nTokenOffset+2], ">[bcdfglklmnpqrstvwxz].*:m", ":f")
4516def _g_cond_g2_148 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4517    return lToken[nTokenOffset+1]["sValue"].endswith("x") or lToken[nTokenOffset+1]["sValue"].endswith("X")
4518def _g_cond_g2_149 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4519    return not bCondMemo
4520def _g_cond_g2_150 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4521    return not g_value(lToken[nTokenOffset], "|et|ou|de|d’|au|aux|") and not g_morph(lToken[nTokenOffset+3], ">seul/")
4522def _g_cond_g2_151 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4523    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]") and g_morph(lToken[nTokenOffset+4], ":[NA].*:s", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"]) and not (g_value(lToken[nLastToken+1], "|et|,|") and g_morph(g_token(lToken, nLastToken+2), ":A")) and not (g_value(lToken[nTokenOffset+1], "|de|d’|") and g_value(lToken[nTokenOffset], "|un|une|"))
4524def _g_cond_g2_152 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4525    return not g_morph(lToken[nTokenOffset], ">(?:et|ou)/|:R") and not g_morph(lToken[nTokenOffset+3], ">(?:seul|minimum|maximum)/")
4526def _g_cond_g2_153 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4527    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[pi]", ":(?:B|G|V0)") and g_morph(lToken[nTokenOffset+3], ":[NA].*:s", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"]) and not (g_value(lToken[nLastToken+1], "|et|,|") and g_morph(g_token(lToken, nLastToken+2), ":A"))
4528def _g_cond_g2_154 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4529    return (g_morph(lToken[nTokenOffset], ":(?:[VRBX]|Cs|LV)|>comme/|<start>|>,", "*") or g_morph(lToken[nTokenOffset+3], ":N", ":[AQ]")) and not g_morph(lToken[nTokenOffset+3], ">(?:seul|minimum|maximum)/")
4530def _g_cond_g2_155 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4531    return ( (g_morph(lToken[nTokenOffset+2], ":[NA].*:m", ":[fe]") and g_morph(lToken[nTokenOffset+3], ":[NA].*:f", "*")) or (g_morph(lToken[nTokenOffset+2], ":[NA].*:f", ":[me]") and g_morph(lToken[nTokenOffset+3], ":[NA].*:m", "*")) ) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4532def _g_cond_g2_156 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4533    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[pi]", ":G") and g_morph(lToken[nTokenOffset+3], ":[NA].*:s", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"]) and not (g_value(lToken[nLastToken+1], "|et|,|") and g_morph(g_token(lToken, nLastToken+2), ":A"))
4534def _g_cond_g2_157 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4535    return not g_morph(lToken[nTokenOffset+3], ":G|>a/") and g_checkAgreement(lToken[nTokenOffset+2], lToken[nTokenOffset+3])
4536def _g_da_g2_1 (lToken, nTokenOffset, nLastToken):
4537    return g_exclude(lToken[nTokenOffset+3], ":V")
4538def _g_cond_g2_158 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4539    return g_morph(lToken[nTokenOffset+2], ":[NA].*:s", ":[ipGWP]") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":[NA]"))
4540def _g_cond_g2_159 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4541    return g_morph(lToken[nTokenOffset+1], ":D") and g_morph(lToken[nTokenOffset+2], ":[NA].*:[pi]", ":(?:[123][sp]|G)") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]", ":(?:[123][sp]|G)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:s", "*") and lToken[nTokenOffset+4]["sValue"].islower()
4542def _g_cond_g2_160 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4543    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[pi]") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]", ":(?:[123][sp]|G)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:s", "*") and lToken[nTokenOffset+4]["sValue"].islower() and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\bune? de +$") and not g_morph(lToken[nTokenOffset+4], ">seul/")
4544def _g_cond_g2_161 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4545    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[pi]", ":[123][sp]") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]", ":(?:[123][sp]|G)") and g_morph(lToken[nTokenOffset+4], ":[NA].*:s", "*") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\bune? de +$") and not g_morph(lToken[nTokenOffset+4], ">seul/")
4546def _g_cond_g2_162 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4547    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f", ":[emGWP]")
4548def _g_sugg_g2_112 (lToken, nTokenOffset, nLastToken):
4549    return suggMasPlur(lToken[nTokenOffset+2]["sValue"], True)
4550def _g_cond_g2_163 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4551    return g_morph(lToken[nTokenOffset+2], ":[NA].*:s", ":(?:[ipGWP]|V0)") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":[NA]"))
4552def _g_cond_g2_164 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4553    return g_morph(lToken[nTokenOffset+3], ":[NA].*:f", ":[emGW]")
4554def _g_cond_g2_165 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4555    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m", ":[efGWP]")
4556def _g_sugg_g2_113 (lToken, nTokenOffset, nLastToken):
4557    return suggFemPlur(lToken[nTokenOffset+2]["sValue"], True)
4558def _g_cond_g2_166 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4559    return g_morph(lToken[nTokenOffset+3], ":[NA].*:m", ":[efGW]")
4560def _g_cond_g2_167 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4561    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f:p", ":(?:V0|Oo|[NA].*:[me]:[si])")
4562def _g_cond_g2_168 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4563    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m:p", ":(?:V0|Oo|[NA].*:[me]:[si])")
4564def _g_cond_g2_169 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4565    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f:[si]", ":(?:V0|Oo|[NA].*:[me]:[si])")
4566def _g_cond_g2_170 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4567    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f:s", ":(?:V0|Oo|[NA].*:[me]:[pi])")
4568def _g_cond_g2_171 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4569    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m:s", ":(?:V0|Oo|[NA].*:[me]:[pi])")
4570def _g_cond_g2_172 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4571    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f:[pi]", ":(?:V0|Oo|[NA].*:[me]:[pi])")
4572def _g_cond_g2_173 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4573    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m:p", ":(?:V0|Oo|[NA].*:[fe]:[si])")
4574def _g_cond_g2_174 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4575    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f:p", ":(?:V0|Oo|[NA].*:[fe]:[si])")
4576def _g_cond_g2_175 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4577    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m:[si]", ":(?:V0|Oo|[NA].*:[fe]:[si])")
4578def _g_cond_g2_176 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4579    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m:s", ":(?:V0|Oo|[NA].*:[fe]:[pi])")
4580def _g_cond_g2_177 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4581    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f:s", ":(?:V0|Oo|[NA].*:[fe]:[pi])")
4582def _g_cond_g2_178 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4583    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m:[pi]", ":(?:V0|Oo|[NA].*:[fe]:[pi])")
4584def _g_cond_g2_179 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4585    return not g_value(lToken[nTokenOffset], "|tel|telle|")
4586def _g_cond_g2_180 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4587    return not g_value(lToken[nTokenOffset], "|tels|telles|")
4588def _g_sugg_g2_114 (lToken, nTokenOffset, nLastToken):
4589    return lToken[nTokenOffset+1]["sValue"][:-1]
4590def _g_cond_g2_181 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4591    return not g_value(lToken[nTokenOffset], "|tel|telle|") and g_morph(lToken[nTokenOffset+4], ":[NA].*:[fe]", ":m")
4592def _g_cond_g2_182 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4593    return not g_value(lToken[nTokenOffset], "|tel|telle|") and g_morph(lToken[nTokenOffset+4], ":[NA].*:f", ":[me]")
4594def _g_cond_g2_183 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4595    return not g_value(lToken[nTokenOffset], "|tel|telle|") and g_morph(lToken[nTokenOffset+4], ":[NA].*:[me]", ":f")
4596def _g_cond_g2_184 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4597    return not g_value(lToken[nTokenOffset], "|tel|telle|") and g_morph(lToken[nTokenOffset+4], ":[NA].*:m", ":[fe]")
4598def _g_cond_g2_185 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4599    return not g_value(lToken[nTokenOffset], "|tels|telles|") and g_morph(lToken[nTokenOffset+4], ":[NA].*:f", ":[me]")
4600def _g_cond_g2_186 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4601    return not g_value(lToken[nTokenOffset], "|tels|telles|") and g_morph(lToken[nTokenOffset+4], ":[NA].*:m", ":[fe]")
4602def _g_cond_g2_187 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4603    return g_morph(lToken[nLastToken-1+1], ":[NA].*:m", ":[fe]")
4604def _g_cond_g2_188 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4605    return g_morph(lToken[nTokenOffset+5], ":[NA].*:f", ":[me]")
4606def _g_sugg_g2_115 (lToken, nTokenOffset, nLastToken):
4607    return suggMasPlur(lToken[nTokenOffset+3]["sValue"])
4608def _g_cond_g2_189 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4609    return not g_morph(lToken[nTokenOffset], ":[NA]|>(?:et|ou)/") and not g_morph(lToken[nTokenOffset+3], ">seul/")
4610def _g_sugg_g2_116 (lToken, nTokenOffset, nLastToken):
4611    return suggMasPlur(lToken[nTokenOffset+4]["sValue"], True)
4612def _g_cond_g2_190 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4613    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]", ":G") and g_morph(lToken[nTokenOffset+4], ":[NA].*:s", "*") and not apposition(lToken[nTokenOffset+3]["sValue"], lToken[nTokenOffset+4]["sValue"]) and not (g_value(lToken[nLastToken+1], "|et|,|") and g_morph(g_token(lToken, nLastToken+2), ":A")) and not (g_value(lToken[nTokenOffset+1], "|de|d’|") and g_value(lToken[nTokenOffset], "|un|une|"))
4614def _g_sugg_g2_117 (lToken, nTokenOffset, nLastToken):
4615    return suggMasPlur(lToken[nTokenOffset+4]["sValue"])
4616def _g_sugg_g2_118 (lToken, nTokenOffset, nLastToken):
4617    return suggFemPlur(lToken[nTokenOffset+3]["sValue"])
4618def _g_sugg_g2_119 (lToken, nTokenOffset, nLastToken):
4619    return suggFemPlur(lToken[nTokenOffset+4]["sValue"], True)
4620def _g_sugg_g2_120 (lToken, nTokenOffset, nLastToken):
4621    return suggFemPlur(lToken[nTokenOffset+4]["sValue"])
4622def _g_cond_g2_191 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4623    return lToken[nTokenOffset+2]["sValue"] != "cents"
4624def _g_cond_g2_192 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4625    return g_morph(lToken[nLastToken-1+1], ":A.*:f")
4626def _g_sugg_g2_121 (lToken, nTokenOffset, nLastToken):
4627    return suggMasSing(lToken[nLastToken-1+1]["sValue"], True)
4628def _g_cond_g2_193 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4629    return not bCondMemo and g_morph(lToken[nLastToken-1+1], ":A.*:p")
4630def _g_sugg_g2_122 (lToken, nTokenOffset, nLastToken):
4631    return suggMasSing(lToken[nLastToken-1+1]["sValue"])
4632def _g_cond_g2_194 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4633    return g_morph(lToken[nLastToken-1+1], ":A.*:m")
4634def _g_sugg_g2_123 (lToken, nTokenOffset, nLastToken):
4635    return suggFemSing(lToken[nLastToken-1+1]["sValue"], True)
4636def _g_sugg_g2_124 (lToken, nTokenOffset, nLastToken):
4637    return suggFemSing(lToken[nLastToken-1+1]["sValue"])
4638def _g_sugg_g2_125 (lToken, nTokenOffset, nLastToken):
4639    return suggMasPlur(lToken[nLastToken-1+1]["sValue"], True)
4640def _g_cond_g2_195 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4641    return not bCondMemo and g_morph(lToken[nLastToken-1+1], ":A.*:s")
4642def _g_sugg_g2_126 (lToken, nTokenOffset, nLastToken):
4643    return suggMasPlur(lToken[nLastToken-1+1]["sValue"])
4644def _g_sugg_g2_127 (lToken, nTokenOffset, nLastToken):
4645    return suggFemPlur(lToken[nLastToken-1+1]["sValue"], True)
4646def _g_sugg_g2_128 (lToken, nTokenOffset, nLastToken):
4647    return suggFemPlur(lToken[nLastToken-1+1]["sValue"])
4648def _g_cond_g2_196 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4649    return not g_value(lToken[nTokenOffset+1], "|neuf|mille|") and g_morph(lToken[nTokenOffset+2], ":[NA].*:s", "*") and not g_morph(lToken[nTokenOffset], ":D.*:s") and not g_value(lToken[nTokenOffset+2], "|maximum|minimum|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") and not re.search("^[IVXLDM]+$", lToken[nTokenOffset+1]["sValue"])
4650def _g_cond_g2_197 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4651    return g_morph(lToken[nTokenOffset+2], ":[NA].*:s", "*") and not g_morph(lToken[nTokenOffset], ":N.*:m:[is]") and not g_morph(lToken[nTokenOffset], ":D.*:s") and not g_value(lToken[nTokenOffset+2], "|maximum|minimum|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|")
4652def _g_cond_g2_198 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4653    return not g_value(lToken[nTokenOffset+2], "|maximum|minimum|multiplié|divisé|") and g_morph(lToken[nTokenOffset+2], ":[NA].*:s", "*") and not g_morph(lToken[nTokenOffset], ":D.*:s")
4654def _g_cond_g2_199 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4655    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and not g_value(lToken[nTokenOffset+2], "|Rois|Corinthiens|Thessaloniciens|")
4656def _g_cond_g2_200 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4657    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and not g_value(lToken[nTokenOffset], "|/|") and not re.search("^0*[01](?:,[0-9]+|)$", lToken[nTokenOffset+1]["sValue"]) and g_morph(lToken[nTokenOffset+2], ":[NA].*:s", "*") and not g_morph(lToken[nTokenOffset], ":(?:N|D.*:s)") and not g_value(lToken[nTokenOffset+2], "|maximum|minimum|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|")
4658def _g_cond_g2_201 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4659    return not g_value(lToken[nTokenOffset+2], "|maximum|minimum|fois|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") and not re.search("^0*[01](?:,[0-9]+|)$", lToken[nTokenOffset+1]["sValue"]) and not g_morph(lToken[nTokenOffset], ">(?:et|ou)/|:(?:N|D.*:[si])") and not g_morph(lToken[nTokenOffset+3], ">(?:seul|maximum|minimum)/|:(?:[BG]|V0)")
4660def _g_cond_g2_202 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4661    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[pi]", "*") and g_morph(lToken[nTokenOffset+3], ":[NA].*:s", "*") and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"]) and not (g_value(lToken[nLastToken+1], "|et|,|") and g_morph(g_token(lToken, nLastToken+2), ":A"))
4662def _g_sugg_g2_129 (lToken, nTokenOffset, nLastToken):
4663    return lToken[nTokenOffset+2]["sValue"][:-1]
4664def _g_cond_g2_203 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4665    return ((g_morph(lToken[nTokenOffset+2], ":m", "*") and g_morph(lToken[nTokenOffset+3], ":f", "*")) or (g_morph(lToken[nTokenOffset+2], ":f", "*") and g_morph(lToken[nTokenOffset+3], ":m", "*"))) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4666def _g_cond_g2_204 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4667    return ((g_morph(lToken[nTokenOffset+2], ":s", "*") and g_morph(lToken[nTokenOffset+3], ":p", "*")) or (g_morph(lToken[nTokenOffset+2], ":p", "*") and g_morph(lToken[nTokenOffset+3], ":s", "*"))) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4668def _g_sugg_g2_130 (lToken, nTokenOffset, nLastToken):
4669    return switchPlural(lToken[nTokenOffset+3]["sValue"])
4670def _g_sugg_g2_131 (lToken, nTokenOffset, nLastToken):
4671    return switchPlural(lToken[nTokenOffset+2]["sValue"])
4672def _g_cond_g2_205 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4673    return g_morph(lToken[nTokenOffset+2], ":p") and g_morph(lToken[nTokenOffset+3], ":[pi]") and g_morph(lToken[nTokenOffset+4], ":s") and lToken[nTokenOffset+4]["sValue"].islower()
4674def _g_sugg_g2_132 (lToken, nTokenOffset, nLastToken):
4675    return switchPlural(lToken[nTokenOffset+4]["sValue"])
4676def _g_cond_g2_206 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4677    return g_morph(lToken[nTokenOffset+2], ":i") and g_morph(lToken[nTokenOffset+3], ":p")    and g_morph(lToken[nTokenOffset+4], ":s") and lToken[nTokenOffset+4]["sValue"].islower()
4678def _g_cond_g2_207 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4679    return g_morph(lToken[nTokenOffset+2], ":s") and g_morph(lToken[nTokenOffset+3], ":[si]") and g_morph(lToken[nTokenOffset+4], ":p") and lToken[nTokenOffset+4]["sValue"].islower()
4680def _g_cond_g2_208 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4681    return g_morph(lToken[nTokenOffset+2], ":i") and g_morph(lToken[nTokenOffset+3], ":s")    and g_morph(lToken[nTokenOffset+4], ":p") and lToken[nTokenOffset+4]["sValue"].islower()
4682def _g_cond_g2_209 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4683    return ( (g_morph(lToken[nTokenOffset+2], ":p", "*") and g_morph(lToken[nTokenOffset+3], ":s", "*")) or (g_morph(lToken[nTokenOffset+2], ":s", "*") and g_morph(lToken[nTokenOffset+3], ":p", "*")) ) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4684def _g_cond_g2_210 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4685    return ( (g_morph(lToken[nTokenOffset+2], ":m", ":[fe]") and g_morph(lToken[nTokenOffset+3], ":f", "*")) or (g_morph(lToken[nTokenOffset+2], ":f", ":[me]") and g_morph(lToken[nTokenOffset+3], ":m", "*")) ) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4686def _g_cond_g2_211 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4687    return ( (g_morph(lToken[nTokenOffset+2], ":p", ":[si]") and g_morph(lToken[nTokenOffset+3], ":s", "*")) or (g_morph(lToken[nTokenOffset+2], ":s", ":[pi]") and g_morph(lToken[nTokenOffset+3], ":p", "*")) ) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"])
4688def _g_cond_g2_212 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4689    return ( (g_morph(lToken[nTokenOffset+2], ":m", ":[fe]") and g_morph(lToken[nTokenOffset+3], ":f", "*")) or (g_morph(lToken[nTokenOffset+2], ":f", ":[me]") and g_morph(lToken[nTokenOffset+3], ":m", "*")) ) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"]) and not g_morph(lToken[nTokenOffset], ":[NA]|>(?:et|ou)/")
4690def _g_cond_g2_213 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4691    return ( (g_morph(lToken[nTokenOffset+2], ":p", ":[si]") and g_morph(lToken[nTokenOffset+3], ":s", "*")) or (g_morph(lToken[nTokenOffset+2], ":s", ":[pi]") and g_morph(lToken[nTokenOffset+3], ":p", "*")) ) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"]) and not g_morph(lToken[nTokenOffset], ":[NA]|>(?:et|ou)/")
4692def _g_cond_g2_214 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4693    return ( (g_morph(lToken[nTokenOffset+2], ":m", ":[fe]") and g_morph(lToken[nTokenOffset+3], ":f", "*")) or (g_morph(lToken[nTokenOffset+2], ":f", ":[me]") and g_morph(lToken[nTokenOffset+3], ":m", "*")) ) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"]) and g_morph(lToken[nTokenOffset], ":[VRX]|<start>")
4694def _g_cond_g2_215 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4695    return ( (g_morph(lToken[nTokenOffset+2], ":p", ":[si]") and g_morph(lToken[nTokenOffset+3], ":s", "*")) or (g_morph(lToken[nTokenOffset+2], ":s", ":[pi]") and g_morph(lToken[nTokenOffset+3], ":p", "*")) ) and not apposition(lToken[nTokenOffset+2]["sValue"], lToken[nTokenOffset+3]["sValue"]) and g_morph(lToken[nTokenOffset], ":[VRX]|<start>")
4696def _g_cond_g2_216 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4697    return lToken[nTokenOffset+3]["sValue"].islower()
4698def _g_cond_g2_217 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4699    return g_morph(lToken[nTokenOffset+6], ":[NA].*:(?:m|f:p)", ":(?:G|P|[fe]:[is]|V0|3[sp])") and g_morph(lToken[nTokenOffset+5], ":[NA].*:[fe]") and not apposition(lToken[nTokenOffset+5]["sValue"], lToken[nTokenOffset+6]["sValue"])
4700def _g_sugg_g2_133 (lToken, nTokenOffset, nLastToken):
4701    return suggFemSing(lToken[nTokenOffset+6]["sValue"], True)
4702def _g_cond_g2_218 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4703    return g_morph(lToken[nTokenOffset+6], ":[NA].*:(?:f|m:p)", ":(?:G|P|[me]:[is]|V0|3[sp])") and g_morph(lToken[nTokenOffset+5], ":[NA].*:[me]") and not apposition(lToken[nTokenOffset+5]["sValue"], lToken[nTokenOffset+6]["sValue"])
4704def _g_sugg_g2_134 (lToken, nTokenOffset, nLastToken):
4705    return suggMasSing(lToken[nTokenOffset+6]["sValue"], True)
4706def _g_cond_g2_219 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4707    return g_morph(lToken[nTokenOffset+5], ":[NA].*:(?:f|m:p)", ":(?:G|P|[me]:[is]|V0|3[sp])") and g_morph(lToken[nTokenOffset+4], ":[NA].*:[me]") and not apposition(lToken[nTokenOffset+4]["sValue"], lToken[nTokenOffset+5]["sValue"])
4708def _g_sugg_g2_135 (lToken, nTokenOffset, nLastToken):
4709    return suggMasSing(lToken[nTokenOffset+5]["sValue"], True)
4710def _g_cond_g2_220 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4711    return g_morph(lToken[nTokenOffset+5], ":", ":[NA].*:f|>[aéeiou].*:e") and g_morph(lToken[nTokenOffset+6], ":[NA].*:(?:f|m:p)", ":(?:G|P|m:[is]|V0|3[sp])") and not apposition(lToken[nTokenOffset+5]["sValue"], lToken[nTokenOffset+6]["sValue"])
4712def _g_cond_g2_221 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4713    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m", ":G|>[aéeiou].*:[ef]") and g_morph(lToken[nLastToken-1+1], ":[NA].*:(?:f|m:p)", ":(?:G|P|[me]:[is]|V0|3[sp])") and not apposition(lToken[nLastToken-2+1]["sValue"], lToken[nLastToken-1+1]["sValue"])
4714def _g_cond_g2_222 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4715    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m", ":G|>[aéeiou].*:[ef]") and not g_morph(lToken[nLastToken-2+1], ":[NA].*:f|>[aéeiou].*:e") and g_morph(lToken[nLastToken-1+1], ":[NA].*:(?:f|m:p)", ":(?:G|P|[me]:[is]|V0|3[sp])") and not apposition(lToken[nLastToken-2+1]["sValue"], lToken[nLastToken-1+1]["sValue"])
4716def _g_cond_g2_223 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4717    return g_morph(lToken[nLastToken-1+1], ":[NA].*:s", ":(?:G|P|[me]:[ip]|V0|3[sp])") and g_morph(lToken[nLastToken-2+1], ":[NA].*:[pi]") and not apposition(lToken[nLastToken-2+1]["sValue"], lToken[nLastToken-1+1]["sValue"]) and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":A.*:[si]"))
4718def _g_sugg_g2_136 (lToken, nTokenOffset, nLastToken):
4719    return suggPlur(lToken[nLastToken-1+1]["sValue"])
4720def _g_cond_g2_224 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4721    return not g_value(lToken[nTokenOffset+4], "|bâtiment|collège|corps|culte|établissement|groupe|journal|lycée|pays|régiment|vaisseau|village|")
4722def _g_sugg_g2_137 (lToken, nTokenOffset, nLastToken):
4723    return "leurs " + suggPlur(lToken[nTokenOffset+4]["sValue"])
4724def _g_cond_g2_225 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4725    return not g_value(lToken[nTokenOffset+4], "|armée|cité|compagnie|entreprise|église|fac|nation|université|planète|promotion|religion|unité|ville|")
4726def _g_cond_g2_226 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4727    return g_morph(lToken[nTokenOffset+3], ":N.*:m:[si]", ":f") and g_morph(lToken[nTokenOffset+4], ":R", ">à/")
4728def _g_cond_g2_227 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4729    return g_morph(lToken[nTokenOffset+3], ":N.*:f:[si]", ":m") and g_morph(lToken[nTokenOffset+4], ":R", ">à/")
4730def _g_cond_g2_228 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4731    return g_morph(lToken[nTokenOffset+3], ":N.*:m:[pi]", ":f") and g_morph(lToken[nTokenOffset+4], ":R", ">à/")
4732def _g_cond_g2_229 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4733    return g_morph(lToken[nTokenOffset+3], ":N.*:f:[pi]", ":m") and g_morph(lToken[nTokenOffset+4], ":R", ">à/")
4734def _g_cond_g2_230 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4735    return g_morph(lToken[nTokenOffset+3], ":N.*:m:[si]", ":f")
4736def _g_cond_g2_231 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4737    return g_morph(lToken[nTokenOffset+3], ":N.*:m:[si]", ":f:[si]")
4738def _g_cond_g2_232 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4739    return g_morph(lToken[nTokenOffset+3], ":N.*:f:[si]", ":m")
4740def _g_cond_g2_233 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4741    return g_morph(lToken[nTokenOffset+3], ":N.*:m:[pi]")
4742def _g_cond_g2_234 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4743    return g_morph(lToken[nTokenOffset+3], ":N.*:f:[pi]", ":m")
4744def _g_cond_g2_235 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4745    return g_morph(lToken[nTokenOffset+2], ":R") and g_morph(lToken[nTokenOffset+4], ":N.*:m:[pi]", ":f:[pi]")
4746def _g_cond_g2_236 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4747    return g_morph(lToken[nTokenOffset+2], ":R") and g_morph(lToken[nTokenOffset+4], ":N.*:f:[pi]", ":m:[pi]")
4748def _g_cond_g2_237 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4749    return g_morph(lToken[nTokenOffset+3], ":N.*:m:[pi]", ":f:[pi]")
4750def _g_cond_g2_238 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4751    return g_morph(lToken[nTokenOffset+3], ":N.*:f:[pi]", ":m:[pi]")
4752def _g_cond_g2_239 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4753    return g_morph(lToken[nTokenOffset], ":N", ":[GAVWM]")
4754def _g_cond_g2_240 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4755    return g_morph(lToken[nTokenOffset], ":N", ":D") and (not g_morph(lToken[nTokenOffset+1], ":[me]:[si]") or g_morph(lToken[nTokenOffset+2], ":[pf]"))
4756def _g_sugg_g2_138 (lToken, nTokenOffset, nLastToken):
4757    return suggSing(lToken[nTokenOffset+1]["sValue"]) + " " + suggMasSing(lToken[nTokenOffset+2]["sValue"])
4758def _g_sugg_g2_139 (lToken, nTokenOffset, nLastToken):
4759    return suggMasSing(lToken[nTokenOffset+1]["sValue"]) + " " + suggMasSing(lToken[nTokenOffset+2]["sValue"])
4760def _g_cond_g2_241 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4761    return g_morph(lToken[nTokenOffset], ":N", ":D") and (not g_morph(lToken[nTokenOffset+1], ":[me]:[si]") or g_morph(lToken[nTokenOffset+2], ":p"))
4762def _g_sugg_g2_140 (lToken, nTokenOffset, nLastToken):
4763    return suggSing(lToken[nTokenOffset+1]["sValue"]) + " " + suggSing(lToken[nTokenOffset+2]["sValue"])
4764def _g_sugg_g2_141 (lToken, nTokenOffset, nLastToken):
4765    return suggMasSing(lToken[nTokenOffset+1]["sValue"]) + " " + suggSing(lToken[nTokenOffset+2]["sValue"])
4766def _g_cond_g2_242 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4767    return not g_morph(lToken[nTokenOffset], ":D")
4768def _g_sugg_g2_142 (lToken, nTokenOffset, nLastToken):
4769    return suggPlur(lToken[nLastToken-2+1]["sValue"])
4770def _g_cond_g2_243 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4771    return not g_value(lToken[nTokenOffset], "|quatre|")
4772def _g_cond_g2_244 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4773    return not g_morph(lToken[nLastToken+1], ":B") and not g_morph(lToken[nTokenOffset], ">(?:numéro|page|chapitre|référence|année|test|série)/")
4774def _g_sugg_g2_143 (lToken, nTokenOffset, nLastToken):
4775    return lToken[nTokenOffset+1]["sValue"].replace("vingts", "vingt").replace("VINGTS", "VINGT")
4776def _g_cond_g2_245 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4777    return not g_morph(lToken[nLastToken+1], ":B:e:p|>une?") and not g_morph(lToken[nTokenOffset], ">(?:numéro|page|chapitre|référence|année|test|série)/")
4778def _g_cond_g2_246 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4779    return g_morph(lToken[nLastToken+1], ":B:e:p|>une?")
4780def _g_cond_g2_247 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4781    return g_morph(lToken[nTokenOffset], ":[VR]|<start>", ":B")
4782def _g_cond_g2_248 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4783    return g_morph(lToken[nLastToken+1], ":(?:B:e:p|N.*:p)", ":[QA]") or (g_morph(lToken[nTokenOffset], ":B") and g_morph(lToken[nLastToken+1], ":[NA]"))
4784def _g_cond_g2_249 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4785    return g_morph(lToken[nTokenOffset+3], ":[NA].*:s", ":[ip]|>o(?:nde|xydation|r)/") and g_morph(lToken[nTokenOffset], ":(?:G|[123][sp])|<start>|>,", ":[AD]")
4786def _g_cond_g2_250 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4787    return g_morph(lToken[nTokenOffset+4], ":[NA].*:s", ":[ip]|>fraude/")
4788def _g_cond_g2_251 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4789    return g_morph(lToken[nTokenOffset], ":D|<start>")
4790def _g_sugg_g2_144 (lToken, nTokenOffset, nLastToken):
4791    return lToken[nTokenOffset+3]["sValue"][:-1]
4792def _g_cond_g2_252 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4793    return g_morph(lToken[nTokenOffset+4], ":(?:N|MP)")
4794def _g_sugg_g2_145 (lToken, nTokenOffset, nLastToken):
4795    return lToken[nTokenOffset+1]["sValue"][:-2]+"s"
4796def _g_cond_g2_253 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4797    return g_morph(lToken[nTokenOffset], ":V.*:[123]|>(?:tou(?:te|)s|pas|rien|guère|jamais|toujours|souvent)/", ":[DRB]")
4798def _g_cond_g2_254 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4799    return lToken[nTokenOffset+1]["sValue"].islower() and g_morph(lToken[nTokenOffset], ":V", ":[DA]") and not g_morph(lToken[nLastToken+1], ":[NA].*:[pi]") and not (g_morph(lToken[nTokenOffset], ">(?:être|sembler|devenir|rester|demeurer|redevenir|para[îi]tre|trouver)/.*:[123]p") and g_morph(lToken[nLastToken+1], ":G|<end>|>,/"))
4800def _g_cond_g2_255 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4801    return not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\b(?:lit|fauteuil|armoire|commode|guéridon|tabouret|chaise)s?\\b") and not g_morph(lToken[nLastToken+1], ">sculpter/")
4802def _g_cond_g2_256 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4803    return g_morph(lToken[nTokenOffset], ":(?:V|R|[NAQ].*:s)", ":(?:[NA].*:[pi]|V0e.*:[123]p)")
4804def _g_cond_g2_257 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4805    return not g_morph(lToken[nTokenOffset], ":D.*:f:s")
4806def _g_cond_g2_258 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4807    return not g_morph(lToken[nTokenOffset], ":V0e.*:3p") or g_morph(lToken[nLastToken+1], ":[AQ]")
4808def _g_cond_g2_259 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4809    return lToken[nTokenOffset+2]["sValue"] != "clair" and lToken[nTokenOffset+2]["sValue"] != "Claire" and g_morph(lToken[nTokenOffset+1], ":(?:[123][sp]|P|Y)")
4810def _g_cond_g2_260 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4811    return g_morph(lToken[nTokenOffset+1], ":V")
4812def _g_cond_g2_261 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4813    return g_morph(lToken[nTokenOffset], ":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 g_morph(lToken[nLastToken+1], ":A.*:[me]:[pi]")
4814def _g_cond_g2_262 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4815    return g_morph(lToken[nTokenOffset], ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q|Y)")
4816def _g_cond_g2_263 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4817    return g_morph(lToken[nTokenOffset], ":V", ":[DA].*:p")
4818def _g_cond_g2_264 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4819    return not g_morph(lToken[nTokenOffset+2], ":3[sp]")
4820def _g_sugg_g2_146 (lToken, nTokenOffset, nLastToken):
4821    return suggVerb(lToken[nTokenOffset+2]["sValue"], ":3s")
4822def _g_cond_g2_265 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4823    return not g_morph(lToken[nTokenOffset+3], ":3[sp]")
4824def _g_sugg_g2_147 (lToken, nTokenOffset, nLastToken):
4825    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":3s")
4826def _g_sugg_g2_148 (lToken, nTokenOffset, nLastToken):
4827    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":3p")
4828def _g_cond_g2_266 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4829    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]:[si]") and  g_morph(lToken[nTokenOffset+4], ":Q.*:[me]:[si]", ":3s")
4830def _g_sugg_g2_149 (lToken, nTokenOffset, nLastToken):
4831    return suggSimil(lToken[nTokenOffset+4]["sValue"], ":3s")
4832def _g_cond_g2_267 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4833    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]:[si]") and  g_morph(lToken[nTokenOffset+4], ":Q.*:[fe]:[si]", ":3s")
4834def _g_cond_g2_268 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4835    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[si]") and  g_morph(lToken[nTokenOffset+4], ":Q.*:[si]", ":3s")
4836def _g_cond_g2_269 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4837    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]") and  g_morph(lToken[nTokenOffset+4], ":Q.*:[pi]", ":3s")
4838def _g_cond_g2_270 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4839    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]", ":3pl") and  g_morph(lToken[nTokenOffset+4], ":Q.*:[pi]", ":3s")
4840def _g_cond_g2_271 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4841    return g_morphVC(lToken[nTokenOffset+1], ">être/")
4842def _g_cond_g2_272 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4843    return lToken[nLastToken-1+1]["sValue"].islower() and g_morph(lToken[nLastToken-1+1], ":V", ":[YM]" )
4844def _g_sugg_g2_150 (lToken, nTokenOffset, nLastToken):
4845    return suggVerbInfi(lToken[nLastToken-1+1]["sValue"])
4846def _g_cond_g2_273 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4847    return lToken[nLastToken-1+1]["sValue"].islower() and g_morph(lToken[nLastToken-1+1], ":V", ":[NYM]" )
4848def _g_cond_g2_274 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4849    return lToken[nLastToken-1+1]["sValue"].islower() and g_morph(lToken[nLastToken-1+1], ":V", ":[YEM]")
4850def _g_cond_g2_275 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4851    return g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (lToken[nLastToken-1+1]["sValue"].endswith("ez") and g_value(lToken[nLastToken+1], "|vous|"))
4852def _g_cond_g2_276 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4853    return g_morph(lToken[nLastToken-1+1], ":V1.*:(?:Q|[123][sp])")
4854def _g_cond_g2_277 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4855    return g_morph(lToken[nLastToken-1+1], ":V1.*:(?:Q|[12][sp])", ":N")
4856def _g_cond_g2_278 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4857    return g_morph(lToken[nTokenOffset+3], ":V1", ":M")
4858def _g_sugg_g2_151 (lToken, nTokenOffset, nLastToken):
4859    return suggVerbInfi(lToken[nTokenOffset+3]["sValue"])
4860def _g_cond_g2_279 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4861    return g_morph(lToken[nLastToken-1+1], ":V1.*:(?:Q|[123][sp])", ":[NM]")
4862def _g_cond_g2_280 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4863    return not g_morph(lToken[nTokenOffset], ">(?:passer|tenir)/") and g_morph(lToken[nLastToken-1+1], ":V1.*:(?:Q|[123][sp])", ":[NM]")
4864def _g_cond_g2_281 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4865    return not lToken[nTokenOffset+3]["sValue"][0:1].isupper()
4866def _g_cond_g2_282 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4867    return lToken[nLastToken-1+1]["sValue"].islower()
4868def _g_cond_g2_283 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4869    return not lToken[nTokenOffset+2]["sValue"][0:1].isupper() and not g_morph(lToken[nTokenOffset], ">(?:en|passer|qualifier)/") and not g_morph(lToken[nTokenOffset+2], ">(?:fieffer|sacrer)/") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?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 g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_")
4870def _g_sugg_g2_152 (lToken, nTokenOffset, nLastToken):
4871    return suggVerbInfi(lToken[nTokenOffset+2]["sValue"])
4872def _g_cond_g2_284 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4873    return not g_morph(lToken[nTokenOffset+1], ":N") and (g_analyse(lToken[nLastToken-1+1], ":V1.*:Q", ":(?:M|Oo)") or g_analyse(lToken[nLastToken-1+1], ":[123][sp]", ":[MNGA]"))
4874def _g_cond_g2_285 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4875    return g_analyse(lToken[nLastToken-1+1], ":Q", ":M")
4876def _g_cond_g2_286 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4877    return g_analyse(lToken[nLastToken-1+1], ":Q", ":[MN]")
4878def _g_cond_g2_287 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4879    return g_analyse(lToken[nLastToken-1+1], ":Q", ":M") and (g_value(lToken[nTokenOffset], "|me|m’|te|t’|se|s’|") or (g_value(lToken[nTokenOffset], "|nous|") and g_value(g_token(lToken, nTokenOffset+1-2), "|nous|")) or (g_value(lToken[nTokenOffset], "|vous|") and g_value(g_token(lToken, nTokenOffset+1-2), "|vous|")))
4880def _g_cond_g2_288 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4881    return not g_value(lToken[nTokenOffset], "|une|la|cette|ma|ta|sa|notre|votre|leur|quelle|de|d’|") and g_analyse(lToken[nLastToken-1+1], ":Q", ":M")
4882def _g_cond_g2_289 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4883    return g_morph(lToken[nLastToken-1+1], ":(?:Q|2p)", ":M") and not (lToken[nLastToken-1+1]["sValue"].endswith("ez") and g_value(lToken[nLastToken+1], "|vous|"))
4884def _g_cond_g2_290 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4885    return g_morph(lToken[nTokenOffset+2], ":V", ":[123][sp]")
4886def _g_cond_g2_291 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4887    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 3) and g_morph(lToken[nTokenOffset+2], ":Q") and not g_morph(lToken[nTokenOffset], "V0.*[12]p")
4888def _g_cond_g2_292 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4889    return not g_value(lToken[nTokenOffset+1], "|devoirs|") and g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D")) and not (g_value(lToken[nTokenOffset+1], "|devant|") and g_morph(lToken[nLastToken-1+1], ":N"))
4890def _g_cond_g2_293 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4891    return not g_value(lToken[nTokenOffset+1], "|devoirs|") and g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D")) and not (g_value(lToken[nTokenOffset+1], "|devant|") and g_morph(lToken[nLastToken-1+1], ":N")) and not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_")
4892def _g_cond_g2_294 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4893    return g_morph(lToken[nLastToken-1+1], ":V", ":M")
4894def _g_cond_g2_295 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4895    return not g_value(lToken[nTokenOffset+1], "|puis|pouvoirs|") and g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D"))
4896def _g_cond_g2_296 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4897    return not g_value(lToken[nTokenOffset+1], "|puis|pouvoirs|") and g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D")) and not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_")
4898def _g_cond_g2_297 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4899    return not g_value(lToken[nTokenOffset+1], "|savoirs|") and not g_value(lToken[nTokenOffset], "|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|") and g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D"))
4900def _g_cond_g2_298 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4901    return not g_value(lToken[nTokenOffset+1], "|savoirs|") and g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D"))
4902def _g_cond_g2_299 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4903    return not g_value(lToken[nTokenOffset+1], "|savoirs|") and g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D")) and not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_")
4904def _g_cond_g2_300 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4905    return not g_value(lToken[nTokenOffset+1], "|vouloirs|") and not g_value(lToken[nTokenOffset], "|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|") and g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D"))
4906def _g_cond_g2_301 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4907    return not g_value(lToken[nTokenOffset+1], "|vouloirs|") and g_morph(lToken[nLastToken-1+1], ":V", ":[MN]") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D"))
4908def _g_cond_g2_302 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4909    return not g_value(lToken[nTokenOffset+1], "|vouloirs|") and g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D"))
4910def _g_cond_g2_303 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4911    return not g_value(lToken[nTokenOffset+1], "|vouloirs|") and g_morph(lToken[nLastToken-1+1], ":V", ":M") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset], ":D")) and not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_")
4912def _g_cond_g2_304 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4913    return g_morphVC(lToken[nTokenOffset+1], ">(?:devoir|savoir|pouvoir|vouloir)/") and g_morph(lToken[nLastToken-1+1], ":(?:Q|A|[123][sp])", ":[GYW]")
4914def _g_cond_g2_305 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4915    return g_morphVC(lToken[nTokenOffset+1], ">(?:devoir|savoir|pouvoir|vouloir)/") and g_morph(lToken[nLastToken-1+1], ":(?:Q|A|[123][sp])", ":[GYWN]")
4916def _g_cond_g2_306 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4917    return not (g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and g_morph(lToken[nLastToken-1+1], ":3[sp]"))
4918def _g_cond_g2_307 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4919    return not g_morph(lToken[nTokenOffset], ">(?:en|de|être)/") and g_morph(lToken[nTokenOffset+2], ":V", ":[MG]") and not (g_morph(lToken[nTokenOffset+1], ":N") and g_morph(lToken[nTokenOffset+2], ":Q.*:m:[sp]"))
4920def _g_cond_g2_308 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4921    return g_morph(lToken[nTokenOffset+3], ":V1.*:(?:Q|Ip.*:2p|Iq.*:[123]s)", ">désemparer/.*:Q")
4922def _g_cond_g2_309 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4923    return g_morph(lToken[nLastToken-1+1], ":V1.*:(?:Q|Ip.*:2p|Iq.*:[123]s)", ">désemparer/.*:Q|:N")
4924def _g_cond_g2_310 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4925    return g_morph(lToken[nLastToken-1+1], ":V1.*:(?:Q|Ip.*:2p|Iq.*:[123]s)", ">désemparer/.*:Q")
4926def _g_cond_g2_311 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4927    return not g_morph(lToken[nTokenOffset+2], ":N") and g_morph(lToken[nTokenOffset+3], ":V1.*:(?:Q|Ip.*:2p)", ">désemparer/.*:Q")
4928def _g_cond_g2_312 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4929    return not g_morph(lToken[nTokenOffset+2], ":N") and g_morph(lToken[nLastToken-1+1], ":V1.*:(?:Q|Ip.*:2p|Iq.*:[123]s)", ">désemparer/.*:Q|:N")
4930def _g_cond_g2_313 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4931    return not g_morph(lToken[nTokenOffset+2], ":N") and g_morph(lToken[nLastToken-1+1], ":V1.*:(?:Q|Ip.*:2p|Iq.*:[123]s)", ">désemparer/.*:Q")
4932def _g_cond_g2_314 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4933    return g_morphVC(lToken[nTokenOffset+1], ">laisser") and (g_morph(lToken[nTokenOffset+2], ":V1.*:(?:Q|Ip.*:2[sp])", ">désemparer/.*:Q") or (not g_morph(lToken[nTokenOffset], ":D") and g_morph(lToken[nLastToken-1+1], ":V1.*:Iq.*:[123]s", ">désemparer/.*:Q")))
4934def _g_cond_g2_315 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4935    return g_morphVC(lToken[nTokenOffset+1], ">laisser") and (g_morph(lToken[nLastToken-1+1], ":V1.*:(?:Q|Ip.*:2[sp])", ">désemparer/.*:Q|:N") or (not g_morph(lToken[nTokenOffset], ":D") and g_morph(lToken[nLastToken-1+1], ":V1.*:Iq.*:[123]s", ">désemparer/.*:Q|:N")))
4936def _g_cond_g2_316 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4937    return g_morphVC(lToken[nTokenOffset+1], ">laisser") and (g_morph(lToken[nLastToken-1+1], ":V1.*:(?:Q|Ip.*:2[sp])", ">désemparer/.*:Q") or (not g_morph(lToken[nTokenOffset], ":D") and g_morph(lToken[nLastToken-1+1], ":V1.*:Iq.*:[123]s", ">désemparer/.*:Q")))
4938def _g_cond_g2_317 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4939    return g_analyse(lToken[nLastToken-1+1], ":V1.*:(?:Q|[123][sp])", ":[GM]")
4940def _g_cond_g2_318 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4941    return g_morph(lToken[nTokenOffset+1], ":", ":[GN]") and g_morph(lToken[nTokenOffset+2], ":V", ":M")
4942def _g_cond_g2_319 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4943    return g_morph(lToken[nTokenOffset+1], ":", ":[GN]") and g_morph(lToken[nTokenOffset+2], ":V", ":M") and not g_value(lToken[nTokenOffset], "|le|la|l’|les|")
4944def _g_cond_g2_320 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4945    return g_morph(lToken[nTokenOffset+1], ":", ":[GN]") and g_morph(lToken[nLastToken-1+1], ":V", ":M|>(?:accompagner|armer|armurer|casquer|débrailler|déguiser|épuiser)/") and not g_value(lToken[nLastToken+1], "|par|")
4946def _g_cond_g2_321 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4947    return g_morph(lToken[nLastToken-1+1], ":V1")
4948def _g_cond_g2_322 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4949    return not g_value(lToken[nTokenOffset], "|que|qu’|")
4950def _g_cond_g2_323 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4951    return g_space_between_tokens(lToken[nTokenOffset+3], lToken[nTokenOffset+3+1], 1, 1)
4952def _g_sugg_g2_153 (lToken, nTokenOffset, nLastToken):
4953    return "a "+suggVerbPpas(lToken[nTokenOffset+4]["sValue"], ":m:s")
4954def _g_sugg_g2_154 (lToken, nTokenOffset, nLastToken):
4955    return suggVerbPpas(lToken[nTokenOffset+4]["sValue"], ":m:s")
4956def _g_cond_g2_324 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4957    return g_space_between_tokens(lToken[nTokenOffset+4], lToken[nTokenOffset+4+1], 1, 1)
4958def _g_sugg_g2_155 (lToken, nTokenOffset, nLastToken):
4959    return "a "+suggVerbPpas(lToken[nTokenOffset+5]["sValue"], ":m:s")
4960def _g_sugg_g2_156 (lToken, nTokenOffset, nLastToken):
4961    return suggVerbPpas(lToken[nTokenOffset+5]["sValue"], ":m:s")
4962def _g_cond_g2_325 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4963    return g_space_between_tokens(lToken[nTokenOffset+5], lToken[nTokenOffset+5+1], 1, 1)
4964def _g_sugg_g2_157 (lToken, nTokenOffset, nLastToken):
4965    return "a "+suggVerbPpas(lToken[nTokenOffset+6]["sValue"], ":m:s")
4966def _g_sugg_g2_158 (lToken, nTokenOffset, nLastToken):
4967    return suggVerbPpas(lToken[nTokenOffset+6]["sValue"], ":m:s")
4968def _g_cond_g2_326 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4969    return g_morph(lToken[nTokenOffset+2], ":V1.*:Y")
4970def _g_sugg_g2_159 (lToken, nTokenOffset, nLastToken):
4971    return suggVerbPpas(lToken[nTokenOffset+2]["sValue"])
4972def _g_cond_g2_327 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4973    return not (g_value(lToken[nLastToken-1+1], "|nous|vous|") and g_morph(lToken[nLastToken+1], ":Y"))
4974def _g_cond_g2_328 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4975    return g_morph(lToken[nTokenOffset+3], ":[NA].*:p", ":(?:[NA].*:[si]|G)")
4976def _g_cond_g2_329 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4977    return not bCondMemo and g_morph(lToken[nTokenOffset+3], ":[NA].*:s", ":(?:[NA].*:[pi]|G)")
4978def _g_cond_g2_330 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4979    return not g_value(lToken[nTokenOffset+2], "|été|")
4980def _g_cond_g2_331 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4981    return g_morph(lToken[nTokenOffset+2], ":[NA]", ":(?:[123]p|P|X|G|V0)") and g_morph(lToken[nTokenOffset+3], ":[NA]", ":(?:G|[123][sp]|P|M)")
4982def _g_cond_g2_332 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4983    return g_morph(lToken[nTokenOffset+3], ":N", ":A") and g_morph(lToken[nTokenOffset+2], ":A", ":N")
4984def _g_cond_g2_333 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4985    return g_morph(lToken[nTokenOffset+2], ":[NA]", ":(?:[123]p|P|X|G|Y|V0)") and g_morph(lToken[nTokenOffset+3], ":[NA]", ":(?:G|[123][sp]|P|M)")
4986def _g_cond_g2_334 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4987    return g_morph(lToken[nTokenOffset+3], ":N", ":A") and g_morph(lToken[nTokenOffset+2], ":A")
4988def _g_cond_g2_335 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4989    return g_morph(lToken[nTokenOffset+2], ":[NA]", ":(?:[123][sp]|P|X|G|Y|V0)|>air/") and g_morph(lToken[nTokenOffset+3], ":[NA]", ":(?:G|[123][sp]|P|M)")
4990def _g_cond_g2_336 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4991    return not g_value(lToken[nTokenOffset], "|le|la|du|au|") and g_morph(lToken[nTokenOffset+2], ":[NA]", ":(?:[123]p|P|X|G|Y|V0)") and g_morph(lToken[nTokenOffset+3], ":[NA]", ":(?:G|[123][sp]|P|M)")
4992def _g_cond_g2_337 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4993    return not g_value(lToken[nTokenOffset], "|des|les|aux|") and g_morph(lToken[nTokenOffset+2], ":[NA]", ":(?:[123]p|P|X|G|Y|V0)") and g_morph(lToken[nTokenOffset+3], ":[NA]", ":(?:G|[123][sp]|P|M)")
4994def _g_cond_g2_338 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4995    return g_morph(lToken[nTokenOffset+2], ":[NA]") and g_morph(lToken[nTokenOffset+3], ":[NA]", ":(?:G|[123][sp]|P|M)")
4996def _g_cond_g2_339 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4997    return not g_value(lToken[nTokenOffset+2], "|autres|")
4998def _g_cond_g2_340 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
4999    return not g_morph(lToken[nTokenOffset+2], ">(?:être|demeurer|devenir|redevenir|sembler|para[îi]tre|rester)/")
5000def _g_cond_g2_341 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5001    return not g_value(lToken[nLastToken+1], "|en|")
5002def _g_cond_g2_342 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5003    return not g_value(lToken[nTokenOffset], "|j’|n’|tu|il|on|")
5004def _g_cond_g2_343 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5005    return g_morph(lToken[nTokenOffset+1], ":M") and g_morph(lToken[nTokenOffset+3], ":M") and g_morph(lToken[nTokenOffset+3], ":M")
5006def _g_cond_g2_344 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5007    return g_morph(lToken[nTokenOffset+2], ":M") and g_morph(lToken[nTokenOffset+4], ":M")
5008def _g_da_ppc2_1 (lToken, nTokenOffset, nLastToken):
5009    return g_select(lToken[nTokenOffset+2], ":Q")
5010def _g_cond_ppc2_1 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5011    return g_morph(lToken[nTokenOffset+2], ":[NA].*:[pi]") and g_morph(lToken[nTokenOffset+5], ":[NA].*:[si]")
5012def _g_cond_gv1_1 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5013    return not g_value(lToken[nTokenOffset+1], "|êtres|")
5014def _g_cond_gv1_2 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5015    return lToken[nTokenOffset+2]["sValue"].endswith("e") and g_morph(lToken[nTokenOffset+2], ":V1.*:Ip.*:[13]s", ":[GMA]") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\belle +(?:ne +|n’|)$")
5016def _g_sugg_gv1_1 (lToken, nTokenOffset, nLastToken):
5017    return suggVerbPpas(lToken[nTokenOffset+2]["sValue"], ":m:s")
5018def _g_cond_gv1_3 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5019    return not bCondMemo and lToken[nTokenOffset+2]["sValue"].endswith("s") and g_morph(lToken[nTokenOffset+2], ":V1.*:Ip.*:2s", ":[GMA]") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\belles +(?:ne +|n’|)$")
5020def _g_sugg_gv1_2 (lToken, nTokenOffset, nLastToken):
5021    return suggVerbPpas(lToken[nTokenOffset+2]["sValue"], ":m:p")
5022def _g_cond_gv1_4 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5023    return not g_value(lToken[nTokenOffset+1], "|avoirs|")
5024def _g_cond_gv1_5 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5025    return lToken[nTokenOffset+2]["sValue"].endswith("e") and g_morph(lToken[nTokenOffset+2], ":V1.*:Ip.*:[13]s", ":[GM]|>envie/")
5026def _g_cond_gv1_6 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5027    return not bCondMemo and lToken[nTokenOffset+2]["sValue"].endswith("s") and g_morph(lToken[nTokenOffset+2], ":V1.*:Ip.*:2s", ":[GM]")
5028def _g_cond_gv1_7 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5029    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]", ":G")
5030def _g_cond_gv1_8 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5031    return g_morph(lToken[nTokenOffset+3], ":[NA]", ":G")
5032def _g_cond_gv1_9 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5033    return g_morph(lToken[nTokenOffset+2], ":V[123]", ":(?:N|A|Q|W|G|3p)") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_")
5034def _g_cond_gv1_10 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5035    return g_morph(lToken[nTokenOffset+3], ":V.*:3p", ":[GPY]") and not g_value(lToken[nLastToken+1], "|ils|elles|iel|iels|") and ( (g_morph(lToken[nTokenOffset+3], ":V...t_") and g_value(lToken[nLastToken+1], "le|la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|leur") and not g_tag(lToken[nLastToken+1], "_enum_")) or g_morph(lToken[nTokenOffset+3], ":V..i__") )
5036def _g_sugg_gv1_3 (lToken, nTokenOffset, nLastToken):
5037    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":1p")
5038def _g_sugg_gv1_4 (lToken, nTokenOffset, nLastToken):
5039    return suggVerb(lToken[nTokenOffset+4]["sValue"], ":1p")
5040def _g_sugg_gv1_5 (lToken, nTokenOffset, nLastToken):
5041    return suggVerb(lToken[nTokenOffset+4]["sValue"], ":2p")
5042def _g_cond_gv1_11 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5043    return not g_morph(lToken[nTokenOffset], ":V0")
5044def _g_cond_gv1_12 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5045    return g_morph(lToken[nLastToken-1+1], ":[123]p")
5046def _g_cond_gv1_13 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5047    return not bCondMemo
5048def _g_cond_gv1_14 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5049    return g_morph(lToken[nLastToken-1+1], ":V[123]_.__p_e_", "*") or (g_value(lToken[nLastToken+1], "|<end>|") and not g_value(lToken[nTokenOffset], "|que|qu’|"))
5050def _g_sugg_gv1_6 (lToken, nTokenOffset, nLastToken):
5051    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":m:s")
5052def _g_cond_gv1_15 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5053    return g_morph(lToken[nLastToken-1+1], ":V[123]_.__p_e_", "*") or (g_value(lToken[nLastToken+1], "|<end>|") and not g_morph(lToken[nTokenOffset], ":R|>que/"))
5054def _g_sugg_gv1_7 (lToken, nTokenOffset, nLastToken):
5055    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":f:s")
5056def _g_sugg_gv1_8 (lToken, nTokenOffset, nLastToken):
5057    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":p")
5058def _g_sugg_gv1_9 (lToken, nTokenOffset, nLastToken):
5059    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":m:p")
5060def _g_sugg_gv1_10 (lToken, nTokenOffset, nLastToken):
5061    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":f:p")
5062def _g_cond_gv1_16 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5063    return g_morph(lToken[nLastToken-1+1], ":(?:Y|[123][sp])", ":[QAG]")
5064def _g_sugg_gv1_11 (lToken, nTokenOffset, nLastToken):
5065    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"])
5066def _g_cond_gv1_17 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5067    return not bCondMemo and g_morph(lToken[nLastToken-2+1], ":[123]s") and g_morph(lToken[nLastToken-1+1], ":Q.*:p") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\bon (?:ne |)$")
5068def _g_sugg_gv1_12 (lToken, nTokenOffset, nLastToken):
5069    return suggSing(lToken[nLastToken-1+1]["sValue"])
5070def _g_cond_gv1_18 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5071    return not g_morph(lToken[nLastToken-2+1], ">(?:matin|soir|soirée|nuit|après-midi|jour|année|semaine|mois|seconde|minute|heure|siècle|millénaire|fois)/")
5072def _g_sugg_gv1_13 (lToken, nTokenOffset, nLastToken):
5073    return suggVerbPpas(lToken[nLastToken-4+1]["sValue"], ":m:s")
5074def _g_sugg_gv1_14 (lToken, nTokenOffset, nLastToken):
5075    return suggSing(lToken[nTokenOffset+3]["sValue"])
5076def _g_sugg_gv1_15 (lToken, nTokenOffset, nLastToken):
5077    return suggPlur(lToken[nTokenOffset+3]["sValue"])
5078def _g_cond_gv1_19 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5079    return not lToken[nTokenOffset+2]["sValue"].endswith("ons")
5080def _g_cond_gv1_20 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5081    return not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5082def _g_cond_gv1_21 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5083    return g_morph(lToken[nTokenOffset+2], ":(?:[123]s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5084def _g_sugg_gv1_16 (lToken, nTokenOffset, nLastToken):
5085    return suggMasSing(lToken[nLastToken-1+1]["sValue"])
5086def _g_cond_gv1_22 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5087    return g_morph(lToken[nTokenOffset+3], ":(?:[123]s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5088def _g_cond_gv1_23 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5089    return g_morph(lToken[nTokenOffset+4], ":(?:[123]s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5090def _g_cond_gv1_24 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5091    return g_morph(lToken[nTokenOffset+5], ":(?:[123]s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5092def _g_cond_gv1_25 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5093    return not g_tag(lToken[nTokenOffset+1], "_enum_") and g_morph(lToken[nTokenOffset+2], ":(?:3s|P)") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:et|ou)/") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5094def _g_cond_gv1_26 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5095    return not g_tag(lToken[nTokenOffset+1], "_enum_") and g_morph(lToken[nTokenOffset+3], ":(?:3s|P)") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:et|ou)/") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5096def _g_cond_gv1_27 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5097    return not g_tag(lToken[nTokenOffset+1], "_enum_") and g_morph(lToken[nTokenOffset+4], ":(?:3s|P)") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:et|ou)/") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5098def _g_cond_gv1_28 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5099    return not g_tag(lToken[nTokenOffset+1], "_enum_") and g_morph(lToken[nTokenOffset+5], ":(?:3s|P)") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:et|ou)/") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5100def _g_cond_gv1_29 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5101    return g_morph(lToken[nTokenOffset+3], "[123][sp]")
5102def _g_cond_gv1_30 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5103    return g_morph(lToken[nTokenOffset+4], "[123][sp]")
5104def _g_cond_gv1_31 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5105    return g_morph(lToken[nTokenOffset+5], "[123][sp]")
5106def _g_cond_gv1_32 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5107    return not g_morph(lToken[nTokenOffset], ":[RV]") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5108def _g_cond_gv1_33 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5109    return g_morph(lToken[nTokenOffset+6], ":(?:[123]s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5110def _g_cond_gv1_34 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5111    return not g_morph(lToken[nTokenOffset], ":R")
5112def _g_cond_gv1_35 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5113    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":(?:[123]s|P)")
5114def _g_cond_gv1_36 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5115    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+4], ":(?:[123]s|P)")
5116def _g_cond_gv1_37 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5117    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+5], ":(?:[123]s|P)")
5118def _g_cond_gv1_38 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5119    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+6], ":(?:[123]s|P)")
5120def _g_cond_gv1_39 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5121    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+7], ":(?:[123]s|P)")
5122def _g_cond_gv1_40 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5123    return not g_tag(lToken[nTokenOffset+1], "_enum_") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:et|ou)/") and g_morph(lToken[nTokenOffset+2], ":(?:[123]s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5124def _g_sugg_gv1_17 (lToken, nTokenOffset, nLastToken):
5125    return suggFemSing(lToken[nLastToken-1+1]["sValue"])
5126def _g_cond_gv1_41 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5127    return not g_tag(lToken[nTokenOffset+1], "_enum_") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:et|ou)/") and g_morph(lToken[nTokenOffset+3], ":(?:[123]s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5128def _g_cond_gv1_42 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5129    return not g_tag(lToken[nTokenOffset+1], "_enum_") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:et|ou)/") and g_morph(lToken[nTokenOffset+4], ":(?:[123]s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5130def _g_cond_gv1_43 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5131    return not g_tag(lToken[nTokenOffset+1], "_enum_") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:et|ou)/") and g_morph(lToken[nTokenOffset+5], ":(?:[123]s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5132def _g_cond_gv1_44 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5133    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+2], ":(?:3s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5134def _g_cond_gv1_45 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5135    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+3], ":(?:3s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5136def _g_cond_gv1_46 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5137    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+4], ":(?:3s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5138def _g_cond_gv1_47 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5139    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+5], ":(?:3s|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5140def _g_cond_gv1_48 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5141    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:ne|nous)/") and g_morph(lToken[nTokenOffset+2], ":(?:1p|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5142def _g_sugg_gv1_18 (lToken, nTokenOffset, nLastToken):
5143    return suggPlur(lToken[nLastToken-1+1]["sValue"])
5144def _g_cond_gv1_49 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5145    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:ne|nous)/") and g_morph(lToken[nTokenOffset+3], ":(?:1p|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5146def _g_cond_gv1_50 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5147    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:ne|nous)/") and g_morph(lToken[nTokenOffset+4], ":(?:1p|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5148def _g_cond_gv1_51 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5149    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:ne|nous)/") and g_morph(lToken[nTokenOffset+5], ":(?:1p|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5150def _g_cond_gv1_52 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5151    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5152def _g_sugg_gv1_19 (lToken, nTokenOffset, nLastToken):
5153    return suggMasPlur(lToken[nLastToken-1+1]["sValue"])
5154def _g_cond_gv1_53 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5155    return not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+2], ":(?:3p|P)") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5156def _g_cond_gv1_54 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5157    return not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+3], ":(?:3p|P)") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5158def _g_cond_gv1_55 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5159    return not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+4], ":(?:3p|P)") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5160def _g_cond_gv1_56 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5161    return not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+5], ":(?:3p|P)") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5162def _g_cond_gv1_57 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5163    return g_morph(lToken[nTokenOffset+3], ":(?:3p|P)") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5164def _g_cond_gv1_58 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5165    return g_morph(lToken[nTokenOffset+4], ":(?:3p|P)") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5166def _g_cond_gv1_59 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5167    return g_morph(lToken[nTokenOffset+5], ":(?:3p|P)") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5168def _g_cond_gv1_60 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5169    return g_morph(lToken[nTokenOffset+6], ":(?:3p|P)") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5170def _g_cond_gv1_61 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5171    return not g_morph(lToken[nTokenOffset], ":R") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|")
5172def _g_sugg_gv1_20 (lToken, nTokenOffset, nLastToken):
5173    return suggFemPlur(lToken[nLastToken-1+1]["sValue"])
5174def _g_cond_gv1_62 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5175    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+2], ":(?:3p|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5176def _g_cond_gv1_63 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5177    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+3], ":(?:3p|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5178def _g_cond_gv1_64 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5179    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+4], ":(?:3p|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5180def _g_cond_gv1_65 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5181    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset], ":[RV]") and g_morph(lToken[nTokenOffset+5], ":(?:3p|P)") and not (g_tag(lToken[nTokenOffset], "_ceque_") and g_morph(lToken[nLastToken-1+1], ":3s"))
5182def _g_cond_gv1_66 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5183    return g_morph(lToken[nTokenOffset+3], ":[123]s", ":[GNAQWY]")
5184def _g_sugg_gv1_21 (lToken, nTokenOffset, nLastToken):
5185    return suggVerbPpas(lToken[nTokenOffset+3]["sValue"])
5186def _g_cond_gv1_67 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5187    return not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "[çcCÇ]’$|[cC][eE] n’$|[çÇ][aA] (?:[nN]’|)$") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)^ *ne pas ") and not g_morph(lToken[nTokenOffset], ":Y")
5188def _g_cond_gv1_68 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5189    return g_morph(lToken[nTokenOffset+3], ":Y", ":[AN]")
5190def _g_cond_gv1_69 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5191    return g_morph(lToken[nTokenOffset+3], ":V1..t.*:Y", ":[AN]") and not g_morph(lToken[nLastToken+1], ":D")
5192def _g_cond_gv1_70 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5193    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not g_morph(lToken[nTokenOffset+1], ":G") and g_morph(lToken[nTokenOffset+2], ":[123]s", ":(?:C|N.*:p)")
5194def _g_cond_gv1_71 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5195    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not g_morph(lToken[nTokenOffset+1], ":G") and g_morph(lToken[nTokenOffset+3], ":[123]s", ":(?:C|N.*:p)")
5196def _g_cond_gv1_72 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5197    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not g_morph(lToken[nTokenOffset+1], ":G") and g_morph(lToken[nTokenOffset+4], ":[123]s", ":(?:C|N.*:p)")
5198def _g_cond_gv1_73 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5199    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not g_morph(lToken[nTokenOffset+1], ":G") and g_morph(lToken[nTokenOffset+5], ":[123]s", ":(?:C|N.*:p)")
5200def _g_cond_gv1_74 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5201    return g_morph(lToken[nTokenOffset+2], ":[123]s", ":(?:C|N.*:p)")
5202def _g_cond_gv1_75 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5203    return g_morph(lToken[nTokenOffset+3], ":[123]s", ":(?:C|N.*:p)")
5204def _g_cond_gv1_76 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5205    return g_morph(lToken[nTokenOffset+4], ":[123]s", ":(?:C|N.*:p)")
5206def _g_cond_gv1_77 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5207    return g_morph(lToken[nTokenOffset+5], ":[123]s", ":(?:C|N.*:p)")
5208def _g_cond_gv1_78 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5209    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset+1], ":G") and g_morph(lToken[nTokenOffset+2], ":[13]p")
5210def _g_cond_gv1_79 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5211    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset+1], ":G") and g_morph(lToken[nTokenOffset+3], ":[13]p")
5212def _g_cond_gv1_80 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5213    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset+1], ":G") and g_morph(lToken[nTokenOffset+4], ":[13]p")
5214def _g_cond_gv1_81 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5215    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and not g_morph(lToken[nTokenOffset+1], ":G") and g_morph(lToken[nTokenOffset+5], ":[13]p")
5216def _g_cond_gv1_82 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5217    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+2], ":[13]p")
5218def _g_cond_gv1_83 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5219    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[13]p")
5220def _g_cond_gv1_84 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5221    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+4], ":[13]p")
5222def _g_cond_gv1_85 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5223    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+5], ":[13]p")
5224def _g_cond_gv1_86 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5225    return checkAgreement(lToken[nTokenOffset+5]["sValue"], lToken[nLastToken-1+1]["sValue"])
5226def _g_cond_gv1_87 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5227    return checkAgreement(lToken[nTokenOffset+6]["sValue"], lToken[nLastToken-1+1]["sValue"])
5228def _g_cond_gv1_88 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5229    return checkAgreement(lToken[nTokenOffset+7]["sValue"], lToken[nLastToken-1+1]["sValue"])
5230def _g_cond_gv1_89 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5231    return checkAgreement(lToken[nTokenOffset+4]["sValue"], lToken[nLastToken-1+1]["sValue"])
5232def _g_cond_gv1_90 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5233    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]", ":[GW]") and (g_morph(lToken[nTokenOffset+4], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+4], ":P")))
5234def _g_cond_gv1_91 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5235    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]", ":[GW]") and (g_morph(lToken[nTokenOffset+5], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+5], ":P")))
5236def _g_cond_gv1_92 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5237    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]", ":[GW]") and (g_morph(lToken[nTokenOffset+6], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+6], ":P")))
5238def _g_cond_gv1_93 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5239    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]", ":[GW]") and (g_morph(lToken[nTokenOffset+7], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+7], ":P")))
5240def _g_cond_gv1_94 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5241    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]", ":[GW]") and (g_morph(lToken[nTokenOffset+8], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+8], ":P")))
5242def _g_cond_gv1_95 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5243    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]", ":[GW]") and (g_morph(lToken[nTokenOffset+4], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+4], ":P")))
5244def _g_cond_gv1_96 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5245    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]", ":[GW]") and (g_morph(lToken[nTokenOffset+5], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+5], ":P")))
5246def _g_cond_gv1_97 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5247    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]", ":[GW]") and (g_morph(lToken[nTokenOffset+6], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+6], ":P")))
5248def _g_cond_gv1_98 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5249    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]", ":[GW]") and (g_morph(lToken[nTokenOffset+7], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+7], ":P")))
5250def _g_cond_gv1_99 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5251    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]", ":[GW]") and (g_morph(lToken[nTokenOffset+8], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+8], ":P")))
5252def _g_cond_gv1_100 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5253    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and (g_morph(lToken[nTokenOffset+4], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+4], ":P")))
5254def _g_cond_gv1_101 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5255    return g_morph(lToken[nTokenOffset+3], ":f", ":[me]") and g_morph(lToken[nLastToken-1+1], ":m", ":[fe]")
5256def _g_cond_gv1_102 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5257    return not bCondMemo and g_morph(lToken[nTokenOffset+3], ":m", ":[fe]") and g_morph(lToken[nLastToken-1+1], ":f", ":[me]")
5258def _g_cond_gv1_103 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5259    return not bCondMemo and g_morph(lToken[nLastToken-1+1], ":p", ":[si]")
5260def _g_cond_gv1_104 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5261    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and (g_morph(lToken[nTokenOffset+5], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+5], ":P")))
5262def _g_cond_gv1_105 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5263    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and (g_morph(lToken[nTokenOffset+6], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+6], ":P")))
5264def _g_cond_gv1_106 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5265    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and (g_morph(lToken[nTokenOffset+7], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+7], ":P")))
5266def _g_cond_gv1_107 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5267    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and (g_morph(lToken[nTokenOffset+8], ":[123]s") or (not g_tag(lToken[nTokenOffset+3], "_enum_") and g_morph(lToken[nTokenOffset+8], ":P")))
5268def _g_cond_gv1_108 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5269    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+4], ":(?:[123]p|P)")
5270def _g_cond_gv1_109 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5271    return not bCondMemo and g_morph(lToken[nLastToken-1+1], ":s", ":[pi]")
5272def _g_cond_gv1_110 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5273    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+5], ":(?:[123]p|P)")
5274def _g_cond_gv1_111 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5275    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+6], ":(?:[123]p|P)")
5276def _g_cond_gv1_112 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5277    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+7], ":(?:[123]p|P)")
5278def _g_cond_gv1_113 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5279    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+8], ":(?:[123]p|P)")
5280def _g_cond_gv1_114 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5281    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]:[pi]", ":[GW]") and g_morph(lToken[nTokenOffset+4], ":(?:[123]p|P)")
5282def _g_cond_gv1_115 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5283    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]:[pi]", ":[GW]") and g_morph(lToken[nTokenOffset+5], ":(?:[123]p|P)")
5284def _g_cond_gv1_116 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5285    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]:[pi]", ":[GW]") and g_morph(lToken[nTokenOffset+6], ":(?:[123]p|P)")
5286def _g_cond_gv1_117 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5287    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]:[pi]", ":[GW]") and g_morph(lToken[nTokenOffset+7], ":(?:[123]p|P)")
5288def _g_cond_gv1_118 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5289    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]:[pi]", ":[GW]") and g_morph(lToken[nTokenOffset+8], ":(?:[123]p|P)")
5290def _g_cond_gv1_119 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5291    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]:[pi]", ":[GW]") and g_morph(lToken[nTokenOffset+4], ":(?:[123]p|P)")
5292def _g_cond_gv1_120 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5293    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]:[pi]", ":[GW]") and g_morph(lToken[nTokenOffset+5], ":(?:[123]p|P)")
5294def _g_cond_gv1_121 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5295    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]:[pi]", ":[GW]") and g_morph(lToken[nTokenOffset+6], ":(?:[123]p|P)")
5296def _g_cond_gv1_122 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5297    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]:[pi]", ":[GW]") and g_morph(lToken[nTokenOffset+7], ":(?:[123]p|P)")
5298def _g_cond_gv1_123 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5299    return not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]:[pi]", ":[GW]") and g_morph(lToken[nTokenOffset+8], ":(?:[123]p|P)")
5300def _g_cond_gv1_124 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5301    return not g_tag(lToken[nTokenOffset+2], "_enum_") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and (g_morph(lToken[nTokenOffset+3], ":[123]s") or (not g_tag(lToken[nTokenOffset+2], "_enum_") and g_morph(lToken[nTokenOffset+3], ":P")))
5302def _g_cond_gv1_125 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5303    return g_morph(lToken[nTokenOffset+2], ":M.*:f", ":[me]") and g_morph(lToken[nLastToken-1+1], ":[AQ].*:m", ":[fe]")
5304def _g_cond_gv1_126 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5305    return not bCondMemo and g_morph(lToken[nTokenOffset+2], ":M.*:m", ":[fe]") and g_morph(lToken[nLastToken-1+1], ":[AQ].*:f", ":[me]")
5306def _g_cond_gv1_127 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5307    return not bCondMemo and g_morph(lToken[nLastToken-1+1], ":p", ":[AQ].*:[si]")
5308def _g_cond_gv1_128 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5309    return not g_tag(lToken[nTokenOffset+2], "_enum_") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and (g_morph(lToken[nTokenOffset+4], ":[123]s") or (not g_tag(lToken[nTokenOffset+2], "_enum_") and g_morph(lToken[nTokenOffset+4], ":P")))
5310def _g_cond_gv1_129 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5311    return not g_tag(lToken[nTokenOffset+2], "_enum_") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and (g_morph(lToken[nTokenOffset+5], ":[123]s") or (not g_tag(lToken[nTokenOffset+2], "_enum_") and g_morph(lToken[nTokenOffset+5], ":P")))
5312def _g_cond_gv1_130 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5313    return not g_tag(lToken[nTokenOffset+2], "_enum_") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and (g_morph(lToken[nTokenOffset+6], ":[123]s") or (not g_tag(lToken[nTokenOffset+2], "_enum_") and g_morph(lToken[nTokenOffset+6], ":P")))
5314def _g_cond_gv1_131 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5315    return not g_tag(lToken[nTokenOffset+2], "_enum_") and not g_value(lToken[nLastToken-1+1], "|légion|néant|réalité|") and (g_morph(lToken[nTokenOffset+7], ":[123]s") or (not g_tag(lToken[nTokenOffset+2], "_enum_") and g_morph(lToken[nTokenOffset+7], ":P")))
5316def _g_cond_gv1_132 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5317    return g_morph(lToken[nTokenOffset+2], ":[AQ].*:[fp]", ":(?:G|:m:[si])") and g_morph(lToken[nTokenOffset+3], ":(?:[123]s|P)")
5318def _g_sugg_gv1_22 (lToken, nTokenOffset, nLastToken):
5319    return suggMasSing(lToken[nTokenOffset+2]["sValue"])
5320def _g_cond_gv1_133 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5321    return g_morph(lToken[nTokenOffset+2], ":[AQ].*:[mp]", ":(?:G|:f:[si])") and g_morph(lToken[nTokenOffset+3], ":(?:[123]s|P)")
5322def _g_sugg_gv1_23 (lToken, nTokenOffset, nLastToken):
5323    return suggFemSing(lToken[nTokenOffset+2]["sValue"])
5324def _g_cond_gv1_134 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5325    return g_morph(lToken[nTokenOffset+2], ":[AQ].*:[fs]", ":(?:G|:m:[pi])") and g_morph(lToken[nTokenOffset+3], ":(?:[123]p|P)")
5326def _g_sugg_gv1_24 (lToken, nTokenOffset, nLastToken):
5327    return suggMasPlur(lToken[nTokenOffset+2]["sValue"])
5328def _g_cond_gv1_135 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5329    return g_morph(lToken[nTokenOffset+2], ":[AQ].*:[ms]", ":(?:G|:f:[pi])") and g_morph(lToken[nTokenOffset+3], ":(?:[123]p|P)")
5330def _g_sugg_gv1_25 (lToken, nTokenOffset, nLastToken):
5331    return suggFemPlur(lToken[nTokenOffset+2]["sValue"])
5332def _g_cond_gv1_136 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5333    return g_morph(lToken[nTokenOffset+2], ":[AQ].*:m", ":[fe]") and g_morph(lToken[nLastToken-1+1], ":[NA]:f", ":[me]")
5334def _g_cond_gv1_137 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5335    return not bCondMemo and g_morph(lToken[nTokenOffset+2], ":[AQ].*:f", ":[me]") and g_morph(lToken[nLastToken-1+1], ":[NA]:m", ":[fe]")
5336def _g_cond_gv1_138 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5337    return g_morph(lToken[nTokenOffset+2], ":[AQ].*:p", ":[Gsi]") and g_morph(lToken[nTokenOffset+3], ":(?:[123]s|P)")
5338def _g_sugg_gv1_26 (lToken, nTokenOffset, nLastToken):
5339    return suggSing(lToken[nTokenOffset+2]["sValue"])
5340def _g_cond_gv1_139 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5341    return not bCondMemo and g_morph(lToken[nTokenOffset+2], ":[AQ].*:s", ":[Gpi]") and g_morph(lToken[nTokenOffset+3], ":(?:[123]p|P)")
5342def _g_sugg_gv1_27 (lToken, nTokenOffset, nLastToken):
5343    return suggPlur(lToken[nTokenOffset+2]["sValue"])
5344def _g_cond_gv1_140 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5345    return not g_morph(lToken[nTokenOffset], ":R|>(?:et|ou)/")
5346def _g_cond_gv1_141 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5347    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[me]", ":f")
5348def _g_cond_gv1_142 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5349    return g_morph(lToken[nTokenOffset+3], ":[NA].*:[fe]", ":m")
5350def _g_cond_gv1_143 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5351    return g_morph(lToken[nTokenOffset+2], ":M.*:m", ":M.*:[fe]")
5352def _g_cond_gv1_144 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5353    return g_morph(lToken[nTokenOffset+3], ":[NA].*:m:[pi]", ":[fe]") and g_morph(lToken[nLastToken-1+1], ":[NA].*:f")
5354def _g_cond_gv1_145 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5355    return not bCondMemo and g_morph(lToken[nTokenOffset+3], ":[NA].*:f:[pi]", ":[me]") and g_morph(lToken[nLastToken-1+1], ":[NA].*:(?:m:p|f:s)")
5356def _g_cond_gv1_146 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5357    return g_morph(lToken[nTokenOffset+1], ":V0a.*:[123]s") and g_morph(lToken[nLastToken-1+1], ":A.*:p") and not g_value(lToken[nTokenOffset], "|on|")
5358def _g_cond_gv1_147 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5359    return not bCondMemo and g_morph(lToken[nTokenOffset+1], ":V0a.*:[123]p") and g_morph(lToken[nLastToken-1+1], ":A.*:s")
5360def _g_cond_gv1_148 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5361    return g_morphVC(lToken[nTokenOffset+1], ":V0a")
5362def _g_cond_gv1_149 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5363    return g_morphVC(lToken[nTokenOffset+1], ">(?:être|devenir|redevenir)/")
5364def _g_cond_gv1_150 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5365    return g_morphVC(lToken[nTokenOffset+1], ">(?:sembler|rester|demeurer|para[îi]tre)/")
5366def _g_cond_gv1_151 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5367    return g_morphVC(lToken[nTokenOffset+1], ":V0e.*:3s") and g_morph(lToken[nTokenOffset+2], ":(?:[123][sp]|A.*:[pf])", ":(?:G|W|Y|[me]:[si])")
5368def _g_cond_gv1_152 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5369    return not bCondMemo and g_morphVC(lToken[nTokenOffset+1], ":V0e.*:3p") and g_morph(lToken[nTokenOffset+2], ":(?:[123][sp]|A.*:[sf])", ":(?:G|W|Y|[me]:[pi])")
5370def _g_cond_gv1_153 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5371    return g_morphVC(lToken[nTokenOffset+1], ">(?:être|devenir|redevenir)/") and not g_value(lToken[nTokenOffset], "|se|s’|")
5372def _g_sugg_gv1_28 (lToken, nTokenOffset, nLastToken):
5373    return suggVerbPpas(lToken[nTokenOffset+2]["sValue"])
5374def _g_cond_gv1_154 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5375    return g_morphVC(lToken[nTokenOffset+1], ">(?:être|devenir|redevenir)/") and not g_value(lToken[nTokenOffset], "|nous|")
5376def _g_cond_gv1_155 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5377    return not g_value(lToken[nTokenOffset+1], "|rendez-vous|") and g_morphVC(lToken[nTokenOffset+1], ">(?:être|devenir|redevenir)/") and not g_value(lToken[nTokenOffset], "|vous|")
5378def _g_cond_gv1_156 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5379    return not g_value(lToken[nTokenOffset+1], "|rendez-vous|") and g_morphVC(lToken[nTokenOffset+1], ">(?:sembler|rester|demeurer|para[îi]tre)/")
5380def _g_cond_gv1_157 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5381    return bCondMemo
5382def _g_sugg_gv1_29 (lToken, nTokenOffset, nLastToken):
5383    return lToken[nTokenOffset+3]["sValue"][:-1]
5384def _g_cond_gv1_158 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5385    return not g_morph(lToken[nTokenOffset], ":[RV]")
5386def _g_cond_gv1_159 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5387    return g_morph(lToken[nLastToken-2+1], ":[123]s")
5388def _g_cond_gv1_160 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5389    return g_morph(lToken[nLastToken-2+1], ":1p")
5390def _g_cond_gv1_161 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5391    return g_morph(lToken[nLastToken-2+1], ":3p")
5392def _g_cond_gv1_162 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5393    return g_morph(lToken[nTokenOffset+3], ":[AQ].*:(?:[me]:p|f)", ":(?:G|Y|V0|P|[AQ].*:m:[is])") and not (g_morph(lToken[nTokenOffset+2], ":Y") and g_morph(lToken[nTokenOffset+3], ":3s"))
5394def _g_sugg_gv1_30 (lToken, nTokenOffset, nLastToken):
5395    return suggMasSing(lToken[nTokenOffset+3]["sValue"])
5396def _g_cond_gv1_163 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5397    return g_morph(lToken[nTokenOffset+3], ":[AQ].*:(?:[fe]:p|m)", ":(?:G|Y|V0|P|[AQ]:f:[is])") and not (g_morph(lToken[nTokenOffset+2], ":Y") and g_morph(lToken[nTokenOffset+2], ":3s"))
5398def _g_sugg_gv1_31 (lToken, nTokenOffset, nLastToken):
5399    return suggFemSing(lToken[nTokenOffset+3]["sValue"])
5400def _g_cond_gv1_164 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5401    return g_morph(lToken[nTokenOffset+3], ":[AQ].*:s", ":(?:G|Y|V0|P|[AQ].*:[ip])") and not (g_morph(lToken[nTokenOffset+2], ":Y") and g_morph(lToken[nTokenOffset+3], ":3s"))
5402def _g_cond_gv1_165 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5403    return g_morph(lToken[nTokenOffset+3], ":[AQ].*:p", ":(?:G|Y|V0|P|[AQ].*:[is])") and not (g_morph(lToken[nTokenOffset+2], ":Y") and g_morph(lToken[nTokenOffset+3], ":3s"))
5404def _g_cond_gv1_166 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5405    return g_morph(lToken[nTokenOffset+3], ":3s") and g_morph(lToken[nTokenOffset+4], ":[AQ].*:[fp]", ":(?:G|Y|V0|P|[AQ].*:m:[si])")
5406def _g_sugg_gv1_32 (lToken, nTokenOffset, nLastToken):
5407    return suggMasSing(lToken[nTokenOffset+4]["sValue"])
5408def _g_cond_gv1_167 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5409    return g_morph(lToken[nTokenOffset+3], ":3s") and g_morph(lToken[nTokenOffset+4], ":[AQ].*:[mp]", ":(?:G|Y|V0|P|[AQ].*:f:[si])") and not g_morph(lToken[nTokenOffset], ":R")
5410def _g_sugg_gv1_33 (lToken, nTokenOffset, nLastToken):
5411    return suggFemSing(lToken[nTokenOffset+4]["sValue"])
5412def _g_cond_gv1_168 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5413    return g_morph(lToken[nTokenOffset+3], ":3p") and g_morph(lToken[nTokenOffset+4], ":[AQ].*:[fs]", ":(?:G|Y|V0|P|[AQ].*:m:[pi])")
5414def _g_sugg_gv1_34 (lToken, nTokenOffset, nLastToken):
5415    return suggMasPlur(lToken[nTokenOffset+4]["sValue"])
5416def _g_cond_gv1_169 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5417    return g_morph(lToken[nTokenOffset+3], ":3p") and g_morph(lToken[nTokenOffset+4], ":[AQ].*:[ms]", ":(?:G|Y|V0|P|[AQ].*:f:[pi])") and not g_morph(lToken[nTokenOffset], ":R")
5418def _g_sugg_gv1_35 (lToken, nTokenOffset, nLastToken):
5419    return suggFemPlur(lToken[nTokenOffset+4]["sValue"])
5420def _g_cond_gv1_170 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5421    return g_morph(lToken[nTokenOffset+2], ":3s") and g_morph(lToken[nTokenOffset+3], ":[AQ].*:p", ":(?:G|Y|V0|P|[AQ].*:[si])")
5422def _g_cond_gv1_171 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5423    return not bCondMemo and g_morph(lToken[nTokenOffset+2], ":3p") and g_morph(lToken[nTokenOffset+3], ":[AQ].*:s", ":(?:G|Y|V0|[AQ].*:[pi])")
5424def _g_cond_gv1_172 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5425    return ( not g_morph(lToken[nTokenOffset+2], ":1p") or (g_morph(lToken[nTokenOffset+2], ":1p") and g_value(lToken[nTokenOffset], "|nous|ne|")) ) and g_morph(lToken[nTokenOffset+3], ":[AQ].*:s", ":(?:G|Y|V0|P|[AQ].*:[ip])") and not (g_morph(lToken[nTokenOffset+2], ":Y") and g_morph(lToken[nTokenOffset+3], ":3s"))
5426def _g_cond_gv1_173 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5427    return not g_value(lToken[nLastToken-1+1], "|barre|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
5428def _g_cond_gv1_174 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5429    return not g_value(lToken[nLastToken-1+1], "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") and (g_value(lToken[nTokenOffset], "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") or (g_value(lToken[nTokenOffset], "|que|qu’|") and g_morph(g_token(lToken, nTokenOffset+1-2), ":V|<start>", ":[NA]"))) and lToken[nLastToken-1+1]["sValue"].islower() and g_morph(lToken[nLastToken-1+1], ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
5430def _g_cond_gv1_175 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5431    return not g_value(lToken[nLastToken-1+1], "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") and (g_value(lToken[nTokenOffset], "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") or (g_value(lToken[nTokenOffset], "|que|qu’|") and g_morph(g_token(lToken, nTokenOffset+1-2), ":V|<start>", ":[NA]"))) and lToken[nLastToken-1+1]["sValue"].islower() and g_morph(lToken[nLastToken-1+1], ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|N|Q.*:m:[si])")
5432def _g_cond_gv1_176 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5433    return not g_value(lToken[nLastToken-1+1], "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") and (g_value(lToken[nTokenOffset], "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") or (g_value(lToken[nTokenOffset], "|que|qu’|") and g_morph(g_token(lToken, nTokenOffset+1-2), ":V|<start>", ":[NA]"))) and lToken[nLastToken-1+1]["sValue"].islower() and g_morph(lToken[nLastToken-1+1], ":(?:[123][sp])", ":[GWQ]")
5434def _g_cond_gv1_177 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5435    return g_morph(lToken[nTokenOffset+1], ":Os") and not g_value(lToken[nLastToken-1+1], "|barre|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") and (g_value(lToken[nTokenOffset], "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") or (g_value(lToken[nTokenOffset], "|que|qu’|") and g_morph(g_token(lToken, nTokenOffset+1-2), ":V|<start>", ":[NA]"))) and not lToken[nLastToken-1+1]["sValue"].isupper() and g_morph(lToken[nLastToken-1+1], ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
5436def _g_cond_gv1_178 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5437    return not g_value(lToken[nLastToken-1+1], "|barre|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") and (g_value(lToken[nTokenOffset], "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") or (g_value(lToken[nTokenOffset], "|que|qu’|") and g_morph(g_token(lToken, nTokenOffset+1-2), ":V|<start>", ":[NA]"))) and g_morph(lToken[nTokenOffset+2], ":[NA]", ":G") and not lToken[nLastToken-1+1]["sValue"].isupper() and g_morph(lToken[nLastToken-1+1], ":(?:[123][sp]|Y|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])") and not (g_value(lToken[nLastToken-2+1], "|avions|") and g_morph(lToken[nLastToken-1+1], ":3[sp]"))
5438def _g_cond_gv1_179 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5439    return g_morph(lToken[nTokenOffset+2], ":V0a")
5440def _g_cond_gv1_180 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5441    return g_morph(lToken[nTokenOffset+2], ":V0a", ":1p") and g_morph(lToken[nTokenOffset+3], ":V[0-3]..t_.*:Q.*:s", ":[GWpi]") and g_morph(lToken[nTokenOffset], ":(?:M|Os|N)", ":R") and not g_value(g_token(lToken, nTokenOffset+1-2), "|que|qu’|")
5442def _g_cond_gv1_181 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5443    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_") or g_morph(lToken[nTokenOffset+3], ":V[0-3]..t_")
5444def _g_cond_gv1_182 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5445    return not g_value(lToken[nLastToken-1+1], "|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
5446def _g_cond_gv1_183 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5447    return not g_value(lToken[nTokenOffset+1], "|A|avions|avoirs|") and g_morph(lToken[nTokenOffset+2], ":(?:Y|2p)")
5448def _g_cond_gv1_184 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5449    return bCondMemo and lToken[nTokenOffset+1]["sValue"] == "a" and lToken[nTokenOffset+2]["sValue"].endswith("r") and not g_value(lToken[nTokenOffset], "|n’|m’|t’|l’|il|on|elle|")
5450def _g_cond_gv1_185 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5451    return not g_value(lToken[nTokenOffset+1], "|A|avions|avoirs|") and g_morph(lToken[nTokenOffset+2], ":V(?:2.*:Ip.*:3s|3.*:Is.*:3s)", ":[NAQ]")
5452def _g_cond_gv1_186 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5453    return not g_value(lToken[nTokenOffset+1], "|A|avions|avoirs|") and g_morph(lToken[nTokenOffset+2], ":V3.*:Is.*:3s", ":[NAQ]")
5454def _g_cond_gv1_187 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5455    return g_morph(lToken[nTokenOffset+2], ":[NA]") and not g_morph(lToken[nLastToken+1], ":(?:Y|Ov|D|LV)") and not ((g_value(lToken[nLastToken-1+1], "|décidé|essayé|tenté|oublié|imaginé|supplié|") and g_value(lToken[nLastToken+1], "|de|d’|")) or (g_value(lToken[nLastToken-1+1], "|réussi|pensé|") and g_value(lToken[nLastToken+1], "|à|")))
5456def _g_sugg_gv1_36 (lToken, nTokenOffset, nLastToken):
5457    return suggPlur(lToken[nLastToken-1+1]["sValue"], lToken[nTokenOffset+2]["sValue"])
5458def _g_cond_gv1_188 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5459    return g_morph(lToken[nTokenOffset+2], ":[NA].*:m")
5460def _g_cond_gv1_189 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5461    return g_morph(lToken[nTokenOffset+2], ":[NA].*:f", ">(?:fois|impression)/") and not g_morph(lToken[nLastToken+1], ":(?:Y|Ov|D|LV)|>qu[e’]/") and not ((g_value(lToken[nLastToken-1+1], "|décidé|essayé|tenté|oublié|imaginé|supplié|") and g_value(lToken[nLastToken+1], "|de|d’|")) or (g_value(lToken[nLastToken-1+1], "|réussi|pensé|") and g_value(lToken[nLastToken+1], "|à|")))
5462def _g_cond_gv1_190 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5463    return lToken[nTokenOffset+3]["sValue"] != "pouvoir"
5464def _g_cond_gv1_191 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5465    return g_morphVC(lToken[nTokenOffset+2], ":V0a") and not g_value(lToken[nTokenOffset+3], "|barre|charge|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
5466def _g_cond_gv1_192 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5467    return g_morph(lToken[nTokenOffset+3], ":(?:Y|[123][sp])", ":[QMG]")
5468def _g_sugg_gv1_37 (lToken, nTokenOffset, nLastToken):
5469    return suggVerbPpas(lToken[nTokenOffset+3]["sValue"], ":m:s")
5470def _g_cond_gv1_193 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5471    return not bCondMemo and not g_value(lToken[nTokenOffset+1], "|les|l’|m’|t’|nous|vous|en|") and g_morph(lToken[nTokenOffset+3], ":Q.*:[fp]", ":m:[si]") and not g_morph(lToken[nTokenOffset+1], ":[NA].*:[fp]") and not look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\b(?:quel(?:le|)s?|combien) ")
5472def _g_cond_gv1_194 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5473    return g_morphVC(lToken[nLastToken-2+1], ":V0a") and not g_value(lToken[nLastToken-1+1], "|barre|charge|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
5474def _g_cond_gv1_195 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5475    return g_morph(lToken[nLastToken-1+1], ":(?:Y|[123][sp])", ":[QMG]")
5476def _g_cond_gv1_196 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5477    return not bCondMemo and g_morph(lToken[nLastToken-1+1], ":Q.*:[fp]", ":m:[si]")
5478def _g_cond_gv1_197 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5479    return g_morphVC(lToken[nTokenOffset+2], ":V0a") and g_morph(lToken[nTokenOffset+3], ":(?:Y|2p|Q.*:p|3[sp])", ":[GWsi]")
5480def _g_cond_gv1_198 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5481    return g_morphVC(lToken[nTokenOffset+2], ":V0a") and g_morph(lToken[nTokenOffset+3], ":(?:Y|2p|Q.*:s|3[sp])", ":[GWpi]")
5482def _g_sugg_gv1_38 (lToken, nTokenOffset, nLastToken):
5483    return suggVerbPpas(lToken[nTokenOffset+3]["sValue"], ":p")
5484def _g_cond_gv1_199 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5485    return g_morph(lToken[nTokenOffset+2], ":A.*:p", ":[GEMWPsi]") and not g_tag(lToken[nTokenOffset+2], "_exctx_")
5486def _g_cond_gv1_200 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5487    return not g_value(lToken[nTokenOffset+2], "|bref|désolé|désolée|pire|")  and not g_tag(lToken[nTokenOffset+2], "_exctx_") and g_morph(lToken[nTokenOffset+2], ":A.*:[fp]", ":(?:G|E|M1|W|P|m:[si])") and not g_morph(lToken[nLastToken+1], ">falloir/") and not look(sSentence[lToken[nLastToken]["nEnd"]:], "^ +(?:y (?:a|aura|avait|eut)|d(?:ut|oit|evait|evra) y avoir|s’agi(?:ssait|t|ra))[, .]")
5488def _g_cond_gv1_201 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5489    return not g_value(lToken[nTokenOffset+2], "|bref|désolé|désolée|pire|") and not g_tag(lToken[nTokenOffset+2], "_exctx_") and g_morph(lToken[nTokenOffset+2], ":A.*:[mp]", ":(?:G|E|M1|W|P|f:[si])")
5490def _g_cond_gv1_202 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5491    return not g_value(lToken[nTokenOffset+2], "|bref|désolé|désolée|pire|") and not g_tag(lToken[nTokenOffset+2], "_exctx_") and g_morph(lToken[nTokenOffset+2], ":A.*:[fs]", ":(?:G|E|M1|W|P|m:[pi])")
5492def _g_cond_gv1_203 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5493    return not g_value(lToken[nTokenOffset+2], "|bref|désolé|désolée|pire|") and not g_tag(lToken[nTokenOffset+2], "_exctx_") and g_morph(lToken[nTokenOffset+2], ":A.*:[ms]", ":(?:G|E|M1|W|P|f:[pi])")
5494def _g_cond_gv1_204 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5495    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":(?:V1.*:[YQ]|Iq.*:[123]s)")
5496def _g_sugg_gv1_39 (lToken, nTokenOffset, nLastToken):
5497    return suggVerbTense(lToken[nTokenOffset+2]["sValue"], ":E", ":2p") + "-" + lToken[nTokenOffset+3]["sValue"]
5498def _g_cond_gv1_205 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5499    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":(?:V1.*:[YQ]|Iq.*:[123]s)") and g_morph(lToken[nTokenOffset+4], ":[ORC]", ":[NA]|>plupart/")
5500def _g_cond_gv1_206 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5501    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":(?:V1.*:[YQ]|Iq.*:[123]s)") and g_morph(lToken[nTokenOffset+4], ":[ORC]", ":[NA]")
5502def _g_cond_gv1_207 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5503    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":(?:V1.*:[YQ]|Iq.*:[123]s)") and g_morph(lToken[nTokenOffset+4], ":[ORCD]", ":Y")
5504def _g_cond_gv1_208 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5505    return not look(sSentence[lToken[nLastToken]["nEnd"]:], " soit ")
5506def _g_cond_gv1_209 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5507    return not g_value(lToken[nLastToken+1], "|je|")
5508def _g_cond_gv1_210 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5509    return g_morph(lToken[nTokenOffset+3], ":[MYO]", ":A|>et/")
5510def _g_cond_gv1_211 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5511    return not g_value(lToken[nLastToken+1], "|tu|")
5512def _g_cond_gv1_212 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5513    return g_morph(lToken[nLastToken-1+1], ":V[13].*:Ip.*:2s", ":G") and not g_value(lToken[nLastToken+1], "|tu|")
5514def _g_sugg_gv1_40 (lToken, nTokenOffset, nLastToken):
5515    return lToken[nLastToken-1+1]["sValue"][:-1]
5516def _g_cond_gv1_213 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5517    return g_morph(lToken[nLastToken-1+1], ":V[13].*:Ip.*:2s", ":[GNAM]") and not g_value(lToken[nLastToken+1], "|tu|")
5518def _g_cond_gv1_214 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5519    return not g_value(lToken[nLastToken+1], "|il|elle|on|ils|elles|iel|iels|") and not g_value(lToken[nLastToken-1+1], "|provient|") and not (g_value(lToken[nLastToken-1+1], "|vient|dit|surgit|survient|périt|") and g_morph(lToken[nLastToken+1], ":(?:[MD]|Oo)|>[A-Z]/")) and g_morph(lToken[nLastToken-1+1], ":V[23].*:Ip.*:3s", ":G|>(?:devoir|suffire|para[îi]tre)/") and analyse(lToken[nLastToken-1+1]["sValue"][:-1]+"s", ":E:2s")
5520def _g_sugg_gv1_41 (lToken, nTokenOffset, nLastToken):
5521    return lToken[nLastToken-1+1]["sValue"][:-1]+"s"
5522def _g_cond_gv1_215 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5523    return not g_value(lToken[nLastToken+1], "|il|elle|on|ils|elles|iel|iels|") and not g_value(lToken[nLastToken-1+1], "|provient|") and not (g_value(lToken[nLastToken-1+1], "|vient|dit|surgit|survient|périt|") and g_morph(lToken[nLastToken+1], ":(?:[MD]|Oo)|>[A-Z]/")) and g_morph(lToken[nLastToken-1+1], ":V[23].*:Ip.*:3s", ":[GNA]|>(?:devoir|suffire|para[îi]tre)/") and analyse(lToken[nLastToken-1+1]["sValue"][:-1]+"s", ":E:2s")
5524def _g_cond_gv1_216 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5525    return not g_value(lToken[nLastToken+1], "|il|elle|on|") and not ( g_value(lToken[nLastToken-1+1], "|répond|") and (g_morph(lToken[nLastToken+1], ":[MD]|>[A-Z]/") or g_value(lToken[nLastToken+1], "|l’|d’|")) ) and g_morph(lToken[nLastToken-1+1], ":V3.*:Ip.*:3s", ":G")
5526def _g_cond_gv1_217 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5527    return not g_value(lToken[nLastToken+1], "|il|elle|on|") and not ( g_value(lToken[nLastToken-1+1], "|répond|") and (g_morph(lToken[nLastToken+1], ":[MD]|>[A-Z]/") or g_value(lToken[nLastToken+1], "|l’|d’|")) ) and g_morph(lToken[nLastToken-1+1], ":V3.*:Ip.*:3s", ":[GNA]")
5528def _g_cond_gv1_218 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5529    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morph(lToken[nTokenOffset+1], ":E", ":[GM]|>(?:venir|aller|partir)/") and not g_value(lToken[nTokenOffset], "|de|d’|le|la|les|l’|je|j’|me|m’|te|t’|se|s’|nous|vous|lui|leur|")
5530def _g_cond_gv1_219 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5531    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
5532def _g_sugg_gv1_42 (lToken, nTokenOffset, nLastToken):
5533    return suggVerbTense(lToken[nTokenOffset+2]["sValue"], ":E", ":2s")+"-moi"
5534def _g_cond_gv1_220 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5535    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morph(lToken[nTokenOffset+1], ":E:2s", ":[GM]|>(?:venir|aller|partir)/") and not g_value(lToken[nTokenOffset], "|de|d’|le|la|les|l’|me|m’|te|t’|se|s’|nous|vous|lui|leur|")
5536def _g_sugg_gv1_43 (lToken, nTokenOffset, nLastToken):
5537    return suggVerbTense(lToken[nTokenOffset+2]["sValue"], ":E", ":2s")+"-toi"
5538def _g_cond_gv1_221 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5539    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morph(lToken[nTokenOffset+1], ":E", ":[GM]|>(?:venir|aller|partir)/") and g_morph(lToken[nLastToken+1], ":|<end>", ":(?:Y|3[sp]|Oo)|>(?:en|y)/") and g_morph(lToken[nTokenOffset], ":Cc|<start>|>,")
5540def _g_cond_gv1_222 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5541    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/") and not g_morph(lToken[nLastToken+1], ":Y")
5542def _g_sugg_gv1_44 (lToken, nTokenOffset, nLastToken):
5543    return suggVerbTense(lToken[nTokenOffset+2]["sValue"], ":E", ":2s")+"-"+lToken[nTokenOffset+3]["sValue"]
5544def _g_cond_gv1_223 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5545    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morph(lToken[nTokenOffset+1], ":E", ":[GM]") and g_morph(lToken[nLastToken+1], ":|<end>", ":(?:Y|3[sp]|Oo)|>(?:en|y)/") and g_morph(lToken[nTokenOffset], ":Cc|<start>|>,")
5546def _g_cond_gv1_224 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5547    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morph(lToken[nTokenOffset+1], ":E", ":[GM]|>(?:venir|aller|partir)") and g_morph(lToken[nLastToken+1], ":|<end>|>,", ":(?:N|A|Y|B|3[sp])|>(?:pour|plus|moins|mieux|peu|trop|très|en|y)/") and g_morph(lToken[nTokenOffset], ":Cc|<start>|>,")
5548def _g_cond_gv1_225 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5549    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/") and g_morph(lToken[nLastToken+1], ":|<end>|>,", ":(?:N|A|Y|B|3[sp])|>(?:pour|plus|moins|mieux|peu|trop|très|en|y)/")
5550def _g_sugg_gv1_45 (lToken, nTokenOffset, nLastToken):
5551    return suggVerbTense(lToken[nTokenOffset+2]["sValue"], ":E", ":2s")+"-les"
5552def _g_cond_gv1_226 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5553    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morph(lToken[nTokenOffset+1], ":E", ":[GM]|>(?:venir|aller|partir)/") and g_morph(lToken[nLastToken+1], ":|<end>|>,", ":(?:N|A|Q|Y|MP|H|T)|>(?:pour|plus|moins|mieux|peu|plupart|trop|très|en|y|une?)/") and g_morph(lToken[nTokenOffset], ":Cc|<start>|>,")
5554def _g_cond_gv1_227 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5555    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/") and g_morph(lToken[nLastToken+1], ":|<end>|>,", ":(?:N|A|Y|B|T|MP|3[sp])|>(?:pour|plus|moins|mieux|peu|trop|très|une)/")
5556def _g_cond_gv1_228 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5557    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morph(lToken[nTokenOffset+1], ":E", ":[GM]|>(?:aller|partir)/") and g_morph(lToken[nLastToken+1], ":|<end>|>,", ":(?:N|A|Q|Y|M|P|B|H|T|D|Ov)|>(?:plus|moins|mieux|peu|trop|très|une?)/") and g_morph(lToken[nTokenOffset], ":Cc|<start>|>,")
5558def _g_cond_gv1_229 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5559    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:aller|partir)/") and g_morph(lToken[nLastToken+1], ":|<end>|>,", ":(?:N|A|Y|M|P|B|3[sp]|D|Ov)|>(?:plus|moins|mieux|peu|trop|très|une?)/")
5560def _g_cond_gv1_230 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5561    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morph(lToken[nTokenOffset+3], ":(?:Y|Ov)", ":[NAB]") and not g_morph(lToken[nTokenOffset], ":O[sv]")
5562def _g_sugg_gv1_46 (lToken, nTokenOffset, nLastToken):
5563    return lToken[nTokenOffset+1]["sValue"][:-3]+"’en"
5564def _g_cond_gv1_231 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5565    return not g_value(lToken[nLastToken+1], "|guerre|")
5566def _g_cond_gv1_232 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5567    return not (g_value(lToken[nTokenOffset], "|va|") and g_value(lToken[nLastToken+1], "|guerre|"))
5568def _g_cond_gv1_233 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5569    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morph(lToken[nTokenOffset+1], ":E", ":[MG]") and g_morph(lToken[nLastToken+1], ":|<end>|>,", ":(?:Y|[123][sp])")
5570def _g_cond_gv1_234 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5571    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morphVC(lToken[nTokenOffset+1], ":E")
5572def _g_cond_gv1_235 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5573    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morphVC(lToken[nTokenOffset+1], ":E") and g_morph(lToken[nLastToken+1], ":[RC]|<end>|>,", ":Y")
5574def _g_cond_gv1_236 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5575    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and g_morphVC(lToken[nTokenOffset+1], ":E") and g_morph(lToken[nLastToken+1], ":[RC]|<end>|>,", ":[NAY]")
5576def _g_cond_gv1_237 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5577    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and not g_morph(lToken[nLastToken+1], ":Y")
5578def _g_cond_gv1_238 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5579    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and not g_value(lToken[nTokenOffset], "|tu|il|elle|on|ne|n’|") and not g_morph(lToken[nLastToken+1], ":Y")
5580def _g_cond_gv1_239 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5581    return g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 1) and not g_value(lToken[nLastToken+1], "|partie|")
5582def _g_cond_gv1_240 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5583    return hasSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[me]:[si]")
5584def _g_sugg_gv1_47 (lToken, nTokenOffset, nLastToken):
5585    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[me]:[si]", True)
5586def _g_cond_gv1_241 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5587    return hasSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[fe]:[si]")
5588def _g_sugg_gv1_48 (lToken, nTokenOffset, nLastToken):
5589    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[fe]:[si]", True)
5590def _g_cond_gv1_242 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5591    return hasSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[si]")
5592def _g_sugg_gv1_49 (lToken, nTokenOffset, nLastToken):
5593    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[si]", True)
5594def _g_cond_gv1_243 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5595    return hasSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[pi]")
5596def _g_sugg_gv1_50 (lToken, nTokenOffset, nLastToken):
5597    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[pi]", True)
5598def _g_cond_gv1_244 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5599    return hasSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[me]:[pi]")
5600def _g_sugg_gv1_51 (lToken, nTokenOffset, nLastToken):
5601    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[me]:[pi]", True)
5602def _g_cond_gv1_245 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5603    return hasSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[fe]:[pi]")
5604def _g_sugg_gv1_52 (lToken, nTokenOffset, nLastToken):
5605    return suggSimil(lToken[nTokenOffset+3]["sValue"], ":[NA].*:[fe]:[pi]", True)
5606def _g_sugg_gv1_53 (lToken, nTokenOffset, nLastToken):
5607    return suggSimil(lToken[nLastToken-1+1]["sValue"], ":[NA].*:[me]:[si]", True)
5608def _g_sugg_gv1_54 (lToken, nTokenOffset, nLastToken):
5609    return suggSimil(lToken[nLastToken-1+1]["sValue"], ":[NA].*:[fe]:[si]", True)
5610def _g_sugg_gv1_55 (lToken, nTokenOffset, nLastToken):
5611    return suggSimil(lToken[nLastToken-1+1]["sValue"], ":[NA].*:[si]", True)
5612def _g_sugg_gv1_56 (lToken, nTokenOffset, nLastToken):
5613    return suggSimil(lToken[nLastToken-1+1]["sValue"], ":[NA].*:[pi]", True)
5614def _g_cond_gv1_246 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5615    return not g_value(lToken[nTokenOffset+1], "|rendez-vous|entre-nous|entre-vous|entre-elles|") and not g_morphVC(lToken[nTokenOffset+1], ":V0")
5616def _g_sugg_gv1_57 (lToken, nTokenOffset, nLastToken):
5617    return suggVerbPpas(lToken[nLastToken-1+1]["sValue"], ":s")
5618def _g_cond_gv1_247 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5619    return not g_value(lToken[nTokenOffset], "|l’|") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_que_")
5620def _g_cond_gv1_248 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5621    return not g_tag(lToken[nTokenOffset+2], "_upron_") and g_morph(lToken[nTokenOffset+1], ":V", ":Q|>soit/") and (g_morph(lToken[nTokenOffset+2], ":Y", ":[NAQ]") or g_morph(lToken[nTokenOffset+2], ">(?:aller|manger)/")) and not g_morph(lToken[nTokenOffset], ":Y|>ce/") and not g_value(lToken[nTokenOffset], "|c’|") and not g_value(g_token(lToken, nTokenOffset+1-2), "|ce|") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_sujinfi_")
5622def _g_cond_gv1_249 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5623    return g_morph(lToken[nTokenOffset+1], ":V", ":Q|>soit/") and g_morph(lToken[nTokenOffset+2], ":2p", ":[NAQ]")
5624def _g_cond_gv1_250 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5625    return g_morph(lToken[nTokenOffset+1], ":V", ":Q|>soit/") and g_morph(lToken[nTokenOffset+2], ":V(?:2.*:Ip.*:3s|3.*:Is.*:3s)", ":[NAQ]") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_sujinfi_")
5626def _g_cond_gv1_251 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5627    return g_morph(lToken[nTokenOffset+1], ":V", ":Q|>soit/") and g_morph(lToken[nTokenOffset+2], ":V3.*:Is.*:3s", ":[NAQ]") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_") and not g_tag_before(lToken[nTokenOffset+1], dTags, "_sujinfi_")
5628def _g_cond_gv1_252 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5629    return lToken[nTokenOffset+4]["sValue"].islower() and g_morph(lToken[nTokenOffset+3], ":[NA].*:m:[si]", ":G|>verbe/") and g_morph(lToken[nTokenOffset+4], ":V1.*:Y", ":M")
5630def _g_sugg_gv1_58 (lToken, nTokenOffset, nLastToken):
5631    return suggVerbPpas(lToken[nTokenOffset+4]["sValue"], ":m:s")
5632def _g_cond_gv1_253 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5633    return lToken[nTokenOffset+4]["sValue"].islower() and g_morph(lToken[nTokenOffset+3], ":[NA].*:f:[si]", ":G") and g_morph(lToken[nTokenOffset+4], ":V1.*:Y", ":M")
5634def _g_sugg_gv1_59 (lToken, nTokenOffset, nLastToken):
5635    return suggVerbPpas(lToken[nTokenOffset+4]["sValue"], ":f:s")
5636def _g_cond_gv1_254 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5637    return lToken[nTokenOffset+4]["sValue"].islower() and g_morph(lToken[nTokenOffset+3], ":[NA].*:e:[si]", ":G") and g_morph(lToken[nTokenOffset+4], ":V1.*:Y", ":M")
5638def _g_sugg_gv1_60 (lToken, nTokenOffset, nLastToken):
5639    return suggVerbPpas(lToken[nTokenOffset+4]["sValue"], ":s")
5640def _g_cond_gv1_255 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5641    return lToken[nTokenOffset+4]["sValue"].islower() and g_morph(lToken[nTokenOffset+3], ":[NA].*:[pi]", ":G") and g_morph(lToken[nTokenOffset+4], ":V1.*:Y", ":M")
5642def _g_sugg_gv1_61 (lToken, nTokenOffset, nLastToken):
5643    return suggVerbPpas(lToken[nTokenOffset+4]["sValue"], ":p")
5644def _g_cond_gv1_256 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5645    return g_morph(lToken[nTokenOffset+2], ":[123][sp]")
5646def _g_sugg_gv1_62 (lToken, nTokenOffset, nLastToken):
5647    return lToken[nTokenOffset+2]["sValue"].replace("ut", "ût").replace("UT", "ÛT")
5648def _g_cond_gv1_257 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5649    return lToken[nTokenOffset+2]["sValue"].islower()
5650def _g_cond_gv1_258 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5651    return lToken[nTokenOffset+2]["sValue"].islower() and not (g_value(lToken[nTokenOffset+2], "|attendant|admettant|") and g_value(lToken[nLastToken+1], "|que|qu’|"))
5652def _g_cond_gv1_259 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5653    return lToken[nTokenOffset+2]["sValue"].islower() and not (g_morph(lToken[nTokenOffset], ":1p") and not g_value(lToken[nTokenOffset], "|sachons|veuillons|allons|venons|partons|") and g_value(g_token(lToken, nTokenOffset+1-2), "|<start>|,|"))
5654def _g_cond_gv1_260 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5655    return lToken[nTokenOffset+2]["sValue"].islower() and not (g_morph(lToken[nTokenOffset], ":2p") and not g_value(lToken[nTokenOffset], "|sachez|veuillez|allez|venez|partez|") and g_value(g_token(lToken, nTokenOffset+1-2), "|<start>|,|"))
5656def _g_cond_gv1_261 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5657    return not g_morph(lToken[nTokenOffset], ":[123]s") or not g_morph(lToken[nTokenOffset+3], ":N.*:[me]:[si]")
5658def _g_cond_gv1_262 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5659    return not g_morph(lToken[nTokenOffset], ":[123]s") or not g_morph(lToken[nTokenOffset+3], ":N.*:[fe]:[si]")
5660def _g_cond_gv1_263 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5661    return not g_morph(lToken[nTokenOffset], ":[123]s") or not g_morph(lToken[nTokenOffset+3], ":N.*:[si]")
5662def _g_cond_gv1_264 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5663    return not g_morph(lToken[nTokenOffset], ":[123]s") or not g_morph(lToken[nTokenOffset+3], ":N.*:[pi]")
5664def _g_cond_gv1_265 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5665    return not g_morph(lToken[nTokenOffset], ":[123]s") or not g_morph(lToken[nTokenOffset+3], ":[NA]")
5666def _g_cond_gv1_266 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5667    return not g_morph(lToken[nTokenOffset], ":(?:[123]s|V0)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[me]:[si]")
5668def _g_cond_gv1_267 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5669    return not g_morph(lToken[nTokenOffset], ":(?:[123]s|V0)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[fe]:[si]")
5670def _g_cond_gv1_268 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5671    return not g_morph(lToken[nTokenOffset], ":(?:[123]s|V0)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[si]")
5672def _g_cond_gv1_269 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5673    return not g_morph(lToken[nTokenOffset], ":(?:[123]s|V0)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[pi]")
5674def _g_cond_gv1_270 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5675    return not g_morph(lToken[nTokenOffset], ":(?:[123]s|V0)") or not g_morph(lToken[nTokenOffset+3], ":[NA]")
5676def _g_cond_gv1_271 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5677    return not g_morph(lToken[nTokenOffset], ":(?:3s|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[me]:[si]")
5678def _g_cond_gv1_272 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5679    return not g_morph(lToken[nTokenOffset], ":(?:3s|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[fe]:[si]")
5680def _g_cond_gv1_273 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5681    return not g_morph(lToken[nTokenOffset], ":(?:3s|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[si]")
5682def _g_cond_gv1_274 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5683    return not g_morph(lToken[nTokenOffset], ":(?:3s|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[pi]")
5684def _g_cond_gv1_275 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5685    return not g_morph(lToken[nTokenOffset], ":(?:3s|R)") or not g_morph(lToken[nTokenOffset+3], ":[NA]")
5686def _g_cond_gv1_276 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5687    return not g_morph(lToken[nTokenOffset], ":(?:1p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[me]:[si]")
5688def _g_cond_gv1_277 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5689    return not g_morph(lToken[nTokenOffset], ":(?:1p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[fe]:[si]")
5690def _g_cond_gv1_278 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5691    return not g_morph(lToken[nTokenOffset], ":(?:1p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[si]")
5692def _g_cond_gv1_279 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5693    return not g_morph(lToken[nTokenOffset], ":(?:1p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[pi]")
5694def _g_cond_gv1_280 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5695    return not g_morph(lToken[nTokenOffset], ":(?:1p|R)") or not g_morph(lToken[nTokenOffset+3], ":[NA]")
5696def _g_cond_gv1_281 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5697    return not g_morph(lToken[nTokenOffset], ":(?:2p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[me]:[si]")
5698def _g_cond_gv1_282 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5699    return not g_morph(lToken[nTokenOffset], ":(?:2p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[fe]:[si]")
5700def _g_cond_gv1_283 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5701    return not g_morph(lToken[nTokenOffset], ":(?:2p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[si]")
5702def _g_cond_gv1_284 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5703    return not g_morph(lToken[nTokenOffset], ":(?:2p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[pi]")
5704def _g_cond_gv1_285 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5705    return not g_morph(lToken[nTokenOffset], ":(?:2p|R)") or not g_morph(lToken[nTokenOffset+3], ":[NA]")
5706def _g_cond_gv1_286 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5707    return not g_morph(lToken[nTokenOffset], ":3p") or not g_morph(lToken[nTokenOffset+3], ":N.*:[me]:[si]")
5708def _g_cond_gv1_287 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5709    return not g_morph(lToken[nTokenOffset], ":3p") or not g_morph(lToken[nTokenOffset+3], ":N.*:[fe]:[si]")
5710def _g_cond_gv1_288 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5711    return not g_morph(lToken[nTokenOffset], ":3p") or not g_morph(lToken[nTokenOffset+3], ":N.*:[si]")
5712def _g_cond_gv1_289 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5713    return not g_morph(lToken[nTokenOffset], ":3p") or not g_morph(lToken[nTokenOffset+3], ":N.*:[pi]")
5714def _g_cond_gv1_290 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5715    return not g_morph(lToken[nTokenOffset], ":3p") or not g_morph(lToken[nTokenOffset+3], ":[NA]")
5716def _g_cond_gv1_291 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5717    return not g_morph(lToken[nTokenOffset], ":(?:3p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[me]:[si]")
5718def _g_cond_gv1_292 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5719    return not g_morph(lToken[nTokenOffset], ":(?:3p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[fe]:[si]")
5720def _g_cond_gv1_293 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5721    return not g_morph(lToken[nTokenOffset], ":(?:3p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[si]")
5722def _g_cond_gv1_294 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5723    return not g_morph(lToken[nTokenOffset], ":(?:3p|R)") or not g_morph(lToken[nTokenOffset+3], ":N.*:[pi]")
5724def _g_cond_gv1_295 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5725    return not g_morph(lToken[nTokenOffset], ":(?:3p|R)") or not g_morph(lToken[nTokenOffset+3], ":[NA]")
5726def _g_cond_gv1_296 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5727    return not g_morph(lToken[nTokenOffset], ":(?:R|3s)")
5728def _g_cond_gv1_297 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5729    return not g_morph(lToken[nTokenOffset+3], ":2s") or g_value(lToken[nTokenOffset], "|je|j’|tu|il|elle|on|nous|vous|ils|elles|iel|iels|")
5730def _g_cond_gv1_298 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5731    return g_morph(lToken[nTokenOffset], ":N", ":V")
5732def _g_cond_gv1_299 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5733    return g_morph(lToken[nTokenOffset+2], ":[NAM]") and g_morph(lToken[nTokenOffset+5], ":[NAM]") and g_morph(lToken[nTokenOffset+8], ":[NAM]")
5734def _g_cond_gv1_300 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5735    return g_morph(lToken[nTokenOffset+2], ":[NAM]") and g_morph(lToken[nTokenOffset+5], ":[NAM]") and g_morph(lToken[nTokenOffset+9], ":[NAM]")
5736def _g_cond_gv1_301 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5737    return g_morph(lToken[nTokenOffset+2], ":[NAM]") and g_morph(lToken[nTokenOffset+5], ":[NAM]") and g_morph(lToken[nTokenOffset+10], ":[NAM]")
5738def _g_cond_gv1_302 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5739    return g_morph(lToken[nTokenOffset+3], ":[NAM]") and g_morph(lToken[nTokenOffset+6], ":[NAM]")
5740def _g_cond_gv1_303 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5741    return g_morph(lToken[nTokenOffset+3], ":[NAM]") and g_morph(lToken[nTokenOffset+7], ":[NAM]")
5742def _g_cond_gv1_304 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5743    return g_morph(lToken[nTokenOffset+3], ":[NAM]") and g_morph(lToken[nTokenOffset+8], ":[NAM]")
5744def _g_cond_gv1_305 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5745    return g_morph(lToken[nTokenOffset+1], ":V", ":N")
5746def _g_da_gv1_1 (lToken, nTokenOffset, nLastToken):
5747    return g_select(lToken[nTokenOffset+2], ":V")
5748def _g_cond_gv2_1 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5749    return lToken[nLastToken-1+1]["sValue"] != "A"
5750def _g_cond_gv2_2 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5751    return not g_tag_before(lToken[nTokenOffset+1], dTags, "_ceque_") and not g_value(lToken[nTokenOffset], "|tout|d’|l’|")
5752def _g_cond_gv2_3 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5753    return g_morph(lToken[nTokenOffset+4], ":[123][sp]", ":[NAGW]")
5754def _g_cond_gv2_4 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5755    return g_morph(lToken[nTokenOffset+4], ":(?:[123][sp]|P)") and g_morph(lToken[nTokenOffset+5], ":Q")
5756def _g_cond_gv2_5 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5757    return g_morph(lToken[nTokenOffset+4], ":(?:[123][sp]|P)") and g_morph(lToken[nTokenOffset+5], ":[QA]")
5758def _g_cond_gv2_6 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5759    return (g_morph(lToken[nTokenOffset+2], ":M") and g_morph(lToken[nTokenOffset+4], ":M")) or (g_morph(lToken[nTokenOffset+2], ":Y") and g_morph(lToken[nTokenOffset+4], ":Y"))
5760def _g_cond_gv2_7 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5761    return g_morph(lToken[nTokenOffset+3], ":[123][sp]") and g_morph(lToken[nTokenOffset+6], ":[123][sp]")
5762def _g_cond_gv2_8 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5763    return g_morph(lToken[nLastToken-2+1], ":[QA]")
5764def _g_cond_gv2_9 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5765    return g_morph(lToken[nLastToken-2+1], ":Q")
5766def _g_cond_gv2_10 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5767    return g_morph(lToken[nTokenOffset+3], ":([123][sp]|P)")
5768def _g_cond_gv2_11 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5769    return g_morph(lToken[nTokenOffset+3], ":([123][sp]|P)") and g_morph(lToken[nTokenOffset+4], ":[QA]")
5770def _g_cond_gv2_12 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5771    return g_morph(lToken[nTokenOffset+3], ":([123][sp]|P)") and g_morph(lToken[nTokenOffset+4], ":Q")
5772def _g_cond_gv2_13 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5773    return g_morph(lToken[nTokenOffset+2], ":M", ":G") and lToken[nTokenOffset+3]["sValue"].islower() and g_morph(lToken[nTokenOffset+3], ":3s", ":G")
5774def _g_cond_gv2_14 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5775    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:1[sŝś]", ":[GW]")
5776def _g_sugg_gv2_1 (lToken, nTokenOffset, nLastToken):
5777    return lToken[nTokenOffset+2]["sValue"][:-1]+"é-je"
5778def _g_cond_gv2_15 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5779    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:1[sŝś]", ":[GNW]") and not g_value(lToken[nTokenOffset+1], "|je|j’|il|elle|")
5780def _g_cond_gv2_16 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5781    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:1s", ":[GW]")
5782def _g_cond_gv2_17 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5783    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1)
5784def _g_cond_gv2_18 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5785    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:1s", ":[GNW]") and not g_value(lToken[nTokenOffset+1], "|je|j’|tu|")
5786def _g_cond_gv2_19 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5787    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:2s", ":[GW]")
5788def _g_cond_gv2_20 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5789    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:2s", ":[GNW]") and not g_value(lToken[nTokenOffset+1], "|je|j’|tu|")
5790def _g_cond_gv2_21 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5791    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:3s", ":[GW]")
5792def _g_cond_gv2_22 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5793    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:3s", ":[GNW]") and not g_value(lToken[nTokenOffset+1], "|ce|il|elle|on|")
5794def _g_cond_gv2_23 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5795    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:3s", ":[GNW]") and not g_value(lToken[nTokenOffset+1], "|ce|c’|ça|ç’|il|elle|on|iel|")
5796def _g_cond_gv2_24 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5797    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:1p", ":[GW]") and not g_value(lToken[nTokenOffset+2], "|veuillons|sachons|")
5798def _g_cond_gv2_25 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5799    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:1p", ":[GW]") and not g_value(lToken[nTokenOffset+2], "|veuillons|sachons|allons|venons|partons|")
5800def _g_cond_gv2_26 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5801    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and ( (g_value(lToken[nTokenOffset+2], "|avions|") and not g_morph(lToken[nTokenOffset+1], ":A.*:[me]:[sp]") and not g_morph(lToken[nLastToken-1+1], ":(:?3[sp]|Ov)")) or (g_morph(lToken[nTokenOffset+2], ":V.*:1p", ":[GNW]") and not g_morph(lToken[nTokenOffset+1], ":Os")) )
5802def _g_cond_gv2_27 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5803    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:2p", ":[GW]") and not g_value(lToken[nTokenOffset+2], "|veuillez|sachez|")
5804def _g_cond_gv2_28 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5805    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:2p", ":[GW]") and not g_value(lToken[nTokenOffset+2], "|veuillez|sachez|allez|venez|partez|")
5806def _g_cond_gv2_29 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5807    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:2p", ":[GNW]") and not g_value(lToken[nTokenOffset+2], "|veuillez|") and not g_morph(lToken[nTokenOffset+1], ":Os")
5808def _g_cond_gv2_30 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5809    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:3p", ":[GW]")
5810def _g_cond_gv2_31 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5811    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 1, 1) and g_morph(lToken[nTokenOffset+2], ":V.*:3p", ":[GNW]") and not g_value(lToken[nTokenOffset+1], "|ce|ils|elles|iels|")
5812def _g_cond_gv2_32 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5813    return lToken[nTokenOffset+3]["sValue"] == "est" or lToken[nTokenOffset+3]["sValue"] == "es"
5814def _g_cond_gv2_33 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5815    return not bCondMemo
5816def _g_sugg_gv2_2 (lToken, nTokenOffset, nLastToken):
5817    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":1s")
5818def _g_sugg_gv2_3 (lToken, nTokenOffset, nLastToken):
5819    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":2s")
5820def _g_cond_gv2_34 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5821    return not g_morph(lToken[nTokenOffset], ":R|>(?:et|ou)") and not (g_morph(lToken[nTokenOffset+2], ":Q") and g_morph(lToken[nTokenOffset], ":V0.*:3s"))
5822def _g_sugg_gv2_4 (lToken, nTokenOffset, nLastToken):
5823    return suggVerb(lToken[nTokenOffset+2]["sValue"], ":3s")
5824def _g_cond_gv2_35 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5825    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":3p")
5826def _g_cond_gv2_36 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5827    return not g_morph(lToken[nTokenOffset], ":R|>(?:et|ou)")
5828def _g_sugg_gv2_5 (lToken, nTokenOffset, nLastToken):
5829    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":3s")
5830def _g_cond_gv2_37 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5831    return bCondMemo and g_morph(lToken[nTokenOffset+3], ":3p")
5832def _g_cond_gv2_38 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5833    return not g_morph(lToken[nTokenOffset], ":[VR]")
5834def _g_cond_gv2_39 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5835    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":[123]p")
5836def _g_sugg_gv2_6 (lToken, nTokenOffset, nLastToken):
5837    return lToken[nTokenOffset+1]["sValue"].replace("e-", "es-").replace("E-", "ES-")
5838def _g_cond_gv2_40 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5839    return g_morph(lToken[nTokenOffset+3], ":[123]p")
5840def _g_sugg_gv2_7 (lToken, nTokenOffset, nLastToken):
5841    return suggVerb(lToken[nLastToken-1+1]["sValue"], ":3s")
5842def _g_cond_gv2_41 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5843    return not g_morph(lToken[nTokenOffset], ":[VRD]")
5844def _g_cond_gv2_42 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5845    return g_morph(lToken[nTokenOffset], ":C|<start>|>,", ":(?:P|Q|[123][sp]|R)|>ni/")
5846def _g_cond_gv2_43 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5847    return g_morph(lToken[nTokenOffset], ":[CRV]|<start>|>,", ":D")
5848def _g_cond_gv2_44 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5849    return g_tag(lToken[nTokenOffset+2], "neg") and g_morph(lToken[nTokenOffset], ":Cs|<start>|>,", ":(?:Y|P|Q|[123][sp]|R)") and not(g_morph(lToken[nTokenOffset+2], ":Y") and g_value(lToken[nTokenOffset], "|ne|"))
5850def _g_cond_gv2_45 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5851    return g_morph(lToken[nTokenOffset], ":[CRV]|<start>|>,")
5852def _g_cond_gv2_46 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5853    return g_morph(lToken[nTokenOffset], ":Cs|<start>|>,", ":(?:Y|P|Q|[123][sp]|R)")
5854def _g_cond_gv2_47 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5855    return g_morph(lToken[nTokenOffset], ":(?:Cs|R|V)|<start>|>,")
5856def _g_cond_gv2_48 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5857    return not (g_value(lToken[nTokenOffset+2], "|avoir|croire|être|devenir|redevenir|voir|sembler|paraître|paraitre|sentir|rester|retrouver|") and g_morph(lToken[nTokenOffset+3], ":[NA]"))
5858def _g_cond_gv2_49 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5859    return not g_tag(lToken[nTokenOffset+2], "_enum_") and g_morph(lToken[nTokenOffset], ":C|<start>|>,", ":[YP]") and g_morph(lToken[nTokenOffset+2], ":[NA].*:[si]", ":G") and not ( (g_value(lToken[nTokenOffset+2], "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|") or g_tag_before(lToken[nTokenOffset+1], dTags, "_ni_") or g_value(lToken[nTokenOffset], "|et|ou|")) and g_morph(lToken[nTokenOffset+3], ":3?p") ) and not g_checkAgreement(lToken[nTokenOffset+2], lToken[nTokenOffset+3]) and not ( g_morph(lToken[nTokenOffset+2], "(?:[123][sp]|P)") and not g_value(lToken[nTokenOffset], "|<start>|,|") )
5860def _g_cond_gv2_50 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5861    return not g_tag(lToken[nLastToken-1+1], "_ngn_") and g_morph(lToken[nTokenOffset+3], ":A.*:p") or (g_morph(lToken[nTokenOffset+3], ":N.*:p") and g_morph(lToken[nTokenOffset+2], ":A"))
5862def _g_sugg_gv2_8 (lToken, nTokenOffset, nLastToken):
5863    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":3s", suggSing)
5864def _g_cond_gv2_51 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5865    return not g_tag(lToken[nTokenOffset+2], "_enum_") and g_morph(lToken[nTokenOffset], ":C|<start>|>,", ":[YP]") and g_morph(lToken[nTokenOffset+2], ":[NA].*:[si]", ":G") and not ( (g_value(lToken[nTokenOffset+2], "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|") or g_tag_before(lToken[nTokenOffset+1], dTags, "_ni_") or g_value(lToken[nTokenOffset], "|et|ou|")) and g_morph(lToken[nTokenOffset+4], ":3p") )
5866def _g_sugg_gv2_9 (lToken, nTokenOffset, nLastToken):
5867    return suggVerb(lToken[nTokenOffset+4]["sValue"], ":3s")
5868def _g_cond_gv2_52 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5869    return not g_tag(lToken[nTokenOffset+2], "_enum_") and g_morph(lToken[nTokenOffset], ":C|<start>|>,", ":[YP]") and g_morph(lToken[nTokenOffset+2], ":[NA].*:[me]:[si]", ":G") and not ( (g_value(lToken[nTokenOffset+2], "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|") or g_tag_before(lToken[nTokenOffset+1], dTags, "_ni_") or g_value(lToken[nTokenOffset], "|et|ou|")) and g_morph(lToken[nTokenOffset+3], ":3?p") ) and not g_checkAgreement(lToken[nTokenOffset+2], lToken[nTokenOffset+3])
5870def _g_cond_gv2_53 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5871    return not g_tag(lToken[nTokenOffset+2], "_enum_") and g_morph(lToken[nTokenOffset], ":C|<start>|>,", ":[YP]") and g_morph(lToken[nTokenOffset+2], ":[NA].*:[fe]:[si]", ":G") and not ( (g_value(lToken[nTokenOffset+2], "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|") or g_tag_before(lToken[nTokenOffset+1], dTags, "_ni_") or g_value(lToken[nTokenOffset], "|et|ou|")) and g_morph(lToken[nTokenOffset+3], ":3?p") ) and not g_checkAgreement(lToken[nTokenOffset+2], lToken[nTokenOffset+3])
5872def _g_cond_gv2_54 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5873    return not g_tag(lToken[nTokenOffset+1], "_un_des_") and g_morph(lToken[nTokenOffset], ":C|<start>|>(?:,|dont)", ":(?:Y|P|Q|[123][sp]|R)̉|>(?:sauf|excepté|et|ou)/")
5874def _g_cond_gv2_55 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5875    return not g_tag(lToken[nTokenOffset+1], "_un_des_") and g_morph(lToken[nTokenOffset], "<start>|>(?:,|dont)/|:R")
5876def _g_cond_gv2_56 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5877    return g_tag(lToken[nTokenOffset+1], "_un_des_") and g_morph(lToken[nTokenOffset], ":C|<start>|>,", ":(?:Y|P|Q|[123][sp]|R)")
5878def _g_cond_gv2_57 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5879    return g_morph(lToken[nTokenOffset], ":C|<start>|>,", ":(?:Y|P|Q|[123][sp]|R)")
5880def _g_cond_gv2_58 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5881    return not (g_morph(lToken[nTokenOffset], ":R") and g_morph(lToken[nLastToken-1+1], ":3p"))
5882def _g_sugg_gv2_10 (lToken, nTokenOffset, nLastToken):
5883    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":1p")
5884def _g_sugg_gv2_11 (lToken, nTokenOffset, nLastToken):
5885    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":2p")
5886def _g_cond_gv2_59 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5887    return not g_morph(lToken[nTokenOffset], ":R") and not (g_morph(lToken[nTokenOffset+2], ":Q") and g_morph(lToken[nTokenOffset], ":V0.*:3p"))
5888def _g_sugg_gv2_12 (lToken, nTokenOffset, nLastToken):
5889    return suggVerb(lToken[nTokenOffset+2]["sValue"], ":3p")
5890def _g_cond_gv2_60 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5891    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":3s")
5892def _g_sugg_gv2_13 (lToken, nTokenOffset, nLastToken):
5893    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":3p")
5894def _g_cond_gv2_61 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5895    return bCondMemo and g_morph(lToken[nTokenOffset+3], ":3s")
5896def _g_cond_gv2_62 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5897    return g_morph(lToken[nTokenOffset+3], ":3s")
5898def _g_cond_gv2_63 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5899    return g_morph(lToken[nTokenOffset+3], ":[123]s")
5900def _g_cond_gv2_64 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5901    return bCondMemo and g_morph(lToken[nTokenOffset+2], ":[123]s")
5902def _g_sugg_gv2_14 (lToken, nTokenOffset, nLastToken):
5903    return lToken[nTokenOffset+1]["sValue"].replace("s", "").replace("S", "")
5904def _g_cond_gv2_65 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5905    return g_tag(lToken[nTokenOffset+1], "_bcp_plur_") and not g_morph(lToken[nTokenOffset+2], ":3p")
5906def _g_cond_gv2_66 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5907    return not bCondMemo and g_tag(lToken[nTokenOffset+1], "_bcp_sing_") and not g_morph(lToken[nTokenOffset+2], ":3s")
5908def _g_cond_gv2_67 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5909    return not bCondMemo and lToken[nTokenOffset+2]["sValue"] != "a" and not g_tag(lToken[nTokenOffset+1], "_bcp_sing_") and not g_morph(lToken[nTokenOffset+2], ":3p") and not (g_space_between_tokens(lToken[nTokenOffset+1], lToken[nTokenOffset+1+1], 1, 2) and g_morph(lToken[nTokenOffset+2], ":V0"))
5910def _g_sugg_gv2_15 (lToken, nTokenOffset, nLastToken):
5911    return suggVerb(lToken[nLastToken-1+1]["sValue"], ":3p")
5912def _g_cond_gv2_68 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5913    return not g_morph(lToken[nTokenOffset], ":[VR]") and not (g_tag(lToken[nTokenOffset+1], "_d_entre_nous_") and g_morph(lToken[nLastToken-1+1], ":1p")) and not (g_tag(lToken[nTokenOffset+1], "_d_entre_vous_") and g_morph(lToken[nLastToken-1+1], ":2p"))
5914def _g_cond_gv2_69 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5915    return not (g_tag(lToken[nTokenOffset+1], "_d_entre_nous_") and g_morph(lToken[nLastToken-1+1], ":1p")) and not (g_tag(lToken[nTokenOffset+1], "_d_entre_vous_") and g_morph(lToken[nLastToken-1+1], ":2p"))
5916def _g_cond_gv2_70 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5917    return g_morph(lToken[nTokenOffset+3], ":[12]p")
5918def _g_cond_gv2_71 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5919    return not g_morph(lToken[nTokenOffset], ":[VR]|>(?:et|ou)/")
5920def _g_cond_gv2_72 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5921    return g_morph(lToken[nTokenOffset], ":Cs|<start>|>,") and not( g_morph(lToken[nTokenOffset+3], ":3s") and look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
5922def _g_cond_gv2_73 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5923    return not g_tag(lToken[nLastToken-1+1], "_ngn_") and g_morph(lToken[nTokenOffset+3], ":A.*:s") or (g_morph(lToken[nTokenOffset+3], ":N.*:s") and g_morph(lToken[nTokenOffset+2], ":A"))
5924def _g_sugg_gv2_16 (lToken, nTokenOffset, nLastToken):
5925    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":3p", suggPlur)
5926def _g_cond_gv2_74 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5927    return g_morph(lToken[nTokenOffset], ":Cs|<start>|>,") and not( g_morph(lToken[nTokenOffset+4], ":3s") and look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
5928def _g_sugg_gv2_17 (lToken, nTokenOffset, nLastToken):
5929    return suggVerb(lToken[nTokenOffset+4]["sValue"], ":3p")
5930def _g_cond_gv2_75 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5931    return g_morph(lToken[nTokenOffset], ":Cs|<start>|>,") and not ( g_morph(lToken[nTokenOffset+3], ":3s") and look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) and not g_checkAgreement(lToken[nTokenOffset+2], lToken[nTokenOffset+3]) and not ( g_morph(lToken[nTokenOffset+2], "(?:[123][sp]|P)") and not g_value(lToken[nTokenOffset], "|<start>|,|") )
5932def _g_cond_gv2_76 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5933    return g_morph(lToken[nTokenOffset], ":Cs|<start>|>,") and not( g_morph(lToken[nTokenOffset+3], ":3s") and look(sSentence[:lToken[1+nTokenOffset]["nStart"]], "(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) and not g_checkAgreement(lToken[nTokenOffset+2], lToken[nTokenOffset+3]) and not ( g_morph(lToken[nTokenOffset+2], "(?:[123][sp]|P)") and not g_value(lToken[nTokenOffset], "|<start>|,|") )
5934def _g_sugg_gv2_18 (lToken, nTokenOffset, nLastToken):
5935    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":3p", suggMasPlur)
5936def _g_sugg_gv2_19 (lToken, nTokenOffset, nLastToken):
5937    return suggVerb(lToken[nTokenOffset+3]["sValue"], ":3p", suggFemPlur)
5938def _g_cond_gv2_77 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5939    return g_morph(lToken[nLastToken+1], ":(?:R|D.*:p)|>au/|<end>|>,")
5940def _g_cond_gv2_78 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5941    return not g_morph(lToken[nTokenOffset+4], ":[NA]")
5942def _g_cond_gv2_79 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5943    return not bCondMemo and not g_checkAgreement(lToken[nTokenOffset+3], lToken[nTokenOffset+4])
5944def _g_sugg_gv2_20 (lToken, nTokenOffset, nLastToken):
5945    return suggVerb(lToken[nTokenOffset+4]["sValue"], ":3p", suggPlur)
5946def _g_sugg_gv2_21 (lToken, nTokenOffset, nLastToken):
5947    return suggVerb(lToken[nTokenOffset+5]["sValue"], ":3p")
5948def _g_cond_gv2_80 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5949    return not g_tag(lToken[nTokenOffset+2], "_enum_") and g_morph(lToken[nTokenOffset+2], ":M")
5950def _g_cond_gv2_81 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5951    return g_morph(lToken[nTokenOffset+1], ":M") and g_morph(lToken[nTokenOffset+3], ":M") and not g_morph(lToken[nTokenOffset], ":[RV]|>(?:des?|du|et|ou|ni)/")
5952def _g_cond_gv2_82 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5953    return not g_morph(lToken[nTokenOffset], ":[RV]")
5954def _g_cond_gv2_83 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5955    return g_morph(lToken[nTokenOffset+2], ":[123][sp]", ":(?:3s|G|W|3p!)") and not g_value(lToken[nTokenOffset+4], "|plupart|majorité|groupe|") and not g_tag(lToken[nTokenOffset+4], "_enum_") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":D")) and not (g_value(g_token(lToken, nLastToken+2), "|et|ou|") and g_morph(g_token(lToken, nLastToken+3), ":D"))
5956def _g_cond_gv2_84 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5957    return g_morph(lToken[nTokenOffset+2], ":[123][sp]", ":(?:3s|G|W|3p!)") and not g_value(lToken[nTokenOffset+4], "|plupart|majorité|groupe|") and not g_tag(lToken[nTokenOffset+4], "_enum_") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":D")) and not (g_value(g_token(lToken, nLastToken+2), "|et|ou|") and g_morph(g_token(lToken, nLastToken+3), ":D")) and not g_morph(lToken[nTokenOffset+4], ":Y")
5958def _g_cond_gv2_85 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5959    return g_morph(lToken[nTokenOffset+2], ":[123][sp]", ":(?:3s|G|W|3p!)") and not g_value(lToken[nTokenOffset+4], "|plupart|majorité|groupe|") and not g_tag(lToken[nTokenOffset+4], "_enum_") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":D")) and not (g_value(g_token(lToken, nLastToken+2), "|et|ou|") and g_morph(g_token(lToken, nLastToken+3), ":D")) and not g_morph(lToken[nTokenOffset], ":[NA]")
5960def _g_cond_gv2_86 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5961    return g_morph(lToken[nTokenOffset+2], ":[123][sp]", ":(?:3s|G|W|3p!)") and not g_value(lToken[nTokenOffset+4], "|plupart|majorité|groupe|") and not g_tag(lToken[nTokenOffset+4], "_enum_") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":D")) and not (g_value(g_token(lToken, nLastToken+2), "|et|ou|") and g_morph(g_token(lToken, nLastToken+3), ":D")) and not g_morph(lToken[nTokenOffset+4], ":Y") and not g_morph(lToken[nTokenOffset], ":[NA]")
5962def _g_cond_gv2_87 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5963    return g_morph(lToken[nTokenOffset+2], ":[123][sp]", ":(?:3s|G|W|3p!)") and g_morph(lToken[nTokenOffset], ":R") and not g_value(lToken[nTokenOffset+4], "|plupart|majorité|groupe|") and not (g_value(lToken[nLastToken+1], "|et|ou|") and g_morph(g_token(lToken, nLastToken+2), ":D"))
5964def _g_cond_gv2_88 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5965    return g_morph(lToken[nTokenOffset+2], ":[123][sp]", ":(?:3p|G|W)")
5966def _g_cond_gv2_89 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5967    return g_morph(lToken[nTokenOffset+2], ":[123][sp]", ":(?:3p|G|W)") and not g_morph(lToken[nTokenOffset], ":[NA]")
5968def _g_cond_gv2_90 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5969    return g_morph(lToken[nTokenOffset+2], ":[123][sp]", ":(?:3p|G|W)") and g_morph(lToken[nTokenOffset], ":R")
5970def _g_cond_gv2_91 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5971    return g_morph(lToken[nTokenOffset+2], ":[12]s") and not g_value(lToken[nLastToken+1], "|je|tu|")
5972def _g_cond_gv2_92 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5973    return not bCondMemo and g_morph(lToken[nTokenOffset+2], ":[12]p") and not g_value(lToken[nLastToken+1], "|nous|vous|")
5974def _g_cond_gv2_93 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5975    return g_morph(lToken[nTokenOffset+3], ":V0e", ":3s")
5976def _g_cond_gv2_94 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5977    return not ( g_morph(lToken[nTokenOffset+3], ":3p") and (g_value(lToken[nLastToken+1], "|et|") or g_tag(lToken[nTokenOffset+5], "_enum_")) )
5978def _g_cond_gv2_95 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5979    return bCondMemo
5980def _g_sugg_gv2_22 (lToken, nTokenOffset, nLastToken):
5981    return lToken[nTokenOffset+1]["sValue"][:-1]
5982def _g_cond_gv2_96 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5983    return g_morph(lToken[nTokenOffset+3], ":V0e", ":3p")
5984def _g_cond_gv2_97 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5985    return g_morphVC(lToken[nTokenOffset+1], ">avoir/")
5986def _g_cond_gv2_98 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
5987    return g_morph(lToken[nTokenOffset+4], ":K")
5988def _g_sugg_gv2_23 (lToken, nTokenOffset, nLastToken):
5989    return suggVerbTense(lToken[nTokenOffset+4]["sValue"], ":Iq", ":1s")
5990def _g_sugg_gv2_24 (lToken, nTokenOffset, nLastToken):
5991    return suggVerbTense(lToken[nTokenOffset+4]["sValue"], ":Iq", ":2s")
5992def _g_sugg_gv2_25 (lToken, nTokenOffset, nLastToken):
5993    return suggVerbTense(lToken[nTokenOffset+4]["sValue"], ":Iq", ":3s")
5994def _g_sugg_gv2_26 (lToken, nTokenOffset, nLastToken):
5995    return suggVerbTense(lToken[nTokenOffset+4]["sValue"], ":Iq", ":1p")
5996def _g_sugg_gv2_27 (lToken, nTokenOffset, nLastToken):
5997    return suggVerbTense(lToken[nTokenOffset+4]["sValue"], ":Iq", ":2p")
5998def _g_sugg_gv2_28 (lToken, nTokenOffset, nLastToken):
5999    return suggVerbTense(lToken[nTokenOffset+4]["sValue"], ":Iq", ":3p")
6000def _g_cond_gv2_99 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6001    return g_morph(lToken[nTokenOffset+5], ":K")
6002def _g_sugg_gv2_29 (lToken, nTokenOffset, nLastToken):
6003    return suggVerbTense(lToken[nTokenOffset+5]["sValue"], ":Iq", ":3s")
6004def _g_sugg_gv2_30 (lToken, nTokenOffset, nLastToken):
6005    return suggVerbTense(lToken[nTokenOffset+5]["sValue"], ":Iq", ":3p")
6006def _g_sugg_gv2_31 (lToken, nTokenOffset, nLastToken):
6007    return suggVerbMode(lToken[nTokenOffset+3]["sValue"], ":I", lToken[nTokenOffset+2]["sValue"])
6008def _g_sugg_gv2_32 (lToken, nTokenOffset, nLastToken):
6009    return suggVerbMode(lToken[nLastToken-1+1]["sValue"], ":I", lToken[nLastToken-2+1]["sValue"])
6010def _g_sugg_gv2_33 (lToken, nTokenOffset, nLastToken):
6011    return suggVerbMode(lToken[nTokenOffset+4]["sValue"], ":I", lToken[nTokenOffset+3]["sValue"])
6012def _g_sugg_gv2_34 (lToken, nTokenOffset, nLastToken):
6013    return suggVerbMode(lToken[nTokenOffset+3]["sValue"], ":I", "je")
6014def _g_sugg_gv2_35 (lToken, nTokenOffset, nLastToken):
6015    return suggVerbMode(lToken[nTokenOffset+5]["sValue"], ":I", lToken[nTokenOffset+4]["sValue"])
6016def _g_cond_gv2_100 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6017    return g_morph(lToken[nTokenOffset+1], ":V", ":N")
6018def _g_sugg_gv2_36 (lToken, nTokenOffset, nLastToken):
6019    return suggVerbMode(lToken[nLastToken-1+1]["sValue"], ":S", lToken[nLastToken-2+1]["sValue"])
6020def _g_cond_gv2_101 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6021    return not g_morph(lToken[nTokenOffset+1], ":Q")
6022def _g_cond_gv2_102 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6023    return g_tag(lToken[nTokenOffset+1], "_upron_")
6024def _g_cond_gv2_103 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6025    return not g_value(lToken[nTokenOffset], "|ça|cela|ceci|")
6026def _g_cond_gv2_104 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6027    return not g_value(lToken[nTokenOffset], "|la|")
6028def _g_cond_gv2_105 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6029    return not g_tag(lToken[nTokenOffset+1], "_upron_") and not g_tag(lToken[nTokenOffset+1], "neg") and g_morph(lToken[nTokenOffset+1], ":V", ":N")
6030def _g_cond_gv2_106 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6031    return g_tag(lToken[nTokenOffset+2], "_upron_")
6032def _g_sugg_gv2_37 (lToken, nTokenOffset, nLastToken):
6033    return suggVerbMode(lToken[nTokenOffset+3]["sValue"], ":S", lToken[nTokenOffset+2]["sValue"])
6034def _g_sugg_gv2_38 (lToken, nTokenOffset, nLastToken):
6035    return suggVerbMode(lToken[nTokenOffset+4]["sValue"], ":S", lToken[nTokenOffset+3]["sValue"])
6036def _g_sugg_gv2_39 (lToken, nTokenOffset, nLastToken):
6037    return suggVerbMode(lToken[nTokenOffset+5]["sValue"], ":S", lToken[nTokenOffset+4]["sValue"])
6038def _g_sugg_gv2_40 (lToken, nTokenOffset, nLastToken):
6039    return suggVerbMode(lToken[nTokenOffset+6]["sValue"], ":S", lToken[nTokenOffset+5]["sValue"])
6040def _g_cond_gv2_107 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6041    return g_morph(lToken[nTokenOffset+5], ":I", ":S")
6042def _g_cond_gv2_108 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6043    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 0, 0)
6044def _g_sugg_gv2_41 (lToken, nTokenOffset, nLastToken):
6045    return suggVerbTense(lToken[nTokenOffset+4]["sValue"], ":E", ":2s")
6046def _g_cond_gv2_109 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6047    return g_space_between_tokens(lToken[nTokenOffset+2], lToken[nTokenOffset+2+1], 0, 0) and g_morph(lToken[nTokenOffset+4], ">(?:être|devenir|redevenir|sembler|para[iî]tre)/")
6048def _g_cond_gv2_110 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6049    return g_space_between_tokens(lToken[nTokenOffset+3], lToken[nTokenOffset+3+1], 0, 0)
6050def _g_sugg_gv2_42 (lToken, nTokenOffset, nLastToken):
6051    return suggVerbTense(lToken[nTokenOffset+5]["sValue"], ":E", ":2s")
6052def _g_cond_gv2_111 (lToken, nTokenOffset, nLastToken, sCountry, bCondMemo, dTags, sSentence, sSentence0):
6053    return g_space_between_tokens(lToken[nTokenOffset+3], lToken[nTokenOffset+3+1], 0, 0) and g_morph(lToken[nTokenOffset+5], ">(?:être|devenir|redevenir|sembler|para[iî]tre)/")
6054
6055