compile() public method

The result can then be evaluated, the best method is a simple PHP include Look at Renderer to get this done for you If you give it a path, the directory of that path will be used for relative includes.
public compile ( string $input, string | null $path = null ) : mixed | string
$input string the jade input string
$path string | null the path for relative includes
return mixed | string a PHTML string containing HTML and PHP
Exemplo n.º 1
0
    public function testComplexNestedTag()
    {
        $jade = <<<JADE
div
    nav
        ul
            li
                a
            li
                a
            li
                a
    nav
        ul
            li
                a
            li
                a
            li
                a
    nav
        ul
            li
                a
            li
                a
            li
                a
JADE;
        $this->assertEquals('<div><nav><ul><li><a></a></li><li><a></a></li><li><a></a></li></ul></nav><nav><ul><li><a></a></li><li><a></a></li><li><a></a></li></ul></nav><nav><ul><li><a></a></li><li><a></a></li><li><a></a></li></ul></nav></div>', $this->_compiler->compile($jade));
    }
Exemplo n.º 2
0
    public function testComplexTagIdCombination()
    {
        $jade = <<<JADE
#testContainer
    nav#testNav1
        ul#testMenu1
            li#testItem1
                a#testLink1
            li#testItem2
                a#testLink2
            li#testItem3
                a#testLink3
    nav#testNav2
        ul#testMenu2
            li#testItem4
                a#testLink4
            li#testItem5
                a#testLink5
            li#testItem6
                a#testLink6
    nav#testNav3
        ul#testMenu3
            li#testItem7
                a#testLink7
            li#testItem8
                a#testLink8
            li#testItem9
                a#testLink9
JADE;
        $this->assertEquals('<div id="testContainer"><nav id="testNav1"><ul id="testMenu1"><li id="testItem1"><a id="testLink1"></a></li><li id="testItem2"><a id="testLink2"></a></li><li id="testItem3"><a id="testLink3"></a></li></ul></nav><nav id="testNav2"><ul id="testMenu2"><li id="testItem4"><a id="testLink4"></a></li><li id="testItem5"><a id="testLink5"></a></li><li id="testItem6"><a id="testLink6"></a></li></ul></nav><nav id="testNav3"><ul id="testMenu3"><li id="testItem7"><a id="testLink7"></a></li><li id="testItem8"><a id="testLink8"></a></li><li id="testItem9"><a id="testLink9"></a></li></ul></nav></div>', $this->_compiler->compile($jade));
    }
Exemplo n.º 3
0
    public function testComplexTagClassCombination()
    {
        $jade = <<<JADE
.test-container
    nav.test-nav
        ul.test-menu
            li.test-item
                a.test-link
            li.test-item
                a.test-link
            li.test-item
                a.test-link
    nav.test-nav
        ul.test-menu
            li.test-item
                a.test-link
            li.test-item
                a.test-link
            li.test-item
                a.test-link
    nav.test-nav
        ul.test-menu
            li.test-item
                a.test-link
            li.test-item
                a.test-link
            li.test-item
                a.test-link
JADE;
        $this->assertEquals('<div class="test-container"><nav class="test-nav"><ul class="test-menu"><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li></ul></nav><nav class="test-nav"><ul class="test-menu"><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li></ul></nav><nav class="test-nav"><ul class="test-menu"><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li><li class="test-item"><a class="test-link"></a></li></ul></nav></div>', $this->_compiler->compile($jade));
    }
Exemplo n.º 4
0
    public function testMultiLineCssFilter()
    {
        $jade = <<<JADE
:css
    body, html {
        can-you: imagine;
        that: this;
        works: perfectly;
    }
JADE;
        $this->assertEquals('<style>body, html { can-you: imagine; that: this; works: perfectly; }</style>', $this->_compiler->compile($jade));
    }
Exemplo n.º 5
0
    public function tesComplexExpansion()
    {
        $jade = <<<JADE
a: b: c
    d: .e: #f
a: b: c(aa='bb'): d
    d: e:
        f: g: h
    d: e
        f: g: h
JADE;
        $this->assertEquals("<input value=\"Line 1\rLine 2\">", $this->_compiler->compile($jade));
    }
Exemplo n.º 6
0
    public function testComplexExpansion()
    {
        $jade = <<<JADE
a: b: c
    d: .e: #f
a: b: c(aa='bb'): d
    d: e
        f: g: h
    d: e
        f: g: h
JADE;
        $this->assertEquals('<a><b><c><d><div class="e"><div id="f"></div></div></d></c></b></a><a><b><c aa="bb"><d><d><e><f><g><h></h></g></f></e></d><d><e><f><g><h></h></g></f></e></d></d></c></b></a>', $this->compiler->compile($jade));
    }
Exemplo n.º 7
0
 public function convert($inputPath)
 {
     $this->prependOptions(['paths' => []]);
     $parser = new Parser(file_get_contents($inputPath), ['filename' => $inputPath, 'includes' => $this->getOption('paths')]);
     $compiler = new Compiler(!$this->getManager()->getOption('minify'));
     return $compiler->compile($parser->parse());
 }
