Jaja, * Nielsz heeft een probleem
Ik ben maar eens begonnen aan een ubbparser, en niet zo maar een ubbparser, maar eentje die gemakkelijk aan te passen is.
Hij is namelijk niet 'vast' geprogrammeerd, maar ik kan per entiteit aangeven welke entiteit er in gebruikt mogen worden.
Ik kan dus zeggen: in een [.code] mag alleen maar een [u|i|b|s] tag in voorkomen, en verder worden smilies niet geparsed.
Dat doe ik met de volgende code:
Nu heb ik een andere class waar deze code in staat:
Daar krijg ik dus een array met alle entiteiten die gebruikt mogen worden.
Wat wil ik bereiken?
Ik wil een array (class) krijgen met dit formaat:
Hoe moet dit
Er moet dus op de een of andere manier door de text heengelopen worden. Hij moet een complete entiteit zien te vinden, en daarin kijken of daar nog tags in zitten die mogen. Als dat zo is moet de text in (2|3) gesplitst worden. Maar hoe ik dit moet gaan aanpakken
Ik zit iig een beetje vast. Kan iemand wat hints geven?
De code die ik nu heb om alles om te zetten is:
Hij is namelijk niet 'vast' geprogrammeerd, maar ik kan per entiteit aangeven welke entiteit er in gebruikt mogen worden.
Ik kan dus zeggen: in een [.code] mag alleen maar een [u|i|b|s] tag in voorkomen, en verder worden smilies niet geparsed.
Dat doe ik met de volgende code:
code:
1
2
3
4
5
6
7
| class parseEntity
{
var $name;
var $pattern;
var $replace;
var $children=array();
var $parseSmilies; |
Nu heb ik een andere class waar deze code in staat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $b= new parseEntity("B");
$b->setChildren(array("s","i"));
$b->setRegexp("/\\[B\](.*?)\\[\/B\]/is","<b>\\1</b>");
$this->addEntity($b);
$s= new parseEntity("s");
$s->setChildren(array("s","i"));
$s->setRegexp("/\\[S\](.*?)\\[\/S\]/is","<s>\\1</s>");
$this->addEntity($s);
function addEntity($var)
{
$this->entities[$var->name]=$var;
} |
Daar krijg ik dus een array met alle entiteiten die gebruikt mogen worden.
Wat wil ik bereiken?
Ik wil een array (class) krijgen met dit formaat:
code:
1
2
| var $text="bold en italic text";
var $usedElements=array("b","i"); |
Hoe moet dit
Er moet dus op de een of andere manier door de text heengelopen worden. Hij moet een complete entiteit zien te vinden, en daarin kijken of daar nog tags in zitten die mogen. Als dat zo is moet de text in (2|3) gesplitst worden. Maar hoe ik dit moet gaan aanpakken
De code die ik nu heb om alles om te zetten is:
code:
1
2
3
4
5
| while (list ($name, $entity) = each ($parser->entities))
{
$text = preg_replace($entity->pattern, $entity->replace, $text);
$entityCounter++;
} |