aboutsummaryrefslogtreecommitdiffstats
path: root/lib/htmlpurifier/configdoc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/htmlpurifier/configdoc')
-rw-r--r--lib/htmlpurifier/configdoc/generate.php64
-rw-r--r--lib/htmlpurifier/configdoc/styles/plain.css44
-rw-r--r--lib/htmlpurifier/configdoc/styles/plain.xsl253
-rw-r--r--lib/htmlpurifier/configdoc/types.xml69
-rw-r--r--lib/htmlpurifier/configdoc/usage.xml534
5 files changed, 964 insertions, 0 deletions
diff --git a/lib/htmlpurifier/configdoc/generate.php b/lib/htmlpurifier/configdoc/generate.php
new file mode 100644
index 000000000..e0c4e674a
--- /dev/null
+++ b/lib/htmlpurifier/configdoc/generate.php
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * Generates XML and HTML documents describing configuration.
+ * @note PHP 5.2+ only!
+ */
+
+/*
+TODO:
+- make XML format richer
+- extend XSLT transformation (see the corresponding XSLT file)
+- allow generation of packaged docs that can be easily moved
+- multipage documentation
+- determine how to multilingualize
+- add blurbs to ToC
+*/
+
+if (version_compare(PHP_VERSION, '5.2', '<')) exit('PHP 5.2+ required.');
+error_reporting(E_ALL | E_STRICT);
+
+// load dual-libraries
+require_once dirname(__FILE__) . '/../extras/HTMLPurifierExtras.auto.php';
+require_once dirname(__FILE__) . '/../library/HTMLPurifier.auto.php';
+
+// setup HTML Purifier singleton
+HTMLPurifier::getInstance(array(
+ 'AutoFormat.PurifierLinkify' => true
+));
+
+$builder = new HTMLPurifier_ConfigSchema_InterchangeBuilder();
+$interchange = new HTMLPurifier_ConfigSchema_Interchange();
+$builder->buildDir($interchange);
+$loader = dirname(__FILE__) . '/../config-schema.php';
+if (file_exists($loader)) include $loader;
+$interchange->validate();
+
+$style = 'plain'; // use $_GET in the future, careful to validate!
+$configdoc_xml = dirname(__FILE__) . '/configdoc.xml';
+
+$xml_builder = new HTMLPurifier_ConfigSchema_Builder_Xml();
+$xml_builder->openURI($configdoc_xml);
+$xml_builder->build($interchange);
+unset($xml_builder); // free handle
+
+$xslt = new ConfigDoc_HTMLXSLTProcessor();
+$xslt->importStylesheet(dirname(__FILE__) . "/styles/$style.xsl");
+$output = $xslt->transformToHTML($configdoc_xml);
+
+if (!$output) {
+ echo "Error in generating files\n";
+ exit(1);
+}
+
+// write out
+file_put_contents(dirname(__FILE__) . "/$style.html", $output);
+
+if (php_sapi_name() != 'cli') {
+ // output (instant feedback if it's a browser)
+ echo $output;
+} else {
+ echo "Files generated successfully.\n";
+}
+
+// vim: et sw=4 sts=4
diff --git a/lib/htmlpurifier/configdoc/styles/plain.css b/lib/htmlpurifier/configdoc/styles/plain.css
new file mode 100644
index 000000000..7af80d061
--- /dev/null
+++ b/lib/htmlpurifier/configdoc/styles/plain.css
@@ -0,0 +1,44 @@
+
+body {margin:0;padding:0;}
+#content {
+ margin:1em auto;
+ max-width: 47em;
+ width: expression(document.body.clientWidth >
+ 85 * parseInt(document.body.currentStyle.fontSize) ?
+ "54em": "auto");
+}
+
+table {border-collapse:collapse;}
+table td, table th {padding:0.2em;}
+
+table.constraints {margin:0 0 1em;}
+table.constraints th {
+ text-align:right;padding-left:0.4em;padding-right:0.4em;background:#EEE;
+ width:8em;vertical-align:top;}
+table.constraints td {padding-right:0.4em; padding-left: 1em;}
+table.constraints td ul {padding:0; margin:0; list-style:none;}
+table.constraints td pre {margin:0;}
+
+#tocContainer {position:relative;}
+#toc {list-style-type:none; font-weight:bold; font-size:1em; margin-bottom:1em;}
+#toc li {position:relative; line-height: 1.2em;}
+#toc .col-2 {margin-left:50%;}
+#toc .col-l {float:left;}
+#toc ul {list-style-type:disc; font-weight:normal; padding-bottom:1.2em;}
+
+.description p {margin-top:0;margin-bottom:1em;}
+
+#library, h1 {text-align:center; font-family:Garamond, serif;
+ font-variant:small-caps;}
+#library {font-size:1em;}
+h1 {margin-top:0;}
+h2 {border-bottom:1px solid #CCC; font-family:sans-serif; font-weight:normal;
+ font-size:1.3em; clear:both;}
+h3 {font-family:sans-serif; font-size:1.1em; font-weight:bold; }
+h4 {font-family:sans-serif; font-size:0.9em; font-weight:bold; }
+
+.deprecated {color: #CCC;}
+.deprecated table.constraints th {background:#FFF;}
+.deprecated-notice {color: #000; text-align:center; margin-bottom: 1em;}
+
+/* vim: et sw=4 sts=4 */
diff --git a/lib/htmlpurifier/configdoc/styles/plain.xsl b/lib/htmlpurifier/configdoc/styles/plain.xsl
new file mode 100644
index 000000000..9b9794e0b
--- /dev/null
+++ b/lib/htmlpurifier/configdoc/styles/plain.xsl
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet
+ version = "1.0"
+ xmlns = "http://www.w3.org/1999/xhtml"
+ xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
+>
+ <xsl:output
+ method = "xml"
+ encoding = "UTF-8"
+ doctype-public = "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ doctype-system = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+ indent = "no"
+ media-type = "text/html"
+ />
+ <xsl:param name="css" select="'styles/plain.css'"/>
+ <xsl:param name="title" select="'Configuration Documentation'"/>
+
+ <xsl:variable name="typeLookup" select="document('../types.xml')/types" />
+ <xsl:variable name="usageLookup" select="document('../usage.xml')/usage" />
+
+ <!-- Twiddle this variable to get the columns as even as possible -->
+ <xsl:variable name="maxNumberAdjust" select="2" />
+
+ <xsl:template match="/">
+ <html lang="en" xml:lang="en">
+ <head>
+ <title><xsl:value-of select="$title" /> - <xsl:value-of select="/configdoc/title" /></title>
+ <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
+ <link rel="stylesheet" type="text/css" href="{$css}" />
+ </head>
+ <body>
+ <div id="content">
+ <div id="library"><xsl:value-of select="/configdoc/title" /></div>
+ <h1><xsl:value-of select="$title" /></h1>
+ <div id="tocContainer">
+ <h2>Table of Contents</h2>
+ <ul id="toc">
+ <xsl:apply-templates mode="toc">
+ <xsl:with-param name="overflowNumber" select="round(count(/configdoc/namespace) div 2) + $maxNumberAdjust" />
+ </xsl:apply-templates>
+ </ul>
+ </div>
+ <div id="typesContainer">
+ <h2>Types</h2>
+ <xsl:apply-templates select="$typeLookup" mode="types" />
+ </div>
+ <xsl:apply-templates />
+ </div>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="type" mode="types">
+ <div class="type-block">
+ <xsl:attribute name="id">type-<xsl:value-of select="@id" /></xsl:attribute>
+ <h3><code><xsl:value-of select="@id" /></code>: <xsl:value-of select="@name" /></h3>
+ <div class="type-description">
+ <xsl:copy-of xmlns:xhtml="http://www.w3.org/1999/xhtml" select="xhtml:div/node()" />
+ </div>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="title" mode="toc" />
+ <xsl:template match="namespace" mode="toc">
+ <xsl:param name="overflowNumber" />
+ <xsl:variable name="number"><xsl:number level="single" /></xsl:variable>
+ <xsl:variable name="directiveNumber"><xsl:number level="any" count="directive" /></xsl:variable>
+ <xsl:if test="count(directive)&gt;0">
+ <li>
+ <!-- BEGIN multicolumn code -->
+ <xsl:if test="$number &gt;= $overflowNumber">
+ <xsl:attribute name="class">col-2</xsl:attribute>
+ </xsl:if>
+ <xsl:if test="$number = $overflowNumber">
+ <xsl:attribute name="style">margin-top:-<xsl:value-of select="($number * 2 + $directiveNumber - 3) * 1.2" />em</xsl:attribute>
+ </xsl:if>
+ <!-- END multicolumn code -->
+ <a href="#{@id}"><xsl:value-of select="name" /></a>
+ <ul>
+ <xsl:apply-templates select="directive" mode="toc">
+ <xsl:with-param name="overflowNumber" select="$overflowNumber" />
+ </xsl:apply-templates>
+ </ul>
+ <xsl:if test="$number + 1 = $overflowNumber">
+ <div class="col-l" />
+ </xsl:if>
+ </li>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="directive" mode="toc">
+ <xsl:variable name="number">
+ <xsl:number level="any" count="directive|namespace" />
+ </xsl:variable>
+ <xsl:if test="not(deprecated)">
+ <li>
+ <a href="#{@id}"><xsl:value-of select="name" /></a>
+ </li>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="title" />
+
+ <xsl:template match="namespace">
+ <div class="namespace">
+ <xsl:apply-templates />
+ <xsl:if test="count(directive)=0">
+ <p>No configuration directives defined for this namespace.</p>
+ </xsl:if>
+ </div>
+ </xsl:template>
+ <xsl:template match="namespace/name">
+ <h2 id="{../@id}"><xsl:value-of select="." /></h2>
+ </xsl:template>
+ <xsl:template match="namespace/description">
+ <div class="description">
+ <xsl:copy-of xmlns:xhtml="http://www.w3.org/1999/xhtml" select="xhtml:div/node()" />
+ </div>
+ </xsl:template>
+
+ <xsl:template match="directive">
+ <div>
+ <xsl:attribute name="class"><!--
+ -->directive<!--
+ --><xsl:if test="deprecated"> deprecated</xsl:if><!--
+ --></xsl:attribute>
+ <xsl:apply-templates>
+ <xsl:with-param name="id" select="@id" />
+ </xsl:apply-templates>
+ </div>
+ </xsl:template>
+ <xsl:template match="directive/name">
+ <xsl:param name="id" />
+ <xsl:apply-templates select="../aliases/alias" mode="anchor" />
+ <h3 id="{$id}"><xsl:value-of select="$id" /></h3>
+ </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:param name="id" />
+ <table class="constraints">
+ <xsl:apply-templates />
+ <xsl:if test="../aliases/alias">
+ <xsl:apply-templates select="../aliases" mode="constraints" />
+ </xsl:if>
+ <xsl:apply-templates select="$usageLookup/directive[@id=$id]" />
+ </table>
+ </xsl:template>
+ <xsl:template match="directive/aliases" mode="constraints">
+ <tr>
+ <th>Aliases</th>
+ <td>
+ <xsl:for-each select="alias">
+ <xsl:if test="position()&gt;1">, </xsl:if>
+ <xsl:value-of select="." />
+ </xsl:for-each>
+ </td>
+ </tr>
+ </xsl:template>
+ <xsl:template match="directive/description">
+ <div class="description">
+ <xsl:copy-of xmlns:xhtml="http://www.w3.org/1999/xhtml" select="xhtml:div/node()" />
+ </div>
+ </xsl:template>
+ <xsl:template match="directive/deprecated">
+ <div class="deprecated-notice">
+ <strong>Warning:</strong>
+ This directive was deprecated in version <xsl:value-of select="version" />.
+ <a href="#{use}">%<xsl:value-of select="use" /></a> should be used instead.
+ </div>
+ </xsl:template>
+ <xsl:template match="usage/directive">
+ <tr>
+ <th>Used in</th>
+ <td>
+ <ul>
+ <xsl:apply-templates />
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+ <xsl:template match="usage/directive/file">
+ <li>
+ <em><xsl:value-of select="@name" /></em> on line<xsl:if test="count(line)&gt;1">s</xsl:if>
+ <xsl:text> </xsl:text>
+ <xsl:for-each select="line">
+ <xsl:if test="position()&gt;1">, </xsl:if>
+ <xsl:value-of select="." />
+ </xsl:for-each>
+ </li>
+ </xsl:template>
+
+ <xsl:template match="constraints/version">
+ <tr>
+ <th>Version added</th>
+ <td><xsl:value-of select="." /></td>
+ </tr>
+ </xsl:template>
+ <xsl:template match="constraints/type">
+ <tr>
+ <th>Type</th>
+ <td>
+ <xsl:variable name="type" select="text()" />
+ <xsl:attribute name="class">type type-<xsl:value-of select="$type" /></xsl:attribute>
+ <a>
+ <xsl:attribute name="href">#type-<xsl:value-of select="$type" /></xsl:attribute>
+ <xsl:value-of select="$typeLookup/type[@id=$type]/@name" />
+ <xsl:if test="@allow-null='yes'">
+ (or null)
+ </xsl:if>
+ </a>
+ </td>
+ </tr>
+ </xsl:template>
+ <xsl:template match="constraints/allowed">
+ <tr>
+ <th>Allowed values</th>
+ <td>
+ <xsl:for-each select="value"><!--
+ --><xsl:if test="position()&gt;1">, </xsl:if>
+ &quot;<xsl:value-of select="." />&quot;<!--
+ --></xsl:for-each>
+ </td>
+ </tr>
+ </xsl:template>
+ <xsl:template match="constraints/default">
+ <tr>
+ <th>Default</th>
+ <td><pre><xsl:value-of select="." xml:space="preserve" /></pre></td>
+ </tr>
+ </xsl:template>
+ <xsl:template match="constraints/external">
+ <tr>
+ <th>External deps</th>
+ <td>
+ <ul>
+ <xsl:apply-templates />
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+ <xsl:template match="constraints/external/project">
+ <li><xsl:value-of select="." /></li>
+ </xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim: et sw=4 sts=4
+-->
diff --git a/lib/htmlpurifier/configdoc/types.xml b/lib/htmlpurifier/configdoc/types.xml
new file mode 100644
index 000000000..ee2c945a1
--- /dev/null
+++ b/lib/htmlpurifier/configdoc/types.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<types>
+ <type id="string" name="String"><div xmlns="http://www.w3.org/1999/xhtml">
+ A <a
+ href="http://docs.php.net/manual/en/language.types.string.php">sequence
+ of characters</a>.
+ </div></type>
+ <type id="istring" name="Case-insensitive string"><div xmlns="http://www.w3.org/1999/xhtml">
+ A series of case-insensitive characters. Internally, upper-case
+ ASCII characters will be converted to lower-case.
+ </div></type>
+ <type id="text" name="Text"><div xmlns="http://www.w3.org/1999/xhtml">
+ A series of characters that may contain newlines. Text tends to
+ indicate human-oriented text, as opposed to a machine format.
+ </div></type>
+ <type id="itext" name="Case-insensitive text"><div xmlns="http://www.w3.org/1999/xhtml">
+ A series of case-insensitive characters that may contain newlines.
+ </div></type>
+ <type id="int" name="Integer"><div xmlns="http://www.w3.org/1999/xhtml">
+ An <a
+ href="http://docs.php.net/manual/en/language.types.integer.php">
+ integer</a>. You are alternatively permitted to pass a string of
+ digits instead, which will be cast to an integer using
+ <code>(int)</code>.
+ </div></type>
+ <type id="float" name="Float"><div xmlns="http://www.w3.org/1999/xhtml">
+ A <a href="http://docs.php.net/manual/en/language.types.float.php">
+ floating point number</a>. You are alternatively permitted to
+ pass a numeric string (as defined by <code>is_numeric()</code>),
+ which will be cast to a float using <code>(float)</code>.
+ </div></type>
+ <type id="bool" name="Boolean"><div xmlns="http://www.w3.org/1999/xhtml">
+ A <a
+ href="http://docs.php.net/manual/en/language.types.boolean.php">boolean</a>.
+ You are alternatively permitted to pass an integer <code>0</code> or
+ <code>1</code> (other integers are not permitted) or a string
+ <code>"on"</code>, <code>"true"</code> or <code>"1"</code> for
+ <code>true</code>, and <code>"off"</code>, <code>"false"</code> or
+ <code>"0"</code> for <code>false</code>.
+ </div></type>
+ <type id="lookup" name="Lookup array"><div xmlns="http://www.w3.org/1999/xhtml">
+ An array whose values are <code>true</code>, e.g. <code>array('key'
+ => true, 'key2' => true)</code>. You are alternatively permitted
+ to pass an array list of the keys <code>array('key', 'key2')</code>
+ or a comma-separated string of keys <code>"key, key2"</code>. If
+ you pass an array list of values, ensure that your values are
+ strictly numerically indexed: <code>array('key1', 2 =>
+ 'key2')</code> will not do what you expect and emits a warning.
+ </div></type>
+ <type id="list" name="Array list"><div xmlns="http://www.w3.org/1999/xhtml">
+ An array which has consecutive integer indexes, e.g.
+ <code>array('val1', 'val2')</code>. You are alternatively permitted
+ to pass a comma-separated string of keys <code>"val1, val2"</code>.
+ If your array is not in this form, <code>array_values</code> is run
+ on the array and a warning is emitted.
+ </div></type>
+ <type id="hash" name="Associative array"><div xmlns="http://www.w3.org/1999/xhtml">
+ An array which is a mapping of keys to values, e.g.
+ <code>array('key1' => 'val1', 'key2' => 'val2')</code>. You are
+ alternatively permitted to pass a comma-separated string of
+ key-colon-value strings, e.g. <code>"key1: val1, key2: val2"</code>.
+ </div></type>
+ <type id="mixed" name="Mixed"><div xmlns="http://www.w3.org/1999/xhtml">
+ An arbitrary PHP value of any type.
+ </div></type>
+</types>
+
+<!-- vim: et sw=4 sts=4
+-->
diff --git a/lib/htmlpurifier/configdoc/usage.xml b/lib/htmlpurifier/configdoc/usage.xml
new file mode 100644
index 000000000..1c77b8f4e
--- /dev/null
+++ b/lib/htmlpurifier/configdoc/usage.xml
@@ -0,0 +1,534 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<usage>
+ <directive id="Core.CollectErrors">
+ <file name="HTMLPurifier.php">
+ <line>131</line>
+ </file>
+ <file name="HTMLPurifier/Lexer.php">
+ <line>81</line>
+ <line>284</line>
+ </file>
+ <file name="HTMLPurifier/Lexer/DirectLex.php">
+ <line>53</line>
+ <line>73</line>
+ <line>348</line>
+ </file>
+ <file name="HTMLPurifier/Strategy/RemoveForeignElements.php">
+ <line>50</line>
+ </file>
+ </directive>
+ <directive id="CSS.MaxImgLength">
+ <file name="HTMLPurifier/CSSDefinition.php">
+ <line>157</line>
+ </file>
+ </directive>
+ <directive id="CSS.Proprietary">
+ <file name="HTMLPurifier/CSSDefinition.php">
+ <line>214</line>
+ </file>
+ </directive>
+ <directive id="CSS.AllowTricky">
+ <file name="HTMLPurifier/CSSDefinition.php">
+ <line>218</line>
+ </file>
+ </directive>
+ <directive id="CSS.Trusted">
+ <file name="HTMLPurifier/CSSDefinition.php">
+ <line>222</line>
+ </file>
+ </directive>
+ <directive id="CSS.AllowImportant">
+ <file name="HTMLPurifier/CSSDefinition.php">
+ <line>226</line>
+ </file>
+ </directive>
+ <directive id="CSS.AllowedProperties">
+ <file name="HTMLPurifier/CSSDefinition.php">
+ <line>296</line>
+ </file>
+ </directive>
+ <directive id="CSS.ForbiddenProperties">
+ <file name="HTMLPurifier/CSSDefinition.php">
+ <line>310</line>
+ </file>
+ </directive>
+ <directive id="Cache.DefinitionImpl">
+ <file name="HTMLPurifier/DefinitionCacheFactory.php">
+ <line>49</line>
+ </file>
+ </directive>
+ <directive id="HTML.Doctype">
+ <file name="HTMLPurifier/DoctypeRegistry.php">
+ <line>83</line>
+ </file>
+ </directive>
+ <directive id="HTML.CustomDoctype">
+ <file name="HTMLPurifier/DoctypeRegistry.php">
+ <line>85</line>
+ </file>
+ </directive>
+ <directive id="HTML.XHTML">
+ <file name="HTMLPurifier/DoctypeRegistry.php">
+ <line>88</line>
+ </file>
+ </directive>
+ <directive id="HTML.Strict">
+ <file name="HTMLPurifier/DoctypeRegistry.php">
+ <line>93</line>
+ </file>
+ </directive>
+ <directive id="Core.Encoding">
+ <file name="HTMLPurifier/Encoder.php">
+ <line>337</line>
+ <line>367</line>
+ </file>
+ </directive>
+ <directive id="Test.ForceNoIconv">
+ <file name="HTMLPurifier/Encoder.php">
+ <line>341</line>
+ <line>374</line>
+ </file>
+ </directive>
+ <directive id="Core.EscapeNonASCIICharacters">
+ <file name="HTMLPurifier/Encoder.php">
+ <line>368</line>
+ </file>
+ </directive>
+ <directive id="Output.CommentScriptContents">
+ <file name="HTMLPurifier/Generator.php">
+ <line>61</line>
+ </file>
+ </directive>
+ <directive id="Output.FixInnerHTML">
+ <file name="HTMLPurifier/Generator.php">
+ <line>62</line>
+ </file>
+ </directive>
+ <directive id="Output.SortAttr">
+ <file name="HTMLPurifier/Generator.php">
+ <line>63</line>
+ </file>
+ </directive>
+ <directive id="Output.FlashCompat">
+ <file name="HTMLPurifier/Generator.php">
+ <line>64</line>
+ </file>
+ </directive>
+ <directive id="Output.TidyFormat">
+ <file name="HTMLPurifier/Generator.php">
+ <line>93</line>
+ </file>
+ </directive>
+ <directive id="Core.NormalizeNewlines">
+ <file name="HTMLPurifier/Generator.php">
+ <line>107</line>
+ </file>
+ <file name="HTMLPurifier/Lexer.php">
+ <line>266</line>
+ </file>
+ </directive>
+ <directive id="Output.Newline">
+ <file name="HTMLPurifier/Generator.php">
+ <line>108</line>
+ </file>
+ </directive>
+ <directive id="HTML.BlockWrapper">
+ <file name="HTMLPurifier/HTMLDefinition.php">
+ <line>222</line>
+ </file>
+ </directive>
+ <directive id="HTML.Parent">
+ <file name="HTMLPurifier/HTMLDefinition.php">
+ <line>230</line>
+ </file>
+ </directive>
+ <directive id="HTML.AllowedElements">
+ <file name="HTMLPurifier/HTMLDefinition.php">
+ <line>247</line>
+ </file>
+ </directive>
+ <directive id="HTML.AllowedAttributes">
+ <file name="HTMLPurifier/HTMLDefinition.php">
+ <line>248</line>
+ </file>
+ </directive>
+ <directive id="HTML.Allowed">
+ <file name="HTMLPurifier/HTMLDefinition.php">
+ <line>251</line>
+ </file>
+ </directive>
+ <directive id="HTML.ForbiddenElements">
+ <file name="HTMLPurifier/HTMLDefinition.php">
+ <line>342</line>
+ </file>
+ </directive>
+ <directive id="HTML.ForbiddenAttributes">
+ <file name="HTMLPurifier/HTMLDefinition.php">
+ <line>343</line>
+ </file>
+ </directive>
+ <directive id="HTML.Trusted">
+ <file name="HTMLPurifier/HTMLModuleManager.php">
+ <line>204</line>
+ </file>
+ <file name="HTMLPurifier/Lexer.php">
+ <line>271</line>
+ </file>
+ <file name="HTMLPurifier/HTMLModule/Image.php">
+ <line>27</line>
+ </file>
+ <file name="HTMLPurifier/Lexer/DirectLex.php">
+ <line>36</line>
+ </file>
+ <file name="HTMLPurifier/Strategy/RemoveForeignElements.php">
+ <line>23</line>
+ </file>
+ </directive>
+ <directive id="HTML.AllowedModules">
+ <file name="HTMLPurifier/HTMLModuleManager.php">
+ <line>211</line>
+ </file>
+ </directive>
+ <directive id="HTML.CoreModules">
+ <file name="HTMLPurifier/HTMLModuleManager.php">
+ <line>212</line>
+ </file>
+ </directive>
+ <directive id="HTML.Proprietary">
+ <file name="HTMLPurifier/HTMLModuleManager.php">
+ <line>222</line>
+ </file>
+ </directive>
+ <directive id="HTML.SafeObject">
+ <file name="HTMLPurifier/HTMLModuleManager.php">
+ <line>225</line>
+ </file>
+ </directive>
+ <directive id="HTML.SafeEmbed">
+ <file name="HTMLPurifier/HTMLModuleManager.php">
+ <line>228</line>
+ </file>
+ </directive>
+ <directive id="HTML.Nofollow">
+ <file name="HTMLPurifier/HTMLModuleManager.php">
+ <line>231</line>
+ </file>
+ </directive>
+ <directive id="HTML.TargetBlank">
+ <file name="HTMLPurifier/HTMLModuleManager.php">
+ <line>234</line>
+ </file>
+ </directive>
+ <directive id="Attr.IDBlacklist">
+ <file name="HTMLPurifier/IDAccumulator.php">
+ <line>26</line>
+ </file>
+ </directive>
+ <directive id="Core.Language">
+ <file name="HTMLPurifier/LanguageFactory.php">
+ <line>88</line>
+ </file>
+ </directive>
+ <directive id="Core.LexerImpl">
+ <file name="HTMLPurifier/Lexer.php">
+ <line>76</line>
+ </file>
+ </directive>
+ <directive id="Core.MaintainLineNumbers">
+ <file name="HTMLPurifier/Lexer.php">
+ <line>80</line>
+ </file>
+ <file name="HTMLPurifier/Lexer/DirectLex.php">
+ <line>48</line>
+ </file>
+ </directive>
+ <directive id="Core.ConvertDocumentToFragment">
+ <file name="HTMLPurifier/Lexer.php">
+ <line>282</line>
+ </file>
+ </directive>
+ <directive id="Core.RemoveProcessingInstructions">
+ <file name="HTMLPurifier/Lexer.php">
+ <line>303</line>
+ </file>
+ </directive>
+ <directive id="URI.">
+ <file name="HTMLPurifier/URIDefinition.php">
+ <line>59</line>
+ </file>
+ <file name="HTMLPurifier/URIFilter/Munge.php">
+ <line>12</line>
+ </file>
+ </directive>
+ <directive id="URI.Host">
+ <file name="HTMLPurifier/URIDefinition.php">
+ <line>69</line>
+ </file>
+ <file name="HTMLPurifier/URIScheme.php">
+ <line>81</line>
+ </file>
+ </directive>
+ <directive id="URI.Base">
+ <file name="HTMLPurifier/URIDefinition.php">
+ <line>70</line>
+ </file>
+ </directive>
+ <directive id="URI.DefaultScheme">
+ <file name="HTMLPurifier/URIDefinition.php">
+ <line>77</line>
+ </file>
+ </directive>
+ <directive id="URI.AllowedSchemes">
+ <file name="HTMLPurifier/URISchemeRegistry.php">
+ <line>41</line>
+ </file>
+ </directive>
+ <directive id="URI.OverrideAllowedSchemes">
+ <file name="HTMLPurifier/URISchemeRegistry.php">
+ <line>42</line>
+ </file>
+ </directive>
+ <directive id="URI.Disable">
+ <file name="HTMLPurifier/AttrDef/URI.php">
+ <line>28</line>
+ </file>
+ </directive>
+ <directive id="Core.ColorKeywords">
+ <file name="HTMLPurifier/AttrDef/CSS/Color.php">
+ <line>12</line>
+ </file>
+ <file name="HTMLPurifier/AttrDef/HTML/Color.php">
+ <line>12</line>
+ </file>
+ </directive>
+ <directive id="CSS.AllowedFonts">
+ <file name="HTMLPurifier/AttrDef/CSS/FontFamily.php">
+ <line>50</line>
+ </file>
+ </directive>
+ <directive id="Attr.AllowedClasses">
+ <file name="HTMLPurifier/AttrDef/HTML/Class.php">
+ <line>18</line>
+ </file>
+ </directive>
+ <directive id="Attr.ForbiddenClasses">
+ <file name="HTMLPurifier/AttrDef/HTML/Class.php">
+ <line>19</line>
+ </file>
+ </directive>
+ <directive id="Attr.AllowedFrameTargets">
+ <file name="HTMLPurifier/AttrDef/HTML/FrameTarget.php">
+ <line>15</line>
+ </file>
+ </directive>
+ <directive id="Attr.EnableID">
+ <file name="HTMLPurifier/AttrDef/HTML/ID.php">
+ <line>30</line>
+ </file>
+ </directive>
+ <directive id="Attr.IDPrefix">
+ <file name="HTMLPurifier/AttrDef/HTML/ID.php">
+ <line>36</line>
+ </file>
+ </directive>
+ <directive id="Attr.IDPrefixLocal">
+ <file name="HTMLPurifier/AttrDef/HTML/ID.php">
+ <line>38</line>
+ <line>41</line>
+ </file>
+ </directive>
+ <directive id="Attr.IDBlacklistRegexp">
+ <file name="HTMLPurifier/AttrDef/HTML/ID.php">
+ <line>64</line>
+ </file>
+ </directive>
+ <directive id="Attr.">
+ <file name="HTMLPurifier/AttrDef/HTML/LinkTypes.php">
+ <line>30</line>
+ </file>
+ </directive>
+ <directive id="Core.EnableIDNA">
+ <file name="HTMLPurifier/AttrDef/URI/Host.php">
+ <line>67</line>
+ </file>
+ </directive>
+ <directive id="Attr.DefaultTextDir">
+ <file name="HTMLPurifier/AttrTransform/BdoDir.php">
+ <line>13</line>
+ </file>
+ </directive>
+ <directive id="Core.RemoveInvalidImg">
+ <file name="HTMLPurifier/AttrTransform/ImgRequired.php">
+ <line>18</line>
+ </file>
+ <file name="HTMLPurifier/Strategy/RemoveForeignElements.php">
+ <line>20</line>
+ </file>
+ </directive>
+ <directive id="Attr.DefaultInvalidImage">
+ <file name="HTMLPurifier/AttrTransform/ImgRequired.php">
+ <line>19</line>
+ </file>
+ </directive>
+ <directive id="Attr.DefaultImageAlt">
+ <file name="HTMLPurifier/AttrTransform/ImgRequired.php">
+ <line>25</line>
+ </file>
+ </directive>
+ <directive id="Attr.DefaultInvalidImageAlt">
+ <file name="HTMLPurifier/AttrTransform/ImgRequired.php">
+ <line>33</line>
+ </file>
+ </directive>
+ <directive id="HTML.Attr.Name.UseCDATA">
+ <file name="HTMLPurifier/AttrTransform/Name.php">
+ <line>11</line>
+ </file>
+ <file name="HTMLPurifier/HTMLModule/Name.php">
+ <line>13</line>
+ </file>
+ </directive>
+ <directive id="HTML.FlashAllowFullScreen">
+ <file name="HTMLPurifier/AttrTransform/SafeParam.php">
+ <line>38</line>
+ </file>
+ </directive>
+ <directive id="Core.EscapeInvalidChildren">
+ <file name="HTMLPurifier/ChildDef/Required.php">
+ <line>62</line>
+ </file>
+ </directive>
+ <directive id="Cache.SerializerPath">
+ <file name="HTMLPurifier/DefinitionCache/Serializer.php">
+ <line>91</line>
+ </file>
+ </directive>
+ <directive id="Cache.SerializerPermissions">
+ <file name="HTMLPurifier/DefinitionCache/Serializer.php">
+ <line>107</line>
+ <line>124</line>
+ </file>
+ </directive>
+ <directive id="Filter.ExtractStyleBlocks.TidyImpl">
+ <file name="HTMLPurifier/Filter/ExtractStyleBlocks.php">
+ <line>54</line>
+ </file>
+ </directive>
+ <directive id="Filter.ExtractStyleBlocks.Scope">
+ <file name="HTMLPurifier/Filter/ExtractStyleBlocks.php">
+ <line>78</line>
+ </file>
+ </directive>
+ <directive id="Filter.ExtractStyleBlocks.Escaping">
+ <file name="HTMLPurifier/Filter/ExtractStyleBlocks.php">
+ <line>276</line>
+ </file>
+ </directive>
+ <directive id="HTML.SafeIframe">
+ <file name="HTMLPurifier/HTMLModule/Iframe.php">
+ <line>17</line>
+ </file>
+ <file name="HTMLPurifier/URIFilter/SafeIframe.php">
+ <line>23</line>
+ </file>
+ </directive>
+ <directive id="HTML.MaxImgLength">
+ <file name="HTMLPurifier/HTMLModule/Image.php">
+ <line>14</line>
+ </file>
+ <file name="HTMLPurifier/HTMLModule/SafeEmbed.php">
+ <line>13</line>
+ </file>
+ <file name="HTMLPurifier/HTMLModule/SafeObject.php">
+ <line>19</line>
+ </file>
+ </directive>
+ <directive id="HTML.TidyLevel">
+ <file name="HTMLPurifier/HTMLModule/Tidy.php">
+ <line>45</line>
+ </file>
+ </directive>
+ <directive id="HTML.TidyAdd">
+ <file name="HTMLPurifier/HTMLModule/Tidy.php">
+ <line>49</line>
+ </file>
+ </directive>
+ <directive id="HTML.TidyRemove">
+ <file name="HTMLPurifier/HTMLModule/Tidy.php">
+ <line>50</line>
+ </file>
+ </directive>
+ <directive id="AutoFormat.PurifierLinkify.DocURL">
+ <file name="HTMLPurifier/Injector/PurifierLinkify.php">
+ <line>15</line>
+ </file>
+ </directive>
+ <directive id="AutoFormat.RemoveEmpty.RemoveNbsp">
+ <file name="HTMLPurifier/Injector/RemoveEmpty.php">
+ <line>12</line>
+ </file>
+ </directive>
+ <directive id="AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions">
+ <file name="HTMLPurifier/Injector/RemoveEmpty.php">
+ <line>13</line>
+ </file>
+ </directive>
+ <directive id="Core.AggressivelyFixLt">
+ <file name="HTMLPurifier/Lexer/DOMLex.php">
+ <line>44</line>
+ </file>
+ </directive>
+ <directive id="Core.DirectLexLineNumberSyncInterval">
+ <file name="HTMLPurifier/Lexer/DirectLex.php">
+ <line>70</line>
+ </file>
+ </directive>
+ <directive id="Core.EscapeInvalidTags">
+ <file name="HTMLPurifier/Strategy/MakeWellFormed.php">
+ <line>53</line>
+ </file>
+ <file name="HTMLPurifier/Strategy/RemoveForeignElements.php">
+ <line>19</line>
+ </file>
+ </directive>
+ <directive id="HTML.AllowedComments">
+ <file name="HTMLPurifier/Strategy/RemoveForeignElements.php">
+ <line>24</line>
+ </file>
+ </directive>
+ <directive id="HTML.AllowedCommentsRegexp">
+ <file name="HTMLPurifier/Strategy/RemoveForeignElements.php">
+ <line>25</line>
+ </file>
+ </directive>
+ <directive id="Core.RemoveScriptContents">
+ <file name="HTMLPurifier/Strategy/RemoveForeignElements.php">
+ <line>28</line>
+ </file>
+ </directive>
+ <directive id="Core.HiddenElements">
+ <file name="HTMLPurifier/Strategy/RemoveForeignElements.php">
+ <line>29</line>
+ </file>
+ </directive>
+ <directive id="URI.HostBlacklist">
+ <file name="HTMLPurifier/URIFilter/HostBlacklist.php">
+ <line>12</line>
+ </file>
+ </directive>
+ <directive id="URI.MungeResources">
+ <file name="HTMLPurifier/URIFilter/Munge.php">
+ <line>14</line>
+ </file>
+ </directive>
+ <directive id="URI.MungeSecretKey">
+ <file name="HTMLPurifier/URIFilter/Munge.php">
+ <line>15</line>
+ </file>
+ </directive>
+ <directive id="URI.SafeIframeRegexp">
+ <file name="HTMLPurifier/URIFilter/SafeIframe.php">
+ <line>18</line>
+ </file>
+ </directive>
+</usage>