login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > UBB & Smilies > Stack-based UBB parser

Stack-based UBB parser

Auteur: Grayen - 19 juni 2007 - 18:45 - Gekeurd door: Ibrahim - Hits: 7574 - Aantal punten: 3.50 (3 stemmen)



Zoals de titel al uitlegt is het script een stack based ubb parser. Dit houdt in dat hij inplaats van str_replaces en preg_replaces gebruik maakt van een array waarin hij tekst en ubbtags in doet die en die vervolgens door een parser omzet naar html.

Helaas bijna geen informatie vinden over zo'n stack-based parser dus ben ik maar gaan kijken bij scripts van anderen. Toen ik eenmal het principe door had ben ik gaan kijken wat in elk script het beste was en die heb ik vervolgens ook zelf proberen in te bouwen.

Je kunt zelf extra tags toevoegen, door de tag in een filter te zetten met de argumenten die in het script zelf worden uitgelegd bij de comments. Dan moet je als je een nieuwe filter hebt aangemaakt, aangeven dat je deze wilt gebruiken door hem in de filter array te zetten. Als je dat allemaal hebt gedaan kan je een methode voor de tag schrijven. Hierbij kan je gebruik maken van de volgende drie technieken:

  1. private function strong($aNode)
  2. {
  3. # Een van de onderstaande technieken.
  4. }


De code hierboven moet je gebruiken om een extra code tag toe te voegen. De naam van de methode moet gelijk zijn aan de naam van de tag.

  1. if($aNode['type'] == 'open')
  2. {
  3. return '<strong>';
  4. }
  5. else
  6. {
  7. return '</strong>';
  8. }


De tag kan namelijk van het type close of open zijn.

  1. return $this->basic($aNode, 'strong');


De meeste simpele techniek, die gebruikt maakt van de eerste techniek, waarvoor ik een kleine methode heb geschreven, zodat je niet telkens het zelfde moest tikken.

  1. return '<strong>'.$this->parse('strong').'</strong>';


Hierbij kan je gebruik maken van de tekst die tussen de ubb tags staan. Handig bij bijvoorbeeld de code tags. Je kunt hierbij ook tijdelijk het parsen uitzetten door de volgende code:

  1. $this->bParse = false;
  2. # Code die niet geparsed mag worden.
  3. $this->bParse = true;


Je kunt het script toepassen door de volgende code:

  1. ubb::execute('[b]Dit is ubb code[/b]');


De code genereert XHTML correct HTML. Hij daarin zelfs zo goed dat hij de volgende code:

  1. [td]tekst


omzet naar het volgende:

  1. <table><tr><td>tekst</td></tr></table>


Als je bijvoorbeeld de volgende ubb tag hebt:

  1. [img=locatie]alt[/img]


Dan kan je de data die staat achter de = gebruiken in je eigen methode door het volgende:

  1. $aNode['attributes']['img'];


Alle andere argumenten die je meegeeft, waar dus wel een woord voor staat, krijgen als key de naam van het argument dus:

  1. [img src=locatie]alt[/img]


wordt:

  1. $aNode['attributes']['src'];


Ik hoop dat jullie er wat aan hebben . En als er nog fouten in zitten of misschien weet jij nog iets wat er in kan, dan zou ik dat graag van je willen horen bij de reacties.

Code:
Download code! Download code (.txt)

Download dit script!
 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (17)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.122s