3.1 KiB
Rendering
From version 1.2
To render an AST generated by Peast you need to create an instance of the Renderer class and associate a Formatter to it:
$source = "var a;";
//Generate the AST
$ast = Peast\Peast::latest($source, $options)->parse();
//Create the renderer
$renderer = new Peast\Renderer;
//Associate the formatter
$renderer->setFormatter(new Peast\Formatter\PrettyPrint);
//Render the AST
echo $renderer->render($ast); //"var a;"
Formatters
A Formatter specifies how the Renderer must format the nodes to produce the output. Peast implements 3 formatters: PrettyPrint, Compact and Expanded.
For example using this source code:
if (fn(param)) alert("Ok");
else alert("Fail");
PrettyPrint
Produces a well formatted version of the code.
if (fn(param)) {
alert("Ok");
} else {
alert("Fail");
}
Compact
Produces a compact version of the code by removing whitespaces and optional brackets.
if (fn(param))alert("Ok");else alert("Fail");
Expanded
An expanded version of PrettyPrint.
if ( fn( param ) )
{
alert( "Ok" );
} else
{
alert( "Fail" );
}
Custom Formatter
Peast allows you to create your own formatter.
You can do it by creating a class that extends Peast\Formatter\Base
class and overwriting its protected properties:
class MyFormatter extends Peast\Formatter\Base {
//Use Windows style line endings
protected $newLine = "\r\n";
}
$renderer = new Peast\Renderer;
$renderer->setFormatter(new MyFormatter);
echo $renderer->render($ast);
Available properties are:
$newLine
: line separator string (default:"\n"
)$indentation
: indentation string (default:"\t"
)$newLineBeforeCurlyBracket
: if true, open curly brackets of code blocks will be put on a new line (default:false
)$alwaysWrapBlocks
: if true, curly brackets around code blocks will always be inserted, also when they are optional (default:true
)$spacesAroundOperators
: if true, a space will be inserted before and after operators (default:true
)$spacesInsideRoundBrackets
: if true, content inside round brackets will be surrounded by spaces (default:false
)
Shortcut method
Every syntax node has its own render
method that you can use as a shortcut.
For example:
$ast = Peast\Peast::latest($source, $options)->parse();
$ast->render(new Peast\Formatter\PrettyPrint);
//Equivalent to
$ast = Peast\Peast::latest($source, $options)->parse();
$renderer = new Peast\Renderer;
$renderer->setFormatter(new Peast\Formatter\PrettyPrint);
$renderer->render($ast);
Comments rendering
From version 1.14
Comments can be rendered by passing true
to the formatter constructor:
$ast = Peast\Peast::latest($source, array("comments" => true))->parse();
$ast->render(new Peast\Formatter\PrettyPrint(true));
Note that comments can be rendered only when parser is enabled to collect them, to do this you must set the comments
option to true
.
Also note that only PrettyPrint and Expanded formatters allow comments rendering, while Compact does not allow it by default.