1

Ca serait bien de pouvoir préciser, lorsqu'on cite quelqu'un, que l'on souhaite éliminter les [ cite ] imbriqués d'un niveau d'imbrication supérieur à N. Surtout dans les longues discussions à coups de [cite] massifs justement.

L'idée serait un truc ressemblant à ça :
function killnested($text, $start, $stop, $level) {
	$result		= '';
	$nested		= 0;
	$nextstart	= strpos($text, $start);
	$nextstop	= strpos($text, $stop);
	$lastcut	= 0;

	while (($nextstart !== false) || ($nextstop !== false))
	{
		if (($nextstop === false) || (($nextstart !== false) && ($nextstart < $nextstop)))
		{
			if ($nested++ == $level)
				$result .= substr($text, $lastcut, $nextstart-$lastcut);
			$nextstart = strpos($text, $start, $nextstart+1);
		} else {
			if (--$nested == $level)
				$lastcut = $nextstop + strlen($stop);
			if ($nested < 0) $nested = 0;
			$nextstop  = strpos($text, $stop , $nextstop +1);
		}
	}

	if ($nested <= $level)
		$result .= substr($text, $lastcut);
	return $result;
}

Avec $text le texte du post, $start = '[cite]' $stop = '[/cite]' et $level précisé par l'utilisateur (0 vire toutes les citations, 1 garde le premier niveau d'imbrication, etc).

2

il doit s'agir de ta réponse à mon topic sur les getthos chics ?
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

3

C'est ce qui m'en a donné l'idée oué grin

4

c'est vrai que ce matin j'ai failli changer de couleur le texte original (je comptais faire un dégradé de gris) pour s'y retrouver
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

5

Tiens, j'ai des scripts vim qui peuvent aider dans ce cas-là (mais bon, c'est surtout pratique pour les gros posts parce qu'il faut faire des copier-coller entre vim et le navigateur) :
func! YnImport()
    set ff=unix " otherwise Perl will be confused
    %!perl -pe '$d++ while s/^\s*\[cite\]//;$d-- while s/^\s*\[\/cite\]//;$_=chr(62)x$d.($d?\" $_\":$_);$d++ while s/\[cite\]//;$d-- while s/\[\/cite\]//;s/\s*?$//'
    set ft=mail
    set tw=78
    norm! Ggqgg
endfunc
func! YnExport()
    set ft=mail
    set tw=9999
    norm! Ggqgg
    set ff=unix " otherwise Perl will be confused
    %!perl -e '$d=0;$pipe=chr 124;while(<> ){$z=0;$z=length$1 if s/^(>+)(?: $pipe$)//;$prev=~s/$/[\/cite]/,$d-- while $d>$z;print$prev if defined$prev;s/^/[cite]/,$d++ while $d<$z;$prev=$_}print$prev'
    set ft=text
endfunc
au FileType mail setlocal formatoptions+=aw ww+=h,l,<,>,[,] infercase


Par exemple :
[cite][b]spectras[/b] :
[cite][b]vince[/b] :
il doit s'agir de ta réponse à mon topic sur les getthos chics ?
[/cite]
C'est ce qui m'en a donné l'idée oué :D
[/cite]

Si tu fais ":call YnImport()", ça donne :
> [b]spectras[/b] :
>> [b]vince[/b] :
>> il doit s'agir de ta réponse à mon topic sur les getthos chics ?
>
> C'est ce qui m'en a donné l'idée oué :D

Tu peux virer les citations trop profondes en faisant par exemple ":g/^>>/d" :
> [b]spectras[/b] :
> C'est ce qui m'en a donné l'idée oué :D

Et après tu peux reconvertir au format Yn avec ":call YnExport()".

Si tu veux automatiser ça, tu peux très bien rajouter dans ton .vimrc :
no gy :call YnImport()<cr>:g/^>>/d<cr>:call YnExport()<cr>
et en tapant "gy", ça te fait la conversion tout seul smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)