Filtre pour balise `<svg>` inline ou `<img>` si pixel suivant le type

SPIP fournit des filtres balise_img pour… une balise <img> (toute image) ou balise_svg spécifiquement pour insérer un SVG inline.

Sauf que de très (très) nombreuses images sont dynamiques, fournie par le contenu, et on ne devrait pas avoir à faire des tests partout dans les squelettes, quand on veut que les SVG soient bien inline, mais les autres en <img> et qu'on ne sait pas d'avance le type.

SPIP devrait donc sûrement proposer aussi un filtre qui fait un mix des deux, tout simplement en appelant ce qui existe :

/**
 * Génère une balise HTML `img` ou `svg` suivant le nom du fichier.
 * 
 * @uses filtre_balise_img_dist()
 * @uses filte_balise_svg_dist()
 * 
 * @param string $src
 * @param string $alt
 * @param string $class
 * @return string
 */
function filtre_balise_img_svg($src, $alt='', $class='') {
	include_spip('inc/filtres');

	$balise = '';

	// Récupérer le chemin si c'est déjà un tag <img>
	if (substr(trim($src), 0, 4) === '<img') {
		$src = extraire_attribut($src, 'src');
	}

	// Retrouver l'extension
	$src = supprimer_timestamp($src);
	$extension = pathinfo($src, PATHINFO_EXTENSION);

	// Si c'est un svg, on embed
	if ($extension === 'svg') {
		$balise = filtrer('balise_svg', $src, $alt, $class);
	// Sinon, balise_img si pas déjà le cas
	} else {
		$balise = filtrer('balise_img', $src, $alt, $class);
	}

	return $balise;
}

Utilisable alors lisiblement dans les squelettes sans casse-tête

[(#LOGO_PATATE|balise_img_svg{'Ceci n’est pas une patate.', 'frite'})]
Modification effectuée par marcimat