| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 | #!/usr/bin/php<?phpchdir(dirname(__FILE__));require_once 'common.php';assertCli();/** * @file * Compiles all of HTML Purifier's library files into one big file * named HTMLPurifier.standalone.php. This is usually called during the * release process. *//** * 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{    public function copyable($entry)    {        // Skip hidden files        if ($entry[0] == '.') {            return false;        }        return true;    }    public 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){    // also remove vim modelines    return preg_replace_callback(        "/require(?:_once)? ['\"]([^'\"]+)['\"];/",        'replace_includes_callback',        $text    );}/** * Removes leading PHP tags from included files. Assumes that there is * no trailing tag. Also removes vim modelines. * @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){    $text = preg_replace('#// vim:.+#', '', $text);    return substr($text, 5);}/** * 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;    return replace_includes(remove_php_tags(file_get_contents($file)));}echo 'Generating includes file... ';shell_exec('php generate-includes.php');echo "done!\n";chdir(dirname(__FILE__) . '/../library/');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_file_standalone('HTMLPurifier/EntityLookup/entities.ser');make_file_standalone('HTMLPurifier/ConfigSchema/schema.ser');// non-standard inclusion setupmake_dir_standalone('HTMLPurifier/ConfigSchema');make_dir_standalone('HTMLPurifier/Language');make_dir_standalone('HTMLPurifier/Filter');make_dir_standalone('HTMLPurifier/Printer');make_file_standalone('HTMLPurifier/Printer.php');make_file_standalone('HTMLPurifier/Lexer/PH5P.php');echo ' done!' . PHP_EOL;// vim: et sw=4 sts=4
 |