Expand Up
@@ -6,12 +6,14 @@
#define SIMPLECPP_TOKENLIST_ALLOW_PTR 0
#include "simplecpp.h"
#include <cstdint>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iostream>
#include <sys/stat.h>
#include <sstream>
#include <string>
#include <sys/stat.h>
#include <utility>
#include <vector>
Expand All
@@ -28,7 +30,12 @@ int main(int argc, char **argv)
{
bool error = false;
const char *filename = nullptr;
bool use_istream = false;
enum : std::uint8_t {
File,
Fstream,
Sstream,
CharBuffer
} toklist_inf = File;
bool fail_on_error = false;
bool linenrs = false;
Expand Down
Expand Up
@@ -86,9 +93,28 @@ int main(int argc, char **argv)
break;
}
dui.includes.emplace_back(std::move(value));
} else if (std::strcmp(arg, "-is")==0) {
}
else if (std::strncmp(arg, "-input=",7)==0) {
found = true;
use_istream = true;
const std::string input = arg + 7;
if (input.empty()) {
std::cout << "error: option -input with no value." << std::endl;
error = true;
break;
}
if (input == "file") {
toklist_inf = File;
} else if (input == "fstream") {
toklist_inf = Fstream;
} else if (input == "sstream") {
toklist_inf = Sstream;
} else if (input == "buffer") {
toklist_inf = CharBuffer;
} else {
std::cout << "error: unknown input type '" << input << "'." << std::endl;
error = true;
break;
}
}
break;
case 's':
Expand Down
Expand Up
@@ -117,8 +143,8 @@ int main(int argc, char **argv)
break;
case 'f':
if (std::strcmp(arg, "-f")==0) {
found = true;
fail_on_error = true;
found = true;
}
break;
case 'l':
Expand Down
Expand Up
@@ -157,7 +183,7 @@ int main(int argc, char **argv)
std::cout << " -UNAME Undefine NAME." << std::endl;
std::cout << " -std=STD Specify standard." << std::endl;
std::cout << " -q Quiet mode (no output)." << std::endl;
std::cout << " -is Use std::istream interface." << std::endl;
std::cout << " -input=INPUT Specify input type - file (default), fstream, sstream, buffer." << std::endl;
std::cout << " -e Output errors only." << std::endl;
std::cout << " -f Fail when errors were encountered (exitcode 1)." << std::endl;
std::cout << " -l Print lines numbers." << std::endl;
Expand Down
Expand Up
@@ -197,8 +223,21 @@ int main(int argc, char **argv)
simplecpp::TokenList outputTokens(files);
{
simplecpp::TokenList *rawtokens;
if (use_istream) {
rawtokens = new simplecpp::TokenList(f, files,filename,&outputList);
if (toklist_inf == Fstream) {
rawtokens = new simplecpp::TokenList(f,files,filename,&outputList);
}
else if (toklist_inf == Sstream || toklist_inf == CharBuffer) {
std::ostringstream oss;
oss << f.rdbuf();
f.close();
const std::string s = oss.str();
if (toklist_inf == Sstream) {
std::istringstream iss(s);
rawtokens = new simplecpp::TokenList(iss,files,filename,&outputList);
}
else {
rawtokens = new simplecpp::TokenList({s.data(),s.size()},files,filename,&outputList);
}
} else {
f.close();
rawtokens = new simplecpp::TokenList(filename,files,&outputList);
Expand Down