diff --git a/src/core/commands.txt b/src/core/commands.txt index d6bc972..654bc87 100644 --- a/src/core/commands.txt +++ b/src/core/commands.txt @@ -1,2 +1,3 @@ +translate translate_command Translates a path from Windows-y to POSIX or vice versa. version print_version Prints version information. help help_command Hello, there! diff --git a/src/core/paths.cpp b/src/core/paths.cpp index 072e112..6d93797 100644 --- a/src/core/paths.cpp +++ b/src/core/paths.cpp @@ -1,31 +1,35 @@ #include +#include #include +#include #include #include #include "output.hpp" #include "paths.hpp" +#include "internal/core.hpp" +using namespace std; using namespace cellar; -std::string cellar::paths::translate(std::string in_path, bool lazy) { - bool posix_input; +string cellar::paths::translate(std::string in_path, bool lazy) { + bool windows_input; - static std::regex drive_letter(R"([a-zA-Z]:\\)"); + static regex drive_letter(R"([a-zA-Z]:\\)"); - posix_input = ! std::regex_match(in_path.substr(0, 3), drive_letter); + windows_input = regex_match(in_path.substr(0, 3), drive_letter); if (!lazy) { output::warning("non-lazy path translation is not implemented yet"); } - if (posix_input) { + if (windows_input) { // lazy if (boost::algorithm::to_lower_copy(in_path.substr(0,1)) != "z") { - throw std::invalid_argument("lazy path translation isn't possible for drive letters other than Z:"); + throw invalid_argument("lazy path translation isn't possible for drive letters other than Z:"); } - std::string out_path = in_path.substr(2, in_path.size() - 2); + string out_path = in_path.substr(2, in_path.size() - 2); size_t slashpos = out_path.find("\\"); while (slashpos != std::string::npos) { @@ -36,7 +40,7 @@ std::string cellar::paths::translate(std::string in_path, bool lazy) { return out_path; } else { // lazy - std::string out_path = "Z:"; + string out_path = "Z:"; out_path.append(in_path); size_t slashpos = out_path.find("/"); @@ -48,3 +52,17 @@ std::string cellar::paths::translate(std::string in_path, bool lazy) { return out_path; } } + +void cellar::core::translate_command(int argc, vector argv) { + if (argv.size() < 2) { + output::error("pass an argument"); + return; + } + + // TODO: tclap me later + vector pathargs(argv.cbegin() + 1, argv.cend()); + + for (auto arg : pathargs) { + cout << paths::translate(arg) << endl; + } +}