Nice!!! Regards, Philip
On Fri, 28 Jan 2005, Sean Coates wrote: > sean Fri Jan 28 10:17:02 2005 EDT > > Added files: > /phpdoc/scripts make-partial.php > Log: > See: > http://news.php.net/php.pear.doc/5479 > http://news.php.net/php.pear.doc/5481 > http://news.php.net/php.pear.doc/5482 > (import to phpdoc) > > > > http://cvs.php.net/co.php/phpdoc/scripts/make-partial.php?r=1.1&p=1 > Index: phpdoc/scripts/make-partial.php > +++ phpdoc/scripts/make-partial.php > #!/usr/bin/env php > <?php > /** vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: > * Script to trigger partial builds of the PEAR manual > * > * LICENSE: This source file is subject to version 3.0 of the PHP license > * that is available through the world-wide-web at the following URI: > * http://www.php.net/license/3_0.txt. If you did not receive a copy of > * the PHP License and are unable to obtain it through the web, please > * send a note to [EMAIL PROTECTED] so we can mail you a copy immediately. > * > * @author Martin Jansen <[EMAIL PROTECTED]> > * @copyright 2005 The PEAR Group > * @version CVS: $Id: make-partial.php,v 1.1 2005/01/28 15:17:01 sean Exp $ > */ > > // NOTE: originally from peardoc:/make-partial.php ; > // these files should be kept in sync > > require_once "Console/Getopt.php"; > $console = new Console_Getopt; > $args = $console->getopt($console->readPHPArgv(), array(), > array("format=", "include=")); > > if (!function_exists("readline")) { > echo "Error: The readline extension could not be found!"; > exit(1); > } > > $file = file("manual.xml.in"); > if (!$file) { > echo "Error: Unable to read manual.xml.in!"; > exit(1); > } > > copy("manual.xml.in", "manual.xml.in.partial-backup"); > register_shutdown_function("restoreFile"); > > // {{{ gather arguments > > $format = "html"; > $sections = array(); > > foreach ($args[0] as $arg) { > if ($arg[0] == "--format") { > $format = $arg[1]; > } elseif ($arg[0] == '--include') { > $sections[] = $arg[1]; > } > } > > // }}} > > > $newFile = ""; > $partStack = array(); > $includePart = true; > $notInPart = true; > > /** > * Loop through the file and build a new file depending on the users > * choice. > */ > foreach ($file as $line) { > // <part id="foo"> > if (preg_match("/<part id=\"([a-z-]+)\">/", $line, $matches)) { > $inPart = true; > > if ($sections) { > echo "Including ". $matches[1] ."? "; > if ($includePart = in_string($sections, $matches[1])) { > echo "YES\n"; > } else { > echo "NO\n"; > } > } else { > $include = readline("Include " . $matches[1] . "? [NO] "); > $includePart = evaluate($include); > } > > if ($includePart == true) { > $newFile .= $line; > } > > continue; > } > > // </part> > if (preg_match("/<\/part>/", $line)) { > if (count($partStack) > 0) { > $newFile .= implode("", $partStack); > $partStack = array(); > } > > if ($includePart == true) { > $newFile .= $line; > } > $includePart = false; > $inPart = false; > > continue; > } > > // <title> > if ($inPart == true && $includePart && preg_match("/<title/", $line)) { > $partStack[] = $line; > continue; > } > > // the rest > if ($inPart == true) { > if ($includePart == false) { > continue; > } > > if (preg_match("/(\s\t)*&([a-z0-9\.-]+);/", $line, $matches)) { > > if ($sections) { > echo "Including ". $matches[2] ."? "; > if ($include = in_string($sections, $matches[2])) { > echo "YES\n"; > } else { > echo "NO\n"; > } > } else { > $include = evaluate(readline("Include " . $matches[2] . "? > [NO] ")); > } > > if ($include == true) { > $partStack[] = $line; > } > } > } else { > $newFile .= $line; > } > } > > file_put_contents("manual.xml.in", $newFile); > > // {{{ Run the build scripts > > $cmd = "make " . $format; > passthru($cmd); > > // }}} > // {{{ Helper functions > > /** > * Restores the original manual.xml.in file > */ > function restoreFile() { > if (!is_file("manual.xml.in.partial-backup")) { > return; > } > > rename("manual.xml.in.partial-backup", "manual.xml.in"); > } > > /** > * Evaluates the return value of readline() > * > * If the first parameter is either "y" or "yes" the method will > * return true. Otherwise false. > */ > function evaluate($str) { > if ($str == 'y' || $str == "yes") { > return true; > } > return false; > } > > /** > * $needle (array) is in $haystack? > * > */ > function in_string($needle, $haystack) > { > foreach ((array) $needle AS $n) { > if (stripos($haystack, $n) !== false) { > return true; > } > } > return false; > } > > // }}} >
