@@ -198,10 +198,31 @@ if bMemorizeMorph: dToken["lMorph"] = lMorph else: lMorph = _oSpellChecker.getMorph(dToken["sValue"]) if not lMorph: + return False + # check negative condition + if sNegPattern: + if sNegPattern == "*": + # all morph must match sPattern + zPattern = re.compile(sPattern) + return all(zPattern.search(sMorph) for sMorph in lMorph) + zNegPattern = re.compile(sNegPattern) + if any(zNegPattern.search(sMorph) for sMorph in lMorph): + return False + # search sPattern + zPattern = re.compile(sPattern) + return any(zPattern.search(sMorph) for sMorph in lMorph) + + +def g_morphx (dToken, sPattern, sNegPattern): + "analyse a multi-token, return True if not in morphologies and in morphologies" + if not "dMultiToken" in dToken: + return False + lMorph = dToken["dMultiToken"]["lMorph"] + if not lMorph: return False # check negative condition if sNegPattern: if sNegPattern == "*": # all morph must match sPattern