21 #include "plaintextmarkupbuilder.h"
42 QString getRomanString(
int itemNumber);
51 QList<QTextListFormat::Style> currentListItemStyles;
52 QList<int> currentListItemNumbers;
66 QString 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()));
144 PlainTextMarkupBuilder::PlainTextMarkupBuilder()
149 PlainTextMarkupBuilder::~PlainTextMarkupBuilder() {
delete d_ptr; }
154 d->m_text.append(QLatin1Char(
'*'));
160 d->m_text.append(QLatin1Char(
'*'));
166 d->m_text.append(QLatin1Char(
'/'));
172 d->m_text.append(QLatin1Char(
'/'));
178 d->m_text.append(QLatin1Char(
'_'));
184 d->m_text.append(QLatin1Char(
'_'));
190 d->m_text.append(QLatin1Char(
'-'));
196 d->m_text.append(QLatin1Char(
'-'));
204 if (!d->m_urls.contains(href)) {
206 d->m_urls.append(href);
208 d->activeLink = href;
215 QStringLiteral(
"[%1]").arg(d->m_urls.indexOf(d->activeLink) + 1));
221 d->m_text.append(QLatin1Char(
'\n'));
227 d->m_text.append(QLatin1Char(
'\n'));
235 d->m_text.append(QStringLiteral(
"--------------------\n"));
242 if (!d->m_urls.contains(reference))
243 d->m_urls.append(reference);
244 return d->m_urls.indexOf(reference) + 1;
256 d->m_text.append(QStringLiteral(
"[%1]").arg(ref));
262 d->currentListItemStyles.append(style);
263 d->currentListItemNumbers.append(0);
269 if (!d->currentListItemNumbers.isEmpty()) {
270 d->currentListItemStyles.removeLast();
271 d->currentListItemNumbers.removeLast();
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()) {
285 case QTextListFormat::ListDisc:
286 d->m_text.append(QStringLiteral(
" * "));
288 case QTextListFormat::ListCircle:
289 d->m_text.append(QStringLiteral(
" o "));
291 case QTextListFormat::ListSquare:
292 d->m_text.append(QStringLiteral(
" - "));
294 case QTextListFormat::ListDecimal:
295 d->m_text.append(QStringLiteral(
" %1. ").arg(itemNumber + 1));
297 case QTextListFormat::ListLowerAlpha:
299 QStringLiteral(
" %1. ").arg(d->getLetterString(itemNumber)));
301 case QTextListFormat::ListUpperAlpha:
303 QStringLiteral(
" %1. ").arg(d->getLetterString(itemNumber).toUpper()));
305 case QTextListFormat::ListLowerRoman:
307 QStringLiteral(
" %1. ").arg(d->getRomanString(itemNumber + 1)));
309 case QTextListFormat::ListUpperRoman:
310 d->m_text.append(QStringLiteral(
" %1. ").arg(
311 d->getRomanString(itemNumber + 1).toUpper()));
321 d->currentListItemNumbers.last() = d->currentListItemNumbers.last() + 1;
322 d->m_text.append(QLatin1Char(
'\n'));
328 d->m_text.append(QStringLiteral(
"^{"));
334 d->m_text.append(QLatin1Char(
'}'));
340 d->m_text.append(QStringLiteral(
"_{"));
346 d->m_text.append(QLatin1Char(
'}'));
352 d->m_text.append(text);
358 d->m_text.append(text);
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.