<?
// la page source qu'on souhaite traiter
// le header qu'on va ajouter à toutes les pages
$header = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html dir=\"ltr\" xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"fr-FR\">
<head>
<title>\${title} | \${chapterTitle}</title>
<meta http-equiv=\"Content-Type\" content=\"application/xhtml+xml; charset=UTF-8\" />
<style type=\"text/css\">
.nav {
width: 100%;
height: 2.5em;
border-bottom: solid 2px;
border-top: solid 2px;
}
.previous , .index {
float: left;
width: 33%;
}
.index {
text-align : center;
}
.next {
float: right;
width: 33%;
text-align: right;
}
</style>
</head>
<body><a name=\"top\"></a>
";
// le footer
$footer = '<p><a href="#top">Haut de la page</a></p></body></html>';
// ne retiens que ce qui est entre les balises body, mais on peut imaginer choisir d'autres balises (pour n'avoir que tel ou tel conteneur par exemple)
preg_match('#<body[^>]{0,}>(.*)</body>#mis',$page,$match);
$page = $match[1];
// récupération du titre du document
preg_match('#<h1[^>]{0,}>(.*)</h1>#i',$page,$match);
$title = $match[1];
// on repère chaque titre de 2° niveau
$match = $match[0];
// pour chaque titre…
foreach ($match as $m) {
$page = str_replace($m,'<!-- cut here -->'.$m,$page); // …on place un marqueur de découpe
$summary[] = trim(strip_tags($m)); // …on stocke les titres pour créer une page index
}
// découpage du fichier en chapitres
$page = explode('<!-- cut here -->',$page);
foreach ($page as $num=>$chunk) {
$nav = ''; // barre de navigation
if ($num > 0) {
$chapterTitle = $summary[$num-1];
if ($num > 1) $nav = '<div class="previous"><a href="'. ($num-2) . '.html">« ' . $summary[$num-2] . '</a></div>'; // lien précédent
if ($num == 1) $nav = '<div class="previous"><a href="index.html">« Introduction</a></div>'; // lien précédent lorsque premier chapitre
$nav .= '<div class="index"><a href="index.html#summary">Sommaire</a></div>'; // lien vers le sommaire
if ($num < count($summary)-1
) $nav .= '<div class="next"><a href="'. ($num+1) . '.html">' . $summary[$num+1] . ' »</a></div>'; // lien suivant, s'il y a lieu
} else {
$chapterTitle = 'Introduction';
$nav = ''; // navigation
$num = 'index';
}
// formattage de la barre de navigation
if ($nav != '') $nav = '<div class="nav">' . $nav .'</div>';
// formattage du chapitre
$chapter = str_replace('${title}', $title, str_replace('${chapterTitle}', $chapterTitle, $header)) . $nav . trim($chunk) . $nav . $footer;
// création du fichier
}
// création d'un index/sommaire
$index = '';
foreach ($summary as $num=>$entry) {
$index .= '<li><a href="'.$num.'.html">'.$entry.'</a></li>';
}
// ajout du sommaire/index à la premiere page
$index = file_get_contents('./result/index.html') . '<div class="summary"><a name="summary"></a><h2>Sommaire</h2><ul>'.$index.'</ul></div>';
?>