]*?id="rellecuerpo"[^<]*?>.*|s', // parto de que rellecuerpo es obligatorio
),
array('','',),$b),
$m);
$ma=array('c' => $m); // cuerpo
preg_match_all("|
]*?id="rellecuerpo"[^<]*?>|s','',$b),$m); // dejo a partir de rellecuerpo
$ma['l']=$m; // listas
$b=$b1; // recupero el buffer por si modificado por eval, comens, etc
$ac='0'; $ids=array();
$toc=""; $pad='';
// los hx del cuerpo serán class=toc y los del final toc_nc que normalmente no se displayará
foreach ($ma as $ty => $m) {
foreach($m[0] as $i => $h) {
//quita cambios de linea y espacios repe, quita los name=_t, quita los ^
$n2=preg_replace('+
]*?name="_t[^>]*?"> *+','',
preg_replace('/\s+/',' ',
preg_replace('+
]*>\^+','%%\1',$m[3][$i])));
// quita los posibles links que tenga y los name=.
$n=preg_replace('+
]*?href=[^>]*?>(.*?)+','\1',
preg_replace('+
]*?name="[^>]*?"> *+','',
preg_replace('+ *%%a?+','',$n2)));
if ($n == '')
continue;
// saca el id para el href
$id=preg_replace('/ /','',
preg_replace('+([^ ][^ ][^ ]).*?( |\\n|$)+','\1',
preg_replace('/[^ a-zA-Z0-9]/','',
preg_replace('+<[^>]*>+','',$n))));
while (!(array_search($id,$ids) === false))
$id.='bis';
$cc=$m[1][$i];
$ids[]=$id;
$aids[$cc]=$id;
if ($entoc=!preg_match('/class="?notoc"?/',$m[2][$i])) {
if ($ty == 'c')
$clas="class=\"toc_$cc\"";
else
$clas="class=\"toc_nc\"";
if ($cc == $ac)
$toc.="$pad
";
else {
if ($cc > $ac) {
$pad=str_repeat(' ',$cc-$mh);
$toc.="$pad\n$pad- ";
}
else {
for (; $cc <$ac; $ac--) {
$toc.="$pad
\n";
$pad=str_repeat(' ',$ac-$mh-1);
}
$toc.="$pad";
}
$iac=$ac=$cc;
}
}
$n2=preg_replace('+ *%%a+'," ^",$n2);
$n3=preg_replace('+ *%%+'," ^",$n2);
if ($entoc) {
if ($n3 != $n2)
$tg="";
else
$tg='';
$toc.="$tg$n\n";
}
// porque no gasto un str_replace?
$b=preg_replace('+'.preg_quote($h).'+',"
$n3",$b,1);
}
}
// cierra las listas abiertas
for ($cc=$mh; $cc <=$ac; $cc ++) {
$toc.="$pad\n";
$pad=@str_repeat(' ',$cc-$mh-1);
}
// saco el sangrado del div
preg_match('|( *)
]*?id="?tabcont"?|s',$b,$m);
// lo pongo
$toc=preg_replace('|\n|',"\n".$m[1],$toc);
// pongo el toc, por que dos replaces?
$b=preg_replace('%(
]*?id="?tabcont"?[^>]*?>.*?)(
)%s','\1'.$toc.'\2',
/*
este replace es el que produce el cargarse una lista de otro sitio, se arregla haciendo al principio:
if (preg_match('%
]*?id="?tabcont"?[^>]*?>.*?
%s',$b,$m) and
preg_match('%
.*
%s',$m[0])) { hacer lo del tabcont, cerrar antes de las notas
*/
preg_replace('%(
]*?id="?tabcont"?[^>]*?>.*?)(
)%s','\1\3',$b));
// femod
$b=preg_replace('%( title="femod">)[^<]*%',"\${1}".strftime("%d %B %Y"),$b);
// ahora las notas
// coje notas nuevas o viejas, si hay mira a ver si existe el div id=notas
if (preg_match_all('+(<(nota)>|<(sup)>+s',$b,$nts) and
// este preg_match puede fallar, pues si "notas" no contuviera un dl, pero hubiese uno despues, pasaria como en el toc
preg_match('|]*?id="?notas"?[^>]*?>.*?([ ]*)
(.*?)
.*?
|s',$b,$lnt)
) {
// print_r($lnt);
// sangrado del div
$sep=$lnt[1];
// hay ya notas? las meto en un array con la numeración original
if (preg_match_all('|- (.*?)|s',$lnt[2],$lnts)) {
//print_r($lnts);
$ents=array();
foreach($lnts[1] as $i => $int)
$ents[$int]=$lnts[2][$i];
//print_r($ents);
}
$notas='';
// print_r($nts);
foreach($nts[0] as $i => $nth) {
$c=$i+1;
if ($nts[2][$i]) // es nota nueva
$s=$nts[5][$i];
else
$s=$ents[$nts[4][$i]]; // cojo la vieja
// pongo la nota
$notas.="$sep
- $c
- $s
\n";
// cambio la nota (nueva o vieja) por la nueva (renumerada), el tmp es preciso por la renumeración
$b=str_replace($nth,"$c",$b);
//echo $b;
}
// quito los tmp
$b=str_replace('','',$b);
// ahora pongo las notas donde toca
// para evitar que una nota tenga un \1
$uni=uniqid('lasnotas');
$b=preg_replace('|(]*?id="?notas"?[^>]*?>.*?
).*?(
.*?
)|s','\1'.$uni.'\2',$b);
$b=str_replace($uni,"\n$notas$sep",$b);
}
// avisos
$b=preg_replace('%(.*?)%','',$b);
if (preg_match_all('%%',$b,$m))
foreach($m[1] as $av)
echo " ***** aviso ***** $av\n";
if ($b == $b1)
die("No he hecho nada\n");
rename($argv[1],"$argv[1]~");
fwrite($fp=fopen($argv[1],"w"),$b);
fclose($fp);
if ($st=@stat("$argv[1]~"))
chmod($argv[1],$st['mode']);
?>