Add format and processor as configuration options for live mode
This commit is contained in:
parent
3671214839
commit
d921c412b5
@ -8,6 +8,9 @@
|
|||||||
"image": "",
|
"image": "",
|
||||||
"languages": {},
|
"languages": {},
|
||||||
|
|
||||||
|
"format": "html",
|
||||||
|
"processor": "",
|
||||||
|
|
||||||
"ignore": {
|
"ignore": {
|
||||||
"files": [],
|
"files": [],
|
||||||
"folders": []
|
"folders": []
|
||||||
|
@ -233,4 +233,49 @@ class Daux
|
|||||||
|
|
||||||
return array_replace($default, $extended);
|
return array_replace($default, $extended);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getProcessorClass()
|
||||||
|
{
|
||||||
|
$processor = $this->getParams()['processor'];
|
||||||
|
|
||||||
|
if (empty($processor)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$class = "\\Todaymade\\Daux\\Extension\\" . $processor;
|
||||||
|
if (!class_exists($class)) {
|
||||||
|
throw new \RuntimeException("Class '$class' not found. We cannot use it as a Processor");
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO :: check that it implements processor
|
||||||
|
|
||||||
|
return $class;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Todaymade\Daux\Format\Base\Generator
|
||||||
|
*/
|
||||||
|
public function getGenerator()
|
||||||
|
{
|
||||||
|
$generators = $this->getGenerators();
|
||||||
|
|
||||||
|
$format = $this->getParams()['format'];
|
||||||
|
|
||||||
|
if (!array_key_exists($format, $generators)) {
|
||||||
|
throw new \RuntimeException("The format '$format' doesn't exist, did you forget to set your processor ?");
|
||||||
|
}
|
||||||
|
|
||||||
|
$class = $generators[$format];
|
||||||
|
if (!class_exists($class)) {
|
||||||
|
throw new \RuntimeException("Class '$class' not found. We cannot use it as a Generator");
|
||||||
|
}
|
||||||
|
|
||||||
|
$interface = 'Todaymade\Daux\Format\Base\Generator';
|
||||||
|
if (!in_array('Todaymade\Daux\Format\Base\Generator', class_implements($class))) {
|
||||||
|
throw new \RuntimeException("The class '$class' does not implement the '$interface' interface");
|
||||||
|
}
|
||||||
|
|
||||||
|
return new $class($this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
13
libs/Format/Base/LiveGenerator.php
Normal file
13
libs/Format/Base/LiveGenerator.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php namespace Todaymade\Daux\Format\Base;
|
||||||
|
|
||||||
|
use Todaymade\Daux\Config;
|
||||||
|
use Todaymade\Daux\Tree\Entry;
|
||||||
|
|
||||||
|
interface LiveGenerator {
|
||||||
|
/**
|
||||||
|
* @param Entry $node
|
||||||
|
* @param Config $params
|
||||||
|
* @return \Todaymade\Daux\Format\Base\Page
|
||||||
|
*/
|
||||||
|
public function generateOne(Entry $node, Config $params);
|
||||||
|
}
|
@ -6,6 +6,7 @@ use Todaymade\Daux\Config;
|
|||||||
use Todaymade\Daux\Daux;
|
use Todaymade\Daux\Daux;
|
||||||
use Todaymade\Daux\DauxHelper;
|
use Todaymade\Daux\DauxHelper;
|
||||||
use Todaymade\Daux\Format\Base\CommonMark\CommonMarkConverter;
|
use Todaymade\Daux\Format\Base\CommonMark\CommonMarkConverter;
|
||||||
|
use Todaymade\Daux\Format\Base\LiveGenerator;
|
||||||
use Todaymade\Daux\Format\Base\RunAction;
|
use Todaymade\Daux\Format\Base\RunAction;
|
||||||
use Todaymade\Daux\Generator\Helper;
|
use Todaymade\Daux\Generator\Helper;
|
||||||
use Todaymade\Daux\Tree\Content;
|
use Todaymade\Daux\Tree\Content;
|
||||||
@ -13,7 +14,7 @@ use Todaymade\Daux\Tree\Directory;
|
|||||||
use Todaymade\Daux\Tree\Entry;
|
use Todaymade\Daux\Tree\Entry;
|
||||||
use Todaymade\Daux\Tree\Raw;
|
use Todaymade\Daux\Tree\Raw;
|
||||||
|
|
||||||
class Generator implements \Todaymade\Daux\Format\Base\Generator
|
class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
|
||||||
{
|
{
|
||||||
use RunAction;
|
use RunAction;
|
||||||
|
|
||||||
@ -100,7 +101,12 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function generateOne(Entry $node, $params)
|
/**
|
||||||
|
* @param Entry $node
|
||||||
|
* @param Config $params
|
||||||
|
* @return \Todaymade\Daux\Format\Base\Page
|
||||||
|
*/
|
||||||
|
public function generateOne(Entry $node, Config $params)
|
||||||
{
|
{
|
||||||
if ($node instanceof Raw) {
|
if ($node instanceof Raw) {
|
||||||
return new RawPage($node->getPath());
|
return new RawPage($node->getPath());
|
||||||
|
@ -19,7 +19,7 @@ class Command extends SymfonyCommand
|
|||||||
->setDescription('Generate documentation')
|
->setDescription('Generate documentation')
|
||||||
->addOption('configuration', 'c', InputArgument::OPTIONAL, 'Configuration file')
|
->addOption('configuration', 'c', InputArgument::OPTIONAL, 'Configuration file')
|
||||||
->addOption('format', 'f', InputArgument::OPTIONAL, 'Output format, html or confluence', 'html')
|
->addOption('format', 'f', InputArgument::OPTIONAL, 'Output format, html or confluence', 'html')
|
||||||
->addOption('processor', 'p', InputArgument::OPTIONAL, 'Manipulations on the tree', 'none')
|
->addOption('processor', 'p', InputArgument::OPTIONAL, 'Manipulations on the tree')
|
||||||
->addOption('destination', 'd', InputArgument::OPTIONAL, $description, 'static');
|
->addOption('destination', 'd', InputArgument::OPTIONAL, $description, 'static');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,50 +30,30 @@ class Command extends SymfonyCommand
|
|||||||
|
|
||||||
$width = $this->getApplication()->getTerminalDimensions()[0];
|
$width = $this->getApplication()->getTerminalDimensions()[0];
|
||||||
|
|
||||||
$processor = $input->getOption('processor');
|
// Instiantiate the processor if one is defined
|
||||||
if (!empty($processor) && $processor != 'none') {
|
$this->prepareProcessor($daux, $input, $output, $width);
|
||||||
$this->prepareProcessor($processor, $daux, $output, $width);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Improve the tree with a processor
|
// Improve the tree with a processor
|
||||||
$daux->getProcessor()->manipulateTree($daux->tree);
|
$daux->getProcessor()->manipulateTree($daux->tree);
|
||||||
|
|
||||||
$this->launchGeneration($daux, $input, $output, $width);
|
// Set the format if requested
|
||||||
|
if ($input->getOption('format')) {
|
||||||
|
$daux->getParams()['format'] = $input->getOption('format');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function prepareProcessor($processor, Daux $daux, OutputInterface $output, $width)
|
// Generate the documentation
|
||||||
|
$daux->getGenerator()->generateAll($input, $output, $width);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function prepareProcessor(Daux $daux, InputInterface $input, OutputInterface $output, $width)
|
||||||
{
|
{
|
||||||
$class = "\\Todaymade\\Daux\\Extension\\" . $processor;
|
if ($input->getOption('processor')) {
|
||||||
if (class_exists($class)) {
|
$daux->getParams()['processor'] = $input->getOption('processor');
|
||||||
|
}
|
||||||
|
|
||||||
|
$class = $daux->getProcessorClass();
|
||||||
|
if ($class) {
|
||||||
$daux->setProcessor(new $class($daux, $output, $width));
|
$daux->setProcessor(new $class($daux, $output, $width));
|
||||||
} elseif (file_exists($processor)) {
|
|
||||||
include $processor;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function launchGeneration(Daux $daux, InputInterface $input, OutputInterface $output, $width)
|
|
||||||
{
|
|
||||||
$generators = $daux->getGenerators();
|
|
||||||
|
|
||||||
$format = strtolower($input->getOption('format'));
|
|
||||||
if (empty($format)) {
|
|
||||||
$format = 'html';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!array_key_exists($format, $generators)) {
|
|
||||||
throw new \RuntimeException("The format '$format' doesn't exist, did you forget to set your processor ?");
|
|
||||||
}
|
|
||||||
|
|
||||||
$class = $generators[$format];
|
|
||||||
if (!class_exists($class)) {
|
|
||||||
throw new \RuntimeException("Class '$class' not found. We cannot use it as a Generator");
|
|
||||||
}
|
|
||||||
|
|
||||||
$interface = 'Todaymade\Daux\Format\Base\Generator';
|
|
||||||
if (!in_array('Todaymade\Daux\Format\Base\Generator', class_implements($class))) {
|
|
||||||
throw new \RuntimeException("the class '$class' does not implement the '$interface' interface");
|
|
||||||
}
|
|
||||||
|
|
||||||
(new $class($daux))->generateAll($input, $output, $width);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
<?php namespace Todaymade\Daux\Server;
|
<?php namespace Todaymade\Daux\Server;
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Output\NullOutput;
|
||||||
use Todaymade\Daux\Daux;
|
use Todaymade\Daux\Daux;
|
||||||
use Todaymade\Daux\DauxHelper;
|
use Todaymade\Daux\DauxHelper;
|
||||||
use Todaymade\Daux\Exception;
|
use Todaymade\Daux\Exception;
|
||||||
|
use Todaymade\Daux\Format\Base\LiveGenerator;
|
||||||
use Todaymade\Daux\Format\HTML\Generator;
|
use Todaymade\Daux\Format\HTML\Generator;
|
||||||
use Todaymade\Daux\Format\HTML\RawPage;
|
use Todaymade\Daux\Format\HTML\RawPage;
|
||||||
|
|
||||||
@ -22,10 +24,21 @@ class Server
|
|||||||
{
|
{
|
||||||
$daux = new Daux(Daux::LIVE_MODE);
|
$daux = new Daux(Daux::LIVE_MODE);
|
||||||
|
|
||||||
try {
|
|
||||||
$daux->initialize();
|
$daux->initialize();
|
||||||
|
|
||||||
|
$class = $daux->getProcessorClass();
|
||||||
|
if ($class) {
|
||||||
|
$daux->setProcessor(new $class($daux, new NullOutput(), 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Improve the tree with a processor
|
||||||
|
$daux->getProcessor()->manipulateTree($daux->tree);
|
||||||
|
|
||||||
$server = new static($daux);
|
$server = new static($daux);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
|
||||||
$page = $server->handle($_REQUEST);
|
$page = $server->handle($_REQUEST);
|
||||||
} catch (NotFoundException $e) {
|
} catch (NotFoundException $e) {
|
||||||
http_response_code(404);
|
http_response_code(404);
|
||||||
@ -117,9 +130,16 @@ class Server
|
|||||||
throw new NotFoundException('The Page you requested is yet to be made. Try again later.');
|
throw new NotFoundException('The Page you requested is yet to be made. Try again later.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO :: make it possible to replace the generator in live code
|
$generator = $this->daux->getGenerator();
|
||||||
$generator = new Generator($this->daux);
|
|
||||||
return $generator->generateOne($file, $this->params);
|
if (!$generator instanceof LiveGenerator) {
|
||||||
|
throw new \RuntimeException(
|
||||||
|
"The generator '" . get_class($generator) . "' does not implement the interface " .
|
||||||
|
"'Todaymade\\Daux\\Format\\Base\\LiveGenerator' and thus doesn't support live rendering."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->daux->getGenerator()->generateOne($file, $this->params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getRequest()
|
public function getRequest()
|
||||||
|
Loading…
Reference in New Issue
Block a user