Index: compile_rules_graph.py ================================================================== --- compile_rules_graph.py +++ compile_rules_graph.py @@ -246,11 +246,11 @@ if cAction == ">": ## no action, break loop if condition is False return [sOption, sCondition, cAction, ""] - if not sAction: + if not sAction and cAction != "%": print("# Error in action at line " + sActionId + ": This action is empty.") if sAction[0:1] != "=" and cAction != "=": checkIfThereIsCode(sAction, sActionId) Index: gc_core/py/lang_core/gc_engine.py ================================================================== --- gc_core/py/lang_core/gc_engine.py +++ gc_core/py/lang_core/gc_engine.py @@ -809,31 +809,43 @@ print(" DISAMBIGUATOR:\n ", dRule[sRuleId]) globals()[sWhat](self.lToken, nTokenOffset) elif cActionType == ">": # we do nothing, this test is just a condition to apply all following actions if bDebug: - print(" COND_OK") + print(" COND_OK: ", sRuleId) pass elif cActionType == "/": + # Tag if bDebug: - print(" SEMANTIC_TAG:\n ", dRule[sRuleId]) - nTokenStart = nTokenOffset + eAct[0] - nTokenEnd = nTokenOffset + (eAct[1] if eAct[1] else eAct[0]) + print(" TAG:\n ", dRule[sRuleId]) + nTokenStart = nTokenOffset + eAct[0] if eAct[0] > 0 else nLastToken + eAct[0] + nTokenEnd = nTokenOffset + eAct[1] if eAct[1] > 0 else nLastToken + eAct[1] for i in range(nTokenStart, nTokenEnd+1): if "tags" in self.lToken[i]: self.lToken[i]["tags"].update(sWhat.split("|")) else: self.lToken[i]["tags"] = set(sWhat.split("|")) - elif cActionType == "%": - # sentence tags - if bDebug: - print(" SENTENCE_TAG:\n ", dRule[sRuleId]) - nTokenTag = nTokenOffset + eAct[0] if sWhat not in self.dTags: - self.dTags[sWhat] = (nTokenTag, nTokenTag) - elif nTokenTag > self.dTags[sWhat][1]: - self.dTags[sWhat] = (self.dTags[sWhat][0], nTokenTag) + self.dTags[sWhat] = [nTokenStart, nTokenStart] + else: + self.dTags[sWhat][0] = min(nTokenStart, self.dTags[sWhat][0]) + self.dTags[sWhat][1] = max(nTokenEnd, self.dTags[sWhat][1]) + elif cActionType == "%": + # immunity + nTokenStart = nTokenOffset + eAct[0] if eAct[0] > 0 else nLastToken + eAct[0] + nTokenEnd = nTokenOffset + eAct[1] if eAct[1] > 0 else nLastToken + eAct[1] + if nTokenEnd - nTokenStart == 0: + self.lToken[nTokenStart]["bImmune"] = True + nErrorStart = self.nOffsetWithinParagraph + self.lToken[nTokenStart]["nStart"] + if nErrorStart in self.dError: + del self.dError[nErrorStart] + else: + for i in range(nTokenStart, nTokenEnd+1): + self.lToken[i]["bImmune"] = True + nErrorStart = self.nOffsetWithinParagraph + self.lToken[i]["nStart"] + if nErrorStart in self.dError: + del self.dError[nErrorStart] else: print("# error: unknown action at " + sLineId) elif cActionType == ">": if bDebug: print(" COND_BREAK") @@ -915,17 +927,10 @@ for i in range(nTokenRewriteStart, nTokenRewriteEnd+1): self.lToken[i]["bToRemove"] = True elif sWhat == "␣": # merge tokens self.lToken[nTokenRewriteStart]["nMergeUntil"] = nTokenRewriteEnd - elif sWhat == "!": - # immunity - if nTokenRewriteEnd - nTokenRewriteStart == 0: - self.lToken[nTokenRewriteStart]["bImmune"] = True - else: - for i in range(nTokenRewriteStart, nTokenRewriteEnd+1): - self.lToken[i]["bImmune"] = True elif sWhat == "_": # neutralized token if nTokenRewriteEnd - nTokenRewriteStart == 0: self.lToken[nTokenRewriteStart]["sNewValue"] = "_" else: @@ -965,16 +970,10 @@ nMergeUntil = 0 dTokenMerger = None for iToken, dToken in enumerate(self.lToken): bKeepToken = True if dToken["sType"] != "INFO": - if "bImmune" in dToken: - nErrorStart = self.nOffsetWithinParagraph + dToken["nStart"] - if nErrorStart in self.dError: - if bDebug: - print("immunity -> error removed:", self.dError[nErrorStart]) - del self.dError[nErrorStart] if nMergeUntil and iToken <= nMergeUntil: dTokenMerger["sValue"] += " " * (dToken["nStart"] - dTokenMerger["nEnd"]) + dToken["sValue"] dTokenMerger["nEnd"] = dToken["nEnd"] if bDebug: print(" MERGED TOKEN:", dTokenMerger["sValue"]) Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -2204,11 +2204,11 @@ !!!! Immunity !! __n_importe_qui_quoi__ n’ importe [qui|quoi] - <<- ~2>> ! + <<- %2>> @@@@ @@@@ @@ -6347,11 +6347,11 @@ # voir / voire __conf_voir_voire__ voir [grand|petit|rouge] - <<- ~2>> ! + <<- %2>> voir @:A¬:[NGM] <<- /conf/ not \2.istitle() and not morph(<1, ":O[os]|>(?:[ndmts]e|falloir|pouvoir|savoir|de)/") and not before(r"(?i)\b[ndmts](?:e |’(?:en |y ))(?:pas |jamais |) *$") -1>> voir # Confusion probable : “voir” est un verbe concernant la perception visuelle. Pour signifier “et même possiblement”, écrivez :|https://fr.wiktionary.org/wiki/voire @@ -6414,11 +6414,11 @@ # Les mois __maj_mois__ monarchie de Juillet révolution d’ Octobre - <<- ~3>> ! + <<- %3>> *WORD [Janvier|Février|Avril|Mai|Juin|Juillet|Août|Aout|Septembre|Octobre|Novembre|Décembre|Vendémiaire|Brumaire|Frimaire|Nivôse|Pluviôse|Ventôse|Germinal|Floréal|Prairial|Messidor|Thermidor|Fructidor] <<- /maj/ not morph(\1, ":M1") -2:>> =\2.lower() # Pas de majuscule sur les mois.|http://www.academie-francaise.fr/la-langue-francaise/questions-de-langue#42_strong-em-jours-de-la-semaine-pluriel-et-majuscules-em-strong @@ -6439,11 +6439,11 @@ # Les États __maj_État__ en fonction de l’ état - <<- ~5>> ! + <<- %5>> état [français|belge|suisse|canadien|palestinien|souverain|américain|russe|anglais|allemand|espagnol|italien|mexicain|japonais|chinois|australien|polonais|membre|africain|européen|asiatique|voyou|démocratique|totalitaire|fédéral|fédéré|capitaliste|communiste|providence|nation] <<- /maj/ \1 == "état" -1>> État # Majuscule manquante : si vous parlez de l’institution dirigeante d’une nation, écrivez “État”. états [français|>belge|>suisse|canadien|canadiens|palestinien|palestiniens|souverain|souverains|>membre|américain|américains|africain|africains|européen|européens|>asiatique|>voyou|>démocratique|>totalitaire|>fédérale|>fédérée|>capitaliste|>communiste|>providence|>nation] @@ -6473,11 +6473,11 @@ # gentilés / ethnonymes __maj_gentilés__ océan Indien [îles|iles] Britanniques - <<- ~2>> ! + <<- %2>> *WORD [>afghane|>albanaise|>algérienne|>allemande|>américaine|>andorrane|>anglais|>angolaise|>arabe|>argentine|>arménienne|>australienne|>autrichienne|>asiatique|>azerbaïdjanaise|>bahamienne|>bangladaise|>bengladeshie|>barbadienne|>basque|>belge|>bélizienne|>béninoise|>bretonne|>bhoutanaise|>biélorusse|>birmane|>bolivienne|>bosnienne|>botswanaiso|>brésilienne|>britannique|>brunéiene|>bulgare|>burkinabé|>burundaise|>cambodgienne|>camerounaise|>canadienne|>capverdienne|>centrafricaine|>chilienne|>chinoise|>chypriote|>colombienne|>comorienne|>congolaise|>nord-coréenne|>corse|>costaricienne|>croate|>cubaine|>danoise|>djiboutienne|>dominicaine|>égyptienne|>émiratie|>équatorienne|>érythréenne|>estonienne|>espagnole|>étatsunienne|>états-unienne|>étasunienne|>éthiopienne|>fidjienne|>finlandaise|>formosane|>française|>gabonaise|>gambienne|>géorgienne|>ghanéenne|>grecque|>grenadienne|>guadeloupéenne|>guatémaltèque|>guinéenne|>équato-guinéenne|>guyanienne|>haïtienne|>honduriene|>hollandaise|>hongroise|>indienne|>indochinoise|>indonésienne|>irakienne|>italienne|>iranienne|>irlandaise|>islandaise|>israélienne|>ivoirienne|>jamaïcaine|>japonaise|>jordanienne|>kazakhe|>kényane|>kosovare|>koweïtienne|>laotienne|>lapone|>lettone|>libanaise|>libérienne|>libyenne|>liechtensteinoise|>lituanienne|>luxembourgeois|>macédonienne|>maghrébine|>malgache|>malaisienne|>malawite|>maldivienne|>malienne|>maltaise|>maorie|>marocaine|>martienne|>mauricienne|>mauritanienne|>mexicaine|>micronésienne|>moldave|>monégasque|>monténégrine|>mongole|>mozambicaine|>namibiene|>népalaise|>nicaraguayenne|>nigérienne|>nigériane|>néerlandaise|>norvégienne|>néo-zélandaise|>ougandaise|>ouzbèke|>pakistanaise|>palestinienne|>panaméenne|>paraguayenne|>perse|>péruvienne|>philippine|>polonaise|>polynésienne|>portugaise|>québécoise|>qatarie|>roumaine|>russe|>rwandaise|>saoudienne|>scandinave|>salvadorienne|>sénégalaise|>serbe|>singapourienne|>slovaque|>slovène|>somalienne|>soudanaise|>soviétique|>srilankaise|>suédoise|>suisse|>surinamaise|>syrienne|>sud-africaine|>sud-coréenne|>américaine|>tadjike|>tanzanienne|>tchadienne|>tchèque|>thaïlandaise|>togolaise|>tahitienne|>tunisiene|>turkmène|>turque|>taïwanaise|>ukrainienne|>uruguayenne|>vénézuélienne|>vietnamienne|>yéménite|>yougoslave|>zaïroise|>zambienne|>zimbabwéenne] <<- /maj/ \2.istitle() and morph(\1, ":N", ":(?:A|V0e|D|R|B)") -2:>> =\2.lower() # S’il s’agit d’un adjectif, ne mettez pas de majuscule. <<- /maj/ \2.islower() and not \2.startswith("canadienne") and ( value(\1, "|certains|certaines|ce|cet|cette|ces|des|les|nos|vos|leurs|quelques|plusieurs|chaque|une|aux|") or @@ -6598,11 +6598,11 @@ ne me [le|la|les] (rendez-vous) ne [lui|leur] en (rendez-vous) ne [le|la|les|lui|leur] (rendez-vous) [me|ne|nous|vous|lui] (rendez-vous) <<- =>> define(\1, [":VCi1:2p"]) - <<- ~1>> ! + <<- %1>> # [un|mon|ton|son|ce|mes|tes|ses|leurs] rendez-vous # rendez-vous seulement défini comme :N:m:i @@ -6614,11 +6614,11 @@ !! !! __m_enfin__ m’ enfin - <<- ~2>> ! + <<- %2>> <<- ~>> * __non_verbe_après_préverbes__ [ne|n’] [le|la|l’|les] [lui|leur|en|y] @:[NAQ]¬:(?:[123][sp]|Y|P|Oo|X) @@ -6682,11 +6682,11 @@ TEST: Ne presque jamais réussir un plat aussi simple, c’est de l’incompétence pure et simple. __loc_notre_père_qui_es_au_cieux__ notre père qui [es|est] aux cieux - <<- ~4>> ! + <<- %4>> <<- ~3:0>> * !! !! @@ -6696,43 +6696,43 @@ __tag_sujets__ [je|j’] [moi|moi-même] qui [moi|moi-même] [seul|seule] - <<- %>> 1s + <<- />> 1s tu t’ @:2s t’ [en|y] @:2s [toi|toi-même] ?,¿ qui [toi|toi-même] [seul|seule] - <<- %>> 2s + <<- />> 2s nous nous ?,¿ qui nous-même nous-mêmes nous [seul|seuls|seules] [et|ou] [moi|moi-même] ni [moi|moi-même] [moi|moi-même] et - <<- %>> 1p + <<- />> 1p vous vous ?,¿ qui vous-même vous-mêmes vous [seul|seule|seuls|seules] [et|ou] [toi|toi-même] ni [toi|toi-même] [toi|toi-même] et - <<- %>> 2p + <<- />> 2p __tag_prop_sub__ ce [que|qu’|qu] - <<- %>> ce_que + <<- />> ce_que ## Incohérences avec formes verbales 1sg et 2sg sans sujet __conj_xxxai__sans_sujet!3__ @@ -7374,11 +7374,11 @@ __purge_locutions_latines__ [a|à] [priori|postériori|posteriori|contrario|cappella|minima] <<- ~>> * - <<- ~1>> ! + <<- %1>> ab [absurdo|initio] ad [hoc|hominem|infinitum|nauseam|valorem|patres] ad vitam æternam ex [nihilo|cathedra|absurdo|abrupto] @@ -11714,11 +11714,11 @@ <<- /conf/ -2>> cours # Confusion. Locution “au cours de”. Une cour… Un cours… Adjectif : court(e). en cour martiale en cour [de|d’] [cassation|justice] en cour d’ [>assise] - <<- ~1:2>> ! + <<- %1:2>> en cour <<- /conf/ ->> en cours # Confusion probable. Une cour… Un cours… Adjectif : court(e). >couper [cour|cours|courre|courres|courts]