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.
public function manipulateTree(Root $root)
{
print_r($root->dump());
exit;
}
also, add this at the beginning of the file:
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:
public function manipulateTree(Root $root)
{
}
Two helpers from the class Todaymade\Daux\Tree\Builder
will greatly help you doing that:
$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.
public function extendCommonMarkEnvironment(Environment $environment)
{
}
See the details on CommonMark's website.
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
.
public function addGenerators()
{
return ['custom_generator' => '\Todaymade\Daux\Extension\MyNewGenerator'];
}