From 2a1a6ebf46c411350dd1a84b7d65aa20a8b3f840 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Thu, 26 Apr 2012 11:46:03 +0300 Subject: [PATCH] Improved html parser. Transformations adjusted to iwb specification. --- plugins/cffadaptor/src/UBCFFAdaptor.cpp | 56 ++++++++++++++----------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/plugins/cffadaptor/src/UBCFFAdaptor.cpp b/plugins/cffadaptor/src/UBCFFAdaptor.cpp index 2068dd38..ed59738c 100644 --- a/plugins/cffadaptor/src/UBCFFAdaptor.cpp +++ b/plugins/cffadaptor/src/UBCFFAdaptor.cpp @@ -443,7 +443,6 @@ bool UBCFFAdaptor::UBToCFFConverter::parseMetadata() QSize tmpSize = getSVGDimentions(nextInElement.text()); if (!tmpSize.isNull()) { mSVGSize = tmpSize; - mViewbox.setRect(0,0, tmpSize.width(), tmpSize.height()); } else { qDebug() << "can't interpret svg section size"; errorStr = "InterpretSvgSizeError"; @@ -487,6 +486,11 @@ bool UBCFFAdaptor::UBToCFFConverter::parseContent() { } + if (QRect() == mViewbox) + { + mViewbox.setRect(0,0, mSVGSize.width(), mSVGSize.height()); + } + svgDocumentSection.setAttribute(aIWBViewBox, rectToIWBAttr(mViewbox)); svgDocumentSection.setAttribute(aWidth, QString("%1").arg(mViewbox.width())); svgDocumentSection.setAttribute(aHeight, QString("%1").arg(mViewbox.height())); @@ -639,30 +643,29 @@ QDomElement UBCFFAdaptor::UBToCFFConverter::parseSvgPageSection(const QDomElemen void UBCFFAdaptor::UBToCFFConverter::writeQDomElementToXML(const QDomNode &node) { - if (!node.isNull()){ - if (node.isText()) + if (!node.isNull()) + if (node.isText()) + { + mIWBContentWriter->writeCharacters(node.nodeValue()); + } + else + { + mIWBContentWriter->writeStartElement(node.namespaceURI(), node.toElement().tagName()); + + for (int i = 0; i < node.toElement().attributes().count(); i++) { - mIWBContentWriter->writeCharacters(node.nodeValue()); + QDomAttr attr = node.toElement().attributes().item(i).toAttr(); + mIWBContentWriter->writeAttribute(attr.name(), attr.value()); } - else + QDomNode child = node.firstChild(); + while(!child.isNull()) { - mIWBContentWriter->writeStartElement(node.namespaceURI(), node.toElement().tagName()); - - for (int i = 0; i < node.toElement().attributes().count(); i++) - { - QDomAttr attr = node.toElement().attributes().item(i).toAttr(); - mIWBContentWriter->writeAttribute(attr.name(), attr.value()); - } - QDomNode child = node.firstChild(); - while(!child.isNull()) - { - writeQDomElementToXML(child); - child = child.nextSibling(); - } - - mIWBContentWriter->writeEndElement(); + writeQDomElementToXML(child); + child = child.nextSibling(); } - } + + mIWBContentWriter->writeEndElement(); + } } bool UBCFFAdaptor::UBToCFFConverter::writeExtendedIwbSection() @@ -1025,8 +1028,6 @@ void UBCFFAdaptor::UBToCFFConverter::setCoordinatesFromUBZ(const QDomElement &ub item.setRect(0,0, width, height); item.setTransform(tr); - - item.setTransformOriginPoint(item.boundingRect().center()); item.setRotation(-alpha); QMatrix sceneMatrix = item.sceneMatrix(); @@ -1107,6 +1108,9 @@ bool UBCFFAdaptor::UBToCFFConverter::setContentFromUBZ(const QDomElement &ubzEle svgElement.setAttribute(aSVGRequiredExtension, svgRequiredExtensionPrefix+fePng); } } + }else + { + bRet = false; } if (!bRet) @@ -1142,7 +1146,6 @@ void UBCFFAdaptor::UBToCFFConverter::setCFFTextFromHTMLTextNode(const QDomElemen QDomNode spanNode = htmlPNode.firstChild(); - while (!spanNode.isNull()) { if (spanNode.isText()) @@ -1153,7 +1156,10 @@ void UBCFFAdaptor::UBToCFFConverter::setCFFTextFromHTMLTextNode(const QDomElemen else if (spanNode.isElement()) { + QDomElement pElementIwb; QDomElement spanElement = textDoc.createElementNS(svgIWBNS,svgIWBNSPrefix + ":" + tIWBTspan); + setCommonAttributesFromUBZ(htmlPNode.toElement(), pElementIwb, spanElement); + if (spanNode.hasAttributes()) { int attrCount = spanNode.attributes().count(); @@ -1196,6 +1202,8 @@ QString UBCFFAdaptor::UBToCFFConverter::ubzAttrNameToCFFAttrName(QString cffAttr QString sRet = cffAttrName; if (QString("color") == cffAttrName) sRet = QString("fill"); + if (QString("align") == cffAttrName) + sRet = QString("text-align"); return sRet; }