Initial Drupal 11 with DDEV setup
This commit is contained in:
104
vendor/mck89/peast/doc/rendering.md
vendored
Normal file
104
vendor/mck89/peast/doc/rendering.md
vendored
Normal file
@ -0,0 +1,104 @@
|
||||
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:
|
||||
```php
|
||||
$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:
|
||||
```js
|
||||
if (fn(param)) alert("Ok");
|
||||
else alert("Fail");
|
||||
```
|
||||
|
||||
##### PrettyPrint
|
||||
Produces a well formatted version of the code.
|
||||
```js
|
||||
if (fn(param)) {
|
||||
alert("Ok");
|
||||
} else {
|
||||
alert("Fail");
|
||||
}
|
||||
```
|
||||
|
||||
##### Compact
|
||||
Produces a compact version of the code by removing whitespaces and optional brackets.
|
||||
```js
|
||||
if (fn(param))alert("Ok");else alert("Fail");
|
||||
```
|
||||
|
||||
##### Expanded
|
||||
An expanded version of PrettyPrint.
|
||||
```js
|
||||
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:
|
||||
|
||||
```php
|
||||
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:
|
||||
|
||||
```php
|
||||
$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:
|
||||
```php
|
||||
$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.
|
||||
Reference in New Issue
Block a user