Esempio n. 1
0
/**
 * @brief XmlEditWidgetPrivate::findDomNodeScan find the nearest match to a position
 * @param node
 * @param nodeTarget
 * @param lineSearched
 * @param columnSearched
 * @param lastKnownNode: last known "good" position
 * @return
 */
bool XmlEditWidgetPrivate::findDomNodeScan(QDomNode node, QDomNode nodeTarget, const int lineSearched, const int columnSearched, FindNodeWithLocationInfo &info)
{
    int row = node.lineNumber();
    int col = node.columnNumber();
    if(!node.isDocument()) {
        if((lineSearched == row) && (columnSearched == col)) {
            info.matchedNode = nodeTarget ;
            return true ;
        }

        if((lineSearched == row) && (columnSearched == col)) {
            info.matchedNode = nodeTarget ;
            return true ;
        }
        if((lineSearched == row) && (columnSearched < col)) {
            info.matchedNode = nodeTarget ;
            return true ;
        }
        if((lineSearched < row)) {
            info.matchedNode = nodeTarget ;
            return true ;
        }
        if((lineSearched <= row)) {
            info.lastKnownNode = nodeTarget ;
        }

        if(node.nodeType() == QDomNode::ElementNode) {
            QDomElement element = node.toElement();
            QDomNamedNodeMap attributes = element.attributes();
            int numAttrs = attributes.length();
            for(int i = 0 ; i < numAttrs ; i++) {
                QDomNode node = attributes.item(i);
                QDomAttr attr = node.toAttr();
                if(findDomNodeScan(attr, nodeTarget, lineSearched, columnSearched, info)) {
                    return true;
                }
            } // for
        }
    }

    int nodes = node.childNodes().count();
    for(int i = 0 ; i < nodes ; i ++) {
        QDomNode childNode = node.childNodes().item(i) ;
        if(childNode.isText() || childNode.isCDATASection()) {
            if(findDomNodeScan(childNode, nodeTarget, lineSearched, columnSearched, info)) {
                return true;
            }
        } else {
            if(findDomNodeScan(childNode, childNode, lineSearched, columnSearched, info)) {
                return true ;
            }
        }
    }
    return false ;
}
Esempio n. 2
0
KXMLGUIClient::ActionPropertiesMap KXMLGUIClient::extractActionProperties( const QDomDocument &doc )
{
  ActionPropertiesMap properties;

  QDomElement actionPropElement = doc.documentElement().namedItem( "ActionProperties" ).toElement();

  if ( actionPropElement.isNull() )
    return properties;

  QDomNode n = actionPropElement.firstChild();
  while(!n.isNull())
  {
    QDomElement e = n.toElement();
    n = n.nextSibling(); // Advance now so that we can safely delete e
    if ( e.isNull() )
      continue;

    if ( e.tagName().lower() != "action" )
      continue;

    QString actionName = e.attribute( "name" );

    if ( actionName.isEmpty() )
      continue;

    QMap<QString, QMap<QString, QString> >::Iterator propIt = properties.find( actionName );
    if ( propIt == properties.end() )
      propIt = properties.insert( actionName, QMap<QString, QString>() );

    const QDomNamedNodeMap attributes = e.attributes();
    const uint attributeslength = attributes.length();

    for ( uint i = 0; i < attributeslength; ++i )
    {
      const QDomAttr attr = attributes.item( i ).toAttr();

      if ( attr.isNull() )
        continue;

      const QString name = attr.name();

      if ( name == "name" || name.isEmpty() )
        continue;

      (*propIt)[ name ] = attr.value();
    }

  }

  return properties;
}
Hint *
HintSerializer::createObjectFromDom(const QDomNode &q)
{
    QString myValue;

    /// simple sanity check first...
    if (q.nodeName() != theHintString) {
        DEBUG2("createHintFromDom: expected <%s> but got <%s>", ASCII(theHintString), ASCII(q.nodeName()));
        return nullptr;
    }

    Hint *myHPtr = new Hint();

    // the nodemap contains all the attributes...
    QDomNamedNodeMap myNodeMap = q.attributes();

    for (int i = 0; i < myNodeMap.length(); i++) {
        QString myAName  = myNodeMap.item(i).nodeName();
        QString myAValue = myNodeMap.item(i).nodeValue();
        DEBUG5("  hint attribute: name %s", ASCII(myAName));
        DEBUG5("  hint attribute: value %s", ASCII(myAValue));

        if (theNumberString == myAName) {
            myHPtr->theHintIndex = myAValue.toInt();
            continue;
        }
        if (theObjectString == myAName) {
            myHPtr->theObjectName = myAValue;
            continue;
        }
        myHPtr->theParams.setProperty(myAName, myAValue);
    }

    // sanity checks:
    if (myHPtr->theHintIndex == 0 || myHPtr->theObjectName == "-") {
        DEBUG2("Hint parsing failed: mandatory field(s) missing");
        goto not_good;
    }
    if (myHPtr->theParams.getPropertyCount() == 0) {
        DEBUG2("Hint parsing failed: no parameter fields, that's just wrong");
        goto not_good;
    }

    DEBUG4("createHintFromDom %d for '%s' successful", myHPtr->theHintIndex,
           ASCII(myHPtr->theObjectName));
    return myHPtr;
not_good:
    delete myHPtr;
    return nullptr;
}
Esempio n. 4
0
void XMLParser::parseNode(IEntity *entity,QDomNode *node)
{
    while(!node->isNull())
    {
        QString namesp;
        QString name;
        IEntity *auxent = NULL;
        QDomElement child = node->toElement();
        if(!child.isNull())
        {
#ifdef PARSER_DEBUG
            qDebug() << child.tagName();
#endif
            splitNode(child.tagName(),namesp,name);
            if(name.isEmpty())
                throw new XMLParserException("Unable to parse node\n");
            auxent = new IEntity(namesp,name);
        }
        if(node->hasAttributes())
        {
            QDomNamedNodeMap attributes = node->attributes();
            for(unsigned int i=0; i<=attributes.length(); i++)
            {
                QDomNode n = attributes.item(i);
                if(n.isAttr())
                {
#ifdef PARSER_DEBUG
                    qDebug() << n.toAttr().name()<< "=" << n.toAttr().value();
#endif
                    QString attnamesp;
                    QString attname;
                    splitNode(n.toAttr().name(),attnamesp,attname);
                    //TODO: add attribute with namespace
                    auxent->addAttribute(attname,n.toAttr().value());
                }
            }
        }
        if(node->isText())
        {
#ifdef PARSER_DEBUG
            qDebug() << node->toText().data();
#endif
            entity->addValue(node->toText().data());
        } else
            entity->addEntity(auxent);
        if (node->hasChildNodes())
            parseNode(auxent,&node->firstChild());
        node = &(node->nextSibling());
    }
}
/**
 * Returns all attributes of this element.
 * @return
 *      The attributes.
 */
