]*>|[^>])*?)?' # |arguments (y compris des tags <...>)
.'\s*/?'.'>)' # fin du modele >
.'\s*(<\/a>)?' # eventuel
);
define('_RACCOURCI_MODELE_DEBUT', '@^' . _RACCOURCI_MODELE .'@isS');
// http://doc.spip.org/@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');
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')
);
$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);
$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://doc.spip.org/@traiter_raccourci_ancre
function traiter_raccourci_ancre($letexte)
{
return $letexte;
}
// http://doc.spip.org/@traiter_raccourci_glossaire
function traiter_raccourci_glossaire($texte)
{
return $texte;
}
// http://doc.spip.org/@glossaire_std
function glossaire_std($terme)
{
return $terme;
}
?>