fakevim: properly split commands in source'd files

Change-Id: Iebe4a1e4150374b9d35fe22910f38d7ca9b3ff4e
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
hjk
2011-11-10 15:47:17 +01:00
committed by hjk
parent 4528b19b40
commit 3a8c0f28b5
2 changed files with 16 additions and 11 deletions

View File

@@ -321,6 +321,17 @@ bool ExCommand::matches(const QString &min, const QString &full) const
return cmd.startsWith(min) && full.startsWith(cmd); return cmd.startsWith(min) && full.startsWith(cmd);
} }
void ExCommand::setContentsFromLine(const QString &line)
{
cmd = line.section(' ', 0, 0);
args = line.mid(cmd.size() + 1).trimmed();
while (cmd.startsWith(QLatin1Char(':')))
cmd.remove(0, 1);
hasBang = cmd.endsWith('!');
if (hasBang)
cmd.chop(1);
}
QDebug operator<<(QDebug ts, const ExCommand &cmd) QDebug operator<<(QDebug ts, const ExCommand &cmd)
{ {
return ts << cmd.cmd << ' ' << cmd.args << ' ' << cmd.range; return ts << cmd.cmd << ' ' << cmd.args << ' ' << cmd.range;
@@ -3690,8 +3701,6 @@ bool FakeVimHandler::Private::handleExSourceCommand(const ExCommand &cmd)
while (!file.atEnd()) { while (!file.atEnd()) {
QByteArray line = file.readLine(); QByteArray line = file.readLine();
line = line.trimmed(); line = line.trimmed();
while (line.startsWith(':'))
line.remove(0, 1);
if (line.startsWith("function")) { if (line.startsWith("function")) {
//qDebug() << "IGNORING FUNCTION" << line; //qDebug() << "IGNORING FUNCTION" << line;
inFunction = true; inFunction = true;
@@ -3704,7 +3713,9 @@ bool FakeVimHandler::Private::handleExSourceCommand(const ExCommand &cmd)
// A comment. // A comment.
} else if (!line.isEmpty() && !inFunction) { } else if (!line.isEmpty() && !inFunction) {
//qDebug() << "EXECUTING: " << line; //qDebug() << "EXECUTING: " << line;
handleExCommandHelper(QString::fromUtf8(line)); ExCommand cmd;
cmd.setContentsFromLine(QString::fromLocal8Bit(line));
handleExCommandHelper(cmd);
} }
} }
file.close(); file.close();
@@ -3747,15 +3758,8 @@ void FakeVimHandler::Private::handleExCommand(const QString &line0)
const int beginPos = firstPositionInLine(beginLine); const int beginPos = firstPositionInLine(beginLine);
const int endPos = lastPositionInLine(endLine); const int endPos = lastPositionInLine(endLine);
ExCommand cmd; ExCommand cmd;
const QString arg0 = line.section(' ', 0, 0); cmd.setContentsFromLine(line);
cmd.cmd = arg0;
while (cmd.cmd.startsWith(QLatin1Char(':')))
cmd.cmd.remove(0, 1);
cmd.args = line.mid(arg0.size() + 1).trimmed();
cmd.range = Range(beginPos, endPos, RangeLineMode); cmd.range = Range(beginPos, endPos, RangeLineMode);
cmd.hasBang = arg0.endsWith('!');
if (cmd.hasBang)
cmd.cmd.chop(1);
if (beginLine != -1) if (beginLine != -1)
cmd.count = beginLine; cmd.count = beginLine;
//qDebug() << "CMD: " << cmd; //qDebug() << "CMD: " << cmd;

View File

@@ -68,6 +68,7 @@ struct ExCommand
const Range &range = Range()); const Range &range = Range());
bool matches(const QString &min, const QString &full) const; bool matches(const QString &min, const QString &full) const;
void setContentsFromLine(const QString &line);
QString cmd; QString cmd;
bool hasBang; bool hasBang;