QList<ScriptXmlAttribute*> ScriptXmlElement::attributes()
{
    QDomNamedNodeMap attributes = m_node.attributes();
    QList<ScriptXmlAttribute*> result;

    for(qint32 i = 0; i < attributes.length(); i++)
    {
        QDomNode node = attributes.item(i);
        ScriptXmlAttribute* newAttr = new ScriptXmlAttribute(node.nodeName(), node.nodeValue());
        engine()->newQObject(newAttr, QScriptEngine::ScriptOwnership);
        result.append(newAttr);
    }

    return result;
}
Esempio n. 6
0
/**
  * Returns the address attribute of a module.
  */
int ConfigParser::getModAdrFromTag(QDomNamedNodeMap map)
	{
	for(uint j = 1; j <= map.length();j++)
		{
		if(map.item(j-1).isAttr())
			{
			QDomAttr attr = map.item(j-1).toAttr();
			if(attr.name() == MODULE_ATTR_MOD_ADR)
				{
				return attr.value().toInt();
				}
			}
		}
	return -1;
	}
Esempio n. 7
0
/**
 * This method is designed to parse the object config file
 * and to initialize the required objects in the UIObjectHandler
 */
bool ConfigParser::buildObjects(const QString object_cfgv)
    {
    this->getNodeList(object_cfgv,OBJECT_CFG_TAG);
    /*if at least 1 tag was found proceed otherwise return false*/
    if(!this->temp_node_list->count() > 0)
		{
        this->core->configLogError(QString(MISSING_OBJ_TAG));
		return false;
		}
    /*iterate through the dom nodes*/
    for(int i = 0;i <this->temp_node_list->count();i++)
		{
		QDomNode node = this->temp_node_list->item(i);
		QDomNamedNodeMap map = node.attributes();
		/*iterate through the attributes*/
		for(uint i = 1; i <= map.length();i++)
			{
			if(map.item(i-1).isAttr())
				{
				QDomAttr attr = map.item(i-1).toAttr();
				/* handle the different object types */
				if(attr.name() == OBJECT_CFG_TYPE_ATTR)
					{
					if(attr.value() == OBJECT_TYPE_SCREEN)
						{
						ScreenObject* temp_screen = new ScreenObject();
						temp_screen->buildScreenObject(this,map);
						this->screen_list_ref->append(temp_screen);
						this->core->configLogInfo(this->screen_list_ref->last()->getObjLogEntry());
						}
					else if(attr.value() == OBJECT_TYPE_BUTTON_C)
						{
						ButtonCObject *temp_buttonc = new ButtonCObject();
						temp_buttonc->buildButtonCObject(this,map);
						this->buttonc_list_ref->append(temp_buttonc);
						this->core->configLogInfo(this->buttonc_list_ref->last()->getObjLogEntry());
						}
					else
						{
						this->core->configLogWarning(QString(UNHA_OBJ_TYPE_MSG).replace("#_1",attr.value())+"in "+object_cfgv+" on line "+QString::number(node.lineNumber()));
						}
					}
				}
			}
		}
    return true;
    }
