Custom <tag name=...> definitions have no scope levels the way variables do - __tag.cpp always registers into the single global.tags map regardless of where in the script the definition sits, so this is one flat list, not broken out by global/local/parent like the existing variable/keyword sections. Verified end-to-end via a real jet-2.0 run: two tags defined before <dump> both appear correctly in the DEFINED TAGS section.
50 lines
1.9 KiB
C++
50 lines
1.9 KiB
C++
#include "__dump.h"
|
|
#include "Exception.h"
|
|
#include <iostream>
|
|
#include <fstream>
|
|
|
|
namespace jet {
|
|
|
|
__dump::__dump(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, local) {
|
|
if(!keywordDefined("file"))
|
|
throw coreutils::Exception("file must be sppecified for dump tag.");
|
|
|
|
std::ofstream outFile(keywords["file"].str());
|
|
|
|
if(global.cgi) {
|
|
outFile << "*** CGI VARIABLES ***" << std::endl;
|
|
// for (auto i = global.cgiVariables.begin(); i != global.cgiVariables.end(); i++)
|
|
// outFile << i->first << "=[" << i->second << "]" << std::endl;
|
|
}
|
|
|
|
outFile << "*** GLOBAL VARIABLES ***" << std::endl;
|
|
for (auto i = global.variables.begin(); i != global.variables.end(); i++)
|
|
outFile << i->first << "=[" << i->second << "]" << std::endl;
|
|
|
|
outFile << "*** LOCAL VARIABLES ***" << std::endl;
|
|
for (auto i = local->variables.begin(); i != local->variables.end(); i++)
|
|
outFile << i->first << "=[" << i->second << "]" << std::endl;
|
|
|
|
outFile << "*** KEYWORD VALUES ***" << std::endl;
|
|
for (auto i = parent->keywords.begin(); i != parent->keywords.end(); i++)
|
|
outFile << i->first << "=[" << i->second << "]" << std::endl;
|
|
|
|
outFile << "*** COOKIES ***" << std::endl;
|
|
for (auto i = global.cookies.data.begin(); i != global.cookies.data.end(); i++)
|
|
outFile << i->first << "=[" << i->second << "]" << std::endl;
|
|
|
|
// Unlike variables (which have real global/local/parent scoping),
|
|
// custom <tag name="..."> definitions have only one level - __tag.cpp
|
|
// always registers into global.tags regardless of where in the
|
|
// script the definition sits, so there's nothing to break out by
|
|
// scope here.
|
|
outFile << "*** DEFINED TAGS ***" << std::endl;
|
|
for (auto i = global.tags.begin(); i != global.tags.end(); i++)
|
|
outFile << i->first << std::endl;
|
|
|
|
outFile.close();
|
|
|
|
}
|
|
|
|
}
|