0
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2024-12-22 16:31:53 +00:00

[1.7.0] Create new Output configuration namespace and migrate directives that directly impact Generator to it. Rename %Core.Strict to %HTML.Strict. Pilot heredoc syntax.

git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1068 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
Edward Z. Yang 2007-05-19 00:24:23 +00:00
parent e4e981b6f1
commit dd62a303eb
5 changed files with 57 additions and 37 deletions

1
TODO
View File

@ -12,7 +12,6 @@ TODO List
- Add framework for unsafe attributes - Add framework for unsafe attributes
- Wire in modes (configuration, module and manager wise) - Wire in modes (configuration, module and manager wise)
- Reorganize configuration directives - Reorganize configuration directives
. New namespace: Output for Generator
- Determine handling for complex/cascading configuration directives - Determine handling for complex/cascading configuration directives
- Reorganize transformation modules - Reorganize transformation modules
- Set up anonymous module management by HTMLDefinition - Set up anonymous module management by HTMLDefinition

View File

@ -66,6 +66,7 @@ class HTMLPurifier_ConfigSchema {
$this->defineNamespace('URI', 'Features regarding Uniform Resource Identifiers.'); $this->defineNamespace('URI', 'Features regarding Uniform Resource Identifiers.');
$this->defineNamespace('HTML', 'Configuration regarding allowed HTML.'); $this->defineNamespace('HTML', 'Configuration regarding allowed HTML.');
$this->defineNamespace('CSS', 'Configuration regarding allowed CSS.'); $this->defineNamespace('CSS', 'Configuration regarding allowed CSS.');
$this->defineNamespace('Output', 'Configuration relating to the generation of (X)HTML.');
$this->defineNamespace('Test', 'Developer testing configuration for our unit tests.'); $this->defineNamespace('Test', 'Developer testing configuration for our unit tests.');
} }

View File

