void XYZTextEditor::cursorPositionChanged() { alignmentChanged(m_ui->textEdit->alignment()); QTextBlockFormat blockFmt = m_ui->textEdit->textCursor().blockFormat(); if (blockFmt.layoutDirection() == Qt::RightToLeft) m_ui->btnTextDirection->setChecked(true); else m_ui->btnTextDirection->setChecked(false); }
/*! \fn QString QTextList::itemText(const QTextBlock &block) const Returns the text of the list item that corresponds to the given \a block. */ QString QTextList::itemText(const QTextBlock &blockIt) const { Q_D(const QTextList); int item = d->blocks.indexOf(blockIt) + 1; if (item <= 0) return QString(); QTextBlock block = d->blocks.at(item-1); QTextBlockFormat blockFormat = block.blockFormat(); QString result; const int style = format().style(); switch (style) { case QTextListFormat::ListDecimal: result = QString::number(item); break; // from the old richtext case QTextListFormat::ListLowerAlpha: case QTextListFormat::ListUpperAlpha: { const char baseChar = style == QTextListFormat::ListUpperAlpha ? 'A' : 'a'; int c = item; while (c > 0) { c--; result.prepend(QChar(baseChar + (c % 26))); c /= 26; } } break; default: Q_ASSERT(false); } if (blockFormat.layoutDirection() == Qt::RightToLeft) return result.prepend(QLatin1Char('.')); return result + QLatin1Char('.'); }
bool OdtWriter::writeParagraphStyle(const QTextBlockFormat& format, const QString& name) { QXmlStreamAttributes attributes; bool rtl = format.layoutDirection() == Qt::RightToLeft; if (rtl) { attributes.append(QString::fromLatin1("style:writing-mode"), QString::fromLatin1("rl")); } Qt::Alignment align = format.alignment(); if (rtl && (align & Qt::AlignLeft)) { attributes.append(QString::fromLatin1("fo:text-align"), QString::fromLatin1("left")); } else if (align & Qt::AlignRight) { attributes.append(QString::fromLatin1("fo:text-align"), QString::fromLatin1("right")); } else if (align & Qt::AlignCenter) { attributes.append(QString::fromLatin1("fo:text-align"), QString::fromLatin1("center")); } else if (align & Qt::AlignJustify) { attributes.append(QString::fromLatin1("fo:text-align"), QString::fromLatin1("justify")); } if (format.indent() > 0) { attributes.append(QString::fromLatin1("fo:margin-left"), QString::number(format.indent() * 0.5) + QString::fromLatin1("in")); } if (attributes.isEmpty()) { return false; } m_xml.writeStartElement(QString::fromLatin1("style:style")); m_xml.writeAttribute(QString::fromLatin1("style:name"), name); m_xml.writeAttribute(QString::fromLatin1("style:family"), QString::fromLatin1("paragraph")); m_xml.writeAttribute(QString::fromLatin1("style:parent-style-name"), QString::fromLatin1("Normal")); m_xml.writeEmptyElement(QString::fromLatin1("style:paragraph-properties")); m_xml.writeAttributes(attributes); m_xml.writeEndElement(); return true; }
/*! \fn QString QTextList::itemText(const QTextBlock &block) const Returns the text of the list item that corresponds to the given \a block. */ QString QTextList::itemText(const QTextBlock &blockIt) const { Q_D(const QTextList); int item = d->blocks.indexOf(blockIt) + 1; if (item <= 0) return QString(); QTextBlock block = d->blocks.at(item-1); QTextBlockFormat blockFormat = block.blockFormat(); QString result; const int style = format().style(); switch (style) { case QTextListFormat::ListDecimal: result = QString::number(item); break; // from the old richtext case QTextListFormat::ListLowerAlpha: case QTextListFormat::ListUpperAlpha: { const char baseChar = style == QTextListFormat::ListUpperAlpha ? 'A' : 'a'; int c = item; while (c > 0) { c--; result.prepend(QChar(baseChar + (c % 26))); c /= 26; } } break; case QTextListFormat::ListLowerRoman: case QTextListFormat::ListUpperRoman: { if (item < 5000) { QByteArray romanNumeral; // works for up to 4999 items static const char romanSymbolsLower[] = "iiivixxxlxcccdcmmmm"; static const char romanSymbolsUpper[] = "IIIVIXXXLXCCCDCMMMM"; QByteArray romanSymbols; // wrap to have "mid" if (style == QTextListFormat::ListLowerRoman) romanSymbols = QByteArray::fromRawData(romanSymbolsLower, sizeof(romanSymbolsLower)); else romanSymbols = QByteArray::fromRawData(romanSymbolsUpper, sizeof(romanSymbolsUpper)); int c[] = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000 }; int n = item; for (int i = 12; i >= 0; n %= c[i], i--) { int q = n / c[i]; if (q > 0) { int startDigit = i + (i+3)/4; int numDigits; if (i % 4) { // c[i] == 4|5|9|40|50|90|400|500|900 if ((i-2) % 4) { // c[i] == 4|9|40|90|400|900 => with substraction (IV, IX, XL, XC, ...) numDigits = 2; } else { // c[i] == 5|50|500 (V, L, D) numDigits = 1; } } else { // c[i] == 1|10|100|1000 (I, II, III, X, XX, ...) numDigits = q; } romanNumeral.append(romanSymbols.mid(startDigit, numDigits)); } } result = QString::fromLatin1(romanNumeral); } else { result = QLatin1String("?"); } } break; default: Q_ASSERT(false); } if (blockFormat.layoutDirection() == Qt::RightToLeft) return result.prepend(QLatin1Char('.')); return result + QLatin1Char('.'); }
void HtmlExporter::emitBlockAttributes( const QTextBlock &block ) { // kDebug() << "html" << html; QTextBlockFormat format = block.blockFormat(); if (format.hasProperty( QTextFormat::LayoutDirection ) ) { Qt::LayoutDirection dir = format.layoutDirection(); // if (dir == Qt::LeftToRight) { // mDefaultBlockFormat.setAlignment(Qt::AlignLeft); // } else { // mDefaultBlockFormat.setAlignment(Qt::AlignRight); // } // if ( dir != mDefaultBlockFormat.layoutDirection() ) { // assume default to not bloat the html too much if ( dir == Qt::LeftToRight ) { html += QLatin1String( " dir=\"ltr\"" ); // mDefaultBlockFormat.setAlignment(Qt::AlignLeft); } else { html += QLatin1String( " dir=\"rtl\"" ); // mDefaultBlockFormat.setAlignment(Qt::AlignRight); } } if ( format.hasProperty( QTextFormat::BlockAlignment ) ) { emitAlignment( format.alignment() ); } bool attributesEmitted = false; QLatin1String style( " style=\"" ); //html += style; // if (block.begin().atEnd()) { // html += QLatin1String("-qt-paragraph-type:empty;"); // } if ( format.hasProperty( QTextBlockFormat::FrameMargin ) ) { if ( !attributesEmitted ) { html += style; attributesEmitted = true; } emitMargins( QString::number( format.topMargin() ), QString::number( format.bottomMargin() ), QString::number( format.leftMargin() ), QString::number( format.rightMargin() ) ); } if ( format.hasProperty( QTextBlockFormat::BlockIndent ) ) { // if (format.indent() == 0) { if ( format.indent() == mDefaultBlockFormat.indent() ) { // assume default not to bloat the html too much } else { if ( !attributesEmitted ) { html += style; attributesEmitted = true; } html += QLatin1String( " -qt-block-indent:" ); html += QString::number( format.indent() ); html += QLatin1Char( ';' ); } } if ( format.hasProperty( QTextBlockFormat::TextIndent ) ) { // if (format.textIndent() == 0) { if ( format.textIndent() == mDefaultBlockFormat.textIndent() ) { // assume default not to bloat the html too much } else { if ( !attributesEmitted ) { html += style; attributesEmitted = true; } html += QLatin1String( " text-indent:" ); html += QString::number( format.textIndent() ); html += QLatin1String( "px;" ); } } //QTextCharFormat diff = formatDifference(defaultCharFormat, block.charFormat()).toCharFormat(); //if (!diff.properties().isEmpty()) //emitCharFormatStyle(diff); if ( attributesEmitted ) { html += QLatin1Char( '"' ); } // QBrush bg = format.background(); // if (bg != Qt::NoBrush) // emitAttribute("bgcolor", bg.color().name()); }