void QTextOdfWriter::writeBlockFormat(QXmlStreamWriter &writer, QTextBlockFormat format, int formatIndex) const { writer.writeStartElement(styleNS, QString::fromLatin1("style")); writer.writeAttribute(styleNS, QString::fromLatin1("name"), QString::fromLatin1("p%1").arg(formatIndex)); writer.writeAttribute(styleNS, QString::fromLatin1("family"), QString::fromLatin1("paragraph")); writer.writeStartElement(styleNS, QString::fromLatin1("paragraph-properties")); if (format.hasProperty(QTextFormat::BlockAlignment)) { const Qt::Alignment alignment = format.alignment() & Qt::AlignHorizontal_Mask; QString value; if (alignment == Qt::AlignLeading) value = QString::fromLatin1("start"); else if (alignment == Qt::AlignTrailing) value = QString::fromLatin1("end"); else if (alignment == (Qt::AlignLeft | Qt::AlignAbsolute)) value = QString::fromLatin1("left"); else if (alignment == (Qt::AlignRight | Qt::AlignAbsolute)) value = QString::fromLatin1("right"); else if (alignment == Qt::AlignHCenter) value = QString::fromLatin1("center"); else if (alignment == Qt::AlignJustify) value = QString::fromLatin1("justify"); else qWarning() << "QTextOdfWriter: unsupported paragraph alignment; " << format.alignment(); if (! value.isNull()) writer.writeAttribute(foNS, QString::fromLatin1("text-align"), value); } if (format.hasProperty(QTextFormat::BlockTopMargin)) writer.writeAttribute(foNS, QString::fromLatin1("margin-top"), pixelToPoint(qMax(qreal(0.), format.topMargin())) ); if (format.hasProperty(QTextFormat::BlockBottomMargin)) writer.writeAttribute(foNS, QString::fromLatin1("margin-bottom"), pixelToPoint(qMax(qreal(0.), format.bottomMargin())) ); if (format.hasProperty(QTextFormat::BlockLeftMargin) || format.hasProperty(QTextFormat::BlockIndent)) writer.writeAttribute(foNS, QString::fromLatin1("margin-left"), pixelToPoint(qMax(qreal(0.), format.leftMargin() + format.indent()))); if (format.hasProperty(QTextFormat::BlockRightMargin)) writer.writeAttribute(foNS, QString::fromLatin1("margin-right"), pixelToPoint(qMax(qreal(0.), format.rightMargin())) ); if (format.hasProperty(QTextFormat::TextIndent)) writer.writeAttribute(foNS, QString::fromLatin1("text-indent"), pixelToPoint(format.textIndent())); if (format.hasProperty(QTextFormat::PageBreakPolicy)) { if (format.pageBreakPolicy() & QTextFormat::PageBreak_AlwaysBefore) writer.writeAttribute(foNS, QString::fromLatin1("break-before"), QString::fromLatin1("page")); if (format.pageBreakPolicy() & QTextFormat::PageBreak_AlwaysAfter) writer.writeAttribute(foNS, QString::fromLatin1("break-after"), QString::fromLatin1("page")); } if (format.hasProperty(QTextFormat::BackgroundBrush)) { QBrush brush = format.background(); writer.writeAttribute(foNS, QString::fromLatin1("background-color"), brush.color().name()); } if (format.hasProperty(QTextFormat::BlockNonBreakableLines)) writer.writeAttribute(foNS, QString::fromLatin1("keep-together"), format.nonBreakableLines() ? QString::fromLatin1("true") : QString::fromLatin1("false")); if (format.hasProperty(QTextFormat::TabPositions)) { QList<QTextOption::Tab> tabs = format.tabPositions(); writer.writeStartElement(styleNS, QString::fromLatin1("tab-stops")); QList<QTextOption::Tab>::Iterator iterator = tabs.begin(); while(iterator != tabs.end()) { writer.writeEmptyElement(styleNS, QString::fromLatin1("tab-stop")); writer.writeAttribute(styleNS, QString::fromLatin1("position"), pixelToPoint(iterator->position) ); QString type; switch(iterator->type) { case QTextOption::DelimiterTab: type = QString::fromLatin1("char"); break; case QTextOption::LeftTab: type = QString::fromLatin1("left"); break; case QTextOption::RightTab: type = QString::fromLatin1("right"); break; case QTextOption::CenterTab: type = QString::fromLatin1("center"); break; } writer.writeAttribute(styleNS, QString::fromLatin1("type"), type); if (iterator->delimiter != 0) writer.writeAttribute(styleNS, QString::fromLatin1("char"), iterator->delimiter); ++iterator; } writer.writeEndElement(); // tab-stops } writer.writeEndElement(); // paragraph-properties writer.writeEndElement(); // style }
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()); }