Esempio n. 8
0
/**
 * Check that the node map doesn't contain any unknown elements
 * @param attrs node map to check
 * @param names list of known names
 * @return false if node map contains unknown elements
 */
bool isKnown(const QDomNamedNodeMap& attrs, const char **names) {
	bool ok=true;
	for(int i=0;i<attrs.length();++i) {
		QDomNode n = attrs.item(i);
		const char **name = names;
		bool found=false;
		while(!found && *name!=0) {
			found = n.nodeName() == *name;
			++name;
		}
		if(!found) {
			qWarning() << "Unknown attribute" << n.nodeName();
			ok=false;
		}
	}
	return ok;
}
Esempio n. 9
0
void PdfElement::setAttributes(const QDomNamedNodeMap attr, const QString cdata) {
	_attributes.clear();
	if (cdata != NULL && !cdata.isEmpty()) {
		extractExpressions(const_cast<QString*>(&cdata));
		_attributes.insert("cdata", cdata);
	}
	QString val;
	for (uint i = 0; i < attr.length(); i++) {
		QDomAttr a = attr.item(i).toAttr();
		if (!a.isNull()) {
			if (a.name().toLower() == "nth") {
				_onlyOnLast = a.value().toLower() == "last";
				_onlyOnFirst = a.value().toLower() == "first";
				_onlyOnNth = _onlyOnLast || _onlyOnFirst ? 1 : a.value().toInt();
			}
			val = a.value();
			extractExpressions(const_cast<QString*>(&val));
			_attributes.insert(a.name().toLower(), val);
		}
	}
}
Esempio n. 10
0
/**
 * This method is used to load element properties that are stored in plugins
 * @param element The Element being loaded
 * @param elProperties the xml properties of the element
 */
void CMapFileFilterXML::loadPluginPropertiesForElement(CMapElement *element,QDomElement *elProperties)
{
	QDomElement pluginsNode = readChildElement(elProperties,"plugins");
	if (!pluginsNode.isNull())
	{
		QDomNode n = pluginsNode.firstChild();
		while (!n.isNull() )
		{

			QDomElement e = n.toElement();

			if (!e.isNull() )
			{
				for (CMapPluginBase *plugin = m_mapManager->getPluginList()->first(); plugin!=0; plugin = m_mapManager->getPluginList()->next())
				{
					if (plugin->name()==e.tagName())
					{
						KMemConfig pluginProperties;

						QDomNamedNodeMap attribs = e.attributes();

						for (int i=0; i<attribs.length();i++)
						{
							QDomNode n2 = attribs.item(i);

							kDebug() << "Attrib " << n2.nodeName() << " = " << n2.nodeValue();
							pluginProperties.group("Properties").writeEntry(n2.nodeName(),n2.nodeValue());
							
						}
						
						plugin->loadElementProperties(element,&pluginProperties);
						break;	
					}
                }
			}

			n = n.nextSibling();
		}
	}
}
Esempio n. 11
0
/**** BEE ****/
FileList BEE::readSigset(const File &sigset, bool ignoreMetadata)
{
    FileList fileList;

#ifndef BR_EMBEDDED
    QDomDocument doc(sigset.fileName());
    QFile file(sigset.resolved());
    bool success;
    success = file.open(QIODevice::ReadOnly); if (!success) qFatal("Unable to open %s for reading.", qPrintable(sigset));
    success = doc.setContent(&file);

    file.close();

    if (!success) {
        qWarning("Unable to parse %s.", qPrintable(sigset));
        return fileList;
    }

    QDomElement docElem = doc.documentElement();
    if (docElem.nodeName() != "biometric-signature-set")
        return fileList;

    QDomNode subject = docElem.firstChild();
    while (!subject.isNull()) {
        // Looping through subjects
        QDomNode fileNode = subject.firstChild();
        QDomElement d = subject.toElement();
        QString name = d.attribute("name");
        while (!fileNode.isNull()) {
            // Looping through files
            File file("", name);

            QDomElement e = fileNode.toElement();
            QDomNamedNodeMap attributes = e.attributes();
            for (int i=0; i<attributes.length(); i++) {
                const QString key = attributes.item(i).nodeName();
                const QString value = attributes.item(i).nodeValue();
                if      (key == "file-name") file.name = value;
                else if (!ignoreMetadata)    file.set(key, value);
            }

            // add bounding boxes, if they exist (will be child elements of <presentation>)
            if (fileNode.hasChildNodes()) {
                QList<QRectF> rects;
                QDomNodeList bboxes = fileNode.childNodes();
                for (int i=0; i<bboxes.length(); i++) {
                    QDomElement bbox = bboxes.at(i).toElement();
                    qreal x = bbox.attribute("x").toDouble();
                    qreal y = bbox.attribute("y").toDouble();
                    qreal width = bbox.attribute("width").toDouble();
                    qreal height = bbox.attribute("height").toDouble();
                    rects += QRectF(x, y, width, height);
                }
                file.setRects(rects);
            }

            if (file.name.isEmpty()) qFatal("Missing file-name in %s.", qPrintable(sigset));
            fileList.append(file);

            fileNode = fileNode.nextSibling();
        }
        subject = subject.nextSibling();
    }
#else // BR_EMBEDDED
    (void) sigset;
    (void) ignoreMetadata;
#endif // BR_EMBEDDED

    return fileList;
}
Esempio n. 12
0
/**
  * Parser method for the layout module configurations.
  * Modules are used to define event handling between objects.
  * A module can consist of several seqeuences.
  * In order to ensure that behavior module attributes has to
  * be append to an existing module with the same adr information.
  * If there is no module existing with the current adr a new one will
  * be created and append to the module list.
  *
  */
