TwigNodeMarkdown.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  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 TwigNodeMarkdown extends \Twig_Node implements \Twig_NodeOutputInterface
  10. {
  11. public function __construct(\Twig_Node $body, $lineno, $tag = 'markdown')
  12. {
  13. parent::__construct(['body' => $body], [], $lineno, $tag);
  14. }
  15. /**
  16. * Compiles the node to PHP.
  17. *
  18. * @param \Twig_Compiler A Twig_Compiler instance
  19. */
  20. public function compile(\Twig_Compiler $compiler)
  21. {
  22. $compiler
  23. ->addDebugInfo($this)
  24. ->write('ob_start();' . PHP_EOL)
  25. ->subcompile($this->getNode('body'))
  26. ->write('$content = ob_get_clean();' . PHP_EOL)
  27. ->write('preg_match("/^\s*/", $content, $matches);' . PHP_EOL)
  28. ->write('$lines = explode("\n", $content);' . PHP_EOL)
  29. ->write('$content = preg_replace(\'/^\' . $matches[0]. \'/\', "", $lines);' . PHP_EOL)
  30. ->write('$content = join("\n", $content);' . PHP_EOL)
  31. ->write('echo $this->env->getExtension(\'Grav\Common\Twig\TwigExtension\')->markdownFunction($content);' . PHP_EOL);
  32. }
  33. }