public static function buildFromDirectory($dir = null) { $parser = new HTMLPurifier_StringHashParser(); $builder = new HTMLPurifier_ConfigSchema_InterchangeBuilder(); $interchange = new HTMLPurifier_ConfigSchema_Interchange(); if (!$dir) { $dir = HTMLPURIFIER_PREFIX . '/HTMLPurifier/ConfigSchema/schema/'; } $info = parse_ini_file($dir . 'info.ini'); $interchange->name = $info['name']; $files = array(); $dh = opendir($dir); while (false !== ($file = readdir($dh))) { if (!$file || $file[0] == '.' || strrchr($file, '.') !== '.txt') { continue; } $files[] = $file; } closedir($dh); sort($files); foreach ($files as $file) { $builder->build($interchange, new HTMLPurifier_StringHash($parser->parseFile($dir . $file))); } return $interchange; }
assertCli(); /** * @file * Generates a schema cache file, saving it to * library/HTMLPurifier/ConfigSchema/schema.ser. * * This should be run when new configuration options are added to * HTML Purifier. A cached version is available via the repository * so this does not normally have to be regenerated. * * If you have a directory containing custom configuration schema files, * you can simple add a path to that directory as a parameter to * this, and they will get included. */ $target = dirname(__FILE__) . '/../library/HTMLPurifier/ConfigSchema/schema.ser'; $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; } foreach ($_SERVER['argv'] as $i => $dir) { if ($i === 0) { continue; } $builder->buildDir($interchange, realpath($dir)); } $interchange->validate(); $schema_builder = new HTMLPurifier_ConfigSchema_Builder_ConfigSchema(); $schema = $schema_builder->build($interchange);
$old = $argv[1]; $new = $argv[2]; if (!file_exists("{$old}.txt")) { echo "Cannot move undefined configuration directive {$old}\n"; exit(1); } if ($old === $new) { echo "Attempting to move to self, aborting\n"; exit(1); } if (file_exists("{$new}.txt")) { echo "Cannot move to already defined directive {$new}\n"; exit(1); } $file = "{$old}.txt"; $builder = new HTMLPurifier_ConfigSchema_InterchangeBuilder(); $interchange = new HTMLPurifier_ConfigSchema_Interchange(); $builder->buildFile($interchange, $file); $contents = file_get_contents($file); if (strpos($contents, "\r\n") !== false) { $nl = "\r\n"; } elseif (strpos($contents, "\r") !== false) { $nl = "\r"; } else { $nl = "\n"; } // replace name with new name $contents = str_replace($old, $new, $contents); if ($interchange->directives[$old]->aliases) { $pos_alias = strpos($contents, 'ALIASES:'); $pos_ins = strpos($contents, $nl, $pos_alias);
<?php require_once 'common.php'; // Setup environment require_once '../extras/HTMLPurifierExtras.auto.php'; $interchange = HTMLPurifier_ConfigSchema_InterchangeBuilder::buildFromDirectory('test-schema/'); $interchange->validate(); if (isset($_GET['doc'])) { // Hijack page generation to supply documentation if (file_exists('test-schema.html') && !isset($_GET['purge'])) { echo file_get_contents('test-schema.html'); exit; } $style = 'plain'; $configdoc_xml = 'test-schema.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("../configdoc/styles/{$style}.xsl"); $xslt->setParameters(array('css' => '../configdoc/styles/plain.css')); $html = $xslt->transformToHTML($configdoc_xml); unlink('test-schema.xml'); file_put_contents('test-schema.html', $html); echo $html; exit; } ?> <!DOCTYPE html
- 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
public static function buildFromDirectory($dir = null) { $builder = new HTMLPurifier_ConfigSchema_InterchangeBuilder(); $interchange = new HTMLPurifier_ConfigSchema_Interchange(); return $builder->buildDir($interchange, $dir); }