Exemplo n.º 8
0
 public function testDoWhileWithWhileChildren()
 {
     $this->setExpectedException(Compiler\Exception::class);
     $this->compiler->compile("do\n\tp Something\nwhile \$something\n\tp Anything");
 }
Exemplo n.º 9
0
         $id = uniqid();
         $path = SAVE_PATH . '/' . implode('/', str_split($id)) . '.jade';
     } while (file_exists($path));
     $dir = dirname($path);
     if (!is_dir($dir)) {
         mkdir($dir, 0755, true);
     }
     file_put_contents($path, $jade);
     echo json_encode(['success' => true, 'id' => $id]);
     exit;
 case 'compile':
     $compilerOptions = ['pretty' => isset($_POST['pretty']) ? $_POST['pretty'] === 'true' : false, 'standAlone' => isset($_POST['standAlone']) ? $_POST['standAlone'] === 'true' : false, 'allowImports' => false];
     $compiler = new Compiler($compilerOptions);
     $result = null;
     try {
         $result = $compiler->compile($jade);
     } catch (\Exception $e) {
         echo json_encode(['success' => false, 'message' => "\n" . get_class($e) . "\n\n" . $e->getMessage()]);
         exit;
     }
     echo json_encode(['success' => true, 'output' => $result]);
     exit;
 case 'lex':
     $lexer = new Lexer();
     $result = null;
     try {
         ob_start();
         $lexer->dump($jade);
         $result = ob_get_clean();
     } catch (\Exception $e) {
         echo json_encode(['success' => false, 'message' => "\n" . get_class($e) . "\n\n" . $e->getMessage()]);
Exemplo n.º 10
0
 public function testClassNestedExpansion()
 {
     $this->assertEquals('<div class="a b"><div class="c d">Hello, World!</div></div>', $this->compiler->compile(".a.b: .c.d\n\t| Hello, World!"));
 }
Exemplo n.º 11
0
<?php

include '../../vendor/autoload.php';
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('error_reporting', E_ALL | E_NOTICE);
use Tale\Jade\Compiler;
use Tale\Jade\Renderer;
$minify = isset($_GET['minify']) ? true : false;
$handleErrors = isset($_GET['withErrorHandler']) ? true : false;
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') {
    $compiler = new Compiler(['pretty' => !$minify, 'handleErrors' => $handleErrors, 'allowImports' => false]);
    $jade = isset($_POST['jade']) ? $_POST['jade'] : '';
    header('Content-Type: text/plain; encoding=utf-8');
    try {
        echo json_encode($compiler->compile(str_replace("\t", '    ', $jade)));
    } catch (Exception $e) {
        echo json_encode($e->getMessage());
    }
    exit;
}
$renderer = new Renderer(['compiler' => ['pretty' => true], 'adapter' => 'file', 'adapterOptions' => ['lifeTime' => 0]]);
$example = isset($_GET['example']) ? $_GET['example'] : 'welcome';
$exampleJade = '';
$example = preg_replace('/[^a-z0-9\\-]+/i', '', $example);
if (file_exists(__DIR__ . '/examples/' . $example . '.jade')) {
    $exampleJade = file_get_contents(__DIR__ . '/examples/' . $example . '.jade');
}
$action = isset($_GET['page']) ? preg_replace('/^[a-z0-9\\-]+$/i', '', $_GET['example']) : 'index';
$exampleJade = json_encode($exampleJade);
$url = $_SERVER['PHP_SELF'];
Exemplo n.º 12
0
 public function testCarriageReturnEscaping()
 {
     $this->assertEquals("<input value=\"Line 1\rLine 2\">", $this->_compiler->compile('input(value="Line 1\\rLine 2")'));
 }
Exemplo n.º 13
0
 public function testStyleRepeation()
 {
     $this->assertEquals('<a style="first: first-value; second: second-value"></a>', $this->_compiler->compile('a(style="first: first-value", style=\'second: second-value\')'));
 }
Exemplo n.º 14
0
 /**
  * Compiles a Jade-string to PHTML.
  *
  * The result can then be evaluated, the best method is
  * a simple PHP include
  *
  * Use ->render() to get this done for you
  *
  * Before evaluating you should set a $__args variables
  * that will be passed through mixins.
  * It like a global scope.
  *
  * If you give it a path, the directory of that path will be used
  * for relative includes.
  *
  * @param string      $input the jade input string
  * @param string|null $path  the path for relative includes
  *
  * @return mixed|string A PHTML string containing HTML and PHP
  */
 public function compile($input, $path = null)
 {
     return $this->_compiler->compile($input, $path);
 }
 public function testIssue21()
 {
     $this->assertEquals('<?=$view->render(\'_search\', [\'model\' => $searchModel])?>', $this->_compiler->compile('!=$view->render(\'_search\', [\'model\' => $searchModel])'));
 }
Exemplo n.º 16
0
 public function testFileNotFound()
 {
     $this->setExpectedException(Compiler\Exception::class);
     $this->_renderer->compile('include non-existent-file');
     $this->_renderer->compile('extends non-existent-file');
 }
Exemplo n.º 17
0
 public function testUnclosedAttributeBlockOnMixinCall()
 {
     $this->setExpectedException(Lexer\Exception::class);
     $this->_compiler->compile('+some-mixin(abc, def');
 }