21#include "texthtmlbuilder.h"
23#include <QtCore/QList>
24#include <QtGui/QTextDocument>
29class TextHTMLBuilderPrivate
34 QList<QTextListFormat::Style> currentListItemStyles;
45TextHTMLBuilder::TextHTMLBuilder()
50TextHTMLBuilder::~TextHTMLBuilder() {
delete d_ptr; }
56 d->m_text.append(QStringLiteral(
"<strong>"));
62 d->m_text.append(QStringLiteral(
"</strong>"));
68 d->m_text.append(QStringLiteral(
"<em>"));
74 d->m_text.append(QStringLiteral(
"</em>"));
80 d->m_text.append(QStringLiteral(
"<u>"));
86 d->m_text.append(QStringLiteral(
"</u>"));
92 d->m_text.append(QStringLiteral(
"<s>"));
98 d->m_text.append(QStringLiteral(
"</s>"));
103 Q_D(TextHTMLBuilder);
105 QStringLiteral(
"<span style=\"color:%1;\">").arg(brush.color().name()));
110 Q_D(TextHTMLBuilder);
111 d->m_text.append(QStringLiteral(
"</span>"));
116 Q_D(TextHTMLBuilder);
117 d->m_text.append(QStringLiteral(
"<span style=\"background-color:%1;\">")
118 .arg(brush.color().name()));
123 Q_D(TextHTMLBuilder);
124 d->m_text.append(QStringLiteral(
"</span>"));
129 Q_D(TextHTMLBuilder);
130 if (!href.isEmpty()) {
131 if (!name.isEmpty()) {
133 QStringLiteral(
"<a href=\"%1\" name=\"%2\">").arg(href, name));
135 d->m_text.append(QStringLiteral(
"<a href=\"%1\">").arg(href));
138 if (!name.isEmpty()) {
139 d->m_text.append(QStringLiteral(
"<a name=\"%1\">").arg(name));
146 Q_D(TextHTMLBuilder);
147 d->m_text.append(QStringLiteral(
"</a>"));
152 Q_D(TextHTMLBuilder);
154 QStringLiteral(
"<span style=\"font-family:%1;\">").arg(family));
159 Q_D(TextHTMLBuilder);
160 d->m_text.append(QStringLiteral(
"</span>"));
165 Q_D(TextHTMLBuilder);
166 d->m_text.append(QStringLiteral(
"<span style=\"font-size:%1pt;\">")
167 .arg(QString::number(size)));
172 Q_D(TextHTMLBuilder);
173 d->m_text.append(QStringLiteral(
"</span>"));
177 qreal bottomMargin, qreal leftMargin,
180 Q_D(TextHTMLBuilder);
185 if (topMargin != 0) {
186 styleString.append(QStringLiteral(
"margin-top:%1;").arg(topMargin));
188 if (bottomMargin != 0) {
189 styleString.append(QStringLiteral(
"margin-bottom:%1;").arg(bottomMargin));
191 if (leftMargin != 0) {
192 styleString.append(QStringLiteral(
"margin-left:%1;").arg(leftMargin));
194 if (rightMargin != 0) {
195 styleString.append(QStringLiteral(
"margin-right:%1;").arg(rightMargin));
202 if (al & Qt::AlignRight) {
203 d->m_text.append(QStringLiteral(
"<p align=\"right\" "));
204 }
else if (al & Qt::AlignHCenter) {
205 d->m_text.append(QStringLiteral(
"<p align=\"center\" "));
206 }
else if (al & Qt::AlignJustify) {
207 d->m_text.append(QStringLiteral(
"<p align=\"justify\" "));
208 }
else if (al & Qt::AlignLeft) {
209 d->m_text.append(QStringLiteral(
"<p"));
211 d->m_text.append(QStringLiteral(
"<p"));
214 if (!styleString.isEmpty()) {
215 d->m_text.append(QStringLiteral(
" \"") + styleString + QLatin1Char(
'"'));
217 d->m_text.append(QLatin1Char(
'>'));
223 Q_D(TextHTMLBuilder);
226 d->m_text.append(QStringLiteral(
"<h1>"));
229 d->m_text.append(QStringLiteral(
"<h2>"));
232 d->m_text.append(QStringLiteral(
"<h3>"));
235 d->m_text.append(QStringLiteral(
"<h4>"));
238 d->m_text.append(QStringLiteral(
"<h5>"));
241 d->m_text.append(QStringLiteral(
"<h6>"));
250 Q_D(TextHTMLBuilder);
253 d->m_text.append(QStringLiteral(
"</h1>"));
256 d->m_text.append(QStringLiteral(
"</h2>"));
259 d->m_text.append(QStringLiteral(
"</h3>"));
262 d->m_text.append(QStringLiteral(
"</h4>"));
265 d->m_text.append(QStringLiteral(
"</h5>"));
268 d->m_text.append(QStringLiteral(
"</h6>"));
277 Q_D(TextHTMLBuilder);
278 d->m_text.append(QStringLiteral(
"</p>\n"));
283 Q_D(TextHTMLBuilder);
284 d->m_text.append(QStringLiteral(
"<p> "));
289 Q_D(TextHTMLBuilder);
291 d->m_text.append(QStringLiteral(
"<hr width=\"%1\" />\n").arg(width));
293 d->m_text.append(QStringLiteral(
"<hr />\n"));
298 Q_D(TextHTMLBuilder);
299 d->m_text.append(QStringLiteral(
"<img src=\"%1\" ").arg(src));
301 d->m_text.append(QStringLiteral(
"width=\"%2\" ").arg(width));
303 d->m_text.append(QStringLiteral(
"height=\"%2\" ").arg(height));
304 d->m_text.append(QStringLiteral(
"/>"));
309 Q_D(TextHTMLBuilder);
310 d->currentListItemStyles.append(type);
312 case QTextListFormat::ListDisc:
313 d->m_text.append(QStringLiteral(
"<ul type=\"disc\">\n"));
315 case QTextListFormat::ListCircle:
316 d->m_text.append(QStringLiteral(
"\n<ul type=\"circle\">\n"));
318 case QTextListFormat::ListSquare:
319 d->m_text.append(QStringLiteral(
"\n<ul type=\"square\">\n"));
321 case QTextListFormat::ListDecimal:
322 d->m_text.append(QStringLiteral(
"\n<ol type=\"1\">\n"));
324 case QTextListFormat::ListLowerAlpha:
325 d->m_text.append(QStringLiteral(
"\n<ol type=\"a\">\n"));
327 case QTextListFormat::ListUpperAlpha:
328 d->m_text.append(QStringLiteral(
"\n<ol type=\"A\">\n"));
330 case QTextListFormat::ListLowerRoman:
331 d->m_text.append(QStringLiteral(
"\n<ol type=\"i\">\n"));
333 case QTextListFormat::ListUpperRoman:
334 d->m_text.append(QStringLiteral(
"\n<ol type=\"I\">\n"));
342 Q_D(TextHTMLBuilder);
343 switch (d->currentListItemStyles.last()) {
344 case QTextListFormat::ListDisc:
345 case QTextListFormat::ListCircle:
346 case QTextListFormat::ListSquare:
347 d->m_text.append(QStringLiteral(
"</ul>\n"));
349 case QTextListFormat::ListDecimal:
350 case QTextListFormat::ListLowerAlpha:
351 case QTextListFormat::ListUpperAlpha:
352 case QTextListFormat::ListLowerRoman:
353 case QTextListFormat::ListUpperRoman:
354 d->m_text.append(QStringLiteral(
"</ol>\n"));
359 d->currentListItemStyles.removeLast();
363 Q_D(TextHTMLBuilder);
364 d->m_text.append(QStringLiteral(
"<li>"));
369 Q_D(TextHTMLBuilder);
370 d->m_text.append(QStringLiteral(
"</li>\n"));
375 Q_D(TextHTMLBuilder);
376 d->m_text.append(QStringLiteral(
"<sup>"));
381 Q_D(TextHTMLBuilder);
382 d->m_text.append(QStringLiteral(
"</sup>"));
387 Q_D(TextHTMLBuilder);
388 d->m_text.append(QStringLiteral(
"<sub>"));
393 Q_D(TextHTMLBuilder);
394 d->m_text.append(QStringLiteral(
"</sub>"));
400 Q_D(TextHTMLBuilder);
402 QStringLiteral(
"<table cellpadding=\"%1\" cellspacing=\"%2\" "
403 "width=\"%3\" border=\"1\">")
411 Q_D(TextHTMLBuilder);
412 d->m_text.append(QStringLiteral(
"<tr>"));
418 Q_D(TextHTMLBuilder);
420 QStringLiteral(
"<th width=\"%1\" colspan=\"%2\" rowspan=\"%3\">")
429 Q_D(TextHTMLBuilder);
431 QStringLiteral(
"<td width=\"%1\" colspan=\"%2\" rowspan=\"%3\">")
439 Q_D(TextHTMLBuilder);
440 d->m_text.append(QStringLiteral(
"</table>"));
445 Q_D(TextHTMLBuilder);
446 d->m_text.append(QStringLiteral(
"</tr>"));
451 Q_D(TextHTMLBuilder);
452 d->m_text.append(QStringLiteral(
"</th>"));
457 Q_D(TextHTMLBuilder);
458 d->m_text.append(QStringLiteral(
"</td>"));
463 Q_D(TextHTMLBuilder);
464 d->m_text.append(text.toHtmlEscaped());
469 Q_D(TextHTMLBuilder);
470 d->m_text.append(text);
475 Q_D(TextHTMLBuilder);
476 auto ret = d->m_text;
Interface for creating marked-up text output.
The TextHTMLBuilder creates a clean html markup output.
void beginTableCell(const QString &width, int colspan, int rowspan) override
void beginEmph() override
void beginTable(qreal cellpadding, qreal cellspacing, const QString &width) override
void appendRawText(const QString &text) override
void beginSubscript() override
void beginSuperscript() override
void beginTableRow() override
void endParagraph() override
void endSuperscript() override
QString getResult() override
void beginAnchor(const QString &href={}, const QString &name={}) override
void endStrong() override
void endAnchor() override
void beginListItem() override
void beginForeground(const QBrush &brush) override
void endBackground() override
void beginBackground(const QBrush &brush) override
void appendLiteralText(const QString &text) override
void beginStrikeout() override
void beginHeader(int level) override
void endHeader(int level) override
void endTableHeaderCell() override
void beginTableHeaderCell(const QString &width, int colspan, int rowspan) override
void endFontFamily() override
void endStrikeout() override
void endFontPointSize() override
void insertHorizontalRule(int width=-1) override
void endTableCell() override
void endForeground() override
void insertImage(const QString &src, qreal width, qreal height) override
void beginStrong() override
void beginUnderline() override
void beginList(QTextListFormat::Style type) override
void beginFontFamily(const QString &family) override
void endUnderline() override
void beginFontPointSize(int size) override
void endTableRow() override
void addNewline() override
void endSubscript() override
void endListItem() override
void beginParagraph(Qt::Alignment al=Qt::AlignLeft, qreal topMargin=0.0, qreal bottomMargin=0.0, qreal leftMargin=0.0, qreal rightMargin=0.0) override
The Cutelee namespace holds all public Cutelee API.