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:
parent
f5a77c523b
commit
6651941e3f
2
INSTALL
2
INSTALL
@ -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.
|
||||||
|
|
||||||
|
157
maintenance/generate-standalone.php
Executable file
157
maintenance/generate-standalone.php
Executable 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;
|
@ -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;
|
|
||||||
|
@ -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
|
||||||
|
@ -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');
|
||||||
|
Loading…
Reference in New Issue
Block a user