Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PHP: Regulärer Ausdruck für Listen (wiki-style) (https://www.delphipraxis.net/91273-php-regulaerer-ausdruck-fuer-listen-wiki-style.html)

CalganX 2. Mai 2007 16:47


PHP: Regulärer Ausdruck für Listen (wiki-style)
 
Hi,
ich bin gerade auf der Suche nach einem Regulären Ausdruck für einen Parser auf PHP-Basis, der mir Listen im Wiki-Stil umwandelt.
Also von
Code:
* Auflistung
* Auflistung 2
* Auflistung 3
nach
Code:
<ul>[*]Auflistung[*]Auflistung 2[*]Auflistung 3[/list]
Ich habe mich bereits im Mediawiki Source umgesehen, aber nichts brauchbares gefunden. Und die Umsetzung im PhpWiki ist viel zu komplex.

Hat jemand einen Vorschlag?

Chris

joachimd 3. Mai 2007 13:17

Re: PHP: Regulärer Ausdruck für Listen (wiki-style)
 
Ich habe mir mal einen einfachen WIKI2Html Konverter geschrieben. Dies habe ich nicht mit RegExp gemacht, sondern bin Zeile für Zeile durchgegangen. Bei Bedarf PM, dann kann ich Dir den kompletten Source schicken.

CalganX 5. Mai 2007 09:28

Re: PHP: Regulärer Ausdruck für Listen (wiki-style)
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz