function filtre_introduction($descriptif, $texte, $longueur, $connect) { include_spip('public/composer'); $texte = filtre_introduction_dist($descriptif, $texte, $longueur, $connect); if ($GLOBALS['toujours_paragrapher'] and strpos($texte, "</p>") === false) { $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']); } return $texte; }
function filtre_introduction_dist($descriptif, $texte, $longueur, $connect) { // Si un descriptif est envoye, on l'utilise directement if (strlen($descriptif)) { return propre($descriptif, $connect); } // De preference ce qui est marque <intro>...</intro> $intro = ''; $texte = preg_replace(",(</?)intro>,i", "\\1intro>", $texte); // minuscules while ($fin = strpos($texte, "</intro>")) { $zone = substr($texte, 0, $fin); $texte = substr($texte, $fin + strlen("</intro>")); if ($deb = strpos($zone, "<intro>") or substr($zone, 0, 7) == "<intro>") { $zone = substr($zone, $deb + 7); } $intro .= $zone; } // [12025] On ne *PEUT* pas couper simplement ici car c'est du texte brut, // qui inclus raccourcis et modeles // un simple <articlexx> peut etre ensuite transforme en 1000 lignes ... // par ailleurs le nettoyage des raccourcis ne tient pas compte // des surcharges et enrichissement de propre // couper doit se faire apres propre //$texte = nettoyer_raccourcis_typo($intro ? $intro : $texte, $connect); // Cependant pour des questions de perfs on coupe quand meme, en prenant // large et en se mefiant des tableaux #1323 if (strlen($intro)) { $texte = $intro; } else { if (strpos("\n" . $texte, "\n|") === false and strlen($texte) > 2.5 * $longueur) { if (strpos($texte, "<multi") !== false) { $texte = extraire_multi($texte); } $texte = couper($texte, 2 * $longueur); } } // ne pas tenir compte des notes if ($notes = charger_fonction('notes', 'inc', true)) { $notes('', 'empiler'); } // Supprimer les modèles avant le propre afin d'éviter qu'ils n'ajoutent du texte indésirable // dans l'introduction. $texte = supprime_img($texte, ''); $texte = propre($texte, $connect); if ($notes) { $notes('', 'depiler'); } if (!defined('_INTRODUCTION_SUITE')) { define('_INTRODUCTION_SUITE', ' (...)'); } $texte = couper($texte, $longueur, _INTRODUCTION_SUITE); // et reparagrapher si necessaire (coherence avec le cas descriptif) if ($GLOBALS['toujours_paragrapher']) { // Fermer les paragraphes $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']); } return $texte; }
function aligner($letexte, $justif='') { $letexte = trim($letexte); if (!strlen($letexte)) return ''; // Paragrapher proprement $letexte = paragrapher($letexte, true); // Inserer les alignements if ($justif) $letexte = str_replace( '<p class="spip">', '<p class="spip" align="'.$justif.'">', $letexte); return $letexte; }
function core_traiter_raccourcis($letexte) { // Appeler les fonctions de pre_traitement $letexte = pipeline('pre_propre', $letexte); // Gerer les notes (ne passe pas dans le pipeline) $notes = charger_fonction('notes', 'inc'); list($letexte, $mes_notes) = $notes($letexte); // // Tableaux // // ne pas oublier les tableaux au debut ou a la fin du texte $letexte = preg_replace(",^\n?[|],S", "\n\n|", $letexte); $letexte = preg_replace(",\n\n+[|],S", "\n\n\n\n|", $letexte); $letexte = preg_replace(",[|](\n\n+|\n?\$),S", "|\n\n\n\n", $letexte); if (preg_match_all(',[^|](\\n[|].*[|]\\n)[^|],UmsS', $letexte, $regs, PREG_SET_ORDER)) { foreach ($regs as $t) { $letexte = str_replace($t[1], traiter_tableau($t[1]), $letexte); } } $letexte = "\n" . trim($letexte); // les listes if (strpos($letexte, "\n-*") !== false or strpos($letexte, "\n-#") !== false) { $letexte = traiter_listes($letexte); } // Proteger les caracteres actifs a l'interieur des tags html if (preg_match_all(_RACCOURCI_BALISE, $letexte, $regs, PREG_SET_ORDER)) { foreach ($regs as $reg) { $insert = strtr($reg[0], _RACCOURCI_PROTEGER, _RACCOURCI_PROTECTEUR); $letexte = str_replace($reg[0], $insert, $letexte); } } // Traitement des alineas list($a, $b) = definir_raccourcis_alineas(); $letexte = preg_replace($a, $b, $letexte); // Introduction des attributs class_spip* et autres raccourcis list($a, $b) = $GLOBALS['spip_raccourcis_typo']; $letexte = preg_replace($a, $b, $letexte); $letexte = preg_replace('@^\\n<br />@S', '', $letexte); // Retablir les caracteres proteges $letexte = strtr($letexte, _RACCOURCI_PROTECTEUR, _RACCOURCI_PROTEGER); // Fermer les paragraphes ; mais ne pas forcement en creer si un seul $letexte = paragrapher($letexte, $GLOBALS['toujours_paragrapher']); // Appeler les fonctions de post-traitement $letexte = pipeline('post_propre', $letexte); if ($mes_notes) { $notes($mes_notes); } return $letexte; }
function typoenluminee_post_propre($texte) { static $cherche1 = NULL; static $remplace1 = NULL; if ($cherche1===NULL) { # Le remplacement des intertitres de premier niveau a deja ete effectue dans inc/texte.php $cherche1 = array(); $remplace1 = array(); global $BarreTypoEnrichieBlocs; if (is_array($BarreTypoEnrichieBlocs)) foreach($BarreTypoEnrichieBlocs as $item) { $cherche1[]=$item['chercher']; $remplace1[]=$item['remplacer']; } $cherche1[] = /* 15 */ ",\[/(.*)/\],Ums"; $cherche1[] = /* 17 */ ",\[\|(.*)\|\],Ums"; $cherche1[] = /* 19 */ ",\[\((.*)\)\],Ums"; $cherche1[] = /* 21 */ "/\[\*\*/S"; $cherche1[] = /* 21b */ "/\[\*/S"; $cherche1[] = /* 22 */ "/\*\]/S"; $cherche1[] = /* 23 */ "/\[\^/S"; $cherche1[] = /* 24 */ "/\^\]/S"; $remplace1[] = /* 15 */ "<div class=\"spip\" style=\"text-align:right;\">$1</div>"; $remplace1[] = /* 17 */ "<div class=\"spip\" style=\"text-align:center;\">$1</div>"; $remplace1[] = /* 19 */ "<div class=\"texteencadre-spip spip\">$1</div>"; $remplace1[] = /* 21 */ "<strong class=\"caractencadre2-spip spip\">"; $remplace1[] = /* 21b */ "<strong class=\"caractencadre-spip spip\">"; $remplace1[] = /* 22 */ "</strong>"; $remplace1[] = /* 23 */ "<sup>"; $remplace1[] = /* 24 */ "</sup>"; $remplace1[] = /* 25 */ "<sub>"; $remplace1[] = /* 26 */ "</sub>"; } $texte = preg_replace($cherche1, $remplace1, $texte); $texte = paragrapher($texte,$GLOBALS['toujours_paragrapher']); // il faut reparagrapher a cause des raccourcis typo que l'on a ajoute (block div) return $texte; }