]*>|[^>])*?)?' # |arguments (y compris des tags <...>)
. '\s*/?' . '>)' # fin du modele >
. '\s*(<\/a>)?' # eventuel
);
define('_RACCOURCI_MODELE_DEBUT', '@^' . _RACCOURCI_MODELE . '@isS');
// http://code.spip.net/@traiter_modeles
function traiter_modeles($texte, $doublons = false, $echap = '', $connect = '', $liens = null, $env = array()) {
// preserver la compatibilite : true = recherche des documents
if ($doublons === true) {
$doublons = array('documents' => array('doc', 'emb', 'img'));
}
// detecter les modeles (rapide)
if (strpos($texte, "<") !== false and
preg_match_all('/<[a-z_-]{3,}\s*[0-9|]+/iS', $texte, $matches, PREG_SET_ORDER)
) {
include_spip('public/assembler');
$wrap_embed_html = charger_fonction("wrap_embed_html", "inc", true);
foreach ($matches as $match) {
// Recuperer l'appel complet (y compris un eventuel lien)
$a = strpos($texte, $match[0]);
preg_match(_RACCOURCI_MODELE_DEBUT,
substr($texte, $a), $regs);
$regs[] = ""; // s'assurer qu'il y a toujours un 5e arg, eventuellement vide
list(, $mod, $type, $id, $params, $fin) = $regs;
if ($fin and
preg_match('/]*>\s*$/i',
substr($texte, 0, $a), $r)
) {
$lien = array(
'href' => extraire_attribut($r[0], 'href'),
'class' => extraire_attribut($r[0], 'class'),
'mime' => extraire_attribut($r[0], 'type'),
'title' => extraire_attribut($r[0], 'title'),
'hreflang' => extraire_attribut($r[0], 'hreflang')
);
$n = strlen($r[0]);
$a -= $n;
$cherche = $n + strlen($regs[0]);
} else {
$lien = false;
$cherche = strlen($mod);
}
// calculer le modele
# hack indexation
if ($doublons) {
$texte .= preg_replace(',[|][^|=]*,s', ' ', $params);
} # version normale
else {
// si un tableau de liens a ete passe, reinjecter le contenu d'origine
// dans les parametres, plutot que les liens echappes
if (!is_null($liens)) {
$params = str_replace($liens[0], $liens[1], $params);
}
$modele = inclure_modele($type, $id, $params, $lien, $connect, $env);
// en cas d'echec,
// si l'objet demande a une url,
// creer un petit encadre vers elle
if ($modele === false) {
if (!$lien) {
$lien = traiter_lien_implicite("$type$id", '', 'tout', $connect);
}
if ($lien) {
$modele = ''
. sinon($lien['titre'], _T('ecrire:info_sans_titre'))
. "";
} else {
$modele = "";
if (test_espace_prive()) {
$modele = entites_html(substr($texte, $a, $cherche));
if (!is_null($liens)) {
$modele = "" . str_replace($liens[0], $liens[1], $modele) . "
";
}
}
}
}
// le remplacer dans le texte
if ($modele !== false) {
$modele = protege_js_modeles($modele);
if ($wrap_embed_html) {
$modele = $wrap_embed_html($mod, $modele);
}
$rempl = code_echappement($modele, $echap);
$texte = substr($texte, 0, $a)
. $rempl
. substr($texte, $a + $cherche);
}
}
// hack pour tout l'espace prive
if (((!_DIR_RESTREINT) or ($doublons)) and ($id)) {
foreach ($doublons ? $doublons : array('documents' => array('doc', 'emb', 'img')) as $quoi => $modeles) {
if (in_array($type, $modeles)) {
$GLOBALS["doublons_{$quoi}_inclus"][] = $id;
}
}
}
}
}
return $texte;
}
//
// Raccourcis ancre [#ancre<-]
//
// http://code.spip.net/@traiter_raccourci_ancre
function traiter_raccourci_ancre($letexte) {
return $letexte;
}
// http://code.spip.net/@traiter_raccourci_glossaire
function traiter_raccourci_glossaire($texte) {
return $texte;
}
// http://code.spip.net/@glossaire_std
function glossaire_std($terme) {
return $terme;
}