cleanup (a bit)
This commit is contained in:
parent
8e15870aa6
commit
4382ad6d59
100
main.cpp
100
main.cpp
@ -7,16 +7,17 @@
|
||||
|
||||
#include <sys/mman.h> // for mmap()
|
||||
#include <sys/stat.h> // for fstat()
|
||||
#include <fcntl.h> // for open()
|
||||
#include <fcntl.h> // for open(), O_RDONLY
|
||||
#include <unistd.h> // for close()
|
||||
#include <errno.h> // for perror()
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <functional>
|
||||
|
||||
#include "fs.hpp"
|
||||
#include "memory_string.hpp"
|
||||
@ -60,8 +61,6 @@ std::string readTill(iterator &start, const iterator &end, std::function<bool(co
|
||||
|
||||
template <typename iterator>
|
||||
std::string readBrackets(iterator ¤t, const iterator &end, const char * brackets) {
|
||||
// auto current = begin;
|
||||
|
||||
if (current == end || *current != brackets[0]) {
|
||||
std::cout << brackets[0] << "!=" << *current;
|
||||
return std::string();
|
||||
@ -122,24 +121,9 @@ std::string InputExtractor::macroExpand(const std::string &input) {
|
||||
return result;
|
||||
}
|
||||
|
||||
#include <functional>
|
||||
|
||||
typedef std::map<std::string, std::function<void(InputExtractor::List&, std::string)>> CommandList;
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
#include <fstream>
|
||||
|
||||
bool Exists(std::string path) {
|
||||
std::ifstream file(path);
|
||||
if (!file) {
|
||||
return false;
|
||||
}
|
||||
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
InputExtractor::List InputExtractor::Include(Path::Path path) {
|
||||
path = Path::Clean(path);
|
||||
List list;
|
||||
@ -178,11 +162,13 @@ InputExtractor::List InputExtractor::Include(Path::Path path) {
|
||||
return list;
|
||||
}
|
||||
|
||||
// Substring str((const char *)memptr, (const char*)memptr + fileinfo.st_size);
|
||||
// create iteratable memory object
|
||||
MemoryString file((char*)memptr, fileinfo.st_size);
|
||||
|
||||
std::string basedir = Path::Dir(path);
|
||||
list = (*this)(basedir, file); // follow include
|
||||
|
||||
// evaluate memory region (aka the file)
|
||||
list = (*this)(basedir, file);
|
||||
|
||||
// cleanup
|
||||
munmap(memptr, fileinfo.st_size);
|
||||
@ -192,6 +178,8 @@ InputExtractor::List InputExtractor::Include(Path::Path path) {
|
||||
cout << path << "done" << endl;
|
||||
}
|
||||
|
||||
// make a relative filepath absolute using the root filename
|
||||
// and/or the process working directory
|
||||
Path::Path fixFilename(const Path::Path &file, const Path::Path &root) {
|
||||
Path::Path temp(file);
|
||||
|
||||
@ -208,7 +196,7 @@ Path::Path fixFilename(const Path::Path &file, const Path::Path &root) {
|
||||
return Path::Clean(temp);
|
||||
}
|
||||
|
||||
|
||||
// evaluate a tex file searching for input statements
|
||||
InputExtractor::List InputExtractor::operator()(const Path::Path &file, const MemoryString &str){
|
||||
List result;
|
||||
CommandList IncludeCommands;
|
||||
@ -324,72 +312,6 @@ int main(int argc, char ** args) {
|
||||
}
|
||||
|
||||
cout << "done" << endl;
|
||||
|
||||
/*
|
||||
char * filename = args[argc-1];
|
||||
cout << "opening " << filename << "...";
|
||||
|
||||
// try to open file
|
||||
fd = open(filename, O_RDONLY);
|
||||
if (fd == -1) {
|
||||
perror("could not open input file");
|
||||
continue;
|
||||
}
|
||||
|
||||
fstat(fd, &filestat);
|
||||
//cout << "file size: " << filestat.st_size << endl;
|
||||
|
||||
// try to mmap file
|
||||
void * memory_area = mmap(NULL, filestat.st_size, PROT_READ, MAP_SHARED, fd, 0);
|
||||
if (memory_area == nullptr) {
|
||||
perror("could not mmap the input");
|
||||
continue;
|
||||
}
|
||||
|
||||
cout << "start parsing" << endl;
|
||||
|
||||
MemoryString file((char*)memory_area, filestat.st_size);
|
||||
|
||||
try {
|
||||
InputExtractor::List list = InputExtractor()(file);
|
||||
|
||||
Path::Path outfilename = Path::Basename(Path::Path(filename)) + ".d";
|
||||
|
||||
cout << "writing makedeps file to " << outfilename << "..." << endl;
|
||||
|
||||
// write in makefile style
|
||||
std::ofstream output(outfilename);
|
||||
if (!output) {
|
||||
std::cout << "could not create output file" << std::endl;
|
||||
} else {
|
||||
output << filename << ": ";
|
||||
|
||||
for (auto it = list.begin(); it != list.end(); it++) {
|
||||
if (Path::isRelative(*it)) {
|
||||
if (Path::isRelative(filename)) {
|
||||
*it = Path::Join(fs::cwd(), filename, *it);
|
||||
} else {
|
||||
*it = Path::Join(Path::Path(filename), *it);
|
||||
}
|
||||
}
|
||||
|
||||
cout << "depends: " << *it << endl;
|
||||
output << '\t' << *it << "\t\\\n";
|
||||
}
|
||||
output << endl;
|
||||
}
|
||||
|
||||
cout << filename << done;
|
||||
|
||||
} catch(InputExtractor::Exception &e) {
|
||||
cout << e.what() << endl;
|
||||
}
|
||||
|
||||
// cleanup
|
||||
munmap(memory_area, filestat.st_size);
|
||||
close(fd);
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user