| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | #!/usr/bin/env php<?php// Send all errors to stderrini_set('display_errors', 'stderr');// setup composer autoloading$composerAutoload = [	__DIR__ . '/../vendor/autoload.php', // standalone with "composer install" run	__DIR__ . '/../../../autoload.php', // script is installed as a composer binary];foreach ($composerAutoload as $autoload) {	if (file_exists($autoload)) {		require($autoload);		break;	}}if (!class_exists('cebe\jssearch\Indexer')) {	error('Autoloading does not seem to work. Looks like you should run `composer install` first.');}// check arguments$src = [];foreach($argv as $k => $arg) {	if ($k == 0) {		continue;	}	if ($arg[0] == '-') {		$arg = explode('=', $arg);		switch($arg[0]) {			// TODO allow baseUrl to be set via arg			case '-h':			case '--help':				echo "jssearch index builder\n";				echo "----------------------\n\n";				echo "by Carsten Brandt <mail@cebe.cc>\n\n";				usage();				break;			default:				error("Unknown argument " . $arg[0], "usage");		}	} else {		$src[] = $arg;	}}if (empty($src)) {	error("You have to give an input directory.", "usage");}$indexer = new \cebe\jssearch\Indexer();foreach($src as $dir) {	echo "Processing $dir\n";	$files = findFiles($dir);	if (empty($files)) {		echo "No files where found in $dir.\n";	} else {		$indexer->indexFiles($files, $dir);	}}$js = $indexer->exportJs();file_put_contents('jssearch.index.js', $js);// functions/** * Display usage information */function usage() {	global $argv;	$cmd = $argv[0];	echo <<<EOFUsage:    $cmd [src-directory]    --help    shows this usage information.    creates and jssearch.index.js file in the current directory.EOF;	exit(1);}/** * Send custom error message to stderr * @param $message string * @param $callback mixed called before script exit * @return void */function error($message, $callback = null) {	$fe = fopen("php://stderr", "w");	fwrite($fe, "Error: " . $message . "\n");	if (is_callable($callback)) {		call_user_func($callback);	}	exit(1);}function findFiles($dir, $ext = '.html'){	if (!is_dir($dir)) {		error("$dir is not a directory.");	}	$dir = rtrim($dir, DIRECTORY_SEPARATOR);	$list = [];	$handle = opendir($dir);	if ($handle === false) {		error('Unable to open directory: ' . $dir);	}	while (($file = readdir($handle)) !== false) {		if ($file === '.' || $file === '..') {			continue;		}		$path = $dir . DIRECTORY_SEPARATOR . $file;		if (is_file($path)) {			if (substr($file, -($l = strlen($ext)), $l) === $ext) {				$list[] = $path;			}		} else {			$list = array_merge($list, findFiles($path, $ext));		}	}	closedir($handle);	return $list;}
 |