Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,13 @@
<?php
require_once 'autoload.php';

use Beobles\Core\View\Engine;
use Core\View\Engine;

$engine = new Engine([
'templates_dir' => __DIR__ . '/templates',
'cache_dir' => __DIR__ . '/cache',
'auto_escape' => true
'auto_escape' => true,
'debug' => true, // false em produção para mensagens seguras
]);

echo $engine->render('home.html', [
Expand Down Expand Up @@ -82,6 +83,13 @@ import { UserCard } from "@components/UserCard";

Veja [SYNTAX.md](./SYNTAX.md) para documentação completa da sintaxe.

## Modo Debug e Produção

- `debug: true` (padrão): mantém mensagens detalhadas para facilitar desenvolvimento.
- `debug: false` ou `environment: 'production'`: retorna mensagens seguras e genéricas para produção.
- Erros de sintaxe compilada geram `SyntaxException` com contexto interno (arquivo, linha, coluna e snippet), preservado no encadeamento da exceção.
- Em templates com `extends`, as exceções de léxico/parser apontam o arquivo original (ex.: `layouts/base.html`) com linha e coluna exatas.

## Estrutura do Projeto

```
Expand Down
2 changes: 1 addition & 1 deletion SYNTAX.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ Com índice:
Com chave e valor (arrays associativos):

```html
<Foreach items={{ config }} as="key,value">
<Foreach items={{ config }} as="value,key">
<div>{{ key }}: {{ value }}</div>
</Foreach>
```
Expand Down
2 changes: 1 addition & 1 deletion autoload.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
*/

spl_autoload_register(function ($class) {
$prefix = 'Beobles\\Core\\View\\';
$prefix = 'Core\\View\\';
$baseDir = __DIR__ . '/src/Core/View/';

if (strpos($class, $prefix) !== 0) {
Expand Down
5 changes: 3 additions & 2 deletions examples/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@

require_once __DIR__ . '/../autoload.php';

use Beobles\Core\View\Engine;
use Core\View\Engine;

// Criar engine
$engine = new Engine([
'templates_dir' => __DIR__ . '/templates',
'cache_dir' => __DIR__ . '/../cache',
'auto_escape' => true,
'cache_enabled' => true
'cache_enabled' => true,
'debug' => true
]);

// Dados para o template
Expand Down
2 changes: 1 addition & 1 deletion src/Core/View/Cache/CacheInterface.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Beobles\Core\View\Cache;
namespace Core\View\Cache;

/**
* Interface para adaptadores de cache
Expand Down
2 changes: 1 addition & 1 deletion src/Core/View/Cache/CacheManager.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Beobles\Core\View\Cache;
namespace Core\View\Cache;

/**
* Gerenciador de cache
Expand Down
2 changes: 1 addition & 1 deletion src/Core/View/Cache/FileCacheAdapter.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Beobles\Core\View\Cache;
namespace Core\View\Cache;

/**
* Adaptador de cache em arquivo
Expand Down
65 changes: 65 additions & 0 deletions src/Core/View/Compilation/CompilationContext.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?php

namespace Core\View\Compilation;

/**
* Buffer de compilação passado a cada Node durante a compilação.
*
* Centraliza:
* - A escrita de código PHP em um buffer de string
* - A delegação para o ExpressionCompiler (expressões e filtros)
*
* Assim cada Node pode chamar $ctx->expr() ou $ctx->exprChain() e depois
* $ctx->writeLine() sem precisar conhecer os detalhes de compilação.
*/
class CompilationContext
{
private string $buffer = '';
private ExpressionCompiler $expressionCompiler;

public function __construct(ExpressionCompiler $expressionCompiler)
{
$this->expressionCompiler = $expressionCompiler;
}

// -----------------------------------------------------------------------
// Buffer de escrita
// -----------------------------------------------------------------------

public function write(string $code): void
{
$this->buffer .= $code;
}

public function writeLine(string $code = ''): void
{
$this->buffer .= $code . "\n";
}

public function getCode(): string
{
return $this->buffer;
}

// -----------------------------------------------------------------------
// Delegação para ExpressionCompiler
// -----------------------------------------------------------------------

/**
* Compila uma expressão simples (sem filtros) para PHP.
*/
public function expr(string $expression): string
{
return $this->expressionCompiler->compile($expression);
}

/**
* Compila uma expressão com possível cadeia de filtros.
*
* @return array{0: string, 1: bool} [código PHP, isRaw]
*/
public function exprChain(string $expression): array
{
return $this->expressionCompiler->compileChain($expression);
}
}
Loading