From d3f20a1e597555ac1141e696cb57035186972b0f Mon Sep 17 00:00:00 2001 From: Nicolas Froment Date: Tue, 3 Oct 2023 22:00:29 +0200 Subject: [PATCH] fix #1844: [FR] Fix support for 'ar-cf' template (#1849) --- scripts/scripts_utils.py | 2 +- wikidict/lang/fr/__init__.py | 6 +++++- wikidict/lang/fr/arabiser.py | 15 +++++++++------ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/scripts/scripts_utils.py b/scripts/scripts_utils.py index 131ae817f..69b87ba77 100644 --- a/scripts/scripts_utils.py +++ b/scripts/scripts_utils.py @@ -21,7 +21,7 @@ def get_content( retry += 1 except RequestException as err: resp = err.response - if resp.status_code == 404: + if resp and resp.status_code == 404: return "" wait_time = 1 if resp is not None and resp.status_code == 429: diff --git a/wikidict/lang/fr/__init__.py b/wikidict/lang/fr/__init__.py index cefd3463d..ce06d13be 100644 --- a/wikidict/lang/fr/__init__.py +++ b/wikidict/lang/fr/__init__.py @@ -1087,12 +1087,16 @@ def last_template_handler( f"ici, « {data['ici']} »" if data["ici"] else f"« {clean(racines_schemes_arabes[parts[1]][parts[0]])} »" + if parts[1] in racines_schemes_arabes + and parts[0] in racines_schemes_arabes[parts[1]] + else "" ) + sens = f"({sens})" if sens else "" return ( f'{w}' f" ({scheme})" - f" ({sens})" + f" {sens}" ) if tpl == "ar-mot": diff --git a/wikidict/lang/fr/arabiser.py b/wikidict/lang/fr/arabiser.py index bc2021607..9fc5a288f 100644 --- a/wikidict/lang/fr/arabiser.py +++ b/wikidict/lang/fr/arabiser.py @@ -2,8 +2,8 @@ Arabiser: manual conversion of Module:arabe from https://fr.wiktionary.org/wiki/Module:arabe -Current version: 3 janvier 2023 15:21 - https://fr.wiktionary.org/w/index.php?title=Module:arabe&oldid=31275068 +Current version: 25 août 2023 11:50 + https://fr.wiktionary.org/w/index.php?title=Module:arabe&oldid=32695780 """ import unicodedata @@ -529,7 +529,7 @@ def arabiser(texte: str) -> str: # pragma: no cover if apres == "'" or apres == "²": apres = texte[curseur + 2] - # derrière un i, support ya + # derrière un i, support ya sans point if avant == "i" or avant == "î" or avant == "I" or avant == "y": transcription += en_arabe["ì"] # derrière un waw, hamza en ligne @@ -919,7 +919,6 @@ def appliquer(scheme: str, racine: str, var: str = "") -> str: # pragma: no cov and racine[1] not in {"*", ".", "?"} # "lettres" bidon dans les modèles and position3 > -1 # si un petit malin propose un schème sans position 3 en redoublant la 2... - and scheme not in {"1a2aµũ", "1a2aµ@ũ"} # exception : doit rester intact. ): # on est dans un cas "sourd" position2 = scheme.find("2") @@ -929,7 +928,11 @@ def appliquer(scheme: str, racine: str, var: str = "") -> str: # pragma: no cov nature2 = nature(scheme, position2) # initiale d'une syllabe ouverte, donc 2 porte une voyelle courte et 3 une voyelle. - if nature2 == "io": + # contraction sur les verbes (var~=""), formes verbales, ou sur les noms (var=="") dont l'infixe n'est pas de la forme *v*v* (voyelle courte avant la deuxième radicale). # noqa + # le cas des noms n'est pas très clair, mais on constate que les **v* sont contractés, et certains *v*v* ne le sont pas, on suppose que ce qui apparaissent contractés sont des *v** d'origine (?) # noqa + if nature2 == "io" and ( + var != "" or var == "" and scheme[position2 - 1] not in "aiu" + ): if est_voyelle( scheme[position2 - 1] ): # ie, la première radicale est vocalisée @@ -989,7 +992,7 @@ def appliquer(scheme: str, racine: str, var: str = "") -> str: # pragma: no cov # Inversement, les verbes où la troisième radicale est redoublée dans le schème doivent se # conjuguer comme des sourds - # ie, si le schème contient un µµ ou un µ² il faut séparer les deux, et boucher le trou avec un "a". + # ie, si le schème contient un µµ ou un µ² devant une consonne il faut séparer les deux, et boucher le trou avec un "a" pour ne pas avoir trois consonnes d'affilée. # noqa if scheme.find("µµ") > -1 or scheme.find("µ²") > -1: scheme = sub(r"µ²", "µµ", scheme, count=1) # homogénéisation des cas position3 = scheme.find("µµ")