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;
> }
> 
> // }}}
> 

Reply via email to