startElement ( 'div' );
$purifier = HTMLPurifier::getInstance ();
$html = $purifier->purify ( $html );
$this->writeAttribute ( 'xmlns', 'http://www.w3.org/1999/xhtml' );
$this->writeRaw ( $html );
$this->endElement (); // div
}
/**
*
* @param mixed $var
* @return string
*/
protected function export($var) {
if ($var === array ()) {
return 'array()';
}
return var_export ( $var, true );
}
/**
*
* @param HTMLPurifier_ConfigSchema_Interchange $interchange
*/
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 ();
}
/**
*
* @param HTMLPurifier_ConfigSchema_Interchange_Directive $directive
*/
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