some important stuff we'll need
This commit is contained in:
		| @@ -0,0 +1,44 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * Converts HTMLPurifier_ConfigSchema_Interchange to our runtime | ||||
|  * representation used to perform checks on user configuration. | ||||
|  */ | ||||
| class HTMLPurifier_ConfigSchema_Builder_ConfigSchema | ||||
| { | ||||
|  | ||||
|     public function build($interchange) { | ||||
|         $schema = new HTMLPurifier_ConfigSchema(); | ||||
|         foreach ($interchange->directives as $d) { | ||||
|             $schema->add( | ||||
|                 $d->id->key, | ||||
|                 $d->default, | ||||
|                 $d->type, | ||||
|                 $d->typeAllowsNull | ||||
|             ); | ||||
|             if ($d->allowed !== null) { | ||||
|                 $schema->addAllowedValues( | ||||
|                     $d->id->key, | ||||
|                     $d->allowed | ||||
|                 ); | ||||
|             } | ||||
|             foreach ($d->aliases as $alias) { | ||||
|                 $schema->addAlias( | ||||
|                     $alias->key, | ||||
|                     $d->id->key | ||||
|                 ); | ||||
|             } | ||||
|             if ($d->valueAliases !== null) { | ||||
|                 $schema->addValueAliases( | ||||
|                     $d->id->key, | ||||
|                     $d->valueAliases | ||||
|                 ); | ||||
|             } | ||||
|         } | ||||
|         $schema->postProcess(); | ||||
|         return $schema; | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| // vim: et sw=4 sts=4 | ||||
| @@ -0,0 +1,106 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * Converts HTMLPurifier_ConfigSchema_Interchange to an XML format, | ||||
|  * which can be further processed to generate documentation. | ||||
|  */ | ||||
| class HTMLPurifier_ConfigSchema_Builder_Xml extends XMLWriter | ||||
| { | ||||
|  | ||||
|     protected $interchange; | ||||
|     private $namespace; | ||||
|  | ||||
|     protected function writeHTMLDiv($html) { | ||||
|         $this->startElement('div'); | ||||
|  | ||||
|         $purifier = HTMLPurifier::getInstance(); | ||||
|         $html = $purifier->purify($html); | ||||
|         $this->writeAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); | ||||
|         $this->writeRaw($html); | ||||
|  | ||||
|         $this->endElement(); // div | ||||
|     } | ||||
|  | ||||
|     protected function export($var) { | ||||
|         if ($var === array()) return 'array()'; | ||||
|         return var_export($var, true); | ||||
|     } | ||||
|  | ||||
|     public function build($interchange) { | ||||
|         // global access, only use as last resort | ||||
|         $this->interchange = $interchange; | ||||
|  | ||||
|         $this->setIndent(true); | ||||
|         $this->startDocument('1.0', 'UTF-8'); | ||||
|         $this->startElement('configdoc'); | ||||
|         $this->writeElement('title', $interchange->name); | ||||
|  | ||||
|         foreach ($interchange->directives as $directive) { | ||||
|             $this->buildDirective($directive); | ||||
|         } | ||||
|  | ||||
|         if ($this->namespace) $this->endElement(); // namespace | ||||
|  | ||||
|         $this->endElement(); // configdoc | ||||
|         $this->flush(); | ||||
|     } | ||||
|  | ||||
|     public function buildDirective($directive) { | ||||
|  | ||||
|         // Kludge, although I suppose having a notion of a "root namespace" | ||||
|         // certainly makes things look nicer when documentation is built. | ||||
|         // Depends on things being sorted. | ||||
|         if (!$this->namespace || $this->namespace !== $directive->id->getRootNamespace()) { | ||||
|             if ($this->namespace) $this->endElement(); // namespace | ||||
|             $this->namespace = $directive->id->getRootNamespace(); | ||||
|             $this->startElement('namespace'); | ||||
|             $this->writeAttribute('id', $this->namespace); | ||||
|             $this->writeElement('name', $this->namespace); | ||||
|         } | ||||
|  | ||||
|         $this->startElement('directive'); | ||||
|         $this->writeAttribute('id', $directive->id->toString()); | ||||
|  | ||||
|         $this->writeElement('name', $directive->id->getDirective()); | ||||
|  | ||||
|         $this->startElement('aliases'); | ||||
|             foreach ($directive->aliases as $alias) $this->writeElement('alias', $alias->toString()); | ||||
|         $this->endElement(); // aliases | ||||
|  | ||||
|         $this->startElement('constraints'); | ||||
|             if ($directive->version) $this->writeElement('version', $directive->version); | ||||
|             $this->startElement('type'); | ||||
|                 if ($directive->typeAllowsNull) $this->writeAttribute('allow-null', 'yes'); | ||||
|                 $this->text($directive->type); | ||||
|             $this->endElement(); // type | ||||
|             if ($directive->allowed) { | ||||
|                 $this->startElement('allowed'); | ||||
|                     foreach ($directive->allowed as $value => $x) $this->writeElement('value', $value); | ||||
|                 $this->endElement(); // allowed | ||||
|             } | ||||
|             $this->writeElement('default', $this->export($directive->default)); | ||||
|             $this->writeAttribute('xml:space', 'preserve'); | ||||
|             if ($directive->external) { | ||||
|                 $this->startElement('external'); | ||||
|                     foreach ($directive->external as $project) $this->writeElement('project', $project); | ||||
|                 $this->endElement(); | ||||
|             } | ||||
|         $this->endElement(); // constraints | ||||
|  | ||||
|         if ($directive->deprecatedVersion) { | ||||
|             $this->startElement('deprecated'); | ||||
|                 $this->writeElement('version', $directive->deprecatedVersion); | ||||
|                 $this->writeElement('use', $directive->deprecatedUse->toString()); | ||||
|             $this->endElement(); // deprecated | ||||
|         } | ||||
|  | ||||
|         $this->startElement('description'); | ||||
|             $this->writeHTMLDiv($directive->description); | ||||
|         $this->endElement(); // description | ||||
|  | ||||
|         $this->endElement(); // directive | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| // vim: et sw=4 sts=4 | ||||
		Reference in New Issue
	
	Block a user