@ -2,6 +2,22 @@
require_once 'HTMLPurifier/Doctype.php'; require_once 'HTMLPurifier/Doctype.php';
// Legacy directives for doctype specification
HTMLPurifier_ConfigSchema::define(
'HTML', 'Strict', false, 'bool',
'Determines whether or not to use Transitional (loose) or Strict rulesets. '.
'This directive is deprecated in favor of %HTML.Doctype. '.
'This directive has been available since 1.3.0.'
);
HTMLPurifier_ConfigSchema::define(
'HTML', 'XHTML', true, 'bool',
'Determines whether or not output is XHTML 1.0 or HTML 4.01 flavor. '.
'This directive is deprecated in favor of %HTML.Doctype. '.
'This directive was available since 1.1.'
);
HTMLPurifier_ConfigSchema::defineAlias('Core', 'XHTML', 'HTML', 'XHTML');
class HTMLPurifier_DoctypeRegistry class HTMLPurifier_DoctypeRegistry
{ {
@ -92,7 +108,7 @@ class HTMLPurifier_DoctypeRegistry
return $doctype; return $doctype;
} }
// backwards-compatibility // backwards-compatibility
if ($config->get('Core', 'XHTML')) { if ($config->get('HTML', 'XHTML')) {
$doctype = 'XHTML 1.0'; $doctype = 'XHTML 1.0';
} else { } else {
$doctype = 'HTML 4.01'; $doctype = 'HTML 4.01';

View File

@ -3,7 +3,7 @@
require_once 'HTMLPurifier/Lexer.php'; require_once 'HTMLPurifier/Lexer.php';
HTMLPurifier_ConfigSchema::define( HTMLPurifier_ConfigSchema::define(
'Core', 'CleanUTF8DuringGeneration', false, 'bool', 'Output', 'EnableRedundantUTF8Cleaning', false, 'bool',
'When true, HTMLPurifier_Generator will also check all strings it '. 'When true, HTMLPurifier_Generator will also check all strings it '.
'escapes for UTF-8 well-formedness as a defense in depth measure. '. 'escapes for UTF-8 well-formedness as a defense in depth measure. '.
'This could cause a considerable performance impact, and is not '. 'This could cause a considerable performance impact, and is not '.
@ -12,57 +12,64 @@ HTMLPurifier_ConfigSchema::define(
'the configuration value is only read at the beginning of '. 'the configuration value is only read at the beginning of '.
'generateFromTokens.' 'generateFromTokens.'
); );
HTMLPurifier_ConfigSchema::defineAlias('Core', 'CleanUTF8DuringGeneration', 'Output', 'EnableRedundantUTF8Cleaning');
HTMLPurifier_ConfigSchema::define( HTMLPurifier_ConfigSchema::define(
'Core', 'XHTML', true, 'bool', 'Output', 'CommentScriptContents', true, 'bool',
'Determines whether or not output is XHTML or not. When disabled, HTML '.
'Purifier goes into HTML 4.01 removes XHTML-specific markup constructs, '.
'such as boolean attribute expansion and trailing slashes in empty tags. '.
'This directive was available since 1.1.'
);
HTMLPurifier_ConfigSchema::define(
'Core', 'CommentScriptContents', true, 'bool',
'Determines whether or not HTML Purifier should attempt to fix up '. 'Determines whether or not HTML Purifier should attempt to fix up '.
'the contents of script tags for legacy browsers with comments. This '. 'the contents of script tags for legacy browsers with comments. This '.
'directive was available since 1.7.' 'directive was available since 1.7.'
); );
HTMLPurifier_ConfigSchema::defineAlias('Core', 'CommentScriptContents', 'Output', 'CommentScriptContents');
// extension constraints could be factored into ConfigSchema // extension constraints could be factored into ConfigSchema
HTMLPurifier_ConfigSchema::define( HTMLPurifier_ConfigSchema::define(
'Core', 'TidyFormat', false, 'bool', 'Output', 'TidyFormat', false, 'bool', <<<HTML
'<p>Determines whether or not to run Tidy on the final output for pretty '. <p>
'formatting reasons, such as indentation and wrap.</p><p>This can greatly '. Determines whether or not to run Tidy on the final output for pretty
'improve readability for editors who are hand-editing the HTML, but is '. formatting reasons, such as indentation and wrap.
'by no means necessary as HTML Purifier has already fixed all major '. </p>
'errors the HTML may have had. Tidy is a non-default extension, and this directive '. <p>
'will silently fail if Tidy is not available.</p><p>If you are looking to make '. This can greatly improve readability for editors who are hand-editing
'the overall look of your page\'s source better, I recommend running Tidy '. the HTML, but is by no means necessary as HTML Purifier has already
'on the entire page rather than just user-content (after all, the '. fixed all major errors the HTML may have had. Tidy is a non-default
'indentation relative to the containing blocks will be incorrect).</p><p>This '. extension, and this directive will silently fail if Tidy is not
'directive was available since 1.1.1.</p>' available.
</p>
<p>
If you are looking to make the overall look of your page's source
better, I recommend running Tidy on the entire page rather than just
user-content (after all, the indentation relative to the containing
blocks will be incorrect).
</p>
<p>
This directive was available since 1.1.1.
</p>
HTML
); );
HTMLPurifier_ConfigSchema::defineAlias('Core', 'TidyFormat', 'Output', 'TidyFormat');
/** /**
* Generates HTML from tokens. * Generates HTML from tokens.
* @todo Create a configuration-wide instance that all objects retrieve
*/ */
class HTMLPurifier_Generator class HTMLPurifier_Generator
{ {
/** /**
* Bool cache of %Core.CleanUTF8DuringGeneration * Bool cache of %Output.EnableRedundantUTF8Cleaning
* @private * @private
*/ */
var $_clean_utf8 = false; var $_clean_utf8 = false;
/** /**
* Bool cache of %Core.XHTML * Bool cache of %HTML.XHTML
* @private * @private
*/ */
var $_xhtml = true; var $_xhtml = true;
/** /**
* Bool cache of %Core.CommentScriptContents * Bool cache of %Output.CommentScriptContents
* @private * @private
*/ */
var $_scriptFix = false; var $_scriptFix = false;
@ -76,9 +83,13 @@ class HTMLPurifier_Generator
function generateFromTokens($tokens, $config, &$context) { function generateFromTokens($tokens, $config, &$context) {
$html = ''; $html = '';
if (!$config) $config = HTMLPurifier_Config::createDefault(); if (!$config) $config = HTMLPurifier_Config::createDefault();
$this->_clean_utf8 = $config->get('Core', 'CleanUTF8DuringGeneration'); $this->_clean_utf8 = $config->get('Output', 'EnableRedundantUTF8Cleaning');
$this->_xhtml = $config->get('Core', 'XHTML');
$this->_scriptFix = $config->get('Core', 'CommentScriptContents'); // this should replaced with a query to the Doctype object in
// config to determine whether or not this is an XML-based language
$this->_xhtml = $config->get('HTML', 'XHTML');
$this->_scriptFix = $config->get('Output', 'CommentScriptContents');
if (!$tokens) return ''; if (!$tokens) return '';
for ($i = 0, $size = count($tokens); $i < $size; $i++) { for ($i = 0, $size = count($tokens); $i < $size; $i++) {
if ($this->_scriptFix && $tokens[$i]->name === 'script') { if ($this->_scriptFix && $tokens[$i]->name === 'script') {
@ -91,7 +102,7 @@ class HTMLPurifier_Generator
} }
$html .= $this->generateFromToken($tokens[$i]); $html .= $this->generateFromToken($tokens[$i]);
} }
if ($config->get('Core', 'TidyFormat') && extension_loaded('tidy')) { if ($config->get('Output', 'TidyFormat') && extension_loaded('tidy')) {
$tidy_options = array( $tidy_options = array(
'indent'=> true, 'indent'=> true,

View File

@ -6,13 +6,6 @@ require_once 'HTMLPurifier/HTMLModuleManager.php';
// this definition and its modules MUST NOT define configuration directives // this definition and its modules MUST NOT define configuration directives
// outside of the HTML or Attr namespaces // outside of the HTML or Attr namespaces
// will be superceded by more accurate doctype declaration schemes
HTMLPurifier_ConfigSchema::define(
'HTML', 'Strict', false, 'bool',
'Determines whether or not to use Transitional (loose) or Strict rulesets. '.
'This directive has been available since 1.3.0.'
);
HTMLPurifier_ConfigSchema::define( HTMLPurifier_ConfigSchema::define(
'HTML', 'BlockWrapper', 'p', 'string', 'HTML', 'BlockWrapper', 'p', 'string',
'String name of element to wrap inline elements that are inside a block '. 'String name of element to wrap inline elements that are inside a block '.