est utilise include_spip('outils/sommaire'); $root = $niveau = $match = sommaire_niveau_intertitres(); @define('_sommaire_NB_CARACTERES', 30); @define('_sommaire_PROFONDEUR', 1); if(_sommaire_PROFONDEUR>1) $match = $match .'-' . ($match+_sommaire_PROFONDEUR-1); // traitement des intertitres preg_match_all(",(]*)>(.*),Umsi", $texte, $regs); $nbh3 += count($regs[0]); $pos = 0; $sommaire = ''; // calcul de la page $suffixe = $page?_T('couteau:sommaire_page', array('page'=>$page)):''; $fct_lien_retour = function_exists('sommaire_lien_retour')?'sommaire_lien_retour':'sommaire_lien_retour_dist'; $fct_id_ancre = defined('_sommaire_JOLIES_ANCRES')?'sommaire_id_ancre_ex' :(function_exists('sommaire_id_ancre')?'sommaire_id_ancre':'sommaire_id_ancre_dist'); $nb = count($regs[0]); for($i=0;$i<$nb;$i++,$index++){ $w = &$regs[0][$i]; $h = &$regs[1][$i]; $n = &$regs[2][$i]; if (($pos2 = strpos($texte, $w, $pos))!==false) { $t = $regs[3][$i]; // calcul de l'ancre, $t peut etre modifie $ancre = $fct_id_ancre($index, $t, $n); $id = " id=\"$ancre\">"; //$titre = preg_replace(',^]*>(.*)

$,Umsi', '\\1', trim($t)); // ancre 'retour au sommaire', sauf : // si on imprime, ou si les blocs depliables utilisent h{$n}... $titre = (defined('_CS_PRINT') OR (strpos($w, 'blocs_titre')!==false)) ?$t//$titre :$fct_lien_retour($self, $t);//$titre); $texte = substr($texte, 0, $pos2) . $h . $id . $titre . substr($texte, $pos2 + strlen($h)+1 + strlen($regs[3][$i])); $pos = $pos2 + strlen($id) + strlen($w); $brut = sommaire_nettoyer_titre($t); // pas trop long quand meme... $lien = cs_propre(couper($brut, _sommaire_NB_CARACTERES)); // eviter une ponctuation a la fin, surtout si la page est precisee $lien = preg_replace('/( |\s)*'.($page?'[!?,;.:]+$/':'[,;.:]+$/'), '', $lien); $titre = attribut_html(couper($brut, 100)); // si la decoupe en page est active... $artpage = (function_exists('decoupe_url') && (strlen(_request('artpage')) || $page>1) ) ?decoupe_url($self, $page, $num_pages):$self; $artpage = "\n
  • $lien$suffixe"; if($niveau==$n) $sommaire .= ($sommaire?'
  • ':'').$artpage; elseif($niveau<$n) $sommaire .= "\n
      ".$artpage; else $sommaire .= '
    '.$artpage; $niveau = $n; } } return $sommaire?$sommaire.''.($niveau!=$root?'':''):''; } function sommaire_nettoyer_titre($t) { // pas de notes $brut = preg_replace(',\[\],','', echappe_retour($t,'CS')); // pas de glossaire if(function_exists('cs_retire_glossaire')) $brut = cs_retire_glossaire($brut); // texte brut $brut2 = trim(preg_replace(',[\n\r]+,',' ',textebrut($brut))); // cas des intertitres en image_typo if(!strlen($brut2)) $brut2 = trim(extraire_attribut($brut, 'alt')); return $brut2; } /* Fonction surchargeable qui reconstruit les titres de la page en ajoutant une ancre de retour au sommaire. La fonction de surcharge a placer dans config/mes_options.php est : sommaire_lien_retour($self, $titre) Exemple sans lien de retour : function sommaire_lien_retour($self, $titre) { return $titre; } */ function sommaire_lien_retour_dist($self, $titre) { static $haut = NULL; if(!isset($haut)) $haut = ' '; return $haut . $titre; } /* Fonction surchargeable qui calcule l'ancre d'un intertitre La fonction de surcharge a placer dans config/mes_options.php est : sommaire_id_ancre($index, &$titre, $hn) $titre peut etre modifie par cette fonction : utile pour traiter le format {{{Mon titre}}} */ function sommaire_id_ancre_dist($index, &$titre, $hn) { return 'outil_sommaire_'.$index; } // Surcharge compatible avec les intertitres en image : jolies ancres function sommaire_id_ancre_ex($index, &$titre, $hn) { // traiter le format {{{Mon titre}}} (ou alt='Mon titre<mon_ancre>') if(preg_match(',<(\w+)>$,', $titre, $r) || preg_match(',<(\w+)>(?=\'),', $titre, $r)) { $titre = str_replace($r[0], '', $titre); return $r[1]; } // calculer les ancres d'apres le titre $a = strtolower(translitteration(sommaire_nettoyer_titre($titre))); $a = trim(preg_replace(',[^a-z0-9_]+,', '_', $a), '_'); return strlen($a)>2?$a:"sommaire_$index"; } // fonction appellee sur les parties du textes non comprises entre les balises : html|code|cadre|frame|script|acronym|cite function sommaire_d_article_rempl($texte0, $sommaire_seul=false) { // pour sommaire_nettoyer_raccourcis() include_spip('outils/sommaire'); // si le sommaire est malvenu ou s'il n'y a pas de balise , alors on laisse tomber $inserer_sommaire = defined('_sommaire_AUTOMATIQUE') ?strpos($texte0, _CS_SANS_SOMMAIRE)===false :strpos($texte0, _CS_AVEC_SOMMAIRE)!==false; if (!$inserer_sommaire || strpos($texte0, 'interdire_scripts = true; return $p; } } ?>