Ejemplo n.º 1
0
void Fidelity::Engine::SimulationXmlReader::readFSX()
{
	while(!atEnd()) {
		readNext();

		if(isEndElement()) {
			break;
		}

		// Evaluate child tags
		if(isStartElement()) {
			// We expect these children for the root tag
			if (name() == "description") {
				readDescription();
			}
			else if (name() == "globals") {
				readGlobals();
			}
			else if (name() == "engine") {
				readEngine();
			}
			else if (name() == "plugins") {
				readPlugins();
			}
			else if (name() == "setup") {
				readSetup();
			}
			else {
				unknownElement();
			}
		}
	}
}
Ejemplo n.º 2
0
void Fidelity::Engine::SimulationXmlReader::readGlobals()
{
	while(!atEnd()) {
		readNext();

		// Stop here if globals tag completed
		if(isEndElement() && name() == "globals") {
			break;
		}

		// Evaluate child tags
		if (isStartElement()) {
			// We expect parameter tags only
			if (name() == "parameter") {
				SimulationXmlParameter parameter = readParameter();
				if(m_ContinueParsing) {
					// Propagate parameter
					emit globalParameterFound(parameter);
				}
			}
			else {
				unknownElement();
			}
		}
	}
}
Ejemplo n.º 3
0
void Fidelity::Engine::SimulationXmlReader::readComponent()
{
	SimulationXmlComponent component;

	// Get component attributes
	component.setIdentifier(attributes().value("identifier").toString());
	component.setLabel(attributes().value("label").toString());
	component.setWorkbenchXPos(attributes().value("workbenchX").toString());
	component.setWorkbenchYPos(attributes().value("workbenchY").toString());
	component.setRotation(attributes().value("rotation").toString());
	component.setUuid(attributes().value("uuid").toString());
	
	while(!atEnd()) {
		readNext();

		// Stop here if component tag completed
		if(isEndElement() && name() == "component") {
			break;
		}

		// Evaluate child tags
		if (isStartElement()) {
			// We expect parameter tags only
			if (name() == "parameter") {
				// Add parameter to list
				component.Parameters()->append(readParameter());
			}
			else {
				unknownElement();
			}
		}
	}

	// Validate identifier
	if(component.Identifier().isEmpty()) {
		unknownElement();
	}
	// Validate UUID
	else if(component.Uuid().isEmpty()) {
		unknownElement();
	}
	else if(m_ContinueParsing) {
		// Everything's fine -> propagate component
		emit componentFound(component);
	}
}
Ejemplo n.º 4
0
SimulationXmlParameter Fidelity::Engine::SimulationXmlReader::readParameter()
{
	SimulationXmlParameter parameter;

	// Get parameter attributes
	parameter.setIdentifier(attributes().value("identifier").toString());
	parameter.setUnit(attributes().value("unit").toString());
	parameter.setDataType(attributes().value("datatype").toString());
	parameter.setValue(readElementText());

	// Validate identifier
	if(parameter.Identifier().isEmpty()) {
		unknownElement();
	}
	else if(parameter.DataType().isEmpty()) {
		unknownElement();
	}

	return(parameter);
}
Ejemplo n.º 5
0
void Fidelity::Engine::SimulationXmlReader::readEngine()
{
	SimulationXmlEngine engine;

	// Get engine attributes
	engine.setIdentifier(attributes().value("identifier").toString());

	while(!atEnd()) {
		readNext();

		// Stop here if engine tag completed
		if(isEndElement() && name() == "engine") {
			break;
		}

		// Evaluate child tags
		if (isStartElement()) {
			// We expect parameter tags only
			if (name() == "parameter") {
				// Add parameter to list
				engine.Parameters()->append(readParameter());
			}
			else {
				unknownElement();
			}
		}
	}

	// Validate identifier
	if(engine.Identifier().isEmpty()) {
		unknownElement();
	}
	else if(m_ContinueParsing) {
		// Everything's fine -> propagate engine
		emit engineFound(engine);
	}
}
Ejemplo n.º 6
0
void Fidelity::Engine::SimulationXmlReader::readSetup()
{
	while(!atEnd()) {
		readNext();

		// Stop here if setup tag completed
		if(isEndElement() && name() == "setup") {
			break;
		}

		// Evaluate child tags
		if (isStartElement()) {
			// We expect link tags only
			if (name() == "link") {
				readLink();
			}
			else {
				unknownElement();
			}
		}
	}
}
Ejemplo n.º 7
0
void Fidelity::Engine::SimulationXmlReader::readComponents()
{
	while(!atEnd()) {
		readNext();

		// Stop here if components tag completed
		if(isEndElement() && name() == "components") {
			break;
		}

		// Evaluate child tags
		if (isStartElement()) {
			// We expect component tags only
			if (name() == "component") {
				readComponent();
			}
			else {
				unknownElement();
			}
		}
	}
}
Ejemplo n.º 8
0
void Fidelity::Engine::SimulationXmlReader::readLink()
{
	SimulationXmlLink link;

	// Get link attributes
	link.setType(attributes().value("nodeType").toString());
	link.setDirectionality(attributes().value("directionality").toString());

	// Workflow control flags
	bool node1Done = false;
	bool linkComplete = false;

	while(!atEnd()) {
		readNext();

		// Stop here if link tag completed
		if(isEndElement() && name() == "link") {
			break;
		}

		// Evaluate child tags
		if (isStartElement()) {
			// We expect (exactly two) component tags only
			if (name() == "component" && !linkComplete) {
				if(node1Done) {
					// Read second component
					link.setNode2Name(attributes().value("nodeName").toString());
					link.setNode2Role(attributes().value("role").toString());
					link.setNode2ComponentUuid(attributes().value("uuid").toString());
					linkComplete = true;
				}
				else {
					// Read first component
					link.setNode1Name(attributes().value("nodeName").toString());
					link.setNode1Role(attributes().value("role").toString());
					link.setNode1ComponentUuid(attributes().value("uuid").toString());
					node1Done = true;
				}
			}
			else {
				unknownElement();
			}
		}
	}

	// Processing done
	if(linkComplete) {
		// Validate node type
		if(link.Type() != "beam" && link.Type() != "control") {
			unknownElement();
		}
		// Validate directionality
		else if(link.Directionality() != "unidirectional" && link.Directionality() != "bidirectional") {
			unknownElement();
		}
		// Validate unidirectional XOR constellations
		else if(link.Directionality() == "unidirectional" && !
		      ((link.Node1Role() == "source" && link.Node2Role() == "destination") ||
		       (link.Node2Role() == "source" && link.Node1Role() == "destination"))) {

			unknownElement();
		}
		else if(m_ContinueParsing){
			// Everything's fine -> propagate link
			emit linkFound(link);
		}
	}
	else {
		unknownElement();
	}
}
Ejemplo n.º 9
0
bool kvoctrainDoc::parseBody_e (XmlElement elem, XmlReader& xml)
{
  grade_t       grade,
                r_grade;
  int           qcount,
                r_qcount;
  int           bcount,
                r_bcount;
  QString       remark;
  QString       pronunce;
  time_t        qdate,
                r_qdate;
  bool          inquery;
  bool          active;
  QString       lang;
  QString       textstr;
  QString       exprtype;
  bool          org_found = false;
  QString       q_org,
                q_trans;
  QString       query_id;
  kvoctrainExpr expr;
  int           lesson;
  int           width;
  QString       type;
  QString       faux_ami_f;
  QString       faux_ami_t;
  QString       synonym;
  QString       example;
  QString       antonym;
  QString       usage;
  QString       paraphrase;
  vector<Conjugation> conjug;
  Comparison     comparison;
  MultipleChoice mc;

  if (!extract_KVT_E_attr (xml, elem, lesson, inquery, active, exprtype))
    return false;

  if (lesson
      && lesson > (int) lesson_descr.size() ) { // description missing ?
    QString s;
    for (int i = lesson_descr.size(); i < lesson; i++) {
      s.setNum (i+1);
      s.insert (0, "#");  // invent descr according to number
      lesson_descr.push_back (s);
    }
  }

  if (! xml.readElement (elem) ) {
    errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
    return false;
  }

  if (elem.tag() == KV_EXPR && !elem.isEndTag() ) {
    errorKvtMl (xml.lineNumber(),
                i18n("disallowed occurrence of tag <%1>").arg(elem.tag()));
    return false;
  }

  unsigned int count = 0;
  org_found = false;
  while (elem.tag() != KV_EXPR) {

    // now want "original" and one or more "translations"

    // found original <o>

    if (elem.tag() == KV_ORG && !elem.isEndTag() ) {
      if (org_found) {
        errorKvtMl (xml.lineNumber(),
                    i18n("repeated occurrence of tag <%1>").arg(elem.tag()));
        return false;
      }
      org_found = true;

      type = exprtype;
      if (!extract_O_T_attr (
                        xml,
                        elem,
                        lang,
                        grade,  r_grade,
                        qcount, r_qcount,
                        qdate,  r_qdate,
                        remark,
                        bcount, r_bcount,
                        query_id,
                        pronunce,
                        width,
                        type,
                        faux_ami_t,
                        faux_ami_f,
                        synonym,
                        example,
                        antonym,
                        usage,
                        paraphrase))
        return false;


      if (vocabulary.size() == 0) {  // only accept in first entry
        if (width >= 0)
          setSizeHint (count, width);

        if (query_id == KV_O)
          q_org = lang;

        if (query_id == KV_T)
          q_trans = lang;
      }

      if (langs.size() == 0) {          // first entry
        if (lang.isEmpty())                 // no definition in first entry
          lang = "original";
        langs.push_back(lang);

      }
      else {
        if (lang != langs[0] && !lang.isEmpty()) {  // different originals ?
          errorKvtMl (xml.lineNumber(),
                      i18n("ambiguous definition of language code"));
          return false;
        }
      }
      count = 0;

//========================================
// FIXME:: make loop for this

      if (! xml.readElement (elem) ) {
        errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
        return false;
      }

      if (elem.tag () == KV_CONJUG_GRP && !elem.isEndTag() ) {
        if (!loadConjugKvtMl (conjug, (QString) KV_CON_TYPE, elem, xml))
          return false;

        if (! xml.readElement (elem) ) {
          errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
          return false;
        }
      }

      comparison.clear();
      if (elem.tag () == KV_COMPARISON_GRP && !elem.isEndTag() ) {
        if (!loadComparison (comparison, elem, xml))
          return false;

        if (! xml.readElement (elem) ) {
          errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
          return false;
        }
      }

      mc.clear();
      if (elem.tag () == KV_MULTIPLECHOICE_GRP && !elem.isEndTag() ) {
        if (!loadMultipleChoice (mc, elem, xml))
          return false;

        if (! xml.readElement (elem) ) {
          errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
          return false;
        }
      }

      if (elem.tag() == "#PCDATA") { // element data
        textstr = xml.getText();
        if (! xml.readElement (elem) ) {
          errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
          return false;
        }

        if (elem.tag() != KV_ORG || !elem.isEndTag() ) {
          errorKvtMl (xml.lineNumber(),
                      i18n("expected ending tag <%1>").arg(KV_ORG));
          return false;
        }
      }
      else {
        if (elem.tag() != KV_ORG || !elem.isEndTag() ) {
          errorKvtMl (xml.lineNumber(),
                      i18n("expected ending tag <%1>").arg(KV_ORG));
          return false;
        }
        textstr = "";
      }

//========================================

      expr = kvoctrainExpr (textstr);
      expr.setLesson (lesson);
      expr.setInQuery(inquery);
      expr.setActive(active);

      if (conjug.size() > 0) {
        expr.setConjugation(0, conjug[0]);
        conjug.clear();
      }
      if (!comparison.isEmpty()) {
        expr.setComparison(0, comparison);
        comparison.clear();
      }
      if (!mc.isEmpty()) {
        expr.setMultipleChoice(0, mc);
        mc.clear();
      }
      if (!remark.isEmpty() )
        expr.setRemark (0, remark);
      if (!pronunce.isEmpty() )
        expr.setPronunce (0, pronunce);
      if (!type.isEmpty() )
        expr.setType(0, type);
      if (!synonym.isEmpty() )
        expr.setSynonym(0, synonym);
      if (!example.isEmpty() )
        expr.setExample(0, example);
      if (!usage.isEmpty() )
        expr.setUsageLabel(0, usage);
      if (!paraphrase.isEmpty() )
        expr.setParaphrase(0, paraphrase);
      if (!antonym.isEmpty() )
        expr.setAntonym(0, antonym);
    }

    // found translation <t>

    else if (elem.tag() == KV_TRANS && !elem.isEndTag() ) {
      if (!org_found) {   // must be preceded by "original"
        errorKvtMl (xml.lineNumber(),
                    i18n("starting tag <%1> is missing").arg(KV_ORG));
        return false;
      }

      count++;
      type = exprtype;
      if (!extract_O_T_attr (
                        xml,
                        elem,
                        lang,
                        grade,  r_grade,
                        qcount, r_qcount,
                        qdate,  r_qdate,
                        remark,
                        bcount, r_bcount,
                        query_id,
                        pronunce,
                        width,
                        type,
                        faux_ami_f,
                        faux_ami_t,
                        synonym,
                        example,
                        antonym,
                        usage,
                        paraphrase))
       return false;

      if (vocabulary.size() == 0) {  // only accept in first entry
        if (width >= 0)
          setSizeHint (count, width);

        if (query_id == KV_O)
          q_org = lang;

        if (query_id == KV_T)
          q_trans = lang;

      }

      if (langs.size() <= count) {      // new translation
        if (lang.isEmpty()) {               // no definition in first entry ?
          lang.setNum (langs.size() );
          lang.insert (0, "translation ");
        }
        langs.push_back(lang);

      }
      else {
        if (lang != langs[count] && !lang.isEmpty()) { // different language ?
          errorKvtMl (xml.lineNumber(),
                      i18n("ambiguous definition of language code"));
          return false;
        }
      }

//========================================
// FIXME:: make loop for this

      if (! xml.readElement (elem) ) {
        errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
        return false;
      }

      if (elem.tag () == KV_CONJUG_GRP && !elem.isEndTag() ) {
        if (!loadConjugKvtMl (conjug, (QString) KV_CON_TYPE, elem, xml))
          return false;

        if (! xml.readElement (elem) ) {
          errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
          return false;
        }
      }

      comparison.clear();
      if (elem.tag () == KV_COMPARISON_GRP && !elem.isEndTag() ) {
        if (!loadComparison (comparison, elem, xml))
          return false;

        if (! xml.readElement (elem) ) {
          errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
          return false;
        }
      }

      mc.clear();
      if (elem.tag () == KV_MULTIPLECHOICE_GRP && !elem.isEndTag() ) {
        if (!loadMultipleChoice (mc, elem, xml))
          return false;

        if (! xml.readElement (elem) ) {
          errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
          return false;
        }
      }

      textstr = "";
      if (elem.tag() == "#PCDATA") { // element data
        textstr = xml.getText();

        if (! xml.readElement (elem) ) {
          errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
          return false;
        }

        if (elem.tag() != KV_TRANS || !elem.isEndTag() ) {
          errorKvtMl (xml.lineNumber(),
                      i18n("expected ending tag <%1>").arg(KV_TRANS));
          return false;
        }
        // expr ...
      }
      else {
        if (elem.tag() != KV_TRANS || !elem.isEndTag() ) {
          errorKvtMl (xml.lineNumber(),
                      i18n("expected ending tag <%1>").arg(KV_TRANS));
          return false;
        }
        textstr = "";
      }

//========================================

      if (!org_found) {
        errorKvtMl (xml.lineNumber(),
                    i18n("starting tag <%1> is missing").arg(KV_ORG));
        return false;
      }
/*
      if (qcount == 0) {
        grade = KV_NORM_GRADE;
      }

      if (r_qcount == 0) {
        r_grade = KV_NORM_GRADE;
      }
*/
      expr.addTranslation (textstr, grade, r_grade);
      expr.setQueryCount  (count, qcount, false);
      expr.setQueryCount  (count, r_qcount, true);
      expr.setBadCount    (count, bcount, false);
      expr.setBadCount    (count, r_bcount, true);
      expr.setQueryDate   (count, qdate, false);
      expr.setQueryDate   (count, r_qdate, true);

      if (conjug.size() > 0) {
        expr.setConjugation(count, conjug[0]);
        conjug.clear();
      }
      if (!comparison.isEmpty()) {
        expr.setComparison(count, comparison);
        comparison.clear();
      }
      if (!mc.isEmpty()) {
        expr.setMultipleChoice(count, mc);
        mc.clear();
      }
      if (!type.isEmpty() )
        expr.setType (count, type);
      if (!remark.isEmpty() )
        expr.setRemark (count, remark);
      if (!pronunce.isEmpty() )
        expr.setPronunce (count, pronunce);
      if (!faux_ami_f.isEmpty() )
        expr.setFauxAmi (count, faux_ami_f, false);
      if (!faux_ami_t.isEmpty() )
        expr.setFauxAmi (count, faux_ami_t, true);
      if (!synonym.isEmpty() )
        expr.setSynonym (count, synonym);
      if (!example.isEmpty() )
        expr.setExample (count, example);
      if (!usage.isEmpty() )
        expr.setUsageLabel (count, usage);
      if (!paraphrase.isEmpty() )
        expr.setParaphrase (count, paraphrase);
      if (!antonym.isEmpty() )
        expr.setAntonym (count, antonym);
    }
    else {
      if (elem.isEndTag() ) {
        errorKvtMl (xml.lineNumber(),
                    i18n("unexpected ending tag <%1>" ).arg(elem.tag()));
        return false;
      }
      else {
        unknownElement (xml.lineNumber(), elem.tag());
        return false;
      }
    }

    if (! xml.readElement (elem) ) {
      errorKvtMl (xml.lineNumber(), i18n("I/O failure") );
      return false;
    }
  }
  if (numEntries() == 0)
    setQueryLang (q_org, q_trans);
  vocabulary.push_back (expr);

  return true;
}