some bugs fixed, logging is quite good now

master
Marc Wäckerlin 9 years ago
parent 24d419d6b2
commit 0c6af413a9
  1. 44
      src/commands.hxx

@ -75,7 +75,7 @@ class Function;
class Logger {
public:
Logger(Command* command, Script* script);
Logger(Command* command, Script* script, bool showLines = true);
void operator[](QString txt);
void operator()(QString txt);
~Logger();
@ -178,17 +178,16 @@ class Command: public QObject {
return commands;
}
QStringList commaSeparatedList(QString value) {
if (!value.size()) return QStringList();
switch (value.size()>1&&value.at(0)==value.at(value.size()-1)
?value.at(0).toLatin1():'\0') {
case '"': case '\'': {
return value.mid(1, value.size()-2)
.split(QRegularExpression(QString(value[0])+", *"
+QString(value[0])),
QString::SkipEmptyParts);
+QString(value[0])));
} break;
default: {
return value.split(QRegularExpression(", *"),
QString::SkipEmptyParts);
return value.split(QRegularExpression(", *"));
}
}
}
@ -274,7 +273,11 @@ class Comment: public Command {
return cmd;
}
bool execute(Script* script, QWebFrame*) {
this->log(false);
Logger log(this, script);
this->log(true);
log(_comment);
this->log(false);
return true;
}
private:
@ -858,10 +861,10 @@ class Script: public QObject {
Command* cmd(command?command:_command);
if (cmd)
prefix += QString("%2:%3%1 ")
.arg(QString(' ', cmd->indent()))
.arg(cmd->file(), 20)
.arg(cmd->line(), -4, 10);
text = prefix+text.split('\n').join("\n "+prefix);
.arg(QString(cmd->indent(), QChar(' ')))
.arg(cmd->file(), 20, QChar(' '))
.arg(cmd->line(), -4, 10, QChar(' '));
text = prefix+text.split('\n').join("\n"+prefix+" ");
logging(text);
std::cout<<text<<std::endl<<std::flush;
_cout += text + "\n";
@ -1953,7 +1956,7 @@ class Function: public Command {
int indent) {
std::shared_ptr<Function> cmd(new Function());
if (!args.size()) throw BadArgument(tag()+" requires a <name>");
QStringList allargs(args.split(" ", QString::SkipEmptyParts));
QStringList allargs(args.split(" "));
cmd->_name = allargs.takeFirst().trimmed();
cmd->_vars = commaSeparatedList(allargs.join(' '));
script->function(cmd->_name, cmd);
@ -1962,7 +1965,7 @@ class Function: public Command {
return cmd;
}
bool execute(Script* script, QWebFrame*) {
Logger log(this, script);
Logger log(this, script, false);
return true;
}
bool call(Command* parentCommand, QStringList args,
@ -2000,7 +2003,7 @@ class Call: public Command {
QStringList&, QString, int, int) {
std::shared_ptr<Call> cmd(new Call());
if (!args.size()) throw BadArgument(tag()+" requires a <name>");
QStringList allargs(args.split(" ", QString::SkipEmptyParts));
QStringList allargs(args.split(" "));
cmd->_name = allargs.takeFirst().trimmed();
cmd->_args = commaSeparatedList(allargs.join(' '));
return cmd;
@ -2060,7 +2063,7 @@ class If: public Command {
return cmd;
}
bool execute(Script* script, QWebFrame* frame) {
Logger log(this, script);
Logger log(this, script, false);
QString value(script->replacevars(_value));
bool check(false);
switch (_cmp) {
@ -2253,11 +2256,15 @@ inline bool Screenshot::execute(Script* script, QWebFrame* frame) {
return true;
}
inline Logger::Logger(Command* command, Script* script):
inline Logger::Logger(Command* command, Script* script, bool showLines):
_command(command), _script(script) {
_previous = _script->command();
_script->command(command);
if (_command->log()) _script->log("\\ "+_command->command(), _command);
if (_command->log())
if (showLines)
_script->log("\\ "+_command->command(), _command);
else
_script->log("\\ "+_command->command().split('\n').first(), _command);
}
inline void Logger::operator()(QString txt) {
if (_command->log()) _script->log(" "+txt, _command);
@ -2266,7 +2273,7 @@ inline void Logger::operator[](QString txt) {
_script->plainlog(txt);
}
inline Logger::~Logger() {
if (_command->log()) _script->log("/ "+_command->command(), _command);
if (_command->log()) _script->log("/ "+_command->tag(), _command);
_script->command(_previous);
}
@ -2280,8 +2287,11 @@ inline bool Command::runScript(Command* parentCommand,
if (args.size()!=vars.size())
throw WrongNumberOfArguments(vars, args);
for (QStringList::iterator var(vars.begin()), arg(args.begin());
var<vars.end() && arg<args.end(); ++var, ++arg)
var<vars.end() && arg<args.end(); ++var, ++arg) {
parent->log("argument: "+*var+" = "+parent->replacevars(*arg),
parentCommand);
scriptCopy.set(*var, parent->replacevars(*arg));
}
try {
connect(&scriptCopy, SIGNAL(logging(QString)),
parent, SLOT(parentlog(QString)));

Loading…
Cancel
Save