4 chdir(dirname(__FILE__
));
5 require_once 'common.php';
6 require_once '../tests/path2class.func.php';
7 require_once '../library/HTMLPurifier/Bootstrap.php';
12 * Generates an include stub for users who do not want to use the autoloader.
15 chdir(dirname(__FILE__
) . '/../library/');
18 $exclude_dirs = array(
19 'HTMLPurifier/Language/',
20 'HTMLPurifier/Filter/',
22 $exclude_files = array(
23 'HTMLPurifier/Lexer/PEARSax3.php',
24 'HTMLPurifier/Lexer/PH5P.php',
27 // Determine what files need to be included:
28 echo 'Scanning for files... ';
29 $raw_files = $FS->globr('.', '*.php');
31 foreach ($raw_files as $file) {
32 $file = substr($file, 2); // rm leading './'
33 if (strncmp('standalone/', $file, 11) === 0) continue; // rm generated files
34 if (substr_count($file, '.') > 1) continue; // rm meta files
36 foreach ($exclude_dirs as $dir) {
37 if (strncmp($dir, $file, strlen($dir)) === 0) {
42 if (!$ok) continue; // rm excluded directories
43 if (in_array($file, $exclude_files)) continue; // rm excluded files
48 // Reorder list so that dependencies are included first:
51 * Returns a lookup array of dependencies for a file.
53 * @note This function expects that format $name extends $parent on one line
56 * File to check dependencies of.
58 * Lookup array of files the file is dependent on, sorted accordingly.
60 function get_dependency_lookup($file) {
61 static $cache = array();
62 if (isset($cache[$file])) return $cache[$file];
63 if (!file_exists($file)) {
64 echo "File doesn't exist: $file\n";
67 $fh = fopen($file, 'r');
71 if (strncmp('class', $line, 5) === 0) {
72 // The implementation here is fragile and will break if we attempt
73 // to use interfaces. Beware!
74 list(, $parent) = explode(' extends ', trim($line, ' {'."\n\r"), 2);
75 if (empty($parent)) break;
76 $dep_file = HTMLPurifier_Bootstrap
::getPath($parent);
77 if (!$dep_file) break;
78 $deps[$dep_file] = true;
83 foreach (array_keys($deps) as $file) {
84 // Extra dependencies must come *before* base dependencies
85 $deps = get_dependency_lookup($file) +
$deps;
87 $cache[$file] = $deps;
92 * Sorts files based on dependencies. This function is lazy and will not
93 * group files with dependencies together; it will merely ensure that a file
94 * is never included before its dependencies are.
97 * Files array to sort.
99 * Sorted array ($files is not modified by reference!)
101 function dep_sort($files) {
104 foreach ($files as $file) {
105 if (isset($cache[$file])) continue;
106 $deps = get_dependency_lookup($file);
107 foreach (array_keys($deps) as $dep) {
108 if (!isset($cache[$dep])) {
113 $cache[$file] = true;
119 $files = dep_sort($files);
121 // Build the actual include stub:
123 $version = trim(file_get_contents('../VERSION'));
128 * This file was auto-generated by generate-includes.php and includes all of
129 * the core files required by HTML Purifier. Use this if performance is a
130 * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
131 * FILE, changes will be overwritten the next time the script is run.
136 * You must *not* include any other HTML Purifier files before this file,
137 * because 'require' not 'require_once' is used.
140 * This file requires that the include path contains the HTML Purifier
141 * library directory; this is not auto-set.
146 foreach ($files as $file) {
147 $php .= "require '$file';" . PHP_EOL
;
150 echo "Writing file... ";
151 file_put_contents('HTMLPurifier.includes.php', $php);