diff --git a/apps/pdal.cpp b/apps/pdal.cpp index 6a8e802231..4ad0c3165b 100644 --- a/apps/pdal.cpp +++ b/apps/pdal.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * Copyright (c) 2013, Howard Butler (hobu.inc@gmail.com) -* Copyright (c) 2014, Bradley J Chambers (brad.chambers@gmail.com) +* Copyright (c) 2014-2015, Bradley J Chambers (brad.chambers@gmail.com) * * All rights reserved. * @@ -33,17 +33,32 @@ * OF SUCH DAMAGE. ****************************************************************************/ -//#include #include +#include #include #include +#include +#include +#include +#include +#include +#include + using namespace pdal; -namespace po = boost::program_options; std::string headline("------------------------------------------------------------------------------------------"); +std::string splitDriverName(std::string const& name) +{ + std::vector driverVec; + boost::algorithm::split(driverVec, name, + boost::algorithm::is_any_of("."), boost::algorithm::token_compress_on); + + return driverVec[1]; +} + void outputVersion() { std::cout << headline << std::endl; @@ -52,17 +67,23 @@ void outputVersion() std::cout << std::endl; } -void outputHelp(po::options_description const& options) +void outputHelp() { - std::cerr << "Usage: pdal [--debug] [--drivers] [--help] [--options[=]] [--version]" << std::endl; - std::cerr << options << std::endl; + std::cerr << "Usage: pdal [--debug] [--drivers] [--help] [--options[=]] [--version]\n"; + std::cerr << " --debug Show debug information\n"; + std::cerr << " --drivers Show drivers\n"; + std::cerr << " -h [ --help ] Print help message\n"; + std::cerr << " --options [=arg(=all)] Show driver options\n"; + std::cerr << " --version Show version info\n"; + std::cerr << "\n"; - std::cerr << "The most commonly used pdal commands are:" << std::endl; + std::cerr << "The most commonly used pdal commands are:\n"; - KernelFactory f; - std::map const& kernels = f.getKernelInfos(); - for (auto i = kernels.begin(); i != kernels.end(); ++i) - std::cout << " - " << i->second.getName() << std::endl; + KernelFactory f(false); + std::vector loaded_kernels = f.getKernelNames(); + + for (auto name : loaded_kernels) + std::cout << " - " << splitDriverName(name) << std::endl; std::cout << "See http://pdal.io/apps.html for more detail"; std::cout << std::endl; @@ -70,8 +91,8 @@ void outputHelp(po::options_description const& options) void outputDrivers() { - StageFactory f; - std::map const& drivers = f.getStageInfos(); + StageFactory f(false); + std::map sm = f.getStageMap(); std::ostringstream strm; @@ -88,21 +109,21 @@ void outputDrivers() strm << std::left; - for (auto i = drivers.begin(); i != drivers.end(); ++i) + for (auto s : sm) { std::vector lines; - std::string description(i->second.getDescription()); + std::string description(s.second); description = boost::algorithm::erase_all_copy(description, "\n"); Utils::wordWrap(description, lines, description_column-1); if (lines.size() == 1) { - strm << std::setw(name_column) << i->second.getName() << " " + strm << std::setw(name_column) << s.first << " " << std::setw(description_column) << description << std::endl; } else { - strm << std::setw(name_column) << i->second.getName() << " " + strm << std::setw(name_column) << s.first << " " << lines[0] << std::endl; } @@ -118,108 +139,226 @@ void outputDrivers() std::cout << strm.str() << std::endl; } -void outputOptions(std::string const& opt) +void outputOptions(std::string const& n) +{ + StageFactory f(false); + std::unique_ptr s = f.createStage(n); + + if (!s) + { + std::cerr << "Unable to create stage " << n << "\n"; + return; + } + + std::vector