21#include "plaintextmarkupbuilder.h"
26class PlainTextMarkupBuilderPrivate
42 QString getRomanString(
int itemNumber);
66QString PlainTextMarkupBuilderPrivate::getRomanString(
int item)
74 auto romanSymbols = QStringLiteral(
"iiivixxxlxcccdcmmmm");
75 int c[] = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
77 for (
auto i = 12; i >= 0; n %= c[i], i--) {
80 auto startDigit = i + (i + 3) / 4;
97 romanNumeral.
append(romanSymbols.mid(startDigit, numDigits));
100 result = romanNumeral;
102 result = QStringLiteral(
"?");
115 letterString.
prepend(QStringLiteral(
"%1").arg(
116 (itemNumber % LETTERSINALPHABET) + DIGITSOFFSET,
118 LETTERSINALPHABET + DIGITSOFFSET));
119 if ((itemNumber >= LETTERSINALPHABET)) {
120 itemNumber = itemNumber / LETTERSINALPHABET;
132 if (!m_urls.isEmpty()) {
133 refs.
append(QStringLiteral(
"\n--------\n"));
136 while (!m_urls.isEmpty()) {
138 QStringLiteral(
"[%1] %2\n").arg(index++).arg(m_urls.takeFirst()));
144PlainTextMarkupBuilder::PlainTextMarkupBuilder()
149PlainTextMarkupBuilder::~PlainTextMarkupBuilder() {
delete d_ptr; }
153 Q_D(PlainTextMarkupBuilder);
159 Q_D(PlainTextMarkupBuilder);
165 Q_D(PlainTextMarkupBuilder);
171 Q_D(PlainTextMarkupBuilder);
177 Q_D(PlainTextMarkupBuilder);
183 Q_D(PlainTextMarkupBuilder);
189 Q_D(PlainTextMarkupBuilder);
195 Q_D(PlainTextMarkupBuilder);
202 Q_D(PlainTextMarkupBuilder);
204 if (!d->m_urls.contains(href)) {
206 d->m_urls.append(href);
208 d->activeLink = href;
213 Q_D(PlainTextMarkupBuilder);
215 QStringLiteral(
"[%1]").arg(d->m_urls.indexOf(d->activeLink) + 1));
220 Q_D(PlainTextMarkupBuilder);
226 Q_D(PlainTextMarkupBuilder);
233 Q_D(PlainTextMarkupBuilder);
235 d->m_text.append(QStringLiteral(
"--------------------\n"));
240 Q_D(PlainTextMarkupBuilder);
242 if (!d->m_urls.contains(reference))
243 d->m_urls.append(reference);
244 return d->m_urls.indexOf(reference) + 1;
250 Q_D(PlainTextMarkupBuilder);
256 d->m_text.append(QStringLiteral(
"[%1]").arg(ref));
261 Q_D(PlainTextMarkupBuilder);
262 d->currentListItemStyles.append(style);
263 d->currentListItemNumbers.append(0);
268 Q_D(PlainTextMarkupBuilder);
269 if (!d->currentListItemNumbers.isEmpty()) {
270 d->currentListItemStyles.removeLast();
271 d->currentListItemNumbers.removeLast();
277 Q_D(PlainTextMarkupBuilder);
278 for (
auto i = 0; i < d->currentListItemNumbers.size(); i++) {
279 d->m_text.append(QStringLiteral(
" "));
282 auto itemNumber = d->currentListItemNumbers.last();
284 switch (d->currentListItemStyles.last()) {
286 d->m_text.append(QStringLiteral(
" * "));
289 d->m_text.append(QStringLiteral(
" o "));
292 d->m_text.append(QStringLiteral(
" - "));
295 d->m_text.append(QStringLiteral(
" %1. ").arg(itemNumber + 1));
299 QStringLiteral(
" %1. ").arg(d->getLetterString(itemNumber)));
303 QStringLiteral(
" %1. ").arg(d->getLetterString(itemNumber).toUpper()));
307 QStringLiteral(
" %1. ").arg(d->getRomanString(itemNumber + 1)));
310 d->m_text.append(QStringLiteral(
" %1. ").arg(
311 d->getRomanString(itemNumber + 1).toUpper()));
320 Q_D(PlainTextMarkupBuilder);
321 d->currentListItemNumbers.last() = d->currentListItemNumbers.last() + 1;
327 Q_D(PlainTextMarkupBuilder);
328 d->m_text.append(QStringLiteral(
"^{"));
333 Q_D(PlainTextMarkupBuilder);
339 Q_D(PlainTextMarkupBuilder);
340 d->m_text.append(QStringLiteral(
"_{"));
345 Q_D(PlainTextMarkupBuilder);
351 Q_D(PlainTextMarkupBuilder);
352 d->m_text.append(text);
357 Q_D(PlainTextMarkupBuilder);
358 d->m_text.append(text);
363 Q_D(PlainTextMarkupBuilder);
364 auto ret = d->m_text;
365 ret.append(d->getReferences());
390 qreal bottom, qreal left,
403 Q_UNUSED(cellpadding);
404 Q_UNUSED(cellspacing);
417 int colSpan,
int rowSpan)
QString getLetterString(int itemNumber)
Creates a simple marked up plain text document.
void beginTableCell(const QString &width, int colSpan, int rowSpan) override
void appendLiteralText(const QString &text) override
void endStrikeout() override
void beginFontFamily(const QString &family) override
void endUnderline() override
void endFontPointSize() override
void endSuperscript() override
void beginTableRow() override
void beginForeground(const QBrush &brush) override
void endStrong() override
void endTableCell() override
void beginSubscript() override
void appendRawText(const QString &text) override
void endListItem() override
void beginBackground(const QBrush &brush) override
void beginStrong() override
void beginEmph() override
void beginTable(qreal cellpadding, qreal cellspacing, const QString &width) override
void beginStrikeout() override
int addReference(const QString &reference)
void endParagraph() override
void beginFontPointSize(int size) override
void endBackground() override
void endSubscript() override
void endForeground() override
void beginParagraph(Qt::Alignment a=Qt::AlignLeft, qreal top=0.0, qreal bottom=0.0, qreal left=0.0, qreal right=0.0) override
void beginTableHeaderCell(const QString &width, int colSpan, int rowSpan) override
void beginList(QTextListFormat::Style style) override
void endHeader(int level) override
void beginUnderline() override
void beginListItem() override
void addNewline() override
QString getResult() override
void insertImage(const QString &src, qreal width, qreal height) override
void beginSuperscript() override
void endAnchor() override
void beginAnchor(const QString &href={}, const QString &name={}) override
void beginHeader(int level) override
void insertHorizontalRule(int width=-1) override
void endTableHeaderCell() override
void endTableRow() override
void endFontFamily() override
The Cutelee namespace holds all public Cutelee API.
QString & append(QChar ch)
QString & prepend(QChar ch)