PierreS
19-03-2006, 13:51
Hallo,
ich komme gerade bei einem Problem nicht wirklich weiter. Es geht um Wiki-Code, den ich nach HTML umwandeln möchte und vor allem auch umgekehrt.
Beispiel:
Wiki-Code:
* a
* b
** c
* d
wird zu HTML-Code:
<ul><li>a</li><li>b<ul><li>c</li></ul></li><li>d</li></ul>
Die Umwandlung von Wiki- nach HTML-Code habe ich mittlerweile in den Griff bekommen:
private function makeList($in)
{
$in = trim(str_replace('\"', '"', $in));
$out = '';
$last = 0;
foreach (explode("\n", $in) as $line)
{
$cur = 0;
/* Ermittle die aktuelle Tiefe */
while (strlen($line) > $cur && $line[$cur] == '*')
{
$cur++;
}
/* eine Ebene tiefer */
if ($cur > $last)
{
$cur = $last + 1;
$out .= '<ul>';
}
/* eine oder mehrere Ebene höher */
elseif ($cur < $last)
{
$out .= '</li>';
for ($j = $last; $j > $cur; $j--)
{
$out .= '</ul></li>';
}
}
else
{
$out .= '</li>';
}
/* Füge Zeile ohne Ebenenzeichen und Leerzeichen (+1) hinzu */
$out .= '<li>'.substr($line, $cur+1);
$last = $cur;
}
/* Alle geöffneten Tags auf jeden Fall schließen */
while ($cur > 0)
{
$out .= '</li></ul>';
$cur--;
}
return $out;
}
Nur jetzt bekomme ich Rückwandlung nicht hin. Hat hier jemand vielleicht eine gute Idee? Ich stehe da ziemlich aufm Schlauch ;-)
Grüße
Pierre
ich komme gerade bei einem Problem nicht wirklich weiter. Es geht um Wiki-Code, den ich nach HTML umwandeln möchte und vor allem auch umgekehrt.
Beispiel:
Wiki-Code:
* a
* b
** c
* d
wird zu HTML-Code:
<ul><li>a</li><li>b<ul><li>c</li></ul></li><li>d</li></ul>
Die Umwandlung von Wiki- nach HTML-Code habe ich mittlerweile in den Griff bekommen:
private function makeList($in)
{
$in = trim(str_replace('\"', '"', $in));
$out = '';
$last = 0;
foreach (explode("\n", $in) as $line)
{
$cur = 0;
/* Ermittle die aktuelle Tiefe */
while (strlen($line) > $cur && $line[$cur] == '*')
{
$cur++;
}
/* eine Ebene tiefer */
if ($cur > $last)
{
$cur = $last + 1;
$out .= '<ul>';
}
/* eine oder mehrere Ebene höher */
elseif ($cur < $last)
{
$out .= '</li>';
for ($j = $last; $j > $cur; $j--)
{
$out .= '</ul></li>';
}
}
else
{
$out .= '</li>';
}
/* Füge Zeile ohne Ebenenzeichen und Leerzeichen (+1) hinzu */
$out .= '<li>'.substr($line, $cur+1);
$last = $cur;
}
/* Alle geöffneten Tags auf jeden Fall schließen */
while ($cur > 0)
{
$out .= '</li></ul>';
$cur--;
}
return $out;
}
Nur jetzt bekomme ich Rückwandlung nicht hin. Hat hier jemand vielleicht eine gute Idee? Ich stehe da ziemlich aufm Schlauch ;-)
Grüße
Pierre