• Skip to content
  • Skip to link menu
KDE 4.4 API Reference
  • KDE API Reference
  • KDE-PIM Libraries
  • Sitemap
  • Contact Us
 

kpimtextedit/richtextbuilders

kplaintextmarkupbuilder.cpp

00001 /*
00002     This file is part of KDE.
00003 
00004     Copyright (c) 2008 Stephen Kelly <steveire@gmail.com>
00005 
00006     This library is free software; you can redistribute it and/or modify it
00007     under the terms of the GNU Library General Public License as published by
00008     the Free Software Foundation; either version 2 of the License, or (at your
00009     option) any later version.
00010 
00011     This library is distributed in the hope that it will be useful, but WITHOUT
00012     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00013     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
00014     License for more details.
00015 
00016     You should have received a copy of the GNU Library General Public License
00017     along with this library; see the file COPYING.LIB.  If not, write to the
00018     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
00019     02110-1301, USA.
00020 */
00021 
00022 #include "kplaintextmarkupbuilder.h"
00023 
00024 #include <KLocale>
00025 
00026 class KPlainTextMarkupBuilderPrivate
00027 {
00028 public:
00029     KPlainTextMarkupBuilderPrivate(KPlainTextMarkupBuilder *b) : q_ptr(b) {
00030 
00031     }
00032 
00041     QString getLetterString(int itemNumber);
00042 
00047     QString getReferences();
00048 
00049     QStringList m_urls;
00050     QList<QTextListFormat::Style> currentListItemStyles;
00051     QList<int> currentListItemNumbers;
00052 
00053     QString activeLink;
00054 
00055     QString m_text;
00056 
00057     KPlainTextMarkupBuilder *q_ptr;
00058 
00059     Q_DECLARE_PUBLIC(KPlainTextMarkupBuilder)
00060 
00061 };
00062 
00063 QString KPlainTextMarkupBuilderPrivate::getLetterString(int itemNumber)
00064 {
00065     QString letterString;
00066     while (true) {
00067         // Create the letter string by prepending one char at a time.
00068         // The itemNumber is converted to a number in the base 36 (number of letters in the
00069         // alphabet plus 10) after being increased by 10 (to pass out the digits 0 to 9).
00070         letterString.prepend(QString("%1").arg((itemNumber % LETTERSINALPHABET) + DIGITSOFFSET,
00071                                                0, // no padding while building this string.
00072                                                LETTERSINALPHABET + DIGITSOFFSET));
00073         if ((itemNumber >= LETTERSINALPHABET)) {
00074             itemNumber = itemNumber / LETTERSINALPHABET;
00075             itemNumber--;
00076         } else {
00077             break;
00078         }
00079     }
00080     return letterString;
00081 }
00082 
00083 QString KPlainTextMarkupBuilderPrivate::getReferences()
00084 {
00085     QString refs;
00086     if (!m_urls.isEmpty()) {
00087         refs.append(i18nc("Beginning of the references section, which lists all external references",
00088                           "\n---- References ----\n"));
00089 
00090         int index = 1;
00091         while (!m_urls.isEmpty()) {
00092             refs.append(QString("[%1] %2\n").arg(index++).arg(m_urls.takeFirst()));
00093         }
00094     }
00095     return refs;
00096 }
00097 
00098 KPlainTextMarkupBuilder::KPlainTextMarkupBuilder() : d_ptr(new KPlainTextMarkupBuilderPrivate(this))
00099 {
00100     Q_D(KPlainTextMarkupBuilder);
00101     d->m_urls = QStringList();
00102 }
00103 
00104 void KPlainTextMarkupBuilder::beginStrong()
00105 {
00106     Q_D(KPlainTextMarkupBuilder);
00107     d->m_text.append("*");
00108 }
00109 void KPlainTextMarkupBuilder::endStrong()
00110 {
00111     Q_D(KPlainTextMarkupBuilder);
00112     d->m_text.append("*");
00113 }
00114 void KPlainTextMarkupBuilder::beginEmph()
00115 {
00116     Q_D(KPlainTextMarkupBuilder);
00117     d->m_text.append("/");
00118 }
00119 void KPlainTextMarkupBuilder::endEmph()
00120 {
00121     Q_D(KPlainTextMarkupBuilder);
00122     d->m_text.append("/");
00123 }
00124 void KPlainTextMarkupBuilder::beginUnderline()
00125 {
00126     Q_D(KPlainTextMarkupBuilder);
00127     d->m_text.append("_");
00128 }
00129 void KPlainTextMarkupBuilder::endUnderline()
00130 {
00131     Q_D(KPlainTextMarkupBuilder);
00132     d->m_text.append("_");
00133 }
00134 void KPlainTextMarkupBuilder::beginStrikeout()
00135 {
00136     Q_D(KPlainTextMarkupBuilder);
00137     d->m_text.append("-");
00138 }
00139 void KPlainTextMarkupBuilder::endStrikeout()
00140 {
00141     Q_D(KPlainTextMarkupBuilder);
00142     d->m_text.append("-");
00143 }
00144 
00145 void KPlainTextMarkupBuilder::beginAnchor(const QString &href, const QString &name)
00146 {
00147     Q_D(KPlainTextMarkupBuilder);
00148     Q_UNUSED(name);
00149     if (!d->m_urls.contains(href)) {
00150 
00151         d->m_urls.append(href);
00152     }
00153     d->activeLink = href;
00154 }
00155 
00156 void KPlainTextMarkupBuilder::endAnchor()
00157 {
00158     Q_D(KPlainTextMarkupBuilder);
00159     d->m_text.append(QString("[%1]").arg(d->m_urls.indexOf(d->activeLink) + 1));
00160 }
00161 
00162 void KPlainTextMarkupBuilder::endParagraph()
00163 {
00164     Q_D(KPlainTextMarkupBuilder);
00165     d->m_text.append("\n");
00166 }
00167 
00168 void KPlainTextMarkupBuilder::addNewline()
00169 {
00170     Q_D(KPlainTextMarkupBuilder);
00171     d->m_text.append("\n");
00172 }
00173 
00174 void KPlainTextMarkupBuilder::insertHorizontalRule(int width)
00175 {
00176     Q_UNUSED(width)
00177     Q_D(KPlainTextMarkupBuilder);
00178 
00179     d->m_text.append("--------------------\n");
00180 }
00181 
00182 void KPlainTextMarkupBuilder::insertImage(const QString &src, qreal width, qreal height)
00183 {
00184     Q_D(KPlainTextMarkupBuilder);
00185     Q_UNUSED(width)
00186     Q_UNUSED(height)
00187 
00188     if (!d->m_urls.contains(src)) {
00189         d->m_urls.append(src);
00190     }
00191     d->m_text.append(QString("[%1]").arg(d->m_urls.indexOf(src) + 1));
00192 }
00193 
00194 
00195 void KPlainTextMarkupBuilder::beginList(QTextListFormat::Style style)
00196 {
00197     Q_D(KPlainTextMarkupBuilder);
00198     d->currentListItemStyles.append(style);
00199     d->currentListItemNumbers.append(0);
00200 }
00201 
00202 void KPlainTextMarkupBuilder::endList()
00203 {
00204     Q_D(KPlainTextMarkupBuilder);
00205     if (!d->currentListItemNumbers.isEmpty()) {
00206         d->currentListItemStyles.removeLast();
00207         d->currentListItemNumbers.removeLast();
00208     }
00209 }
00210 void KPlainTextMarkupBuilder::beginListItem()
00211 {
00212     Q_D(KPlainTextMarkupBuilder);
00213     for (int i = 0; i < d->currentListItemNumbers.size(); i++) {
00214         d->m_text.append("    ");
00215     }
00216 
00217     int itemNumber = d->currentListItemNumbers.last();
00218     QString letterString;
00219 
00220     switch (d->currentListItemStyles.last()) {
00221     case QTextListFormat::ListDisc:
00222         d->m_text.append(" *  ");
00223         break;
00224     case QTextListFormat::ListCircle:
00225         d->m_text.append(" o  ");
00226         break;
00227     case QTextListFormat::ListSquare:
00228         d->m_text.append(" -  ");
00229         break;
00230     case QTextListFormat::ListDecimal:
00231         d->m_text.append(QString(" %1. ").arg(itemNumber + 1));
00232         break;
00233     case QTextListFormat::ListLowerAlpha:
00234         d->m_text.append(QString(" %1. ").arg(d->getLetterString(itemNumber)));
00235         break;
00236     case QTextListFormat::ListUpperAlpha:
00237         d->m_text.append(QString(" %1. ").arg(d->getLetterString(itemNumber).toUpper()));
00238         break;
00239     default:
00240         break;
00241     }
00242 }
00243 
00244 void KPlainTextMarkupBuilder::endListItem()
00245 {
00246     Q_D(KPlainTextMarkupBuilder);
00247     d->currentListItemNumbers.last() = d->currentListItemNumbers.last() + 1;
00248 }
00249 
00250 
00251 void KPlainTextMarkupBuilder::beginSuperscript()
00252 {
00253     Q_D(KPlainTextMarkupBuilder);
00254     d->m_text.append("^{");
00255 }
00256 
00257 void KPlainTextMarkupBuilder::endSuperscript()
00258 {
00259     Q_D(KPlainTextMarkupBuilder);
00260     d->m_text.append("}");
00261 }
00262 
00263 void KPlainTextMarkupBuilder::beginSubscript()
00264 {
00265     Q_D(KPlainTextMarkupBuilder);
00266     d->m_text.append("_{");
00267 }
00268 
00269 void KPlainTextMarkupBuilder::endSubscript()
00270 {
00271     Q_D(KPlainTextMarkupBuilder);
00272     d->m_text.append("}");
00273 }
00274 
00275 void KPlainTextMarkupBuilder::appendLiteralText(const QString &text)
00276 {
00277     Q_D(KPlainTextMarkupBuilder);
00278     d->m_text.append(text);
00279 }
00280 
00281 QString& KPlainTextMarkupBuilder::getResult()
00282 {
00283     Q_D(KPlainTextMarkupBuilder);
00284     QString &ret = d->m_text;
00285     ret.append(d->getReferences());
00286     return ret;
00287 }
00288 

kpimtextedit/richtextbuilders

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

KDE-PIM Libraries

Skip menu "KDE-PIM Libraries"
  • akonadi
  •   contact
  •   kmime
  • kabc
  • kblog
  • kcal
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Generated for KDE-PIM Libraries by doxygen 1.6.2-20100208
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal