• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdepimlibs-4.9.4 API Reference
  • KDE Home
  • Contact Us
 

kpimtextedit/richtextbuilders

  • kpimtextedit
  • richtextbuilders
ktexthtmlbuilder.cpp
1 /*
2  This file is part of KDE.
3 
4  Copyright (c) 2008 Stephen Kelly <steveire@gmail.com>
5 
6  This library is free software; you can redistribute it and/or modify it
7  under the terms of the GNU Library General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or (at your
9  option) any later version.
10 
11  This library is distributed in the hope that it will be useful, but WITHOUT
12  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
14  License for more details.
15 
16  You should have received a copy of the GNU Library General Public License
17  along with this library; see the file COPYING.LIB. If not, write to the
18  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  02110-1301, USA.
20 */
21 
22 #include "ktexthtmlbuilder.h"
23 
24 #include <QTextDocument>
25 #include <QList>
26 
27 class KTextHTMLBuilderPrivate
28 {
29 public:
30  KTextHTMLBuilderPrivate(KTextHTMLBuilder *b) : q_ptr(b) {
31 
32  }
33 
34  QList<QTextListFormat::Style> currentListItemStyles;
35  QString m_text;
36 
37  KTextHTMLBuilder *q_ptr;
38 
39  Q_DECLARE_PUBLIC(KTextHTMLBuilder)
40 
41 };
42 
43 KTextHTMLBuilder::KTextHTMLBuilder() : d_ptr(new KTextHTMLBuilderPrivate(this))
44 {
45 
46 }
47 
48 KTextHTMLBuilder::~KTextHTMLBuilder()
49 {
50  delete d_ptr;
51 }
52 
53 void KTextHTMLBuilder::beginStrong()
54 {
55  Q_D(KTextHTMLBuilder);;
56  d->m_text.append("<strong>");
57 }
58 
59 void KTextHTMLBuilder::endStrong()
60 {
61  Q_D(KTextHTMLBuilder);
62  d->m_text.append("</strong>");
63 }
64 
65 void KTextHTMLBuilder::beginEmph()
66 {
67  Q_D(KTextHTMLBuilder);
68  d->m_text.append("<em>");
69 }
70 
71 void KTextHTMLBuilder::endEmph()
72 {
73  Q_D(KTextHTMLBuilder);
74  d->m_text.append("</em>");
75 }
76 
77 void KTextHTMLBuilder::beginUnderline()
78 {
79  Q_D(KTextHTMLBuilder);
80  d->m_text.append("<u>");
81 }
82 
83 void KTextHTMLBuilder::endUnderline()
84 {
85  Q_D(KTextHTMLBuilder);
86  d->m_text.append("</u>");
87 }
88 
89 void KTextHTMLBuilder::beginStrikeout()
90 {
91  Q_D(KTextHTMLBuilder);
92  d->m_text.append("<s>");
93 }
94 
95 void KTextHTMLBuilder::endStrikeout()
96 {
97  Q_D(KTextHTMLBuilder);
98  d->m_text.append("</s>");
99 }
100 
101 void KTextHTMLBuilder::beginForeground(const QBrush &brush)
102 {
103  Q_D(KTextHTMLBuilder);
104  d->m_text.append(QString("<span style=\"color:%1;\">").arg(brush.color().name()));
105 }
106 
107 void KTextHTMLBuilder::endForeground()
108 {
109  Q_D(KTextHTMLBuilder);
110  d->m_text.append("</span>");
111 }
112 
113 void KTextHTMLBuilder::beginBackground(const QBrush &brush)
114 {
115  Q_D(KTextHTMLBuilder);
116  d->m_text.append(QString("<span style=\"background-color:%1;\">").arg(brush.color().name()));
117 }
118 
119 void KTextHTMLBuilder::endBackground()
120 {
121  Q_D(KTextHTMLBuilder);
122  d->m_text.append("</span>");
123 }
124 
125 void KTextHTMLBuilder::beginAnchor(const QString &href, const QString &name)
126 {
127  Q_D(KTextHTMLBuilder);
128  if (!href.isEmpty()) {
129  if (!name.isEmpty()) {
130  d->m_text.append(QString("<a href=\"%1\" name=\"%2\">").arg(href).arg(name));
131  } else {
132  d->m_text.append(QString("<a href=\"%1\">").arg(href));
133  }
134  } else {
135  if (!name.isEmpty()) {
136  d->m_text.append(QString("<a name=\"%1\">").arg(name));
137  }
138  }
139 }
140 
141 void KTextHTMLBuilder::endAnchor()
142 {
143  Q_D(KTextHTMLBuilder);
144  d->m_text.append("</a>");
145 }
146 
147 void KTextHTMLBuilder::beginFontFamily(const QString &family)
148 {
149  Q_D(KTextHTMLBuilder);
150  d->m_text.append(QString("<span style=\"font-family:%1;\">").arg(family));
151 }
152 
153 void KTextHTMLBuilder::endFontFamily()
154 {
155  Q_D(KTextHTMLBuilder);
156  d->m_text.append("</span>");
157 }
158 
159 void KTextHTMLBuilder::beginFontPointSize(int size)
160 {
161  Q_D(KTextHTMLBuilder);
162  d->m_text.append(QString("<span style=\"font-size:%1pt;\">").arg(QString::number(size)));
163 }
164 
165 void KTextHTMLBuilder::endFontPointSize()
166 {
167  Q_D(KTextHTMLBuilder);
168  d->m_text.append("</span>");
169 }
170 
171 void KTextHTMLBuilder::beginParagraph(Qt::Alignment al, qreal topMargin, qreal bottomMargin, qreal leftMargin, qreal rightMargin)
172 {
173  Q_D(KTextHTMLBuilder);
174  // Don't put paragraph tags inside li tags. Qt bug reported.
175 // if (currentListItemStyles.size() != 0)
176 // {
177  QString styleString;
178  if (topMargin != 0) {
179  styleString.append(QString("margin-top:%1;").arg(topMargin));
180  }
181  if (bottomMargin != 0) {
182  styleString.append(QString("margin-bottom:%1;").arg(bottomMargin));
183  }
184  if (leftMargin != 0) {
185  styleString.append(QString("margin-left:%1;").arg(leftMargin));
186  }
187  if (rightMargin != 0) {
188  styleString.append(QString("margin-right:%1;").arg(rightMargin));
189  }
190 
191  // Using == doesn't work here.
192  // Using bitwise comparison because an alignment can contain a vertical and a horizontal part.
193  if (al & Qt::AlignRight) {
194  d->m_text.append("<p align=\"right\" ");
195  } else if (al & Qt::AlignHCenter) {
196  d->m_text.append("<p align=\"center\" ");
197  } else if (al & Qt::AlignJustify) {
198  d->m_text.append("<p align=\"justify\" ");
199  } else if (al & Qt::AlignLeft) {
200  d->m_text.append("<p");
201  } else {
202  d->m_text.append("<p");
203  }
204 
205  if (!styleString.isEmpty()) {
206  d->m_text.append(" \"" + styleString + "\"");
207  }
208  d->m_text.append(">");
209 // }
210 }
211 
212 void KTextHTMLBuilder::beginHeader(int level)
213 {
214  Q_D(KTextHTMLBuilder);
215  switch (level) {
216  case 1:
217  d->m_text.append("<h1>");
218  break;
219  case 2:
220  d->m_text.append("<h2>");
221  break;
222  case 3:
223  d->m_text.append("<h3>");
224  break;
225  case 4:
226  d->m_text.append("<h4>");
227  break;
228  case 5:
229  d->m_text.append("<h5>");
230  break;
231  case 6:
232  d->m_text.append("<h6>");
233  break;
234  default:
235  break;
236  }
237 }
238 
239 void KTextHTMLBuilder::endHeader(int level)
240 {
241  Q_D(KTextHTMLBuilder);
242  switch (level) {
243  case 1:
244  d->m_text.append("</h1>");
245  break;
246  case 2:
247  d->m_text.append("</h2>");
248  break;
249  case 3:
250  d->m_text.append("</h3>");
251  break;
252  case 4:
253  d->m_text.append("</h4>");
254  break;
255  case 5:
256  d->m_text.append("</h5>");
257  break;
258  case 6:
259  d->m_text.append("</h6>");
260  break;
261  default:
262  break;
263  }
264 }
265 
266 void KTextHTMLBuilder::endParagraph()
267 {
268  Q_D(KTextHTMLBuilder);
269  d->m_text.append("</p>\n");
270 }
271 
272 void KTextHTMLBuilder::addNewline()
273 {
274  Q_D(KTextHTMLBuilder);
275  d->m_text.append("<br />\n");
276 }
277 
278 void KTextHTMLBuilder::insertHorizontalRule(int width)
279 {
280  Q_D(KTextHTMLBuilder);
281  if (width != -1) {
282  d->m_text.append(QString("<hr width=\"%1\" />\n").arg(width));
283  }
284  d->m_text.append("<hr />\n");
285 }
286 
287 void KTextHTMLBuilder::insertImage(const QString &src, qreal width, qreal height)
288 {
289  Q_D(KTextHTMLBuilder);
290  d->m_text.append(QString("<img src=\"%1\" ").arg(src));
291  if (width != 0) d->m_text.append(QString("width=\"%2\" ").arg(width));
292  if (height != 0) d->m_text.append(QString("height=\"%2\" ").arg(height));
293  d->m_text.append("/>");
294 }
295 
296 void KTextHTMLBuilder::beginList(QTextListFormat::Style type)
297 {
298  Q_D(KTextHTMLBuilder);
299  d->currentListItemStyles.append(type);
300  switch (type) {
301  case QTextListFormat::ListDisc:
302  d->m_text.append("<ul type=\"disc\">\n");
303  break;
304  case QTextListFormat::ListCircle:
305  d->m_text.append("\n<ul type=\"circle\">\n");
306  break;
307  case QTextListFormat::ListSquare:
308  d->m_text.append("\n<ul type=\"square\">\n");
309  break;
310  case QTextListFormat::ListDecimal:
311  d->m_text.append("\n<ol type=\"1\">\n");
312  break;
313  case QTextListFormat::ListLowerAlpha:
314  d->m_text.append("\n<ol type=\"a\">\n");
315  break;
316  case QTextListFormat::ListUpperAlpha:
317  d->m_text.append("\n<ol type=\"A\">\n");
318  break;
319  default:
320  break;
321  }
322 }
323 void KTextHTMLBuilder::endList()
324 {
325  Q_D(KTextHTMLBuilder);
326  switch (d->currentListItemStyles.last()) {
327  case QTextListFormat::ListDisc:
328  case QTextListFormat::ListCircle:
329  case QTextListFormat::ListSquare:
330  d->m_text.append("</ul>\n");
331  break;
332  case QTextListFormat::ListDecimal:
333  case QTextListFormat::ListLowerAlpha:
334  case QTextListFormat::ListUpperAlpha:
335  d->m_text.append("</ol>\n");
336  break;
337  default:
338  break;
339  }
340  d->currentListItemStyles.removeLast();
341 }
342 void KTextHTMLBuilder::beginListItem()
343 {
344  Q_D(KTextHTMLBuilder);
345  d->m_text.append("<li>");
346 }
347 
348 void KTextHTMLBuilder::endListItem()
349 {
350  Q_D(KTextHTMLBuilder);
351  d->m_text.append("</li>\n");
352 }
353 
354 void KTextHTMLBuilder::beginSuperscript()
355 {
356  Q_D(KTextHTMLBuilder);
357  d->m_text.append("<sup>");
358 }
359 
360 void KTextHTMLBuilder::endSuperscript()
361 {
362  Q_D(KTextHTMLBuilder);
363  d->m_text.append("</sup>");
364 }
365 
366 void KTextHTMLBuilder::beginSubscript()
367 {
368  Q_D(KTextHTMLBuilder);
369  d->m_text.append("<sub>");
370 }
371 
372 void KTextHTMLBuilder::endSubscript()
373 {
374  Q_D(KTextHTMLBuilder);
375  d->m_text.append("</sub>");
376 }
377 
378 
379 void KTextHTMLBuilder::beginTable(qreal cellpadding, qreal cellspacing, const QString &width)
380 {
381  Q_D(KTextHTMLBuilder);
382  d->m_text.append(QString("<table cellpadding=\"%1\" cellspacing=\"%2\" width=\"%3\" border=\"1\">")
383  .arg(cellpadding)
384  .arg(cellspacing)
385  .arg(width));
386 }
387 
388 void KTextHTMLBuilder::beginTableRow()
389 {
390  Q_D(KTextHTMLBuilder);
391  d->m_text.append("<tr>");
392 }
393 
394 void KTextHTMLBuilder::beginTableHeaderCell(const QString &width, int colspan, int rowspan)
395 {
396  Q_D(KTextHTMLBuilder);
397  d->m_text.append(QString("<th width=\"%1\" colspan=\"%2\" rowspan=\"%3\">").arg(width).arg(colspan).arg(rowspan));
398 }
399 
400 void KTextHTMLBuilder::beginTableCell(const QString &width, int colspan, int rowspan)
401 {
402  Q_D(KTextHTMLBuilder);
403  d->m_text.append(QString("<td width=\"%1\" colspan=\"%2\" rowspan=\"%3\">").arg(width).arg(colspan).arg(rowspan));
404 }
405 
406 void KTextHTMLBuilder::endTable()
407 {
408  Q_D(KTextHTMLBuilder);
409  d->m_text.append("</table>");
410 }
411 
412 void KTextHTMLBuilder::endTableRow()
413 {
414  Q_D(KTextHTMLBuilder);
415  d->m_text.append("</tr>");
416 }
417 
418 void KTextHTMLBuilder::endTableHeaderCell()
419 {
420  Q_D(KTextHTMLBuilder);
421  d->m_text.append("</th>");
422 }
423 
424 void KTextHTMLBuilder::endTableCell()
425 {
426  Q_D(KTextHTMLBuilder);
427  d->m_text.append("</td>");
428 }
429 
430 
431 void KTextHTMLBuilder::appendLiteralText(const QString &text)
432 {
433  Q_D(KTextHTMLBuilder);
434  d->m_text.append(Qt::escape(text));
435 }
436 
437 
438 QString& KTextHTMLBuilder::getResult()
439 {
440  Q_D(KTextHTMLBuilder);
441  return d->m_text;
442 }
This file is part of the KDE documentation.
Documentation copyright © 1996-2012 The KDE developers.
Generated on Tue Dec 11 2012 12:13:25 by doxygen 1.8.1.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kpimtextedit/richtextbuilders

Skip menu "kpimtextedit/richtextbuilders"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • Related Pages

kdepimlibs-4.9.4 API Reference

Skip menu "kdepimlibs-4.9.4 API Reference"
  • akonadi
  •   contact
  •   kmime
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal