VisitorReplacing.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. }