37 lines
1.3 KiB
C++
37 lines
1.3 KiB
C++
#include "__include.h"
|
|
#include "Exception.h"
|
|
#include "File.h"
|
|
|
|
namespace jet {
|
|
|
|
__include::__include(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, local) {
|
|
if(!variableDefined("file"))
|
|
throw coreutils::Exception("file keyword must be specified.");
|
|
if(hasContainer)
|
|
throw coreutils::Exception("include tag should not have a container.");
|
|
hasContainer = true;
|
|
resolveKeyword("file");
|
|
coreutils::File file(variables["file"]);
|
|
file.read();
|
|
container = file.asZString();
|
|
try {
|
|
processContainer(container);
|
|
}
|
|
catch(coreutils::Exception e) {
|
|
container.setCursor(global.errorCursor);
|
|
container.moveBackToLineStart();
|
|
std::cout << "-----------------------------" << std::endl;
|
|
std::cout << "Error in included script '" << variables["file"] << "' at line " << container.getLineNumberAtCursor() << std::endl;
|
|
std::cout << "Error text: " << e.text << std::endl;
|
|
std::cout << "-----------------------------" << std::endl;
|
|
std::cout << container.parsed() << std::endl;
|
|
std::cout << "******** Error caught: " << e.text << std::endl;
|
|
std::cout << container.unparsed() << std::endl;
|
|
global.errorCursor = in.getCursor();
|
|
throw coreutils::Exception("error in included file.");
|
|
}
|
|
|
|
}
|
|
|
|
}
|