Example: iconv.cpp application
#include <cxxtools/arg.h>
#include <cxxtools/iconverter.h>
#include <cxxtools/loginit.h>
#include <iostream>
#include <fstream>
/**
* synopsis:
* iconv -f UTF8 -t LATIN1 -i file
* prints UTF8-file to std::cout as LATIN1
*
* iconf -f LATIN1 -t ISO8859-1 'some text'
* prints 'some text' in ISO8859-1 to std::cout
* (bad example - same as <echo 'some text'>, because
* conversion does not change anything, but it is difficult to
* show a better one)
*
* iconv <file
prints UTF8-file to std::cout as LATIN1 (default conversion)
*/
int main(int argc, char* argv[])
{
try
{
log_init();
cxxtools::Arg<const char*> from(argc, argv, 'f', "UTF8");
cxxtools::Arg<const char*> to(argc, argv, 't', "LATIN1");
cxxtools::Arg<const char*> infile(argc, argv, 'i'); // inputfile
if (infile.isSet())
{
// read from file
std::ifstream in(infile);
cxxtools::iconvstream ic(std::cout, to, from);
ic << in.rdbuf();
}
if (argc > 1)
{
// convert arguments to cout
cxxtools::IConverter ic(to.getValue(), from.getValue());
for (int a = 1; a < argc; ++a)
std::cout << ic.convert(argv[a]);
}
if (!infile.isSet() && argc <= 1)
{
// filter cin to cout
cxxtools::iconvstream ic(std::cout, to, from);
ic << std::cin.rdbuf();
}
}
catch (const std::exception& e)
{
std::cerr << e.what() << std::endl;
return 1;
}
}