bool ConfigParser::buildModuleConfig(const QString mod_cfgv)
	{
    this->module_list_ref->clear();
	this->getNodeList(mod_cfgv,MODULE_CFG_TAG);
	if(!this->temp_node_list->count() > 0)
		{
        this->core->configLogError(QString(MISSING_OBJ_TAG));
		return false;
		}

	/*each module*/
	for(int i = 0;i <this->temp_node_list->count();i++)
		{
		Module *temp_module;
		QDomNode node = this->temp_node_list->item(i);
		QDomNamedNodeMap map = node.attributes();
		int index = 0;
		bool new_mod = false;
		/*get the adr of the module*/
		int adr = this->getModAdrFromTag(map);
		/*search for a module with this adr in the module reference list*/
		index = this->getModIndexByAdr(adr, this->module_list_ref);
		/*if no module was found*/
		if( index < 0 )
			{
			new_mod = true;
			temp_module = new Module();
			}
		/*iterate through the attributes*/
		for(uint j = 1; j <= map.length();j++)
			{
			if(map.item(j-1).isAttr())
				{
				QDomAttr attr = map.item(j-1).toAttr();
				if(attr.name() == MODULE_ATTR_MOD_ADR)
					{
					if(new_mod)
						temp_module->setModAdr(attr.value().toInt());
					}
				else if(attr.name() == MODULE_ATTR_SEQ)
					{
					if(new_mod)
						temp_module->addModSeq(attr.value().toInt());
					else
						this->module_list_ref->at(index)->addModSeq(attr.value().toInt());
					}
				else if(attr.name() == MODULE_ATTR_SOURCE)
					{
					if(new_mod)
						temp_module->addModSource(attr.value().toInt());
					else
						this->module_list_ref->at(index)->addModSource(attr.value().toInt());
					}
				else if(attr.name() == MODULE_ATTR_EVENT_IN)
					{
					if(new_mod)
						temp_module->addModEventIn(attr.value());
					else
						this->module_list_ref->at(index)->addModEventIn(attr.value());
					}
				else if(attr.name() == MODULE_ATTR_EVENT_OUT)
					{
					if(new_mod)
						temp_module->addModEventOut(attr.value());
					else
						this->module_list_ref->at(index)->addModEventOut(attr.value());
					}
				else if(attr.name() == MODULE_ATTR_TARGET)
					{
					if(new_mod)
						temp_module->addModTarget(attr.value().toInt());
					else
						this->module_list_ref->at(index)->addModTarget(attr.value().toInt());
					}
				else
					this->core->configLogWarning(QString(UNHA_ATT_MSG).replace("#_1",attr.name()).replace("#_2",MODULE_CFG_TAG));
				}
			}
		if(new_mod)
			this->module_list_ref->append(temp_module);
		}
	for(int i = 0; i < this->module_list_ref->count(); i++)
		{
		this->core->configLogInfo(this->module_list_ref->at(i)->getModLogEntry());
		}
    return true;
	}