daux.io/For_Developers/Creating_a_Processor.html

194 regels
13 KiB
HTML

<!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>