23 #include "kmarkupdirector.h"
24 #include "kmarkupdirector_p.h"
29 #include <QTextDocument>
30 #include <QTextDocumentFragment>
36 #include <QTextCursor>
37 #include <QTextCharFormat>
42 #include "kabstractmarkupbuilder.h"
57 for (QTextFrame::iterator it = start; ((!it.atEnd()) && (it != end)); ++it) {
58 QTextFrame *frame = it.currentFrame();
60 QTextTable *table =
dynamic_cast<QTextTable*
>(frame);
79 if (block.isValid()) {
80 QTextList *list = block.textList();
84 if ((list->item(0) == block) && (!block.previous().textList())) {
95 QTextTableFormat format = table->format();
96 QVector<QTextLength> colLengths = format.columnWidthConstraints();
98 QTextLength tableWidth = format.width();
101 if (tableWidth.type() == QTextLength::PercentageLength) {
103 sWidth = sWidth.arg(tableWidth.rawValue());
104 }
else if (tableWidth.type() == QTextLength::FixedLength) {
106 sWidth = sWidth.arg(tableWidth.rawValue());
109 d->builder->beginTable(format.cellPadding(), format.cellSpacing(), sWidth);
111 int headerRowCount = format.headerRowCount();
113 QList<QTextTableCell> alreadyProcessedCells;
115 for (
int row = 0; row < table->rows(); ++row) {
122 d->builder->beginTableRow();
128 for (
int column = 0; column < table->columns(); ++column) {
130 QTextTableCell tableCell = table->cellAt(row, column);
132 int columnSpan = tableCell.columnSpan();
133 int rowSpan = tableCell.rowSpan();
134 if ((rowSpan > 1) || (columnSpan > 1)) {
135 if (alreadyProcessedCells.contains(tableCell)) {
139 alreadyProcessedCells.append(tableCell);
143 QTextLength cellWidth = colLengths.at(column);
147 if (cellWidth.type() == QTextLength::PercentageLength) {
149 sCellWidth = sCellWidth.arg(cellWidth.rawValue());
150 }
else if (cellWidth.type() == QTextLength::FixedLength) {
152 sCellWidth = sCellWidth.arg(cellWidth.rawValue());
156 if (row < headerRowCount) {
157 d->builder->beginTableHeaderCell(sCellWidth, columnSpan, rowSpan);
159 d->builder->beginTableCell(sCellWidth, columnSpan, rowSpan);
164 if (row < headerRowCount) {
165 d->builder->endTableHeaderCell();
167 d->builder->endTableCell();
170 d->builder->endTableRow();
172 d->builder->endTable();
182 QTextBlock block(ablock);
184 QTextList *list = block.textList();
189 QList<QTextList*> lists;
191 while (block.isValid() && block.textList()) {
192 if (list->item(0) == block) {
194 QTextListFormat::Style style = list->format().style();
195 d->builder->beginList(style);
200 d->builder->beginListItem();
202 d->builder->endListItem();
204 block = block.next();
206 if (block.isValid()) {
207 QTextList *newList = block.textList();
210 while (!lists.isEmpty()) {
212 d->builder->endList();
214 }
else if (newList == list) {
217 }
else if (newList != list) {
218 if (newList->item(0) == block) {
222 while (!lists.isEmpty()) {
223 if (block.textList() != lists.last()) {
225 d->builder->endList();
236 while (!lists.isEmpty()) {
238 d->builder->endList();
246 QTextBlockFormat blockFormat = block.blockFormat();
247 Qt::Alignment blockAlignment = blockFormat.alignment();
251 if (blockFormat.hasProperty(QTextFormat::BlockTrailingHorizontalRulerWidth)) {
252 d->builder->insertHorizontalRule();
256 QTextBlock::iterator it;
263 d->builder->addNewline();
267 QTextFragment fragment = it.fragment();
271 if (fragment.isValid()) {
272 QTextCharFormat fragmentFormat = fragment.charFormat();
274 if (!fragmentFormat.isImageFormat() && fragment.text().at(0).category() == QChar::Separator_Line) {
277 foreach(
const QChar &c, fragment.text()) {
279 if (c.category() == QChar::Separator_Line) {
280 d->builder->addNewline();
288 if (!block.textList())
292 d->builder->beginParagraph(blockAlignment
299 while (!it.atEnd()) {
300 fragment = it.fragment();
301 if (fragment.isValid()) {
302 QTextCharFormat fragmentFormat = fragment.charFormat();
304 if (fragmentFormat.isImageFormat()) {
306 QTextImageFormat imageFormat = fragmentFormat.toImageFormat();
307 d->builder->insertImage(imageFormat.name(), imageFormat.width(), imageFormat.height());
333 d->processOpeningElements(it);
337 QStringList sl = fragment.text().split(QChar( QChar::LineSeparator ) );
338 QStringListIterator i(sl);
339 bool paraClosed =
false;
342 d->builder->appendLiteralText(i.next());
345 if (i.peekNext().isEmpty())
349 d->builder->endParagraph();
352 d->builder->addNewline();
353 }
else if (paraClosed) {
354 d->builder->beginParagraph(blockAlignment);
361 d->processClosingElements(it);
367 if (!block.textList())
369 d->builder->endParagraph();
376 QTextFrame *rootFrame = doc->rootFrame();