X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;ds=sidebyside;f=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Fsommaire_fonctions.php;fp=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Fsommaire_fonctions.php;h=ecd499274bfccc5da7eccf8c38a01d1559df7742;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hp=0000000000000000000000000000000000000000;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c;p=velocampus%2Fweb%2Fwww.git diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/outils/sommaire_fonctions.php b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/sommaire_fonctions.php new file mode 100644 index 0000000..ecd4992 --- /dev/null +++ b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/sommaire_fonctions.php @@ -0,0 +1,197 @@ + 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; + } +} +?> \ No newline at end of file