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