daux.io/For_Developers/Creating_a_Processor.html

194 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<title>Creating a Processor - DAUX.IO</title>
<meta name="description" content="The Easiest Way To Document Your Project">
<meta name="author" content="Stéphane Goetz">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="icon" href="../themes/daux/img/favicon-blue.png" type="image/x-icon">
<!-- Mobile -->
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Font -->
<!-- CSS -->
<link href='../themes/daux/css/theme-blue.min.css' rel='stylesheet' type='text/css'>
<!-- Tipue Search -->
<link href="../tipuesearch/tipuesearch.css" rel="stylesheet">
<!--[if lt IE 9]>
<script src="../themes/daux/js/html5shiv-3.7.3.min.js"></script>
<![endif]-->
</head>
<body class="with-float ">
<div class="Columns content">
<aside class="Columns__left Collapsible">
<button type="button" class="Button Collapsible__trigger">
<span class="Collapsible__trigger__bar"></span>
<span class="Collapsible__trigger__bar"></span>
<span class="Collapsible__trigger__bar"></span>
</button>
<a class="Brand" href="../index.html">DAUX.IO</a>
<div class="Search">
<svg class="Search__icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 451 451">
<path d="M447.05 428l-109.6-109.6c29.4-33.8 47.2-77.9 47.2-126.1C384.65 86.2 298.35 0 192.35 0 86.25 0 .05 86.3.05 192.3s86.3 192.3 192.3 192.3c48.2 0 92.3-17.8 126.1-47.2L428.05 447c2.6 2.6 6.1 4 9.5 4s6.9-1.3 9.5-4c5.2-5.2 5.2-13.8 0-19zM26.95 192.3c0-91.2 74.2-165.3 165.3-165.3 91.2 0 165.3 74.2 165.3 165.3s-74.1 165.4-165.3 165.4c-91.1 0-165.3-74.2-165.3-165.4z"/>
</svg>
<input type="search" id="tipue_search_input" class="Search__field" placeholder="Search..." autocomplete="on"
results=25 autosave=text_search>
</div>
<div class="Collapsible__content">
<!-- Navigation -->
<ul class='Nav'><li class='Nav__item '><a href="../Getting_Started.html">Getting Started</a></li><li class='Nav__item has-children'><a href="../Features/Auto_Syntax_Highlight.html" class="folder"><i class="Nav__arrow">&nbsp;</i>Features</a><ul class='Nav'><li class='Nav__item '><a href="../Features/Auto_Syntax_Highlight.html">Auto Syntax Highlight</a></li><li class='Nav__item '><a href="../Features/CommonMark_compliant.html">CommonMark compliant</a></li><li class='Nav__item '><a href="../Features/Edit_on_GitHub_links.html">Edit on GitHub links</a></li><li class='Nav__item '><a href="../Features/Front_Matter.html">Front Matter</a></li><li class='Nav__item '><a href="../Features/Internal_links.html">Internal links</a></li><li class='Nav__item '><a href="../Features/Landing_page.html">Landing page</a></li><li class='Nav__item '><a href="../Features/Live_mode.html">Live mode</a></li><li class='Nav__item '><a href="../Features/Multilanguage.html">Multilanguage</a></li><li class='Nav__item '><a href="../Features/Multiple_Output_Formats.html">Multiple Output Formats</a></li><li class='Nav__item '><a href="../Features/Navigation_and_Sorting.html">Navigation and Sorting</a></li><li class='Nav__item '><a href="../Features/Search.html">Search</a></li><li class='Nav__item '><a href="../Features/Static_Site_Generation.html">Static Site Generation</a></li><li class='Nav__item '><a href="../Features/Table_of_contents.html">Table of contents</a></li></ul></li><li class='Nav__item has-children'><a href="../Examples/index.html" class="folder"><i class="Nav__arrow">&nbsp;</i>Examples</a><ul class='Nav'><li class='Nav__item '><a href="../Examples/Code_Highlighting.html">Code Highlighting</a></li><li class='Nav__item '><a href="../Examples/Hello_World.html">Hello World</a></li><li class='Nav__item '><a href="../Examples/Hello_World_de.html">Hallo Welt</a></li><li class='Nav__item '><a href="../Examples/привет_мир.html">привет мир</a></li><li class='Nav__item '><a href="../Examples/你好世界.html">你好世界</a></li></ul></li><li class='Nav__item has-children'><a href="../Configuration/index.html" class="folder"><i class="Nav__arrow">&nbsp;</i>Configuration</a><ul class='Nav'><li class='Nav__item '><a href="../Configuration/Confluence_upload.html">Confluence upload</a></li><li class='Nav__item '><a href="../Configuration/Html_export.html">Html export</a></li></ul></li><li class='Nav__item Nav__item--open has-children'><a href="../For_Developers/Creating_a_Processor.html" class="folder"><i class="Nav__arrow">&nbsp;</i>For Developers</a><ul class='Nav'><li class='Nav__item Nav__item--active'><a href="../For_Developers/Creating_a_Processor.html">Creating a Processor</a></li><li class='Nav__item '><a href="../For_Developers/Creating_a_Theme.html">Creating a Theme</a></li></ul></li></ul>
<div class="Links">
<hr/>
<a href="https://github.com/dauxio/daux.io/archive/master.zip" target="_blank">Download</a>
<br />
<a href="https://github.com/dauxio/daux.io" target="_blank">GitHub Repo</a>
<br />
<a href="https://github.com/dauxio/daux.io/issues" target="_blank">Help/Support/Bugs</a>
<br />
</div>
<div class="CodeToggler">
<hr/>
<span class="CodeToggler__text">Code blocks</span>
<div class="ButtonGroup" role="group">
<button class="Button Button--default Button--small CodeToggler__button CodeToggler__button--hide">No</button>
<button class="Button Button--default Button--small CodeToggler__button CodeToggler__button--below">Below</button>
<button class="Button Button--default Button--small CodeToggler__button CodeToggler__button--float">Inline</button>
</div>
</div>
<div class="Twitter">
<hr/>
<iframe allowtransparency="true" frameborder="0" scrolling="no" style="width:162px; height:20px;" src="https://platform.twitter.com/widgets/follow_button.html?screen_name=onigoetz&amp;show_count=false"></iframe>
<br />
<br />
</div>
<div class="PoweredBy">
<hr/>
Powered by Daux.io </div>
</div>
</aside>
<div class="Columns__right Columns__right--float">
<div class="Columns__right__content">
<div class="doc_content">
<article class="Page">
<div class="Page__header">
<h1><a href="../For_Developers/Creating_a_Processor.html">For Developers</a> <svg class="Page__header--separator" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 477.175 477.175"><path d="M360.73 229.075l-225.1-225.1c-5.3-5.3-13.8-5.3-19.1 0s-5.3 13.8 0 19.1l215.5 215.5-215.5 215.5c-5.3 5.3-5.3 13.8 0 19.1 2.6 2.6 6.1 4 9.5 4 3.4 0 6.9-1.3 9.5-4l225.1-225.1c5.3-5.2 5.3-13.8.1-19z"/></svg> <a href="../For_Developers/Creating_a_Processor.html">Creating a Processor</a></h1>
<span class="ModifiedDate">
Thursday, June 7, 2018 11:42 AM </span>
<span class="EditOn">
<a href="https://github.com/dauxio/daux.io/blob/master/docs/10_For_Developers/Creating_a_Processor.md" target="_blank">
Edit on GitHub </a>
</span>
</div>
<div class="s-content">
<p>The recommended way to extend Daux is through Processors.</p>
<p>The main advantage, is that you can run it with the source or with <code>daux</code> independently. You don't need to hack in the core.</p>
<h2 id="page_Adding-classes">Adding classes</h2>
<p>Next to your <code>docs</code> directory, you can create a <code>daux</code> directory that can contain your Processor.</p>
<p>The classes must respect the PSR-4 Naming convention. And have <code>\Todaymade\Daux\Extension</code> as a base namespace.</p>
<p>By default, we created a <code>daux/Processor.php</code> file to get you started.</p>
<h2 id="page_A-quick-test">A quick test ?</h2>
<p>For the example we're just going to dump the tree and exit.</p>
<pre><code class="language-php">public function manipulateTree(Root $root)
{
print_r($root-&gt;dump());
exit;
}
</code></pre>
<p>also, add this at the beginning of the file:</p>
<pre><code class="language-php">use Todaymade\Daux\Tree\Root;
</code></pre>
<p>Let's just try if it works by running <code>daux --processor=Processor</code></p>
<p>Yes, you get a big array dump! You're good to go.</p>
<h2 id="page_What-can-I-achieve">What can I achieve ?</h2>
<p>There are a few methods that you can override to add some</p>
<h3 id="page_Change-the-parsed-tree">Change the parsed tree.</h3>
<p>By default, Daux.io parses your directory to find pages. but, for a reason or another, you might want to programmatically add some pages.</p>
<p>This can be done with:</p>
<pre><code class="language-php">public function manipulateTree(Root $root)
{
}
</code></pre>
<p>Two helpers from the class <code>Todaymade\Daux\Tree\Builder</code> will greatly help you doing that:</p>
<pre><code class="language-php">$new = Builder::getOrCreateDir($root, 'New Pages');
$page = Builder::getOrCreatePage($new, 'index');
$page-&gt;setContent('The index page for the new folder');
$page = Builder::getOrCreatePage($new, 'A New Hope');
$page-&gt;setContent('A long time ago in a galaxy far away');
</code></pre>
<p>Both methods <code>getOrCreateDir</code> and <code>getOrCreatePage</code> take two parameters : <code>parent</code> and <code>title</code></p>
<p>The page will automatically be treated as markdown and converted like a normal page.</p>
<p>If you create a new ContentType, like let's say LaTeX, you would set the title <code>My Page.tex</code> it will keep the title <code>My Page</code> and use your renderer.</p>
<p>If the extension is not mapped to a Generator, it will simply create the file as-is without manipulation.</p>
<h3 id="page_Extend-the-Markdown-Generator">Extend the Markdown Generator</h3>
<p>You can extend the Markdown Parser in any way wou want with this method.</p>
<pre><code class="language-php">public function extendCommonMarkEnvironment(Environment $environment)
{
}
</code></pre>
<p>See the details on <a href="http://commonmark.thephpleague.com/customization/overview/" class="Link--external">CommonMark's website</a>.</p>
<h3 id="page_Add-new-generators">Add new generators</h3>
<p>You can add new generators to Daux.io and use them right away, they must implement the
<code>\Todaymade\Daux\Format\Base\Generator</code> interface and if you want to use the live mode with your generator
you have to implement <code>\Todaymade\Daux\Format\Base\LiveGenerator</code>.</p>
<pre><code class="language-php">public function addGenerators()
{
return ['custom_generator' =&gt; '\Todaymade\Daux\Extension\MyNewGenerator'];
}
</code></pre>
</div>
<nav>
<ul class="Pager">
<li class=Pager--prev><a href="../Configuration/Html_export.html">Previous</a></li> <li class=Pager--next><a href="../For_Developers/Creating_a_Theme.html">Next</a></li> </ul>
</nav>
</article>
</div>
</div>
</div>
</div>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-3551397-7', '');
ga('send', 'pageview');
</script>
<!-- JS -->
<script src="../themes/daux/js/jquery-1.11.3.min.js"></script><script src="../themes/daux/js/highlight.pack.js"></script><script src="../themes/daux/js/daux.js"></script>
<!-- Tipue Search -->
<script type="text/javascript" src="../tipuesearch/tipuesearch.js"></script>
<script>
window.onunload = function(){}; // force $(document).ready to be called on back/forward navigation in firefox
$(function() {
tipuesearch({
'base_url': '../'
});
});
</script>
</body>
</html>