mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2024-12-22 08:21:52 +00:00
[1.7.0] Wire in Language and ErrorCollector to main class, now, the only thing to do is actually implement the stuff
git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1157 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
parent
7699efd593
commit
0e5491b20c
2
NEWS
2
NEWS
@ -54,6 +54,8 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier
|
||||
PHP5 only version.
|
||||
. HTMLDefinition and CSSDefinition have a common parent class: Definition.
|
||||
. DirectLex can now track line-numbers
|
||||
. Preliminary error collector is in place, although no code actually reports
|
||||
errors yet
|
||||
|
||||
1.6.1, released 2007-05-05
|
||||
! Support for more deprecated attributes via transformations:
|
||||
|
@ -51,6 +51,23 @@ require_once 'HTMLPurifier/Generator.php';
|
||||
require_once 'HTMLPurifier/Strategy/Core.php';
|
||||
require_once 'HTMLPurifier/Encoder.php';
|
||||
|
||||
require_once 'HTMLPurifier/LanguageFactory.php';
|
||||
|
||||
HTMLPurifier_ConfigSchema::define(
|
||||
'Core', 'Language', 'en', 'string', '
|
||||
ISO 639 language code for localizable things in HTML Purifier to use,
|
||||
which is mainly error reporting. There is currently only an English (en)
|
||||
translation, so this directive is currently useless.
|
||||
This directive has been available since 1.7.0.
|
||||
');
|
||||
|
||||
HTMLPurifier_ConfigSchema::define(
|
||||
'Core', 'CollectErrors', false, 'bool', '
|
||||
Whether or not to collect errors found while filtering the document. This
|
||||
is a useful way to give feedback to your users. CURRENTLY NOT IMPLEMENTED.
|
||||
This directive has been available since 1.7.0.
|
||||
');
|
||||
|
||||
/**
|
||||
* Main library execution class.
|
||||
*
|
||||
@ -121,6 +138,18 @@ class HTMLPurifier
|
||||
$lexer = HTMLPurifier_Lexer::create($config);
|
||||
|
||||
$context = new HTMLPurifier_Context();
|
||||
|
||||
// set up global context variables
|
||||
if ($config->get('Core', 'CollectErrors')) {
|
||||
// may get moved out if other facilities use it
|
||||
$language_factory = HTMLPurifier_LanguageFactory::instance();
|
||||
$language = $language_factory->create($config->get('Core', 'Language'));
|
||||
$context->register('Locale', $language);
|
||||
|
||||
$error_collector = new HTMLPurifier_ErrorCollector();
|
||||
$context->register('ErrorCollector', $language);
|
||||
}
|
||||
|
||||
$html = HTMLPurifier_Encoder::convertToUTF8($html, $config, $context);
|
||||
|
||||
for ($i = 0, $size = count($this->filters); $i < $size; $i++) {
|
||||
|
73
library/HTMLPurifier/ErrorCollector.php
Normal file
73
library/HTMLPurifier/ErrorCollector.php
Normal file
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
require_once 'HTMLPurifier/Generator.php';
|
||||
|
||||
/**
|
||||
* Error collection class that enables HTML Purifier to report HTML
|
||||
* problems back to the user
|
||||
*/
|
||||
class HTMLPurifier_ErrorCollector
|
||||
{
|
||||
|
||||
var $errors = array();
|
||||
|
||||
/**
|
||||
* Sends an error message to the collector for later use
|
||||
* @param string Error message text
|
||||
* @param HTMLPurifier_Token Token that caused error
|
||||
* @param array Tokens surrounding the offending token above, use true as placeholder
|
||||
*/
|
||||
function send($msg, $token, $context_tokens = array(true)) {
|
||||
$this->errors[] = array($msg, $token, $context_tokens);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves raw error data for custom formatter to use
|
||||
* @param List of arrays in format of array(Error message text,
|
||||
* token that caused error, tokens surrounding token)
|
||||
*/
|
||||
function getRaw() {
|
||||
return $this->errors;
|
||||
}
|
||||
|
||||
/**
|
||||
* Default HTML formatting implementation for error messages
|
||||
* @param $config Configuration array, vital for HTML output nature
|
||||
*/
|
||||
function getHTMLFormatted($config) {
|
||||
$generator = new HTMLPurifier_Generator();
|
||||
$context = new HTMLPurifier_Context();
|
||||
$generator->generateFromTokens(array(), $config, $context); // initialize
|
||||
$ret = array();
|
||||
|
||||
$errors = $this->errors;
|
||||
|
||||
// sort error array by line
|
||||
if ($config->get('Core', 'MaintainLineNumbers')) {
|
||||
$lines = array();
|
||||
foreach ($errors as $error) $lines[] = $error[1]->line;
|
||||
array_multisort($lines, SORT_ASC, $errors);
|
||||
}
|
||||
|
||||
foreach ($errors as $error) {
|
||||
$string = $generator->escape($error[0]); // message
|
||||
if (!empty($error[1]->line)) {
|
||||
$string .= ' at line ' . $error[1]->line;
|
||||
}
|
||||
$string .= ' (<code>';
|
||||
foreach ($error[2] as $token) {
|
||||
if ($token !== true) {
|
||||
$string .= $generator->escape($generator->generateFromToken($token));
|
||||
} else {
|
||||
$string .= '<strong>' . $generator->escape($generator->generateFromToken($error[1])) . '</strong>';
|
||||
}
|
||||
}
|
||||
$string .= '</code>)';
|
||||
$ret[] = $string;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -2,8 +2,6 @@
|
||||
|
||||
require_once 'HTMLPurifier/LanguageFactory.php';
|
||||
|
||||
// UNUSED
|
||||
|
||||
class HTMLPurifier_Language
|
||||
{
|
||||
|
||||
|
@ -7,6 +7,8 @@ $messages = array(
|
||||
'htmlpurifier' => 'HTML Purifier',
|
||||
'pizza' => 'Pizza', // for unit testing purposes
|
||||
|
||||
|
||||
|
||||
);
|
||||
|
||||
?>
|
@ -3,8 +3,6 @@
|
||||
require_once 'HTMLPurifier/Language.php';
|
||||
require_once 'HTMLPurifier/AttrDef/Lang.php';
|
||||
|
||||
// UNUSED
|
||||
|
||||
/**
|
||||
* Class responsible for generating HTMLPurifier_Language objects, managing
|
||||
* caching and fallbacks.
|
||||
|
42
tests/HTMLPurifier/ErrorCollectorTest.php
Normal file
42
tests/HTMLPurifier/ErrorCollectorTest.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
require_once 'HTMLPurifier/ErrorCollector.php';
|
||||
|
||||
class HTMLPurifier_ErrorCollectorTest extends UnitTestCase
|
||||
{
|
||||
|
||||
function test() {
|
||||
|
||||
$tok1 = new HTMLPurifier_Token_Text('Token that caused error');
|
||||
$tok1->line = 23;
|
||||
$tok2 = new HTMLPurifier_Token_Start('a'); // also caused error
|
||||
$tok2->line = 3;
|
||||
$tok3 = new HTMLPurifier_Token_Text('Context before'); // before $tok2
|
||||
$tok3->line = 3;
|
||||
$tok4 = new HTMLPurifier_Token_Text('Context after'); // after $tok2
|
||||
$tok4->line = 3;
|
||||
|
||||
$collector = new HTMLPurifier_ErrorCollector();
|
||||
$collector->send('Big fat error', $tok1);
|
||||
$collector->send('Another <error>', $tok2, array($tok3, true, $tok4));
|
||||
|
||||
$result = array(
|
||||
0 => array('Big fat error', $tok1, array(true)),
|
||||
1 => array('Another <error>', $tok2, array($tok3, true, $tok4))
|
||||
);
|
||||
|
||||
$this->assertIdentical($collector->getRaw(), $result);
|
||||
|
||||
$formatted_result = array(
|
||||
0 => 'Another <error> at line 3 (<code>Context before<strong><a></strong>Context after</code>)',
|
||||
1 => 'Big fat error at line 23 (<code><strong>Token that caused error</strong></code>)'
|
||||
);
|
||||
|
||||
$config = HTMLPurifier_Config::create(array('Core.MaintainLineNumbers' => true));
|
||||
$this->assertIdentical($collector->getHTMLFormatted($config), $formatted_result);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -70,6 +70,7 @@ $test_files[] = 'HTMLPurifier/DefinitionCache/SerializerTest.php';
|
||||
$test_files[] = 'HTMLPurifier/DefinitionTest.php';
|
||||
$test_files[] = 'HTMLPurifier/DoctypeRegistryTest.php';
|
||||
$test_files[] = 'HTMLPurifier/ElementDefTest.php';
|
||||
$test_files[] = 'HTMLPurifier/ErrorCollectorTest.php';
|
||||
$test_files[] = 'HTMLPurifier/EncoderTest.php';
|
||||
$test_files[] = 'HTMLPurifier/EntityLookupTest.php';
|
||||
$test_files[] = 'HTMLPurifier/EntityParserTest.php';
|
||||
|
Loading…
Reference in New Issue
Block a user