Newer
Older
// dans le texte, mettre l'appel de note a la place de la note
$pos = strpos($letexte, $note_source);
$letexte = substr($letexte, 0, $pos) . $insert
. substr($letexte, $pos + strlen($note_source));
// Raccourcis automatiques [?SPIP] vers un glossaire
// (on traite ce raccourci en deux temps afin de ne pas appliquer
// la typo sur les URLs, voir raccourcis liens ci-dessous)
//
if ($url_glossaire_externe) {
$regexp = "|\[\?+([^][<>]+)\]|";
if (preg_match_all($regexp, $letexte, $matches, PREG_SET_ORDER))
foreach ($matches as $regs) {
$terme_underscore = urlencode(preg_replace(',\s+,', '_', $terme));
$url = str_replace("%s", $terme_underscore, $url_glossaire_externe);
else
$url = $url_glossaire_externe.$terme_underscore;
$url = str_replace("@lang@", $GLOBALS['spip_lang'], $url);
// Eviter les cas particulier genre "[?!?]"
if (preg_match(',[a-z],i', $terme))
$letexte = str_replace($regs[0], $code, $letexte);
//
// Raccourcis liens [xxx->url] (cf. fonction extraire_lien ci-dessus)
// Note : complique car c'est ici qu'on applique typo() !
$inserts = array();
if (preg_match_all($regexp, $letexte, $matches, PREG_SET_ORDER)) {
$i = 0;
foreach ($matches as $regs) {
list($insert) = extraire_lien($regs);
$inserts[++$i] = $insert;
$letexte = str_replace($regs[0], "@@SPIP_ECHAPPE_LIEN_$i@@", $letexte);
}
}
$letexte = typo($letexte, /* echap deja fait, accelerer */ false);
foreach ($inserts as $i => $insert) {
$letexte = str_replace("@@SPIP_ECHAPPE_LIEN_$i@@", $insert, $letexte);
// ne pas oublier les tableaux au debut ou a la fin du texte
$letexte = preg_replace(",^\n?[|],", "\n\n|", $letexte);
$letexte = preg_replace(",\n\n+[|],", "\n\n\n\n|", $letexte);
$letexte = preg_replace(",[|](\n\n+|\n?$),", "|\n\n\n\n", $letexte);
// traiter chaque tableau
if (preg_match_all(',[^|](\n[|].*[|]\n)[^|],Ums', $letexte,
$regs, PREG_SET_ORDER))
foreach ($regs as $tab) {
$letexte = str_replace($tab[1], traiter_tableau($tab[1]), $letexte);
//
// Ensemble de remplacements implementant le systeme de mise
// en forme (paragraphes, raccourcis...)
//
$letexte = traiter_listes($letexte);
// autres raccourcis
$cherche1 = array(
/* 0 */ "/\n(----+|____+)/",
/* 1 */ "/\n-- */",
/* 2 */ "/\n- */",
/* 3 */ "/\n_ +/",
/* 4 */ "/[{][{][{]/",
/* 5 */ "/[}][}][}]/",
/* 6 */ "/(( *)\n){2,}(<br[[:space:]]*\/?".">)?/",
/* 7 */ "/[{][{]/",
/* 8 */ "/[}][}]/",
/* 9 */ "/[{]/",
/* 10 */ "/[}]/",
/* 11 */ "/(<br[[:space:]]*\/?".">){2,}/",
/* 12 */ "/<p>([\n]*(<br[[:space:]]*\/?".">)*)*/",
/* 13 */ "/<quote>/",
/* 14 */ "/<\/quote>/"
/* 0 */ "\n\n$ligne_horizontale\n\n",
/* 1 */ "\n<br />— ",
/* 2 */ "\n<br />$puce ",
/* 3 */ "\n<br />",
/* 4 */ "\n\n$debut_intertitre",
/* 5 */ "$fin_intertitre\n\n",
/* 7 */ "<strong class=\"spip\">",
/* 8 */ "</strong>",
/* 9 */ "<i class=\"spip\">",
/* 10 */ "</i>",
/* 11 */ "<p>",
/* 12 */ "<p>",
/* 13 */ "<blockquote class=\"spip\"><p>",
/* 14 */ "</blockquote><p>"
);
$letexte = preg_replace($cherche1, $remplace1, $letexte);
$letexte = preg_replace("@^ <br />@", "", $letexte);
// Fermer les paragraphes
$letexte = paragrapher($letexte);
// Appeler les fonctions de post-traitement
$letexte = pipeline('post_propre', $letexte);
// old style
if (function_exists('apres_propre'))
$letexte = apres_propre($letexte);
if ($mes_notes) traiter_les_notes($mes_notes);
return $letexte;
esj
a validé
}
function traiter_les_notes($mes_notes) {
$mes_notes = propre('<p>'.$mes_notes);
$mes_notes = str_replace(
'<p class="spip">', '<p class="spip_note">', $mes_notes);
$GLOBALS['les_notes'] .= $mes_notes;
esj
a validé
}
// Filtre a appliquer aux champs du type #TEXTE*
function propre($letexte) {
// Echapper les <a href>, <html>...< /html>, <code>...< /code>
$letexte = echappe_html($letexte);
// Traiter le texte
$letexte = traiter_raccourcis($letexte);
// Reinserer les echappements
$letexte = echappe_retour($letexte);
// Vider les espaces superflus
$letexte = trim($letexte);
// Dans l'espace prive, securiser ici
if (!_DIR_RESTREINT)
$letexte = interdire_scripts($letexte);