setcase

A cli tool to transform text to uppercase and lowercase.


setcase

/

src

/

main.cc

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
#include "parg.hh"
using Parg = OB::Parg;

#include "setcase.hh"
using Setcase = OB::Setcase;

#include <string>
#include <iostream>
#include <vector>
#include <map>
#include <unistd.h>

int program_options(Parg& pg);

int program_options(Parg& pg)
{
  pg.name("setcase").version("0.1.2 (27.02.2018)");
  pg.description("transform text to uppercase and lowercase");
  pg.usage("[flags] [options] [--] [arguments]");
  pg.usage("[-u|-l] [--] [input text]");
  pg.usage("[-v|--version]");
  pg.usage("[-h|--help]");
  pg.info("Examples", {
    "setcase -u uppercase string",
    "setcase -l 'LOWERCASE string'",
    "setcase -l LOWERCASE | xargs printf \"%s\"",
    "printf \"uppercase\" | setcase -u",
    "setcase --help",
    "setcase --version",
  });
  pg.info("Exit Codes", {"0 -> normal", "1 -> error"});
  pg.author("Brett Robinson (octobanana) <octobanana.dev@gmail.com>");

  // flags
  pg.set("help,h", "print the help output");
  pg.set("version,v", "print the program version");
  pg.set("upper,u", "transforms the text to uppercase");
  pg.set("lower,l", "transforms the text to lowercase");

  pg.set_pos();
  pg.set_stdin();

  int status {pg.parse()};
  if (status > 0 && pg.get_stdin().empty())
  {
    std::cout << pg.print_help() << "\n";
    std::cout << "Error: " << "expected arguments" << "\n";
    return -1;
  }
  if (status < 0)
  {
    std::cout << pg.print_help() << "\n";
    std::cout << "Error: " << pg.error() << "\n";
    return -1;
  }
  if (pg.get<bool>("help"))
  {
    std::cout << pg.print_help();
    return 1;
  }
  if (pg.get<bool>("version"))
  {
    std::cout << pg.print_version();
    return 1;
  }
  if (pg.get<bool>("lower") && pg.get<bool>("upper"))
  {
    std::cout << pg.print_help() << "\n";
    std::cout << "Error: " << "flags '-l' and '-u' are in conflict" << "\n";
    return -1;
  }
  if (pg.get_pos().empty() && pg.get_stdin().empty())
  {
    std::cout << pg.print_help() << "\n";
    std::cout << "Error: " << "no input text given" << "\n";
    return -1;
  }
  return 0;
}

int main(int argc, char *argv[])
{
  Parg pg {argc, argv};
  int pstatus {program_options(pg)};
  if (pstatus > 0) return 0;
  if (pstatus < 0) return 1;

  Setcase sc {pg.get_stdin() + pg.get_pos()};

  bool lower {pg.get<bool>("lower")};
  bool upper {pg.get<bool>("upper")};

  std::string out;

  if (lower || upper)
  {
    if (lower)
    {
      out = sc.get(Setcase::Lower);
    }
    else
    {
      out = sc.get(Setcase::Upper);
    }
  }
  else
  {
    out = sc.get(Setcase::Lower);
  }

  if (! isatty(STDOUT_FILENO))
  {
    std::cout << out;
  }
  else
  {
    std::cout << out << "\n";
  }

  return 0;
}
Back to Top