Hello all.
Just getting back into the docs and I'm coming up against the changes made
in
http://git.php.net/?p=phd.git;a=commitdiff;h=dc61fff7daab9c3498f5c4bd8ddee9fbea139989;hp=e65c062692173f921c16a1bc81f2d70e60a253a4
>From what I am seeing, to use optional values (lang::), I need to use the =
separator (this may be windows only and a bug - I'm not sure).
So, --lang=en rather than --lang en
But the patch gives an error ...
[02:28:41 - E_USER_ERROR ]
D:\PHP\Manual\PHD\phpdotnet\phd\Options\Parser.php:84
Invalid long option --lang=en
So, adding some debugging (print_r()'s on $args), and using a command line
like ...
D:\PHP\Manual\phd\render --package PHP --format enhancedchm --docbook
D:\PHP\Manual\PHP\doc-all\doc-base\.manual_en.xml --lang en --output
D:\PHP\Manual\rendering\PHP\en --color true --css reset.css --css theme.css
--css doc.css --saveconfig true
I get output of ...
array(4) {
["package"]=>
string(3) "PHP"
["format"]=>
string(11) "enhancedchm"
["docbook"]=>
string(49) "D:\PHP\Manual\PHP\doc-all\doc-base\.manual_en.xml"
["lang"]=>
bool(false)
}
Which is fine, upto lang. No '=' and things bomb out.
Without the checkOptions() call, and using a command line like ...
D:\PHP\Manual\phd\render --package PHP --format enhancedchm --docbook
D:\PHP\Manual\PHP\doc-all\doc-base\.manual_en.xml --lang=en --output
D:\PHP\Manual\rendering\PHP\en --color true --css reset.css --css theme.css
--css doc.css --saveconfig=true
the debug output looks like array(8) {
["package"]=>
string(3) "PHP"
["format"]=>
string(11) "enhancedchm"
["docbook"]=>
string(49) "D:\PHP\Manual\PHP\doc-all\doc-base\.manual_en.xml"
["lang"]=>
string(2) "en"
["output"]=>
string(30) "D:\PHP\Manual\rendering\PHP\en"
["color"]=>
string(4) "true"
["css"]=>
array(3) {
[0]=>
string(9) "reset.css"
[1]=>
string(9) "theme.css"
[2]=>
string(7) "doc.css"
}
["saveconfig"]=>
string(4) "true"
}
Which is a lot better.
Amending the checkOptions() method to ignore the =xxxx content, seems to
work as I would expect ...
private function checkOptions() {
$argv = $_SERVER['argv'];
$argc = $_SERVER['argc'];
$short = str_split(str_replace(':', '', $this->getShortOptions()));
$long = array();
foreach ($this->getLongOptions() as $opt) {
$long[] = str_replace(':', '', $opt);
}
for ($i=1; $i < $argc; $i++) {
$equal_pos = strpos($argv[$i], '=');
if (substr($argv[$i], 0, 2) == '--') {
if (!in_array($check = substr($argv[$i], 2, $equal_pos ?
$equal_pos - 2 : strlen($argv[1])), $long)) {
trigger_error('Invalid long option ' . $argv[$i] . ' '
. $check, E_USER_ERROR);
}
} elseif (substr($argv[$i], 0, 1) == '-') {
if (!in_array(substr($argv[$i], 1, $equal_pos ? $equal_pos
- 1 : strlen($argv[1])), $short)) {
trigger_error('Invalid short option ' . $argv[$i],
E_USER_ERROR);
}
}
}
}
But I'm not sure if this is a windows only issue?
Can anyone check this please?
Thanks,
Richard.
--
Richard Quadling
Twitter : EE : Zend
@RQuadling : http://e-e.com/M_248814.html
: http://bit.ly/9O8vFY