";
}
$ajout .= "";
$pile_li[$profond] = "";
}
else {
$ajout = "\n-"; // puce normale ou
}
$texte .= $ajout . $regs[2];
}
// retour sur terre
unset ($ajout);
while ($niveau > 0) {
$ajout .= $pile_li[$niveau];
$ajout .= $pile_type[$niveau];
$niveau --;
}
$texte .= $ajout;
// paragraphe
$texte .= "\n\n";
}
// sucrer les deux derniers \n
return substr($texte, 0, -2);
}
// Nettoie un texte, traite les raccourcis spip, la typo, etc.
function traiter_raccourcis_generale($letexte) {
global $debut_intertitre, $fin_intertitre, $ligne_horizontale, $url_glossaire_externe;
global $compt_note;
global $marqueur_notes;
global $ouvre_ref;
global $ferme_ref;
global $ouvre_note;
global $ferme_note;
global $lang_dir;
// Appeler la fonction de pre_traitement
$letexte = spip_avant_propre ($letexte);
// Puce
if (!$lang_dir) {
include_ecrire('inc_lang.php3');
$lang_dir = lang_dir($GLOBALS['spip_lang']);
}
if ($lang_dir == 'rtl' AND $GLOBALS['puce_rtl'])
$puce = $GLOBALS['puce_rtl'];
else
$puce = $GLOBALS['puce'];
// Harmoniser les retours chariot
$letexte = preg_replace(",\r\n?,", "\n", $letexte);
// Corriger HTML
$letexte = preg_replace(",?p>,i", "\n\n\n", $letexte);
//
// Notes de bas de page
//
$regexp = ',\[\[(.*?)\]\],ms';
if (preg_match_all($regexp, $letexte, $matches, PREG_SET_ORDER))
foreach ($matches as $regs) {
$note_source = $regs[0];
$note_texte = $regs[1];
$num_note = false;
// note auto ou pas ?
if (preg_match(",^ *<([^>]*)>,", $note_texte, $regs)){
$num_note = $regs[1];
$note_texte = str_replace($regs[0], "", $note_texte);
} else {
$compt_note++;
$num_note = $compt_note;
}
// preparer la note
if ($num_note) {
if ($marqueur_notes) // quand il y a plusieurs series
// de notes sur une meme page
$mn = $marqueur_notes.'-';
$ancre = $mn.urlencode($num_note);
// creer le popup 'title' sur l'appel de note
if ($title = supprimer_tags(propre($note_texte))) {
$title = $ouvre_note.$ancre.$ferme_note.$title;
$title = ' title="'
. texte_backend(couper($title,80)).'"';
}
$insert = "$ouvre_ref$num_note$ferme_ref";
$appel = "$ouvre_note$num_note$ferme_note";
} else {
$insert = '';
$appel = '';
}
// l'ajouter "brut" dans les notes
if ($note_texte) {
if ($mes_notes)
$mes_notes .= "\n\n";
$mes_notes .= $appel . $note_texte;
}
// 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 = trim($regs[1]);
$terme_underscore = urlencode(preg_replace(',\s+,', '_', $terme));
if (strstr($url_glossaire_externe,"%s"))
$url = str_replace("%s", $terme_underscore, $url_glossaire_externe);
else
$url = $url_glossaire_externe.$terme_underscore;
$url = str_replace("@lang@", $GLOBALS['spip_lang'], $url);
$code = '['.$terme.'->?'.$url.']';
$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 la typo() !
//
$regexp = "|\[([^][]*)->(>?)([^]]*)\]|ms";
$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$i@@", $letexte);
}
}
$letexte = typo($letexte);
foreach ($inserts as $i => $insert) {
$letexte = str_replace("@@SPIP_ECHAPPE$i@@", $insert, $letexte);
}
//
// Tableaux
//
$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);
if (preg_match_all(',\n\n[|].*[|]\n\n,Ums', $letexte,
$regs, PREG_SET_ORDER))
foreach ($regs as $tab) {
$letexte = str_replace($tab[0], traiter_tableau($tab[0]), $letexte);
}
//
// Ensemble de remplacements implementant le systeme de mise
// en forme (paragraphes, raccourcis...)
//
$letexte = "\n".trim($letexte);
// les listes
if (ereg("\n-[*#]", $letexte))
$letexte = traiter_listes($letexte);
// autres raccourcis
$cherche1 = array(
/* 0 */ "/\n(----+|____+)/",
/* 1 */ "/\n-- */",
/* 2 */ "/\n- */",
/* 3 */ "/\n_ +/",
/* 4 */ "/[{][{][{]/",
/* 5 */ "/[}][}][}]/",
/* 6 */ "/(( *)\n){2,}(
)?/",
/* 7 */ "/[{][{]/",
/* 8 */ "/[}][}]/",
/* 9 */ "/[{]/",
/* 10 */ "/[}]/",
/* 11 */ "/(
){2,}/",
/* 12 */ "/([\n]*)(
)+/",
/* 13 */ "/
/",
/* 14 "/\n/", */
/* 15 */ "//",
/* 16 */ "/<\/quote>/"
);
$remplace1 = array(
/* 0 */ "\n\n@@SPIP_ligne_horizontale@@\n\n",
/* 1 */ "\n
— ",
/* 2 */ "\n
$puce ",
/* 3 */ "\n
",
/* 4 */ "\n\n@@SPIP_debut_intertitre@@",
/* 5 */ "@@SPIP_fin_intertitre@@\n\n",
/* 6 */ "",
/* 7 */ "",
/* 8 */ "",
/* 9 */ "",
/* 10 */ "",
/* 11 */ "
",
/* 12 */ "
",
/* 13 */ "
",
/* 14 " ", */
/* 15 */ "\n\n
",
/* 16 */ "
\n\n"
);
$letexte = preg_replace($cherche1, $remplace1, $letexte);
$letexte = preg_replace("@^
@", "", $letexte);
// paragrapher
if (strpos(' '.$letexte, '')) # ce test est destine a disparaitre, avec un impact sur les textes a un seul paragraphe
{
$letexte = '
'.str_replace('
', "
\n".'', $letexte).'
';
}
$letexte = preg_replace(',()?\s*(
)?\s*
,ims', '\2', $letexte);
$letexte = preg_replace(',