mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-02-11 14:38:39 +00:00
implement lookup table in replacement for method lookup
This commit is contained in:
parent
d547401cb1
commit
268495a5f3
|
|
@ -16,7 +16,6 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace phpOMS\Utils\Parser\Markdown;
|
namespace phpOMS\Utils\Parser\Markdown;
|
||||||
|
|
||||||
use NullElo;
|
|
||||||
use phpOMS\Uri\UriFactory;
|
use phpOMS\Uri\UriFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -42,7 +41,7 @@ class Markdown
|
||||||
* @var string
|
* @var string
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public const version = '1.8.0-beta-7';
|
public const VERSION = '1.8.0-beta-7';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Special markdown characters
|
* Special markdown characters
|
||||||
|
|
@ -269,6 +268,26 @@ class Markdown
|
||||||
'Code',
|
'Code',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is continuable
|
||||||
|
*
|
||||||
|
* @var string[]
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
private const CONTINUABLE = [
|
||||||
|
'Code', 'Comment', 'FencedCode', 'List', 'Quote', 'Table', 'Math', 'Checkbox', 'Footnote', 'DefinitionList', 'Markup'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is completable
|
||||||
|
*
|
||||||
|
* @var string[]
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
private const COMPLETABLE = [
|
||||||
|
'Math', 'Table', 'Checkbox', 'Footnote', 'Markup', 'Code', 'FencedCode', 'List'
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parsing options
|
* Parsing options
|
||||||
*
|
*
|
||||||
|
|
@ -3242,7 +3261,7 @@ class Markdown
|
||||||
$this->currentMeaning = $meaning;
|
$this->currentMeaning = $meaning;
|
||||||
|
|
||||||
$inline['element'] = $this->elementApplyRecursiveDepthFirst(
|
$inline['element'] = $this->elementApplyRecursiveDepthFirst(
|
||||||
[$this, 'insertAbreviation'],
|
'insertAbreviation',
|
||||||
$inline['element']
|
$inline['element']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -3519,7 +3538,7 @@ class Markdown
|
||||||
if (isset($block)) {
|
if (isset($block)) {
|
||||||
$currentBlock = $block;
|
$currentBlock = $block;
|
||||||
continue;
|
continue;
|
||||||
} elseif ($this->isBlockCompletable($currentBlock['type'])) {
|
} elseif (\in_array($currentBlock['type'], self::COMPLETABLE)) {
|
||||||
$methodName = 'block' . $currentBlock['type'] . 'Complete';
|
$methodName = 'block' . $currentBlock['type'] . 'Complete';
|
||||||
$currentBlock = $this->{$methodName}($currentBlock);
|
$currentBlock = $this->{$methodName}($currentBlock);
|
||||||
}
|
}
|
||||||
|
|
@ -3548,7 +3567,7 @@ class Markdown
|
||||||
$block['identified'] = true;
|
$block['identified'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->isBlockContinuable($blockType)) {
|
if (\in_array($blockType, self::CONTINUABLE)) {
|
||||||
$block['continuable'] = true;
|
$block['continuable'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3585,7 +3604,7 @@ class Markdown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($currentBlock['continuable']) && $this->isBlockCompletable($currentBlock['type'])) {
|
if (isset($currentBlock['continuable']) && \in_array($currentBlock['type'], self::COMPLETABLE)) {
|
||||||
$methodName = 'block' . $currentBlock['type'] . 'Complete';
|
$methodName = 'block' . $currentBlock['type'] . 'Complete';
|
||||||
$currentBlock = $this->{$methodName}($currentBlock);
|
$currentBlock = $this->{$methodName}($currentBlock);
|
||||||
}
|
}
|
||||||
|
|
@ -3619,38 +3638,6 @@ class Markdown
|
||||||
return $block['element'];
|
return $block['element'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Can the block continue?
|
|
||||||
*
|
|
||||||
* @param string $type Block type
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*
|
|
||||||
* @todo Consider to create lookup table
|
|
||||||
*
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
protected function isBlockContinuable(string $type) : bool
|
|
||||||
{
|
|
||||||
return \method_exists($this, 'block' . $type . 'Continue');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is the block finished
|
|
||||||
*
|
|
||||||
* @param string $type Block type
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*
|
|
||||||
* @todo Consider to create lookup table
|
|
||||||
*
|
|
||||||
* @since 1.0.0
|
|
||||||
*/
|
|
||||||
protected function isBlockCompletable($type) : bool
|
|
||||||
{
|
|
||||||
return \method_exists($this, 'block' . $type . 'Complete');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Continue block code
|
* Continue block code
|
||||||
*
|
*
|
||||||
|
|
@ -4141,28 +4128,28 @@ class Markdown
|
||||||
/*
|
/*
|
||||||
protected function handleElementRecursive(array $element)
|
protected function handleElementRecursive(array $element)
|
||||||
{
|
{
|
||||||
return $this->elementApplyRecursive([$this, 'handle'], $element);
|
return $this->elementApplyRecursive('handle', $element);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function handleElementsRecursive(array $elements)
|
protected function handleElementsRecursive(array $elements)
|
||||||
{
|
{
|
||||||
return $this->elementsApplyRecursive([$this, 'handle'], $elements);
|
return $this->elementsApplyRecursive('handle', $elements);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle element recursiveley
|
* Handle element recursiveley
|
||||||
*
|
*
|
||||||
* @param \Closure $closure Closure for handling element
|
* @param string|\Closure $closure Closure for handling element
|
||||||
* @param array $element Element to handle
|
* @param array $element Element to handle
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
protected function elementApplyRecursive(\Closure $closure, array $element) : array
|
protected function elementApplyRecursive(string|\Closure $closure, array $element) : array
|
||||||
{
|
{
|
||||||
$element = $closure($element);
|
$element = \is_string($closure) ? $this->{$closure}($element) : $closure($element);
|
||||||
|
|
||||||
if (isset($element['elements'])) {
|
if (isset($element['elements'])) {
|
||||||
//$element['elements'] = $this->elementsApplyRecursive($closure, $element['elements']);
|
//$element['elements'] = $this->elementsApplyRecursive($closure, $element['elements']);
|
||||||
|
|
@ -4179,14 +4166,14 @@ class Markdown
|
||||||
/**
|
/**
|
||||||
* Handle element recursiveley
|
* Handle element recursiveley
|
||||||
*
|
*
|
||||||
* @param \Closure $closure Closure for handling element
|
* @param string|\Closure $closure Closure for handling element
|
||||||
* @param array $element Element to handle
|
* @param array $element Element to handle
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
protected function elementApplyRecursiveDepthFirst(\Closure $closure, array $element) : array
|
protected function elementApplyRecursiveDepthFirst(string|\Closure $closure, array $element) : array
|
||||||
{
|
{
|
||||||
if (isset($element['elements'])) {
|
if (isset($element['elements'])) {
|
||||||
//$element['elements'] = $this->elementsApplyRecursiveDepthFirst($closure, $element['elements']);
|
//$element['elements'] = $this->elementsApplyRecursiveDepthFirst($closure, $element['elements']);
|
||||||
|
|
@ -4200,7 +4187,7 @@ class Markdown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $closure($element);
|
return \is_string($closure) ? $this->{$closure}($element) : $closure($element);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user