The recommended way to extend Daux is through Processors.

The main advantage, is that you can run it with the source or with `daux` independently. You don't need to hack in the core.

## Adding classes

Next to your `docs` directory, you can create a `daux` directory that can contain your Processor.

The classes must respect the PSR-4 Naming convention. And have `\Todaymade\Daux\Extension` as a base namespace.
 
By default, we created a `daux/Processor.php` file to get you started.

## A quick test ?

For the example we're just going to dump the tree and exit.

```php
public function manipulateTree(Root $root)
{
    print_r($root->dump());
    exit;
}
```

also, add this at the beginning of the file:

```php
use Todaymade\Daux\Tree\Root;
```

Let's just try if it works by running `daux --processor=Processor`

Yes, you get a big array dump! You're good to go.

## What can I achieve ?

There are a few methods that you can override to add some

### Change the parsed tree.

By default, Daux.io parses your directory to find pages. but, for a reason or another, you might want to programmatically add some pages.

This can be done with: 

```php
public function manipulateTree(Root $root)
{
}
```

Two helpers from the class `Todaymade\Daux\Tree\Builder` will greatly help you doing that:

```php
$new = Builder::getOrCreateDir($root, 'New Pages');

$page = Builder::getOrCreatePage($new, 'index');
$page->setContent('The index page for the new folder');

$page = Builder::getOrCreatePage($new, 'A New Hope');
$page->setContent('A long time ago in a galaxy far away');
```

Both methods `getOrCreateDir` and `getOrCreatePage` take two parameters : `parent` and `title`

The page will automatically be treated as markdown and converted like a normal page.

If you create a new ContentType, like let's say LaTeX, you would set the title `My Page.tex` it will keep the title `My Page` and use your renderer.
  
If the extension is not mapped to a Generator, it will simply create the file as-is without manipulation.

### Extend the Markdown Generator

You can extend the Markdown Parser in any way wou want with this method.

```php
public function extendCommonMarkEnvironment(Environment $environment)
{
}
```

See the details on [CommonMark's website](http://commonmark.thephpleague.com/customization/overview/).

### Add new generators

You can add new generators to Daux.io and use them right away, they must implement the 
`\Todaymade\Daux\Format\Base\Generator` interface and if you want to use the live mode with your generator 
you have to implement `\Todaymade\Daux\Format\Base\LiveGenerator`. 

```php
public function addGenerators()
{
    return ['custom_generator' => '\Todaymade\Daux\Extension\MyNewGenerator'];
}
```