diff options
author | Topi Reinio <topi.reinio@qt.io> | 2018-09-07 13:52:32 +0200 |
---|---|---|
committer | Topi Reiniƶ <topi.reinio@qt.io> | 2018-09-09 07:52:19 +0000 |
commit | 341d55b7cdf8bbb5a045ab21ac1396d1ea766344 (patch) | |
tree | 1b6fcb22e4430c18ce644c045d2e2224000d3ca4 /src/qdoc/doc.cpp | |
parent | f4884ba5da7ca5260f8cb0fd2bddd1de3b6e4212 (diff) | |
download | qttools-341d55b7cdf8bbb5a045ab21ac1396d1ea766344.tar.gz |
qdoc: Allow parameters for \code, \qml, \js, and \badcode commands
Allow optional parameters for commands that enclose code snippets.
This is intended for replacing simple strings within the snippet,
typically using a macro that extends to certain parameter(s).
Within the snippet, the parameter locations are marked similarly
to .qdocconf macro parameters:
\code foo bar
\1+\2=\1\2
\encode
Renders "foo+bar=foobar"
A code snippet parameter cannot contain spaces, as space is used
as a delimiter. If no parameters are passed, the snippet is
rendered as-is.
Task-number: QTBUG-67818
Change-Id: I500e6b1a9095c9c55f47c8d75951792f31745545
Reviewed-by: Martin Smith <martin.smith@qt.io>
Diffstat (limited to 'src/qdoc/doc.cpp')
-rw-r--r-- | src/qdoc/doc.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/qdoc/doc.cpp b/src/qdoc/doc.cpp index 80e440086..9e998fe87 100644 --- a/src/qdoc/doc.cpp +++ b/src/qdoc/doc.cpp @@ -480,7 +480,7 @@ private: QString getRestOfLine(); QString getMetaCommandArgument(const QString &cmdStr); QString getUntilEnd(int cmd); - QString getCode(int cmd, CodeMarker *marker); + QString getCode(int cmd, CodeMarker *marker, const QString &argStr = QString()); QString getUnmarkedCode(int cmd); bool isBlankLine(); @@ -627,7 +627,7 @@ void DocParser::parse(const QString& source, break; case CMD_BADCODE: leavePara(); - append(Atom::CodeBad,getCode(CMD_BADCODE, marker)); + append(Atom::CodeBad, getCode(CMD_BADCODE, marker, getMetaCommandArgument(cmdStr))); break; case CMD_BR: enterPara(); @@ -655,18 +655,22 @@ void DocParser::parse(const QString& source, break; case CMD_CODE: leavePara(); - append(Atom::Code, getCode(CMD_CODE, 0)); + append(Atom::Code, getCode(CMD_CODE, 0, getMetaCommandArgument(cmdStr))); break; case CMD_QML: leavePara(); - append(Atom::Qml, getCode(CMD_QML, CodeMarker::markerForLanguage(QLatin1String("QML")))); + append(Atom::Qml, getCode(CMD_QML, + CodeMarker::markerForLanguage(QLatin1String("QML")), + getMetaCommandArgument(cmdStr))); break; case CMD_QMLTEXT: append(Atom::QmlText); break; case CMD_JS: leavePara(); - append(Atom::JavaScript, getCode(CMD_JS, CodeMarker::markerForLanguage(QLatin1String("JavaScript")))); + append(Atom::JavaScript, getCode(CMD_JS, + CodeMarker::markerForLanguage(QLatin1String("JavaScript")), + getMetaCommandArgument(cmdStr))); break; case CMD_DIV: leavePara(); @@ -2541,9 +2545,27 @@ QString DocParser::getUntilEnd(int cmd) return t; } -QString DocParser::getCode(int cmd, CodeMarker *marker) +QString DocParser::getCode(int cmd, CodeMarker *marker, const QString &argStr) { QString code = untabifyEtc(getUntilEnd(cmd)); + + if (!argStr.isEmpty()) { + QStringList args = argStr.split(" ", QString::SkipEmptyParts); + int paramNo, j = 0; + while (j < code.size()) { + if (code[j] == '\\' + && j < code.size() - 1 + && (paramNo = code[j + 1].digitValue()) >= 1 + && paramNo <= args.size()) { + QString p = args[paramNo - 1]; + code.replace(j, 2, p); + j += qMin(1, p.size()); + } else { + ++j; + } + } + } + int indent = indentLevel(code); code = unindent(indent, code); if (!marker) |