mirror of
https://github.com/moodle/moodle.git
synced 2025-07-27 01:10:51 +02:00
Prior to this change, all the line endings in the imported HTMLPurifier library were using CRLF (\r\n aka Windows style), but the HTMLPurifier source and also the downloadable artefacts use LF (\n aka Linux style) as line endings. This has been the case since510d190382
when with the commit "MDL-38672 import HTML Purifier 4.5.0" all line endings were changed from LF to CRLF. There was no comment in the commit on why this change was done. As the original source uses LF, this commit partly reverts510d190382
and goes back to LF as line endings. Signed-off-by: Daniel Ziegenberg <daniel@ziegenberg.at>
111 lines
2.8 KiB
PHP
111 lines
2.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Takes the contents of blockquote when in strict and reformats for validation.
|
|
*/
|
|
class HTMLPurifier_ChildDef_StrictBlockquote extends HTMLPurifier_ChildDef_Required
|
|
{
|
|
/**
|
|
* @type array
|
|
*/
|
|
protected $real_elements;
|
|
|
|
/**
|
|
* @type array
|
|
*/
|
|
protected $fake_elements;
|
|
|
|
/**
|
|
* @type bool
|
|
*/
|
|
public $allow_empty = true;
|
|
|
|
/**
|
|
* @type string
|
|
*/
|
|
public $type = 'strictblockquote';
|
|
|
|
/**
|
|
* @type bool
|
|
*/
|
|
protected $init = false;
|
|
|
|
/**
|
|
* @param HTMLPurifier_Config $config
|
|
* @return array
|
|
* @note We don't want MakeWellFormed to auto-close inline elements since
|
|
* they might be allowed.
|
|
*/
|
|
public function getAllowedElements($config)
|
|
{
|
|
$this->init($config);
|
|
return $this->fake_elements;
|
|
}
|
|
|
|
/**
|
|
* @param array $children
|
|
* @param HTMLPurifier_Config $config
|
|
* @param HTMLPurifier_Context $context
|
|
* @return array
|
|
*/
|
|
public function validateChildren($children, $config, $context)
|
|
{
|
|
$this->init($config);
|
|
|
|
// trick the parent class into thinking it allows more
|
|
$this->elements = $this->fake_elements;
|
|
$result = parent::validateChildren($children, $config, $context);
|
|
$this->elements = $this->real_elements;
|
|
|
|
if ($result === false) {
|
|
return array();
|
|
}
|
|
if ($result === true) {
|
|
$result = $children;
|
|
}
|
|
|
|
$def = $config->getHTMLDefinition();
|
|
$block_wrap_name = $def->info_block_wrapper;
|
|
$block_wrap = false;
|
|
$ret = array();
|
|
|
|
foreach ($result as $node) {
|
|
if ($block_wrap === false) {
|
|
if (($node instanceof HTMLPurifier_Node_Text && !$node->is_whitespace) ||
|
|
($node instanceof HTMLPurifier_Node_Element && !isset($this->elements[$node->name]))) {
|
|
$block_wrap = new HTMLPurifier_Node_Element($def->info_block_wrapper);
|
|
$ret[] = $block_wrap;
|
|
}
|
|
} else {
|
|
if ($node instanceof HTMLPurifier_Node_Element && isset($this->elements[$node->name])) {
|
|
$block_wrap = false;
|
|
|
|
}
|
|
}
|
|
if ($block_wrap) {
|
|
$block_wrap->children[] = $node;
|
|
} else {
|
|
$ret[] = $node;
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* @param HTMLPurifier_Config $config
|
|
*/
|
|
private function init($config)
|
|
{
|
|
if (!$this->init) {
|
|
$def = $config->getHTMLDefinition();
|
|
// allow all inline elements
|
|
$this->real_elements = $this->elements;
|
|
$this->fake_elements = $def->info_content_sets['Flow'];
|
|
$this->fake_elements['#PCDATA'] = true;
|
|
$this->init = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// vim: et sw=4 sts=4
|