Details
-
Bug
-
Resolution: Unresolved
-
P3: Somewhat important
-
None
-
5.15.2
-
None
-
Qt 5.15.2
Description
The fundamental issue is QTextEdit doesn't seem to recognize inline Markdown tags (like * bold or _ italic) if the start tag is followed by a space and/or the end tag is preceded by a space, e.g.:
- Fails to format *{{ text}}{}, {{ text *}}{}, *text *{}.
- Correctly formats *text*.
At the same time, if a section of text that starts or ends with a space is formatted by e.g. setCurrentCharFormat, then toMarkdown will generate Markdown of the above failing form.
As a consequence, if the format of a block of text with spaces on either end is set programmatically, the following will break the formatting even though it should be expected to not change anything in this situation:
textEdit->setMarkdown(textEdit->toMarkdown())
Here is a complete demonstration:
#include <QApplication> #include <QMainWindow> #include <QTextEdit> #include <QDebug> int main (int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow w; QTextEdit *edit; w.setCentralWidget(edit = new QTextEdit("it's bold it's bold it's very bold")); // sets edit's text to bold from some start position to some end position. auto setBold = [&](int from, int to) { QTextCharFormat f; f.setFontWeight(QFont::Bold); QTextCursor c = edit->textCursor(); c.setPosition(from); c.setPosition(to, QTextCursor::KeepAnchor); c.setCharFormat(f); edit->setTextCursor(c); }; // set some sections of text to bold qDebug() << edit->toMarkdown(); setBold(4, 9); setBold(15, 19); setBold(25, 30); qDebug() << edit->toMarkdown(); // set it to the markdown it generates edit->setMarkdown(edit->toMarkdown()); qDebug() << edit->toMarkdown(); w.show(); return a.exec(); }
That program will produce the output seen in the "actual.png" attachment. The expected output (which is also the result if the setMarkdown line is commented out) can be seen in the "expected.png" attachment.
The debug output produced by that program, however, is as expected:
{{"it's bold it's bold it's very bold\n\n"
"it's** bold** it's *bold* it's **very **bold\n\n"
"it's** bold** it's *bold* it's **very **bold\n\n"}}
I am not sure what the restrictions regarding the placement of whitespace is in those tags. If the whitespace is not allowed, then the issue is in toMarkdown. If the whitespace is allowed, then the issue is in setMarkdown.
Attachments
Issue Links
- relates to
-
QTBUG-99681 QTextEdit: multi-line monospace text is not written to proper markdown
-
- Reported
-
Gerrit Reviews
For Gerrit Dashboard: QTBUG-98927 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
389295,2 | WIP fix before/after-span spacing in markdown writer | dev | qt/qtbase | Status: NEW | -2 | 0 |