Improve escaping routine, no need to resort to using the E prefix just doubling the quotes should be enough.
This commit is contained in:
parent
8b671090a0
commit
6d05c6d75a
1 changed files with 10 additions and 23 deletions
|
|
@ -15,40 +15,27 @@
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
QString escapeInternal(const QString &input, bool as_ident)
|
QString escapeInternal(const QString &input, QChar quote_char)
|
||||||
{
|
{
|
||||||
int num_quotes = 0; /* single or double, depending on as_ident */
|
int num_quotes = 0; /* single or double, depending on as_ident */
|
||||||
int num_backslashes = 0;
|
|
||||||
QChar quote_char = as_ident ? '"' : '\'';
|
|
||||||
// Doorloop input
|
|
||||||
// tel quotes
|
|
||||||
// tel backslashes
|
|
||||||
const int len = input.length();
|
const int len = input.length();
|
||||||
for (int idx = 0; idx < len; ++idx) {
|
for (int idx = 0; idx < len; ++idx)
|
||||||
QChar c = input[idx];
|
if (input[idx] == quote_char)
|
||||||
if (c == quote_char)
|
|
||||||
++num_quotes;
|
++num_quotes;
|
||||||
else if (c == '\\')
|
|
||||||
++num_backslashes;
|
|
||||||
}
|
|
||||||
|
|
||||||
int output_size = len + num_quotes + 2; // + 2 for the quotes
|
int output_size = len + num_quotes + 2; // + 2 for the quotes
|
||||||
if (!as_ident && num_backslashes > 0)
|
|
||||||
output_size += num_backslashes + 2; // +2 so whe can add the " E"
|
|
||||||
QString output;
|
|
||||||
output.reserve(output_size);
|
|
||||||
if (!as_ident && num_backslashes > 0)
|
|
||||||
output += " E";
|
|
||||||
|
|
||||||
|
QString output;
|
||||||
|
output.reserve(output_size);
|
||||||
output += quote_char;
|
output += quote_char;
|
||||||
if (num_quotes == 0 && (num_backslashes == 0 || as_ident)) {
|
if (num_quotes == 0) {
|
||||||
output += input;
|
output += input;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (int idx = 0; idx < len; ++idx) {
|
for (int idx = 0; idx < len; ++idx) {
|
||||||
QChar c = input[idx];
|
QChar c = input[idx];
|
||||||
output += c;
|
output += c;
|
||||||
if (c == quote_char || (!as_ident && c == '\\'))
|
if (c == quote_char)
|
||||||
output += c;
|
output += c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -60,12 +47,12 @@ namespace {
|
||||||
|
|
||||||
QString escapeIdent(const QString &input)
|
QString escapeIdent(const QString &input)
|
||||||
{
|
{
|
||||||
return escapeInternal(input, true);
|
return escapeInternal(input, '"');
|
||||||
}
|
}
|
||||||
|
|
||||||
QString escapeLiteral(const QString &input)
|
QString escapeLiteral(const QString &input)
|
||||||
{
|
{
|
||||||
return escapeInternal(input, false);
|
return escapeInternal(input, '\'');
|
||||||
}
|
}
|
||||||
|
|
||||||
//char *
|
//char *
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue