TwigNodeSwitch.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. /**
  3. * @package Grav.Common.Twig
  4. *
  5. * @copyright Copyright (C) 2015 - 2018 Trilby Media, LLC. All rights reserved.
  6. * @license MIT License; see LICENSE file for details.
  7. */
  8. namespace Grav\Common\Twig\Node;
  9. class TwigNodeSwitch extends \Twig_Node implements \Twig_NodeOutputInterface
  10. {
  11. public function __construct(
  12. \Twig_Node $value,
  13. \Twig_Node $cases,
  14. \Twig_Node $default = null,
  15. $lineno = 0,
  16. $tag = null
  17. )
  18. {
  19. parent::__construct(array('value' => $value, 'cases' => $cases, 'default' => $default), array(), $lineno, $tag);
  20. }
  21. /**
  22. * Compiles the node to PHP.
  23. *
  24. * @param \Twig_Compiler A Twig_Compiler instance
  25. */
  26. public function compile(\Twig_Compiler $compiler)
  27. {
  28. $compiler
  29. ->addDebugInfo($this)
  30. ->write('switch (')
  31. ->subcompile($this->getNode('value'))
  32. ->raw(") {\n")
  33. ->indent();
  34. foreach ($this->getNode('cases') as $case) {
  35. if (!$case->hasNode('body')) {
  36. continue;
  37. }
  38. foreach ($case->getNode('values') as $value) {
  39. $compiler
  40. ->write('case ')
  41. ->subcompile($value)
  42. ->raw(":\n");
  43. }
  44. $compiler
  45. ->write("{\n")
  46. ->indent()
  47. ->subcompile($case->getNode('body'))
  48. ->write("break;\n")
  49. ->outdent()
  50. ->write("}\n");
  51. }
  52. if ($this->hasNode('default') && $this->getNode('default') !== null) {
  53. $compiler
  54. ->write("default:\n")
  55. ->write("{\n")
  56. ->indent()
  57. ->subcompile($this->getNode('default'))
  58. ->outdent()
  59. ->write("}\n");
  60. }
  61. $compiler
  62. ->outdent()
  63. ->write("}\n");
  64. }
  65. }