VisitorReplacing.php 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. /**
  3. * Replacing Visitor
  4. *
  5. * @package Less
  6. * @subpackage visitor
  7. */
  8. class Less_VisitorReplacing extends Less_Visitor{
  9. public function visitObj( $node ){
  10. $funcName = 'visit'.$node->type;
  11. if( isset($this->_visitFnCache[$funcName]) ){
  12. $visitDeeper = true;
  13. $node = $this->$funcName( $node, $visitDeeper );
  14. if( $node ){
  15. if( $visitDeeper && is_object($node) ){
  16. $node->accept($this);
  17. }
  18. $funcName = $funcName . "Out";
  19. if( isset($this->_visitFnCache[$funcName]) ){
  20. $this->$funcName( $node );
  21. }
  22. }
  23. }else{
  24. $node->accept($this);
  25. }
  26. return $node;
  27. }
  28. public function visitArray( $nodes ){
  29. $newNodes = array();
  30. foreach($nodes as $node){
  31. $evald = $this->visitObj($node);
  32. if( $evald ){
  33. if( is_array($evald) ){
  34. self::flatten($evald,$newNodes);
  35. }else{
  36. $newNodes[] = $evald;
  37. }
  38. }
  39. }
  40. return $newNodes;
  41. }
  42. public function flatten( $arr, &$out ){
  43. foreach($arr as $item){
  44. if( !is_array($item) ){
  45. $out[] = $item;
  46. continue;
  47. }
  48. foreach($item as $nestedItem){
  49. if( is_array($nestedItem) ){
  50. self::flatten( $nestedItem, $out);
  51. }else{
  52. $out[] = $nestedItem;
  53. }
  54. }
  55. }
  56. return $out;
  57. }
  58. }