diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2017-12-19 15:25:55 +0100 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2019-05-01 14:31:27 +0000 |
commit | 23c2da3cc23a2e04a0b3b3c8ad7fa9cc6126ff23 (patch) | |
tree | 849770044988425cf290b8599b44440653bcddd0 /src/widgets/widgets | |
parent | 9ec564b0bfc94c2d33f02b24ca081b64ff9ebb9b (diff) |
Add QTextMarkdownWriter, QTextEdit::markdown property etc.
A QTextDocument can now be written out in Markdown format.
- Add the QTextMarkdownWriter as a private class for now
- Add QTextDocument::toMarkdown()
- QTextDocumentWriter uses QTextMarkdownWriter if setFormat("markdown")
is called or if the file suffix is .md or .mkd
- Add QTextEdit::toMarkdown() and the markdown property
[ChangeLog][QtGui][Text] Markdown (CommonMark or GitHub dialect) is now
a supported format for reading into and writing from QTextDocument.
Change-Id: I663a77017fac7ae1b3f9a400f5cd357bb40750af
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r-- | src/widgets/widgets/qtextedit.cpp | 62 | ||||
-rw-r--r-- | src/widgets/widgets/qtextedit.h | 8 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgettextcontrol.cpp | 7 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgettextcontrol_p.h | 3 |
4 files changed, 73 insertions, 7 deletions
diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index 9e134493b5..5f734258b2 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -366,8 +366,8 @@ void QTextEditPrivate::_q_ensureVisible(const QRectF &_rect) \section1 Introduction and Concepts QTextEdit is an advanced WYSIWYG viewer/editor supporting rich - text formatting using HTML-style tags. It is optimized to handle - large documents and to respond quickly to user input. + text formatting using HTML-style tags, or Markdown format. It is optimized + to handle large documents and to respond quickly to user input. QTextEdit works on paragraphs and characters. A paragraph is a formatted string which is word-wrapped to fit into the width of @@ -381,7 +381,7 @@ void QTextEditPrivate::_q_ensureVisible(const QRectF &_rect) QTextEdit can display images, lists and tables. If the text is too large to view within the text edit's viewport, scroll bars will appear. The text edit can load both plain text and rich text files. - Rich text is described using a subset of HTML 4 markup, refer to the + Rich text can be described using a subset of HTML 4 markup; refer to the \l {Supported HTML Subset} page for more information. If you just need to display a small piece of rich text use QLabel. @@ -401,12 +401,19 @@ void QTextEditPrivate::_q_ensureVisible(const QRectF &_rect) QTextEdit can display a large HTML subset, including tables and images. - The text is set or replaced using setHtml() which deletes any + The text can be set or replaced using \l setHtml() which deletes any existing text and replaces it with the text passed in the setHtml() call. If you call setHtml() with legacy HTML, and then call toHtml(), the text that is returned may have different markup, but will render the same. The entire text can be deleted with clear(). + Text can also be set or replaced using \l setMarkdown(), and the same + caveats apply: if you then call \l toMarkdown(), the text that is returned + may be different, but the meaning is preserved as much as possible. + Markdown with some embedded HTML can be parsed, with the same limitations + that \l setHtml() has; but \l toMarkdown() only writes "pure" Markdown, + without any embedded HTML. + Text itself can be inserted using the QTextCursor class or using the convenience functions insertHtml(), insertPlainText(), append() or paste(). QTextCursor is also able to insert complex objects like tables @@ -1213,11 +1220,54 @@ QString QTextEdit::toHtml() const } #endif +#if QT_CONFIG(textmarkdownreader) && QT_CONFIG(textmarkdownwriter) +/*! + \property QTextEdit::markdown + + This property provides a Markdown interface to the text of the text edit. + + \c toMarkdown() returns the text of the text edit as "pure" Markdown, + without any embedded HTML formatting. Some features that QTextDocument + supports (such as the use of specific colors and named fonts) cannot be + expressed in "pure" Markdown, and they will be omitted. + + \c setMarkdown() changes the text of the text edit. Any previous text is + removed and the undo/redo history is cleared. The input text is + interpreted as rich text in Markdown format. + + Parsing of HTML included in the \a markdown string is handled in the same + way as in \l setHtml; however, Markdown formatting inside HTML blocks is + not supported. + + Some features of the parser can be enabled or disabled via the \a features + argument: + + \value MarkdownNoHTML + Any HTML tags in the Markdown text will be discarded + \value MarkdownDialectCommonMark + The parser supports only the features standardized by CommonMark + \value MarkdownDialectGitHub + The parser supports the GitHub dialect + + The default is \c MarkdownDialectGitHub. + + \sa plainText, html, QTextDocument::toMarkdown(), QTextDocument::setMarkdown() +*/ +#endif + #if QT_CONFIG(textmarkdownreader) -void QTextEdit::setMarkdown(const QString &text) +void QTextEdit::setMarkdown(const QString &markdown) +{ + Q_D(const QTextEdit); + d->control->setMarkdown(markdown); +} +#endif + +#if QT_CONFIG(textmarkdownwriter) +QString QTextEdit::toMarkdown(QTextDocument::MarkdownFeatures features) const { Q_D(const QTextEdit); - d->control->setMarkdown(text); + return d->control->toMarkdown(features); } #endif diff --git a/src/widgets/widgets/qtextedit.h b/src/widgets/widgets/qtextedit.h index f20bd936c4..3b7e610786 100644 --- a/src/widgets/widgets/qtextedit.h +++ b/src/widgets/widgets/qtextedit.h @@ -71,6 +71,9 @@ class Q_WIDGETS_EXPORT QTextEdit : public QAbstractScrollArea QDOC_PROPERTY(QTextOption::WrapMode wordWrapMode READ wordWrapMode WRITE setWordWrapMode) Q_PROPERTY(int lineWrapColumnOrWidth READ lineWrapColumnOrWidth WRITE setLineWrapColumnOrWidth) Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly) +#if QT_CONFIG(textmarkdownreader) && QT_CONFIG(textmarkdownwriter) + Q_PROPERTY(QString markdown READ toMarkdown WRITE setMarkdown NOTIFY textChanged) +#endif #ifndef QT_NO_TEXTHTMLPARSER Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged USER true) #endif @@ -174,6 +177,9 @@ public: #ifndef QT_NO_TEXTHTMLPARSER QString toHtml() const; #endif +#if QT_CONFIG(textmarkdownwriter) + QString toMarkdown(QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub) const; +#endif void ensureCursorVisible(); @@ -239,7 +245,7 @@ public Q_SLOTS: void setHtml(const QString &text); #endif #if QT_CONFIG(textmarkdownreader) - void setMarkdown(const QString &text); + void setMarkdown(const QString &markdown); #endif void setText(const QString &text); diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp index 5744d43cbf..209156b901 100644 --- a/src/widgets/widgets/qwidgettextcontrol.cpp +++ b/src/widgets/widgets/qwidgettextcontrol.cpp @@ -3130,6 +3130,13 @@ QString QWidgetTextControl::toHtml() const } #endif +#ifndef QT_NO_TEXTHTMLPARSER +QString QWidgetTextControl::toMarkdown(QTextDocument::MarkdownFeatures features) const +{ + return document()->toMarkdown(features); +} +#endif + void QWidgetTextControlPrivate::append(const QString &text, Qt::TextFormat format) { QTextCursor tmp(doc); diff --git a/src/widgets/widgets/qwidgettextcontrol_p.h b/src/widgets/widgets/qwidgettextcontrol_p.h index 4c9e47dfc9..e521e7b356 100644 --- a/src/widgets/widgets/qwidgettextcontrol_p.h +++ b/src/widgets/widgets/qwidgettextcontrol_p.h @@ -128,6 +128,9 @@ public: #ifndef QT_NO_TEXTHTMLPARSER QString toHtml() const; #endif +#if QT_CONFIG(textmarkdownwriter) + QString toMarkdown(QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub) const; +#endif virtual void ensureCursorVisible(); |