require_once $_composer_autoload_path ?? __DIR__."/../vendor/autoload.php";
if ($argc < 3) {
- fprintf(STDERR, "Usage: cd ref-<ns> && %s <ns> <stub.php>\n", $argv[0]);
+ fprintf(STDERR, "Usage: %s <ns> <stub.php> [<destination>]\n", $argv[0]);
exit(1);
}
$namespace = $argv[1];
require_once $argv[2];
+$destination = ($argc > 3) ? $argv[3] : ".";
-if (!file_exists("$namespace.mdref")) {
- fprintf(STDERR, "Missing $namespace.mdref; generated default.\n");
- file_put_contents("$namespace.mdref", "./%s");
+if (!is_dir($destination)) {
+ fprintf(STDERR, "Missing $destination/; Making dir.");
+ mkdir($destination) || exit -1;
}
-if (!file_exists("$namespace.md")) {
- fprintf(STDERR, "Missing $namespace.md; hard linking README.md\n");
- link(dirname($argv[2]) . "/README.md", "$namespace.md");
+if (!file_exists("$destination/$namespace.mdref")) {
+ fprintf(STDERR, "Missing $destination/$namespace.mdref; generated default.\n");
+ file_put_contents("$destination/$namespace.mdref", "./%s") || exit -2;
+}
+if (!file_exists("$destination/$namespace.md")) {
+ fprintf(STDERR, "Missing $destination/$namespace.md; hard linking README.md\n");
+ link(dirname($argv[2]) . "/README.md", "$destination/$namespace.md") || exit -3;
}
$inspector = new Inspector;
$inspector->inspectNamespace($namespace);
-$generator = new Generator;
+$generator = new Generator($destination);
$generator->generateFunctions($inspector->getFunctions());
$generator->generateClasses($inspector->getClasses());
use mdref\Generator\{Cls, Func};
class Generator {
+ protected string $destination;
+
+ public function __construct(string $destination = ".") {
+ $this->destination = $destination;
+ }
+
/**
* @param array<string, array<string, \ReflectionFunctionAbstract>> $functions
* @return void
*/
public function generateFunctions(array $functions) : void {
foreach ($functions as $ns => $funcs) {
- $ns_path = strtr($ns, "\\", "/");
+ $ns_path = $this->destination . "/" . strtr($ns, "\\", "/");
foreach ($funcs as $fn => $rf) {
$fn_file = "$ns_path/$fn.md";
fprintf(STDERR, "Generating %s\n", $fn_file);
*/
public function generateClasses(array $classes) : void {
foreach ($classes as $ns => $cls) {
- $ns_path = strtr($ns, "\\", "/");
+ $ns_path = $this->destination . "/" . strtr($ns, "\\", "/");
foreach ($cls as $cn => $rc) {
$cn_path = "$ns_path/$cn";
$cn_file = "$cn_path.md";