Browse Source

refactor: utiliser le Spip\Texte\CollecteurMultis pour extraire les trads multis des xml + _RACCOURCI_LIEN qui ne sert plus que la

pull/4865/head
Cerdic 4 months ago
parent
commit
073c08b297
  1. 75
      plugins/preparer_sql_plugin.php

75
plugins/preparer_sql_plugin.php

@ -116,56 +116,6 @@ function plugins_preparer_sql_plugin($plugin) {
return $champs;
}
/**
* Normalise un nom issu d'un plugin.xml
*
* @todo Supprimer cette fonction qui ne sert nulle part ?
*
* @uses extraire_trads()
*
* @param string $nom
* Le nom
* @param string $langue
* La langue à extraire
* @param bool $supprimer_numero
* Supprimer les numéros ?
* @return string
* Le nom
**/
function normaliser_nom($nom, $langue = '', $supprimer_numero = true) {
include_spip('inc/texte');
// On extrait les traductions de l'eventuel multi
// Si le nom n'est pas un multi alors le tableau renvoye est de la forme '' => 'nom'
$noms = extraire_trads(str_replace(['<multi>', '</multi>'], [], $nom, $nbr_replace));
$multi = ($nbr_replace > 0 and !$langue) ? true : false;
$nouveau_nom = '';
foreach ($noms as $_lang => $_nom) {
$_nom = trim($_nom);
if (!$_lang) {
$_lang = _LANGUE_PAR_DEFAUT;
}
if ($supprimer_numero) {
$nbr_matches = preg_match(',(.+)(\s+[\d._]*)$,Um', $_nom, $matches);
} else {
$nbr_matches = 0;
}
if (!$langue or $langue == $_lang or (is_countable($noms) ? count($noms) : 0) == 1) {
$nouveau_nom .= (($multi) ? '[' . $_lang . ']' : '') .
(($nbr_matches > 0) ? trim($matches[1]) : $_nom);
}
}
if ($nouveau_nom) { // On renvoie un nouveau nom multi ou pas sans la valeur de la branche
$nouveau_nom = (($multi) ? '<multi>' : '') . $nouveau_nom . (($multi) ? '</multi>' : '');
}
return $nouveau_nom;
}
/**
* Normalise un lien issu d'un plugin.xml
*
@ -209,6 +159,15 @@ function normaliser_auteur_licence($texte, $balise) {
include_spip('inc/lien');
include_spip('inc/svp_outiller');
// Regexp des raccourcis, aussi utilisee pour la fusion de sauvegarde Spip
// Laisser passer des paires de crochets pour la balise multi
// mais refuser plus d'imbrications ou de mauvaises imbrications
// sinon les crochets ne peuvent plus servir qu'a ce type de raccourci
// @deprecated
defined('_RACCOURCI_LIEN') || define('_RACCOURCI_LIEN', '/\[([^][]*?([[][^]>-]*[]][^][]*)*)->(>?)([^]]*)\]/msS');
// On extrait le multi si besoin et on selectionne la traduction francaise
$t = normaliser_multi($texte);
@ -294,24 +253,28 @@ function normaliser_auteur_licence($texte, $balise) {
/**
* Expanse les multi en un tableau de textes complets, un par langue
*
* @uses _EXTRAIRE_MULTI
* @param string $texte
* Le texte
* @return array
* Texte expansé par code de langue : couples (code de langue => texte)
*/
function normaliser_multi($texte) {
include_spip('inc/filtres');
if (!preg_match_all(_EXTRAIRE_MULTI, $texte, $regs, PREG_SET_ORDER)) {
include_spip("src/Texte/Utils/Collecteur");
include_spip("src/Texte/CollecteurMultis");
$collecteurMultis = new Spip\Texte\CollecteurMultis();
$multis = $collecteurMultis->collecter($texte);
if (!$multis) {
return [_LANGUE_PAR_DEFAUT => $texte];
}
$trads = [];
foreach ($regs as $reg) {
foreach (extraire_trads($reg[1]) as $k => $v) {
foreach ($multis as $multi) {
foreach ($multi['trads'] as $k => $v) {
// Si le code de langue n'est pas précisé dans le multi c'est donc la langue par défaut
$lang = $k ?: _LANGUE_PAR_DEFAUT;
$trads[$lang] = str_replace($reg[0], $v, $trads[$k] ?? $texte);
$trads[$lang] = str_replace($multi['raw'], $v, $trads[$lang] ?? $texte);
}
}

Loading…
Cancel
Save