Autor Zpráva
Charlie
Profil
Zdravim všechny,

chtěl bych si vytvořit ultra lehkou třídu pro převedení plain-textu do html. Texy nebo Textile implementovat nemůžu.

Moje třída by měla umět jen nejzákladnější formátování: odstavce, odřádkování, strong a em.

Co zatím mám:

<?php


class Text {

public $text;
public $final_text;

function process($text) {
$this->text = $text;
$this->clean();
$this->ps();
return $this->final_text;
}

function clean() {
// Pro vsechny pripady
$this->text = htmlspecialchars(trim($this->text));
}

function ps() {

// Rozdeli text na odstavce, ktere nacte do pole
$pars = preg_split("\n\n++",$this->text);

// Zpracuje kazdy odstavec
foreach ($pars as $par) {
$this->final_text .= $this->process_par($par);
}

}

function process_par($par) { //Zpracovani jednotlivych odstavcu
$par = trim($par);
$par = str_replace("\n","<br />",$par);
$par = $this->simple_tags($par);
return "<p>".$par."</p>\n";
}

function simple_tags() {
$taglist = array(
"*" => "strong",
"_" => "em"
);

// Tady chci parsovat tagy...
}
}
?>


Tohle umí snad skoro vše kromě těch strongů a emů =)

Poraďte mi prosím, jak na ně, případně kde dát pozor na problémy. Díky.
Charlie
Profil
Tak už jsem to vymyslel. Má to sice dost nedostatků, ale když se slušně napíše plain-text, tak to formátuje validní xhtml.

<?php


class Text {

public $text;
public $final_text;

function process($text) {
$this->text = $text;
$this->clean();
$this->ps();
return $this->final_text;
}

function clean() {
// Pro vsechny pripady
$this->text = htmlspecialchars(trim($this->text));
}

function ps() {

// Rozdeli text na odstavce, ktere nacte do pole
$pars = preg_split("/[\r\n]+/",$this->text);

// Zpracuje kazdy odstavec
foreach ($pars as $par) {
$this->final_text .= $this->process_par($par);
}

}

function process_par($par) { //Zpracovani jednotlivych odstavcu
$par = trim($par);
$par = str_replace("\n","<br />",$par);
$par = $this->simple_tags($par);
return "<p>".$par."</p>\n";
}

function simple_tags($par) {
$taglist = array(
"*" => "strong",
"_" => "em"
);

foreach ($taglist as $symbol => $tag) {

$par = preg_replace("/[$symbol]+/",$symbol,$par);
if (substr_count($par,$symbol) % 2) {
$par .= $symbol;
}

if (substr_count($par,$symbol) > 1) {
$count = substr_count($par,$symbol);
for ($i = 1; $i <= $count; $i++) {
$before = substr($par,0,strpos($par,$symbol));
$after = substr($par,strpos($par,$symbol)+strlen($symbol));
if ($i & 1) {
$par = $before."<".$tag.">".$after;
} else {
$par = $before."</".$tag.">".$after;
}
}
}
}

return $par;

}
}
?>
Yuhů
Profil
hezké. Nechceš z toho raději udělat balíček a někde to rozběhnout, ať je vidět, co to dělá?
Toto téma je uzamčeno. Odpověď nelze zaslat.