XUPWUP.NL
Login
Or create an account

Een nieuwe parser! (Ja alweer)

0 Posted 12 October 2011 15:50
User avatar
Rick Hendricksen
Administrator
Posts: 2251

Deze parser is volledig recursief, in plaats van een loop met een stack. Deze implementatie is makkelijker secure te krijgen, en dus beter. Het ingewikkelde deel van de parser is ook veel kleiner, vanwege het gebruik van objecten. Het nadeel is wel dat er ongeveer 10 regels nodig zijn per tag, om de properties van elke tag te definieren. Maar, omdat dat in een andere file zit, en geen relatie met elkaar heeft zorgt dit voor goed leesbare code. Wel wat veel :(.


Meer info: http://forum.xupwup.nl/viewtopic/1086/RICK_HELP_HET_FORUM_was_heel_even_STUK
1 Posted 13 October 2011 11:57
User avatar
Rick Hendricksen
Administrator
Posts: 2251
Tag api:
  1. class ExampleTag extends Tag{
  2. public $isSelfClosing = false;
  3. //public $fulldata = ''; // this contains the content of the open tag, so for [x a b][/x], fulldata would be "x a b"
  4. public $name = 'x'; // the name of your tag, for bold this would be 'b' (so the tag is [$name])
  5. //public $children = array(); // inherited from Tag, no need to redefine (just like fulldata)
  6. public function toString(){
  7. $s = '<span class="xmple">';
  8. for($i = 0; $i < count($this->children); $i++){
  9. $s .= $this->children[$i]->toString();
  10. }
  11. // instead of this for loop using childrenData() would be possible as well.
  12. return $s."</span>";
  13. }
  14. /*
  15. available functions:
  16. childrenData() // returns the concatenation of the tostring of all children
  17. killIllegalChildren() // kills all children that do not meet the specifications of canContain() (in general tags that don't meet the spec are not opened, but textnodes ignore that. Or you can kill children yourself, by looping over the children array. You can even override killIllegalChildren.
  18. */
  19. /**
  20. * You probably want to make sure 'li' is not allowed
  21. */
  22. public function canContain($tag){
  23. return !$this->isSelfClosing && $tag->name != 'li';
  24. }
  25. }


Dus, als je heel graag zelf een tag wilt maken, zo moet het.
2 Posted 13 October 2011 14:16
User avatar
00T00
Global Mod.
Posts: 1048
Rick
Je moet het zo maken dat je de regelnummers niet kunt selecteren of niet mee kunt kopiëren
3 Posted 13 October 2011 14:19
User avatar
Kebabbi
Moderator
Posts: 549
wat zorgt er nu voor dat dat ene met nieuwe regels gefixt is? (wat ik je gister zei)
4 Posted 13 October 2011 16:35
User avatar
Rick Hendricksen
Administrator
Posts: 2251
Quoting: @3
wat zorgt er nu voor dat dat ene met nieuwe regels gefixt is? (wat ik je gister zei)
Nieuwe css.
© Rick Hendricksen