Alien-SmokeQt
view release on metacpan or search on metacpan
generator/parser/stringhelpers.cpp view on Meta::CPAN
continue;
default:
ret += str[a];
continue;
}
}
return ret;
}
///@todo this hackery sucks
QString escapeForBracketMatching(QString str) {
str.replace("<<", "$&");
str.replace(">>", "$$");
str.replace("\\\"", "$!");
str.replace("->", "$?");
return str;
}
QString escapeFromBracketMatching(QString str) {
str.replace("$&", "<<");
str.replace("$$", ">>");
str.replace("$!", "\\\"");
str.replace("$?", "->");
return str;
}
void skipFunctionArguments(QString str, QStringList& skippedArguments, int& argumentsStart ) {
QString withStrings = escapeForBracketMatching(str);
str = escapeForBracketMatching(clearStrings(str));
//Blank out everything that can confuse the bracket-matching algorithm
QString reversed = reverse( str.left(argumentsStart) );
QString withStringsReversed = reverse( withStrings.left(argumentsStart) );
//Now we should decrease argumentStart at the end by the count of steps we go right until we find the beginning of the function
SafetyCounter s( 1000 );
int pos = 0;
int len = reversed.length();
//we are searching for an opening-brace, but the reversion has also reversed the brace
while( pos < len && s ) {
int lastPos = pos;
pos = findCommaOrEnd( reversed, pos ) ;
if( pos > lastPos ) {
QString arg = reverse( withStringsReversed.mid(lastPos, pos-lastPos) ).trimmed();
if( !arg.isEmpty() )
skippedArguments.push_front( escapeFromBracketMatching(arg) ); //We are processing the reversed reverseding, so push to front
}
if( reversed[pos] == ')' || reversed[pos] == '>' )
break;
else
++pos;
}
if( !s ) {
qDebug() << "skipFunctionArguments: Safety-counter triggered";
}
( run in 0.980 second using v1.01-cache-2.11-cpan-c21f80fb71c )