0
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2024-11-08 14:58:42 +00:00

Rename merge-library to generate-standalone.

git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1568 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
Edward Z. Yang 2008-02-18 04:02:12 +00:00
parent f5a77c523b
commit 6651941e3f
5 changed files with 163 additions and 154 deletions

View File

@ -159,7 +159,7 @@ Standalone version
HTML Purifier has a standalone distribution; you can also generate HTML Purifier has a standalone distribution; you can also generate
a standalone file from the full version by running the script a standalone file from the full version by running the script
maintenance/merge-library.php . The standalone version has the maintenance/generate-standalone.php . The standalone version has the
benefit of having most of its code in one file, so parsing is much benefit of having most of its code in one file, so parsing is much
faster and the library is easier to manage. faster and the library is easier to manage.

View File

@ -0,0 +1,157 @@
#!/usr/bin/php
<?php
chdir(dirname(__FILE__));
require_once 'common.php';
assertCli();
/**
* Compiles all of HTML Purifier's library files into one big file
* named HTMLPurifier.standalone.php.
*/
/**
* Global hash that tracks already loaded includes
*/
$GLOBALS['loaded'] = array();
/**
* Custom FSTools for this script that overloads some behavior
* @warning The overloading of copy() is not necessarily global for
* this script. Watch out!
*/
class MergeLibraryFSTools extends FSTools
{
function copyable($entry) {
// Skip hidden files
if ($entry[0] == '.') {
return false;
}
return true;
}
function copy($source, $dest) {
copy_and_remove_includes($source, $dest);
}
}
$FS = new MergeLibraryFSTools();
/**
* Replaces the includes inside PHP source code with the corresponding
* source.
* @param string $text PHP source code to replace includes from
*/
function replace_includes($text) {
return preg_replace_callback(
"/require(?:_once)? ['\"]([^'\"]+)['\"];/",
'replace_includes_callback',
$text
);
}
/**
* Removes leading PHP tags from included files. Assumes that there is
* no trailing tag.
* @note This is safe for files that have internal <?php
* @param string $text Text to have leading PHP tag from
*/
function remove_php_tags($text) {
return substr($text, 5);
}
/**
* Creates an appropriate blank file, recursively generating directories
* if necessary
* @param string $file Filename to create blank for
*/
function create_blank($file) {
global $FS;
$dir = dirname($file);
$base = realpath('../tests/blanks/') . DIRECTORY_SEPARATOR ;
if ($dir != '.') {
$FS->mkdirr($base . $dir);
}
file_put_contents($base . $file, '');
}
/**
* Copies the contents of a directory to the standalone directory
* @param string $dir Directory to copy
*/
function make_dir_standalone($dir) {
global $FS;
return $FS->copyr($dir, 'standalone/' . $dir);
}
/**
* Copies the contents of a file to the standalone directory
* @param string $file File to copy
*/
function make_file_standalone($file) {
global $FS;
$FS->mkdirr('standalone/' . dirname($file));
copy_and_remove_includes($file, 'standalone/' . $file);
return true;
}
/**
* Copies a file to another location recursively, if it is a PHP file
* remove includes
* @param string $file Original file
* @param string $sfile New location of file
*/
function copy_and_remove_includes($file, $sfile) {
$contents = file_get_contents($file);
if (strrchr($file, '.') === '.php') $contents = replace_includes($contents);
return file_put_contents($sfile, $contents);
}
/**
* @param $matches preg_replace_callback matches array, where index 1
* is the filename to include
*/
function replace_includes_callback($matches) {
$file = $matches[1];
$preserve = array(
// PEAR (external)
'XML/HTMLSax3.php' => 1
);
if (isset($preserve[$file])) {
return $matches[0];
}
if (isset($GLOBALS['loaded'][$file])) return '';
$GLOBALS['loaded'][$file] = true;
create_blank($file);
return replace_includes(remove_php_tags(file_get_contents($file)));
}
shell_exec('php generate-includes.php');
chdir(dirname(__FILE__) . '/../library/');
create_blank('HTMLPurifier.php');
echo 'Creating full file...';
$contents = replace_includes(file_get_contents('HTMLPurifier.includes.php'));
$contents = str_replace(
// Note that bootstrap is now inside the standalone file
"define('HTMLPURIFIER_PREFIX', realpath(dirname(__FILE__) . '/..'));",
"define('HTMLPURIFIER_PREFIX', dirname(__FILE__) . '/standalone');
set_include_path(HTMLPURIFIER_PREFIX . PATH_SEPARATOR . get_include_path());",
$contents
);
file_put_contents('HTMLPurifier.standalone.php', $contents);
echo ' done!' . PHP_EOL;
echo 'Creating standalone directory...';
$FS->rmdirr('standalone'); // ensure a clean copy
// data files
$FS->mkdirr('standalone/HTMLPurifier/DefinitionCache/Serializer');
make_dir_standalone('HTMLPurifier/EntityLookup');
make_file_standalone('HTMLPurifier/ConfigSchema/schema.ser');
// non-standard inclusion setup
make_dir_standalone('HTMLPurifier/Language');
make_dir_standalone('HTMLPurifier/Filter');
make_file_standalone('HTMLPurifier/Lexer/PH5P.php');
make_file_standalone('HTMLPurifier/Lexer/PEARSax3.php');
echo ' done!' . PHP_EOL;

View File

