Tentative de régler le bordel

This commit is contained in:
Gauvain Boiché
2020-03-31 15:58:31 +02:00
parent a1864c0414
commit 459b46df7b
345 changed files with 10758 additions and 4066 deletions

View File

@@ -14,7 +14,7 @@
namespace phpbb\textformatter\s9e;
use phpbb\textformatter\s9e\factory;
use s9e\TextFormatter\Configurator\Helpers\TemplateHelper;
use s9e\TextFormatter\Configurator\Helpers\TemplateLoader;
use s9e\TextFormatter\Configurator\Items\UnsafeTemplate;
class bbcode_merger
@@ -50,7 +50,7 @@ class bbcode_merger
$with = $this->create_bbcode($with);
// Select the appropriate strategy for merging this BBCode
if ($this->is_content_bbcode($without, $with))
if (!$this->is_optional_bbcode($without, $with) && $this->is_content_bbcode($without, $with))
{
$merged = $this->merge_content_bbcode($without, $with);
}
@@ -91,9 +91,9 @@ class bbcode_merger
*/
protected function indent_template($template)
{
$dom = TemplateHelper::loadTemplate($template);
$dom = TemplateLoader::load($template);
$dom->formatOutput = true;
$template = TemplateHelper::saveTemplate($dom);
$template = TemplateLoader::save($dom);
// Remove the first level of indentation if the template starts with whitespace
if (preg_match('(^\\n +)', $template, $m))
@@ -107,12 +107,12 @@ class bbcode_merger
/**
* Test whether the two definitions form a "content"-style BBCode
*
* Such BBCodes include the [URL] BBCode, which uses its text content as
* Such BBCodes include the [url] BBCode, which uses its text content as
* attribute if none is provided
*
* @param array $without BBCode definition without an attribute
* @param array $with BBCode definition with an attribute
* @return array Merged definition
* @return bool
*/
protected function is_content_bbcode(array $without, array $with)
{
@@ -122,6 +122,22 @@ class bbcode_merger
&& preg_match('(>[^<]*?' . preg_quote($m[1]) . '[^>]*?<)s', $without['template']));
}
/**
* Test whether the two definitions form BBCode with an optional attribute
*
* @param array $without BBCode definition without an attribute
* @param array $with BBCode definition with an attribute
* @return bool
*/
protected function is_optional_bbcode(array $without, array $with)
{
// Remove the default attribute from the definition
$with['usage'] = preg_replace('(=[^\\]]++)', '', $with['usage']);
// Test whether both definitions are the same, regardless of case
return strcasecmp($without['usage'], $with['usage']) === 0;
}
/**
* Merge the two BBCode definitions of a "content"-style BBCode
*
@@ -131,7 +147,7 @@ class bbcode_merger
*/
protected function merge_content_bbcode(array $without, array $with)
{
// Convert [X={X}] into [X={X;useContent}]
// Convert [x={X}] into [x={X;useContent}]
$usage = preg_replace('(\\})', ';useContent}', $with['usage'], 1);
// Use the template from the definition that uses an attribute
@@ -143,7 +159,7 @@ class bbcode_merger
/**
* Merge the two BBCode definitions of a BBCode with an optional argument
*
* Such BBCodes include the [QUOTE] BBCode, which takes an optional argument
* Such BBCodes include the [quote] BBCode, which takes an optional argument
* but otherwise does not behave differently
*
* @param array $without BBCode definition without an attribute