Skip to content

Latest commit

 

History

History
104 lines (92 loc) · 3.13 KB

rendering.md

File metadata and controls

104 lines (92 loc) · 3.13 KB

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.