yat/utility/OptionVersion.cc

Code
Comments
Other
Rev Date Author Line
4153 09 Mar 22 peter 1 // $Id$
4153 09 Mar 22 peter 2
4153 09 Mar 22 peter 3 /*
4153 09 Mar 22 peter 4   Copyright (C) 2022 Peter Johansson
4153 09 Mar 22 peter 5
4153 09 Mar 22 peter 6   This file is part of the yat library, http://dev.thep.lu.se/yat
4153 09 Mar 22 peter 7
4153 09 Mar 22 peter 8   The yat library is free software; you can redistribute it and/or
4153 09 Mar 22 peter 9   modify it under the terms of the GNU General Public License as
4153 09 Mar 22 peter 10   published by the Free Software Foundation; either version 3 of the
4153 09 Mar 22 peter 11   License, or (at your option) any later version.
4153 09 Mar 22 peter 12
4153 09 Mar 22 peter 13   The yat library is distributed in the hope that it will be useful,
4153 09 Mar 22 peter 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
4153 09 Mar 22 peter 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4153 09 Mar 22 peter 16   General Public License for more details.
4153 09 Mar 22 peter 17
4153 09 Mar 22 peter 18   You should have received a copy of the GNU General Public License
4153 09 Mar 22 peter 19   along with yat. If not, see <http://www.gnu.org/licenses/>.
4153 09 Mar 22 peter 20 */
4153 09 Mar 22 peter 21
4153 09 Mar 22 peter 22 #include <config.h>
4153 09 Mar 22 peter 23
4153 09 Mar 22 peter 24 #include "OptionVersion.h"
4153 09 Mar 22 peter 25 #include "CommandLine.h"
4153 09 Mar 22 peter 26
4153 09 Mar 22 peter 27 #include <cstdlib>
4153 09 Mar 22 peter 28 #include <iostream>
4153 09 Mar 22 peter 29 #include <string>
4153 09 Mar 22 peter 30
4153 09 Mar 22 peter 31 namespace theplu {
4153 09 Mar 22 peter 32 namespace yat {
4153 09 Mar 22 peter 33 namespace utility {
4153 09 Mar 22 peter 34
4153 09 Mar 22 peter 35
4153 09 Mar 22 peter 36   OptionVersion::OptionVersion (CommandLine& cmd,
4153 09 Mar 22 peter 37                                 const std::string& prog,
4153 09 Mar 22 peter 38                                 const std::string& version,
4153 09 Mar 22 peter 39                                 const std::string& copyright_year,
4182 16 Jun 22 peter 40                                 const std::vector<std::string>& authors,
4153 09 Mar 22 peter 41                                 const std::string& package,
4183 30 Jun 22 peter 42                                 const std::string& name,
4183 30 Jun 22 peter 43                                 const std::string& desc)
4153 09 Mar 22 peter 44     : OptionSwitch(cmd, name, desc, false),
4153 09 Mar 22 peter 45       prog_(prog), version_(version), copyright_year_(copyright_year),
4153 09 Mar 22 peter 46       authors_(authors), package_(package)
4153 09 Mar 22 peter 47
4153 09 Mar 22 peter 48   {
4153 09 Mar 22 peter 49     std::ostringstream os;
4182 16 Jun 22 peter 50     print(os, authors_, 14);
4153 09 Mar 22 peter 51     copyright_holder_ = os.str();
4153 09 Mar 22 peter 52
4153 09 Mar 22 peter 53     license_ = "License GPLv3+: GNU GPL version 3 or later "
4153 09 Mar 22 peter 54       "<https://gnu.org/licenses/gpl.html>.\n"
4153 09 Mar 22 peter 55       "This is free software: you are free to change and redistribute it.\n"
4153 09 Mar 22 peter 56       "There is NO WARRANTY, to the extent permitted by law.\n";
4153 09 Mar 22 peter 57   }
4153 09 Mar 22 peter 58
4153 09 Mar 22 peter 59
4153 09 Mar 22 peter 60   std::string& OptionVersion::copyright_holder(void)
4153 09 Mar 22 peter 61   {
4153 09 Mar 22 peter 62     return copyright_holder_;
4153 09 Mar 22 peter 63   }
4153 09 Mar 22 peter 64
4153 09 Mar 22 peter 65
4153 09 Mar 22 peter 66   std::string& OptionVersion::license(void)
4153 09 Mar 22 peter 67   {
4153 09 Mar 22 peter 68     return license_;
4153 09 Mar 22 peter 69   }
4153 09 Mar 22 peter 70
4153 09 Mar 22 peter 71
4153 09 Mar 22 peter 72   void OptionVersion::do_parse2(std::vector<std::string>::iterator first,
4153 09 Mar 22 peter 73                                 std::vector<std::string>::iterator last)
4153 09 Mar 22 peter 74   {
4153 09 Mar 22 peter 75     std::cout << prog_ << " ";
4153 09 Mar 22 peter 76     if (package_ != "")
4153 09 Mar 22 peter 77       std::cout << "(" << package_ << ") ";
4153 09 Mar 22 peter 78     std::cout << version_ << "\n";
4153 09 Mar 22 peter 79
4153 09 Mar 22 peter 80     std::cout << "Copyright (C) " << copyright_year_ << " "
4153 09 Mar 22 peter 81               << copyright_holder_ << "\n";
4153 09 Mar 22 peter 82     std::cout << license_;
4153 09 Mar 22 peter 83
4153 09 Mar 22 peter 84     std::ostringstream os;
4182 16 Jun 22 peter 85     print(os, authors_, 14);
4153 09 Mar 22 peter 86     if (os.str() != copyright_holder_)
4182 16 Jun 22 peter 87       std::cout << "\nWritten by ";
4182 16 Jun 22 peter 88     print(os, authors_, 11);
4182 16 Jun 22 peter 89     std::cout << "\n";
4153 09 Mar 22 peter 90
4153 09 Mar 22 peter 91     exit(EXIT_SUCCESS);
4153 09 Mar 22 peter 92   }
4153 09 Mar 22 peter 93
4153 09 Mar 22 peter 94
4153 09 Mar 22 peter 95   void OptionVersion::print(std::ostream& os,
4182 16 Jun 22 peter 96                             const std::vector<std::string>& names,
4182 16 Jun 22 peter 97                             size_t offset) const
4153 09 Mar 22 peter 98   {
4153 09 Mar 22 peter 99     for (size_t i=0; i<names.size(); ++i) {
4182 16 Jun 22 peter 100       if (i+1 == names.size())
4182 16 Jun 22 peter 101         print(os, " and ", offset);
4182 16 Jun 22 peter 102       else if (i)
4182 16 Jun 22 peter 103         print(os, ", ", offset);
4182 16 Jun 22 peter 104       print(os, names[i], offset);
4153 09 Mar 22 peter 105     }
4153 09 Mar 22 peter 106   }
4153 09 Mar 22 peter 107
4153 09 Mar 22 peter 108
4182 16 Jun 22 peter 109   void OptionVersion::print(std::ostream& os, const std::string& str,
4182 16 Jun 22 peter 110                             size_t& offset) const
4182 16 Jun 22 peter 111   {
4182 16 Jun 22 peter 112     if (offset + str.size() > 80) {
4182 16 Jun 22 peter 113       os << "\n";
4182 16 Jun 22 peter 114       size_t skip = str.find_first_not_of(" ");
4182 16 Jun 22 peter 115       os << str.substr(skip);
4182 16 Jun 22 peter 116       offset = str.size() - skip;
4182 16 Jun 22 peter 117     }
4182 16 Jun 22 peter 118     else {
4182 16 Jun 22 peter 119       os << str;
4182 16 Jun 22 peter 120       offset += str.size();
4182 16 Jun 22 peter 121     }
4182 16 Jun 22 peter 122   }
4182 16 Jun 22 peter 123
4153 09 Mar 22 peter 124 }}} // of namespace utility, yat, and theplu