#pragma once // Distributed under the LGPL version 3.0 license. See accompanying // file LICENSE or https://github.com/henryiii/CLI11 for details. #include #include #include #include #include namespace CLI { namespace detail { /// Simple function to join a string template std::string join(const T& v, std::string delim = ",") { std::ostringstream s; size_t start = 0; for (const auto& i : v) { if(start++ > 0) s << delim; s << i; } return s.str(); } /// Print a two part "help" string void format_help(std::stringstream &out, std::string name, std::string description, size_t wid) { name = " " + name; out << std::setw(wid) << std::left << name; if(description != "") { if(name.length()>=wid) out << std::endl << std::setw(wid) << ""; out << description << std::endl; } } /// Verify the first character of an option template bool valid_first_char(T c) { return std::isalpha(c) || c=='_'; } /// Verify following characters of an option template bool valid_later_char(T c) { return std::isalnum(c) || c=='_' || c=='.' || c=='-'; } /// Verify an option name inline bool valid_name_string(const std::string &str) { if(str.size()<1 || !valid_first_char(str[0])) return false; for(auto c : str.substr(1)) if(!valid_later_char(c)) return false; return true; } } }