Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: PHP: Regulärer Ausdruck für Listen (wiki-style)

  Alt 5. Mai 2007, 10:28
Hi,
danke für dein Angebot. Habe es jetzt aber doch selber hinbekommen. Ist wahrscheinlich in etwa das Gleiche Vorgehen:
Code:
$filecontent = file(the_filename());
$output = "";
$inlist = true;
$listlevel = 0;

foreach ($filecontent as $line) {
   // Alles escapen
   $line = utf8_encode(htmlentities(utf8_decode($line)));
   
   /* 
    * <ul>-Listen-Parsing
    * (c) by Christopher Harms, 2007
    *
    */
   if (strpos(trim($line), "* ") === 0) {
      if (!$inlist) {
         $inlist = true;
         /* Liste eröffnen */
         $output .= "<ul>\n";
      } elseif ($listlevel > 0) {
         /* Letzte Liste schließen */
         $output .= "\n";
         for ($idx = 1; $idx <= $listlevel; $idx++) {
            $output .= "[/list]\n";
         }
         $listlevel--;
      } else {
         /* Letztes Item wieder schließen */
         $output .= "\n";
      }
      
      /* Eintrag in Liste einfügen */
      $line = str_replace("*", "", $line);
      $line = trim($line);
      $line = "[*]" . $line;
   } else {
      if ($inlist) {
         if (trim($line) == "") {               
            /* Liste muss geschlossen werden. */
            $output .= "\n";
            for ($idx = 0; $idx <= $listlevel; $idx++) {
               $output .= "[/list]\n";
            }
            $inlist = false;
            $listlevel = 0;
         } elseif (strpos(trim($line), ":* ") === 0) {
            if ($listlevel === 0) {
               $listlevel++;

               /* Eine Unter-Liste eröffnen */
               $output .= "<ul>\n";
            }

            /* Element hinzufügen */
            $line = str_replace(":*", "", $line);
            $line = trim($line);
            $line = "[*]" . $line;
         } else {
            /* Gehört noch zum aktuellen Item */
            $output .= "
\n";
         }
      }
   }
   
   // Restliches Parsing ...
   
   $output .= $line;
}
if ($inlist) {
   /* Liste wurde nicht geschlossen */
   $output .= "\n[/list]\n";
}
print $output;
Chris
  Mit Zitat antworten Zitat