mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2024-12-22 16:31:53 +00:00
[2.0.1]
- Stray xmlns attributes removed from configuration documentation . Interlinking in configuration documentation added using Injector_PurifierLinkify . Directives now keep track of aliases to themselves git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1225 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
parent
b19fc32a5a
commit
58064592ff
4
NEWS
4
NEWS
@ -25,11 +25,15 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier
|
|||||||
- Improve Serializer DefinitionCache directory permissions checks
|
- Improve Serializer DefinitionCache directory permissions checks
|
||||||
- DefinitionCache no longer throws errors when it encounters old
|
- DefinitionCache no longer throws errors when it encounters old
|
||||||
serial files that do not conform to the current style
|
serial files that do not conform to the current style
|
||||||
|
- Stray xmlns attributes removed from configuration documentation
|
||||||
. Rewire some test-cases to swallow errors rather than expect them
|
. Rewire some test-cases to swallow errors rather than expect them
|
||||||
. HTMLDefinition printer updated with some of the new attributes
|
. HTMLDefinition printer updated with some of the new attributes
|
||||||
. DefinitionCache keys reordered to reflect precedence: version number,
|
. DefinitionCache keys reordered to reflect precedence: version number,
|
||||||
hash, then revision number
|
hash, then revision number
|
||||||
. %Core.DefinitionCache renamed to %Cache.DefinitionImpl
|
. %Core.DefinitionCache renamed to %Cache.DefinitionImpl
|
||||||
|
. Interlinking in configuration documentation added using
|
||||||
|
Injector_PurifierLinkify
|
||||||
|
. Directives now keep track of aliases to themselves
|
||||||
|
|
||||||
2.0.0, released 2007-06-20
|
2.0.0, released 2007-06-20
|
||||||
# Completely refactored HTMLModuleManager, decentralizing safety
|
# Completely refactored HTMLModuleManager, decentralizing safety
|
||||||
|
@ -22,6 +22,10 @@ error_reporting(E_ALL); // probably not possible to use E_STRICT
|
|||||||
require_once '../library/HTMLPurifier.auto.php';
|
require_once '../library/HTMLPurifier.auto.php';
|
||||||
require_once 'library/ConfigDoc.auto.php';
|
require_once 'library/ConfigDoc.auto.php';
|
||||||
|
|
||||||
|
$purifier = HTMLPurifier::getInstance(array(
|
||||||
|
'AutoFormat.PurifierLinkify' => true
|
||||||
|
));
|
||||||
|
|
||||||
$schema = HTMLPurifier_ConfigSchema::instance();
|
$schema = HTMLPurifier_ConfigSchema::instance();
|
||||||
$style = 'plain'; // use $_GET in the future
|
$style = 'plain'; // use $_GET in the future
|
||||||
$configdoc = new ConfigDoc();
|
$configdoc = new ConfigDoc();
|
||||||
|
@ -36,6 +36,7 @@ class ConfigDoc_HTMLXSLTProcessor
|
|||||||
// fudges for HTML backwards compatibility
|
// fudges for HTML backwards compatibility
|
||||||
$out = str_replace('/>', ' />', $out); // <br /> not <br/>
|
$out = str_replace('/>', ' />', $out); // <br /> not <br/>
|
||||||
$out = str_replace(' xmlns=""', '', $out); // rm unnecessary xmlns
|
$out = str_replace(' xmlns=""', '', $out); // rm unnecessary xmlns
|
||||||
|
$out = str_replace(' xmlns="http://www.w3.org/1999/xhtml"', '', $out); // rm unnecessary xmlns
|
||||||
if (class_exists('Tidy')) {
|
if (class_exists('Tidy')) {
|
||||||
// cleanup output
|
// cleanup output
|
||||||
$config = array(
|
$config = array(
|
||||||
|
@ -50,6 +50,12 @@ class ConfigDoc_XMLSerializer_ConfigSchema extends ConfigDoc_XMLSerializer
|
|||||||
$dom_document->createElement('name', $name)
|
$dom_document->createElement('name', $name)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$dom_aliases = $dom_document->createElement('aliases');
|
||||||
|
$dom_directive->appendChild($dom_aliases);
|
||||||
|
foreach ($info->directiveAliases as $alias) {
|
||||||
|
$dom_aliases->appendChild($dom_document->createElement('alias', $alias));
|
||||||
|
}
|
||||||
|
|
||||||
$dom_constraints = $dom_document->createElement('constraints');
|
$dom_constraints = $dom_document->createElement('constraints');
|
||||||
$dom_directive->appendChild($dom_constraints);
|
$dom_directive->appendChild($dom_constraints);
|
||||||
|
|
||||||
|
@ -72,8 +72,16 @@
|
|||||||
<xsl:apply-templates />
|
<xsl:apply-templates />
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
<xsl:template match="directive/name">
|
<xsl:template match="directive/name">
|
||||||
|
<xsl:apply-templates select="../aliases/alias" mode="anchor" />
|
||||||
<h3 id="{../@id}"><xsl:value-of select="../@id" /></h3>
|
<h3 id="{../@id}"><xsl:value-of select="../@id" /></h3>
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
<xsl:template match="alias" mode="anchor">
|
||||||
|
<a id="{.}"></a>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Do not pass through -->
|
||||||
|
<xsl:template match="alias"></xsl:template>
|
||||||
|
|
||||||
<xsl:template match="directive/constraints">
|
<xsl:template match="directive/constraints">
|
||||||
<table class="constraints">
|
<table class="constraints">
|
||||||
<xsl:apply-templates />
|
<xsl:apply-templates />
|
||||||
@ -89,8 +97,20 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
|
<xsl:if test="../aliases/alias">
|
||||||
|
<xsl:apply-templates select="../aliases" mode="constraints" />
|
||||||
|
</xsl:if>
|
||||||
</table>
|
</table>
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
<xsl:template match="directive/aliases" mode="constraints">
|
||||||
|
<th>Aliases:</th>
|
||||||
|
<td>
|
||||||
|
<xsl:for-each select="alias">
|
||||||
|
<xsl:if test="position()>1">, </xsl:if>
|
||||||
|
<xsl:value-of select="." />
|
||||||
|
</xsl:for-each>
|
||||||
|
</td>
|
||||||
|
</xsl:template>
|
||||||
<xsl:template match="directive//description">
|
<xsl:template match="directive//description">
|
||||||
<div class="description">
|
<div class="description">
|
||||||
<xsl:copy-of select="div/node()" />
|
<xsl:copy-of select="div/node()" />
|
||||||
|
@ -61,6 +61,12 @@ class HTMLPurifier_ConfigDef_Directive extends HTMLPurifier_ConfigDef
|
|||||||
*/
|
*/
|
||||||
var $aliases = array();
|
var $aliases = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Advisory list of directive aliases, i.e. other directives that
|
||||||
|
* redirect here
|
||||||
|
*/
|
||||||
|
var $directiveAliases = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a description to the array
|
* Adds a description to the array
|
||||||
*/
|
*/
|
||||||
|
@ -295,6 +295,7 @@ class HTMLPurifier_ConfigSchema {
|
|||||||
$def->info[$namespace][$name] =
|
$def->info[$namespace][$name] =
|
||||||
new HTMLPurifier_ConfigDef_DirectiveAlias(
|
new HTMLPurifier_ConfigDef_DirectiveAlias(
|
||||||
$new_namespace, $new_name);
|
$new_namespace, $new_name);
|
||||||
|
$def->info[$new_namespace][$new_name]->directiveAliases[] = "$namespace.$name";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -43,7 +43,7 @@ HTMLPurifier_ConfigSchema::define(
|
|||||||
'Technically speaking this is not actually a doctype (as it does '.
|
'Technically speaking this is not actually a doctype (as it does '.
|
||||||
'not identify a corresponding DTD), but we are using this name '.
|
'not identify a corresponding DTD), but we are using this name '.
|
||||||
'for sake of simplicity. This will override any older directives '.
|
'for sake of simplicity. This will override any older directives '.
|
||||||
'like %Core.XHTML or %HTML.Strict.'
|
'like %HTML.XHTML or %HTML.Strict.'
|
||||||
);
|
);
|
||||||
|
|
||||||
HTMLPurifier_ConfigSchema::define(
|
HTMLPurifier_ConfigSchema::define(
|
||||||
|
63
library/HTMLPurifier/Injector/PurifierLinkify.php
Normal file
63
library/HTMLPurifier/Injector/PurifierLinkify.php
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once 'HTMLPurifier/Injector.php';
|
||||||
|
|
||||||
|
HTMLPurifier_ConfigSchema::define(
|
||||||
|
'AutoFormat', 'PurifierLinkify', false, 'bool', '
|
||||||
|
<p>
|
||||||
|
Internal auto-formatter that converts configuration directives in
|
||||||
|
syntax <a>%Namespace.Directive</a> to links. This directive has been available
|
||||||
|
since 2.0.1.
|
||||||
|
</p>
|
||||||
|
');
|
||||||
|
|
||||||
|
HTMLPurifier_ConfigSchema::define(
|
||||||
|
'AutoFormatParam', 'PurifierLinkifyDocURL', '#%s', 'string', '
|
||||||
|
<p>
|
||||||
|
Location of configuration documentation to link to, let %s substitute
|
||||||
|
into the configuration\'s namespace and directive names sans the percent
|
||||||
|
sign. This directive has been available since 2.0.1.
|
||||||
|
</p>
|
||||||
|
');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Injector that converts configuration directive syntax %Namespace.Directive
|
||||||
|
* to links
|
||||||
|
*/
|
||||||
|
class HTMLPurifier_Injector_PurifierLinkify extends HTMLPurifier_Injector
|
||||||
|
{
|
||||||
|
|
||||||
|
var $docURL;
|
||||||
|
|
||||||
|
function prepare($config, &$context) {
|
||||||
|
parent::prepare($config, $context);
|
||||||
|
$this->docURL = $config->get('AutoFormatParam', 'PurifierLinkifyDocURL');
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleText(&$token, $config, &$context) {
|
||||||
|
if (!$this->allowsElement('a')) return;
|
||||||
|
if (strpos($token->data, '%') === false) return;
|
||||||
|
|
||||||
|
$bits = preg_split('#%([a-z0-9]+\.[a-z0-9]+)#Si', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
|
||||||
|
$token = array();
|
||||||
|
|
||||||
|
// $i = index
|
||||||
|
// $c = count
|
||||||
|
// $l = is link
|
||||||
|
for ($i = 0, $c = count($bits), $l = false; $i < $c; $i++, $l = !$l) {
|
||||||
|
if (!$l) {
|
||||||
|
if ($bits[$i] === '') continue;
|
||||||
|
$token[] = new HTMLPurifier_Token_Text($bits[$i]);
|
||||||
|
} else {
|
||||||
|
$token[] = new HTMLPurifier_Token_Start('a',
|
||||||
|
array('href' => str_replace('%s', $bits[$i], $this->docURL)));
|
||||||
|
$token[] = new HTMLPurifier_Token_Text('%' . $bits[$i]);
|
||||||
|
$token[] = new HTMLPurifier_Token_End('a');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -6,6 +6,7 @@ require_once 'HTMLPurifier/Generator.php';
|
|||||||
|
|
||||||
require_once 'HTMLPurifier/Injector/AutoParagraph.php';
|
require_once 'HTMLPurifier/Injector/AutoParagraph.php';
|
||||||
require_once 'HTMLPurifier/Injector/Linkify.php';
|
require_once 'HTMLPurifier/Injector/Linkify.php';
|
||||||
|
require_once 'HTMLPurifier/Injector/PurifierLinkify.php';
|
||||||
|
|
||||||
HTMLPurifier_ConfigSchema::define(
|
HTMLPurifier_ConfigSchema::define(
|
||||||
'AutoFormat', 'Custom', array(), 'list', '
|
'AutoFormat', 'Custom', array(), 'list', '
|
||||||
|
43
tests/HTMLPurifier/Injector/PurifierLinkifyTest.php
Normal file
43
tests/HTMLPurifier/Injector/PurifierLinkifyTest.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once 'HTMLPurifier/InjectorHarness.php';
|
||||||
|
require_once 'HTMLPurifier/Injector/PurifierLinkify.php';
|
||||||
|
|
||||||
|
class HTMLPurifier_Injector_PurifierLinkifyTest extends HTMLPurifier_InjectorHarness
|
||||||
|
{
|
||||||
|
|
||||||
|
function setup() {
|
||||||
|
parent::setup();
|
||||||
|
$this->config = array(
|
||||||
|
'AutoFormat.PurifierLinkify' => true,
|
||||||
|
'AutoFormatParam.PurifierLinkifyDocURL' => '#%s'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testLinkify() {
|
||||||
|
|
||||||
|
$this->assertResult('Foobar');
|
||||||
|
$this->assertResult('20% off!');
|
||||||
|
$this->assertResult('%Core namespace (not recognized)');
|
||||||
|
$this->assertResult(
|
||||||
|
'%Namespace.Directive',
|
||||||
|
'<a href="#Namespace.Directive">%Namespace.Directive</a>'
|
||||||
|
);
|
||||||
|
$this->assertResult(
|
||||||
|
'This %Namespace.Directive thing',
|
||||||
|
'This <a href="#Namespace.Directive">%Namespace.Directive</a> thing'
|
||||||
|
);
|
||||||
|
$this->assertResult(
|
||||||
|
'<div>This %Namespace.Directive thing</div>',
|
||||||
|
'<div>This <a href="#Namespace.Directive">%Namespace.Directive</a> thing</div>'
|
||||||
|
);
|
||||||
|
$this->assertResult(
|
||||||
|
'<a>%Namespace.Directive</a>'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -83,6 +83,7 @@ $test_files[] = 'HTMLPurifier/HTMLModule/TidyTest.php';
|
|||||||
$test_files[] = 'HTMLPurifier/IDAccumulatorTest.php';
|
$test_files[] = 'HTMLPurifier/IDAccumulatorTest.php';
|
||||||
$test_files[] = 'HTMLPurifier/Injector/AutoParagraphTest.php';
|
$test_files[] = 'HTMLPurifier/Injector/AutoParagraphTest.php';
|
||||||
$test_files[] = 'HTMLPurifier/Injector/LinkifyTest.php';
|
$test_files[] = 'HTMLPurifier/Injector/LinkifyTest.php';
|
||||||
|
$test_files[] = 'HTMLPurifier/Injector/PurifierLinkifyTest.php';
|
||||||
$test_files[] = 'HTMLPurifier/LanguageFactoryTest.php';
|
$test_files[] = 'HTMLPurifier/LanguageFactoryTest.php';
|
||||||
$test_files[] = 'HTMLPurifier/LanguageTest.php';
|
$test_files[] = 'HTMLPurifier/LanguageTest.php';
|
||||||
$test_files[] = 'HTMLPurifier/Lexer/DirectLexTest.php';
|
$test_files[] = 'HTMLPurifier/Lexer/DirectLexTest.php';
|
||||||
|
Loading…
Reference in New Issue
Block a user