@ -1,157 +1,9 @@
#!/usr/bin/php #!/usr/bin/php
<?php <?php
chdir(dirname(__FILE__));
require_once 'common.php';
assertCli();
/** /**
* Compiles all of HTML Purifier's library files into one big file * @file
* named HTMLPurifier.standalone.php. * Deprecated in favor of generate-standalone.php.
*/ */
/** require dirname(__FILE__) . '/generate-standalone.php';
* Global hash that tracks already loaded includes
*/
$GLOBALS['loaded'] = array();
/**
* Custom FSTools for this script that overloads some behavior
* @warning The overloading of copy() is not necessarily global for
* this script. Watch out!
*/
class MergeLibraryFSTools extends FSTools
{
function copyable($entry) {
// Skip hidden files
if ($entry[0] == '.') {
return false;
}
return true;
}
function copy($source, $dest) {
copy_and_remove_includes($source, $dest);
}
}
$FS = new MergeLibraryFSTools();
/**
* Replaces the includes inside PHP source code with the corresponding
* source.
* @param string $text PHP source code to replace includes from
*/
function replace_includes($text) {
return preg_replace_callback(
"/require(?:_once)? ['\"]([^'\"]+)['\"];/",
'replace_includes_callback',
$text
);
}
/**
* Removes leading PHP tags from included files. Assumes that there is
* no trailing tag.
* @note This is safe for files that have internal <?php
* @param string $text Text to have leading PHP tag from
*/
function remove_php_tags($text) {
return substr($text, 5);
}
/**
* Creates an appropriate blank file, recursively generating directories
* if necessary
* @param string $file Filename to create blank for
*/
function create_blank($file) {
global $FS;
$dir = dirname($file);
$base = realpath('../tests/blanks/') . DIRECTORY_SEPARATOR ;
if ($dir != '.') {
$FS->mkdirr($base . $dir);
}
file_put_contents($base . $file, '');
}
/**
* Copies the contents of a directory to the standalone directory
* @param string $dir Directory to copy
*/
function make_dir_standalone($dir) {
global $FS;
return $FS->copyr($dir, 'standalone/' . $dir);
}
/**
* Copies the contents of a file to the standalone directory
* @param string $file File to copy
*/
function make_file_standalone($file) {
global $FS;
$FS->mkdirr('standalone/' . dirname($file));
copy_and_remove_includes($file, 'standalone/' . $file);
return true;
}
/**
* Copies a file to another location recursively, if it is a PHP file
* remove includes
* @param string $file Original file
* @param string $sfile New location of file
*/
function copy_and_remove_includes($file, $sfile) {
$contents = file_get_contents($file);
if (strrchr($file, '.') === '.php') $contents = replace_includes($contents);
return file_put_contents($sfile, $contents);
}
/**
* @param $matches preg_replace_callback matches array, where index 1
* is the filename to include
*/
function replace_includes_callback($matches) {
$file = $matches[1];
$preserve = array(
// PEAR (external)
'XML/HTMLSax3.php' => 1
);
if (isset($preserve[$file])) {
return $matches[0];
}
if (isset($GLOBALS['loaded'][$file])) return '';
$GLOBALS['loaded'][$file] = true;
create_blank($file);
return replace_includes(remove_php_tags(file_get_contents($file)));
}
shell_exec('php generate-includes.php');
chdir(dirname(__FILE__) . '/../library/');
create_blank('HTMLPurifier.php');
echo 'Creating full file...';
$contents = replace_includes(file_get_contents('HTMLPurifier.includes.php'));
$contents = str_replace(
// Note that bootstrap is now inside the standalone file
"define('HTMLPURIFIER_PREFIX', realpath(dirname(__FILE__) . '/..'));",
"define('HTMLPURIFIER_PREFIX', dirname(__FILE__) . '/standalone');
set_include_path(HTMLPURIFIER_PREFIX . PATH_SEPARATOR . get_include_path());",
$contents
);
file_put_contents('HTMLPurifier.standalone.php', $contents);
echo ' done!' . PHP_EOL;
echo 'Creating standalone directory...';
$FS->rmdirr('standalone'); // ensure a clean copy
// data files
$FS->mkdirr('standalone/HTMLPurifier/DefinitionCache/Serializer');
make_dir_standalone('HTMLPurifier/EntityLookup');
make_file_standalone('HTMLPurifier/ConfigSchema/schema.ser');
// non-standard inclusion setup
make_dir_standalone('HTMLPurifier/Language');
make_dir_standalone('HTMLPurifier/Filter');
make_file_standalone('HTMLPurifier/Lexer/PH5P.php');
make_file_standalone('HTMLPurifier/Lexer/PEARSax3.php');
echo ' done!' . PHP_EOL;

View File

@ -71,7 +71,7 @@ require 'HTMLPurifier/Harness.php';
if ($AC['flush']) { if ($AC['flush']) {
shell_exec($AC['php'] . ' ../maintenance/generate-schema-cache.php'); shell_exec($AC['php'] . ' ../maintenance/generate-schema-cache.php');
shell_exec($AC['php'] . ' ../maintenance/flush-definition-cache.php'); shell_exec($AC['php'] . ' ../maintenance/flush-definition-cache.php');
shell_exec($AC['php'] . ' ../maintenance/merge-library.php'); shell_exec($AC['php'] . ' ../maintenance/generate-standalone.php');
} }
// Now, userland code begins to be executed // Now, userland code begins to be executed

View File

@ -47,7 +47,7 @@ $aliases = array(
htmlpurifier_parse_args($AC, $aliases); htmlpurifier_parse_args($AC, $aliases);
// Calls generate-includes.php automatically // Calls generate-includes.php automatically
shell_exec($AC['php'] . ' ../maintenance/merge-library.php'); shell_exec($AC['php'] . ' ../maintenance/generate-standalone.php');
// Not strictly necessary, but its a good idea // Not strictly necessary, but its a good idea
shell_exec($AC['php'] . ' ../maintenance/generate-schema-cache.php'); shell_exec($AC['php'] . ' ../maintenance/generate-schema-cache.php');