Added a content type system to be able to extend the conversion mechanism
This commit is contained in:
bovenliggende
45328d5f4e
commit
b5ce4f1d79
@ -1,6 +1,5 @@
|
||||
{
|
||||
"docs_directory": "docs",
|
||||
"valid_content_extensions": ["md", "markdown"],
|
||||
|
||||
"title": "My Project",
|
||||
"tagline": "My Stylish Documentation",
|
||||
|
@ -23,9 +23,15 @@ class Generate extends SymfonyCommand
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
// Initialize the system
|
||||
$daux = new Daux(Daux::STATIC_MODE);
|
||||
$daux->initialize($input->getOption('configuration'));
|
||||
|
||||
// Set the format if requested
|
||||
if ($input->getOption('format')) {
|
||||
$daux->getParams()['format'] = $input->getOption('format');
|
||||
}
|
||||
|
||||
$width = $this->getApplication()->getTerminalDimensions()[0];
|
||||
|
||||
// Instiantiate the processor if one is defined
|
||||
@ -35,11 +41,6 @@ class Generate extends SymfonyCommand
|
||||
$daux->generateTree();
|
||||
$daux->getProcessor()->manipulateTree($daux->tree);
|
||||
|
||||
// Set the format if requested
|
||||
if ($input->getOption('format')) {
|
||||
$daux->getParams()['format'] = $input->getOption('format');
|
||||
}
|
||||
|
||||
// Generate the documentation
|
||||
$daux->getGenerator()->generateAll($input, $output, $width);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
<?php namespace Todaymade\Daux;
|
||||
|
||||
use Symfony\Component\Console\Output\NullOutput;
|
||||
use Todaymade\Daux\Format\Base\ContentTypes\ContentTypeHandler;
|
||||
use Todaymade\Daux\Tree\Builder;
|
||||
use Todaymade\Daux\Tree\Root;
|
||||
|
||||
@ -15,6 +16,17 @@ class Daux
|
||||
/** @var string */
|
||||
public $internal_base;
|
||||
|
||||
/** @var \Todaymade\Daux\Format\Base\Generator */
|
||||
protected $generator;
|
||||
|
||||
/** @var \Todaymade\Daux\Format\Base\ContentTypes\ContentTypeHandler */
|
||||
protected $typeHandler;
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
protected $validExtensions;
|
||||
|
||||
/** @var string */
|
||||
private $docs_path;
|
||||
|
||||
@ -146,6 +158,8 @@ class Daux
|
||||
*/
|
||||
public function generateTree()
|
||||
{
|
||||
$this->options['valid_content_extensions'] = $this->getContentExtensions();
|
||||
|
||||
$this->tree = new Root($this->getParams(), $this->docs_path);
|
||||
Builder::build($this->tree, $this->options['ignore']);
|
||||
|
||||
@ -257,6 +271,10 @@ class Daux
|
||||
*/
|
||||
public function getGenerator()
|
||||
{
|
||||
if ($this->generator) {
|
||||
return $this->generator;
|
||||
}
|
||||
|
||||
$generators = $this->getGenerators();
|
||||
|
||||
$format = $this->getParams()['format'];
|
||||
@ -275,6 +293,35 @@ class Daux
|
||||
throw new \RuntimeException("The class '$class' does not implement the '$interface' interface");
|
||||
}
|
||||
|
||||
return new $class($this);
|
||||
return $this->generator = new $class($this);
|
||||
}
|
||||
|
||||
public function getContentTypeHandler()
|
||||
{
|
||||
if ($this->typeHandler) {
|
||||
return $this->typeHandler;
|
||||
}
|
||||
|
||||
$base_types = $this->getGenerator()->getContentTypes();
|
||||
|
||||
$extended = $this->getProcessor()->addContentType();
|
||||
|
||||
$types = array_merge($base_types, $extended);
|
||||
|
||||
return $this->typeHandler = new ContentTypeHandler($types);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all content file extensions
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getContentExtensions()
|
||||
{
|
||||
if ($this->validExtensions) {
|
||||
return $this->validExtensions;
|
||||
}
|
||||
|
||||
return $this->validExtensions = $this->getContentTypeHandler()->getContentExtensions();
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
<?php namespace Todaymade\Daux\Format\Base;
|
||||
|
||||
use League\CommonMark\CommonMarkConverter;
|
||||
use Todaymade\Daux\Config;
|
||||
use Todaymade\Daux\Format\Base\ContentTypes\ContentType;
|
||||
use Todaymade\Daux\Tree\Content;
|
||||
|
||||
abstract class MarkdownPage extends SimplePage
|
||||
abstract class ContentPage extends SimplePage
|
||||
{
|
||||
/**
|
||||
* @var Content
|
||||
@ -17,9 +17,9 @@ abstract class MarkdownPage extends SimplePage
|
||||
protected $params;
|
||||
|
||||
/**
|
||||
* @var CommonMarkConverter
|
||||
* @var ContentType
|
||||
*/
|
||||
protected $converter;
|
||||
protected $contentType;
|
||||
|
||||
public function __construct($title, $content)
|
||||
{
|
||||
@ -41,14 +41,17 @@ abstract class MarkdownPage extends SimplePage
|
||||
$this->params = $params;
|
||||
}
|
||||
|
||||
protected function getMarkdownConverter()
|
||||
/**
|
||||
* @param ContentType $contentType
|
||||
*/
|
||||
public function setContentType($contentType)
|
||||
{
|
||||
return $this->converter;
|
||||
$this->contentType = $contentType;
|
||||
}
|
||||
|
||||
protected function convertPage($content)
|
||||
{
|
||||
return $this->getMarkdownConverter()->convertToHtml($content);
|
||||
return $this->contentType->convert($content);
|
||||
}
|
||||
|
||||
protected function generatePage()
|
||||
@ -56,12 +59,12 @@ abstract class MarkdownPage extends SimplePage
|
||||
return $this->convertPage($this->content);
|
||||
}
|
||||
|
||||
public static function fromFile(Content $file, $params, CommonMarkConverter $converter)
|
||||
public static function fromFile(Content $file, $params, ContentType $contentType)
|
||||
{
|
||||
$page = new static($file->getTitle(), $file->getContent());
|
||||
$page->setFile($file);
|
||||
$page->setParams($params);
|
||||
$page->converter = $converter;
|
||||
$page->setContentType($contentType);
|
||||
|
||||
return $page;
|
||||
}
|
17
libs/Format/Base/ContentTypes/ContentType.php
Normal file
17
libs/Format/Base/ContentTypes/ContentType.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php namespace Todaymade\Daux\Format\Base\ContentTypes;
|
||||
|
||||
use Todaymade\Daux\Config;
|
||||
|
||||
interface ContentType
|
||||
{
|
||||
public function __construct(Config $config);
|
||||
|
||||
/**
|
||||
* Get the file extensions supported by this Content Type
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getExtensions();
|
||||
|
||||
public function convert($html);
|
||||
}
|
53
libs/Format/Base/ContentTypes/ContentTypeHandler.php
Normal file
53
libs/Format/Base/ContentTypes/ContentTypeHandler.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php namespace Todaymade\Daux\Format\Base\ContentTypes;
|
||||
|
||||
use Todaymade\Daux\Tree\Content;
|
||||
|
||||
class ContentTypeHandler
|
||||
{
|
||||
/**
|
||||
* @var ContentType[] $types
|
||||
*/
|
||||
protected $types;
|
||||
|
||||
/**
|
||||
* @param ContentType[] $types
|
||||
*/
|
||||
public function __construct($types)
|
||||
{
|
||||
$this->types = array_reverse($types);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all valid content file extensions
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getContentExtensions()
|
||||
{
|
||||
$extensions = [];
|
||||
foreach ($this->types as $type) {
|
||||
$extensions = array_merge($extensions, $type->getExtensions());
|
||||
}
|
||||
|
||||
return array_unique($extensions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ContentType able to handle this node
|
||||
*
|
||||
* @param Content $node
|
||||
* @return ContentType
|
||||
*/
|
||||
public function getType(Content $node)
|
||||
{
|
||||
$extension = pathinfo($node->getPath(), PATHINFO_EXTENSION);
|
||||
|
||||
foreach ($this->types as $type) {
|
||||
if (in_array($extension, $type->getExtensions())) {
|
||||
return $type;
|
||||
}
|
||||
}
|
||||
|
||||
throw new \RuntimeException("no contentType found for {$node->getPath()}");
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Todaymade\Daux\Format\Base\CommonMark;
|
||||
<?php namespace Todaymade\Daux\Format\Base\ContentTypes\Markdown;
|
||||
|
||||
use League\CommonMark\DocParser;
|
||||
use League\CommonMark\Environment;
|
31
libs/Format/Base/ContentTypes/Markdown/ContentType.php
Normal file
31
libs/Format/Base/ContentTypes/Markdown/ContentType.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php namespace Todaymade\Daux\Format\Base\ContentTypes\Markdown;
|
||||
|
||||
use Todaymade\Daux\Config;
|
||||
|
||||
class ContentType implements \Todaymade\Daux\Format\Base\ContentTypes\ContentType
|
||||
{
|
||||
/** @var Config */
|
||||
protected $config;
|
||||
|
||||
/** @var CommonMarkConverter */
|
||||
protected $converter;
|
||||
|
||||
public function __construct(Config $config)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->converter = new CommonMarkConverter(['daux' => $config]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getExtensions()
|
||||
{
|
||||
return ['md', 'markdown'];
|
||||
}
|
||||
|
||||
public function convert($html)
|
||||
{
|
||||
return $this->converter->convertToHtml($html);
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Todaymade\Daux\Format\Base\CommonMark;
|
||||
<?php namespace Todaymade\Daux\Format\Base\ContentTypes\Markdown;
|
||||
|
||||
use League\CommonMark\HtmlElement;
|
||||
use League\CommonMark\HtmlRendererInterface;
|
@ -3,6 +3,7 @@
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Todaymade\Daux\Daux;
|
||||
use Todaymade\Daux\Format\Base\ContentTypes\ContentTypeHandler;
|
||||
|
||||
interface Generator
|
||||
{
|
||||
@ -18,4 +19,9 @@ interface Generator
|
||||
* @return mixed
|
||||
*/
|
||||
public function generateAll(InputInterface $input, OutputInterface $output, $width);
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getContentTypes();
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
use DOMDocument;
|
||||
use Todaymade\Daux\DauxHelper;
|
||||
|
||||
class MarkdownPage extends \Todaymade\Daux\Format\Base\MarkdownPage
|
||||
class ContentPage extends \Todaymade\Daux\Format\Base\ContentPage
|
||||
{
|
||||
public $attachments = [];
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?php namespace Todaymade\Daux\Format\Confluence\CommonMark;
|
||||
<?php namespace Todaymade\Daux\Format\Confluence\ContentTypes\Markdown;
|
||||
|
||||
use League\CommonMark\Environment;
|
||||
|
||||
class CommonMarkConverter extends \Todaymade\Daux\Format\Base\CommonMark\CommonMarkConverter
|
||||
class CommonMarkConverter extends \Todaymade\Daux\Format\Base\ContentTypes\Markdown\CommonMarkConverter
|
||||
{
|
||||
protected function getLinkRenderer(Environment $environment)
|
||||
{
|
12
libs/Format/Confluence/ContentTypes/Markdown/ContentType.php
Normal file
12
libs/Format/Confluence/ContentTypes/Markdown/ContentType.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php namespace Todaymade\Daux\Format\Confluence\ContentTypes\Markdown;
|
||||
|
||||
use Todaymade\Daux\Config;
|
||||
|
||||
class ContentType extends \Todaymade\Daux\Format\Base\ContentTypes\Markdown\ContentType
|
||||
{
|
||||
public function __construct(Config $config)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->converter = new CommonMarkConverter(['daux' => $config]);
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Todaymade\Daux\Format\Confluence\CommonMark;
|
||||
<?php namespace Todaymade\Daux\Format\Confluence\ContentTypes\Markdown;
|
||||
|
||||
use League\CommonMark\Block\Element\AbstractBlock;
|
||||
use League\CommonMark\Block\Element\FencedCode;
|
@ -1,4 +1,4 @@
|
||||
<?php namespace Todaymade\Daux\Format\Confluence\CommonMark;
|
||||
<?php namespace Todaymade\Daux\Format\Confluence\ContentTypes\Markdown;
|
||||
|
||||
use League\CommonMark\Block\Element\AbstractBlock;
|
||||
use League\CommonMark\Block\Element\IndentedCode;
|
@ -1,11 +1,11 @@
|
||||
<?php namespace Todaymade\Daux\Format\Confluence\CommonMark;
|
||||
<?php namespace Todaymade\Daux\Format\Confluence\ContentTypes\Markdown;
|
||||
|
||||
use League\CommonMark\HtmlElement;
|
||||
use League\CommonMark\HtmlRendererInterface;
|
||||
use League\CommonMark\Inline\Element\AbstractInline;
|
||||
use League\CommonMark\Inline\Element\Link;
|
||||
|
||||
class LinkRenderer extends \Todaymade\Daux\Format\Base\CommonMark\LinkRenderer
|
||||
class LinkRenderer extends \Todaymade\Daux\Format\Base\ContentTypes\Markdown\LinkRenderer
|
||||
{
|
||||
/**
|
||||
* @param Link $inline
|
@ -5,6 +5,7 @@ use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Todaymade\Daux\Config;
|
||||
use Todaymade\Daux\Console\RunAction;
|
||||
use Todaymade\Daux\Daux;
|
||||
use Todaymade\Daux\Format\Base\ContentTypes\ContentTypeHandler;
|
||||
use Todaymade\Daux\Format\Confluence\CommonMark\CommonMarkConverter;
|
||||
use Todaymade\Daux\Tree\Content;
|
||||
use Todaymade\Daux\Tree\Directory;
|
||||
@ -16,9 +17,6 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator
|
||||
/** @var string */
|
||||
protected $prefix;
|
||||
|
||||
/** @var CommonMarkConverter */
|
||||
protected $converter;
|
||||
|
||||
/** @var Daux */
|
||||
protected $daux;
|
||||
|
||||
@ -28,7 +26,16 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator
|
||||
public function __construct(Daux $daux)
|
||||
{
|
||||
$this->daux = $daux;
|
||||
$this->converter = new CommonMarkConverter(['daux' => $this->daux->getParams()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getContentTypes()
|
||||
{
|
||||
return [
|
||||
new ContentTypes\Markdown\ContentType($this->daux->getParams())
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -83,7 +90,7 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator
|
||||
$data = [
|
||||
'title' => $this->prefix . $node->getTitle(),
|
||||
'file' => $node,
|
||||
'page' => MarkdownPage::fromFile($node, $params, $this->converter),
|
||||
'page' => ContentPage::fromFile($node, $params, $this->daux->getContentTypeHandler()->getType($node)),
|
||||
];
|
||||
|
||||
// As the page is lazily generated
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
use Todaymade\Daux\Tree\Root;
|
||||
|
||||
class MarkdownPage extends \Todaymade\Daux\Format\Base\MarkdownPage
|
||||
class ContentPage extends \Todaymade\Daux\Format\Base\ContentPage
|
||||
{
|
||||
private $language;
|
||||
private $homepage;
|
@ -7,6 +7,7 @@ use Todaymade\Daux\Console\RunAction;
|
||||
use Todaymade\Daux\Daux;
|
||||
use Todaymade\Daux\DauxHelper;
|
||||
use Todaymade\Daux\Format\Base\CommonMark\CommonMarkConverter;
|
||||
use Todaymade\Daux\Format\Base\ContentTypes\ContentTypeHandler;
|
||||
use Todaymade\Daux\Format\Base\LiveGenerator;
|
||||
use Todaymade\Daux\GeneratorHelper;
|
||||
use Todaymade\Daux\Tree\Content;
|
||||
@ -18,9 +19,6 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
|
||||
{
|
||||
use RunAction;
|
||||
|
||||
/** @var CommonMarkConverter */
|
||||
protected $converter;
|
||||
|
||||
/** @var Daux */
|
||||
protected $daux;
|
||||
|
||||
@ -30,7 +28,16 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
|
||||
public function __construct(Daux $daux)
|
||||
{
|
||||
$this->daux = $daux;
|
||||
$this->converter = new CommonMarkConverter(['daux' => $this->daux->getParams()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getContentTypes()
|
||||
{
|
||||
return [
|
||||
new \Todaymade\Daux\Format\Base\ContentTypes\Markdown\ContentType($this->daux->getParams())
|
||||
];
|
||||
}
|
||||
|
||||
public function generateAll(InputInterface $input, OutputInterface $output, $width)
|
||||
@ -113,6 +120,6 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
|
||||
}
|
||||
|
||||
$params['request'] = $node->getUrl();
|
||||
return MarkdownPage::fromFile($node, $params, $this->converter);
|
||||
return ContentPage::fromFile($node, $params, $this->daux->getContentTypeHandler()->getType($node));
|
||||
}
|
||||
}
|
||||
|
@ -62,10 +62,22 @@ class Processor
|
||||
* `Todaymade\Daux\Format\Base\Generator` contract.
|
||||
* You can also replace base generators.
|
||||
*
|
||||
* @return array
|
||||
* @return string[]
|
||||
*/
|
||||
public function addGenerators()
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide new content Types to be used during the generation
|
||||
* phase, with this you can change the markdown parser or add
|
||||
* a completely different file type.
|
||||
*
|
||||
* @return \Todaymade\Daux\Format\Base\ContentTypes\ContentType[]
|
||||
*/
|
||||
public function addContentType()
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
Laden…
Verwijs in nieuw issue
Block a user