/* * Copy constructor; creates a copy of this XMLToken. */ XMLToken::XMLToken(const XMLToken& orig) : mTriple() , mAttributes() , mNamespaces() , mChars (orig.mChars) , mIsStart (orig.mIsStart) , mIsEnd (orig.mIsEnd) , mIsText (orig.mIsText) , mLine (orig.mLine) , mColumn (orig.mColumn) { if (!orig.mTriple.isEmpty()) mTriple = XMLTriple(orig.getName(), orig.getURI(), orig.getPrefix()); if (!orig.mAttributes.isEmpty()) mAttributes = XMLAttributes(orig.getAttributes()); if (!orig.mNamespaces.isEmpty()) mNamespaces = XMLNamespaces(orig.getNamespaces()); }
/* * Subclasses should override this method to read (and store) XHTML, * MathML, etc. directly from the XMLInputStream. * * @return true if the subclass read from the stream, false otherwise. */ bool InitialAssignment::readOtherXML (XMLInputStream& stream) { bool read = false; const string& name = stream.peek().getName(); if (name == "math") { // if this is level 1 there shouldnt be any math!!! if (getLevel() == 1) { logError(NotSchemaConformant, getLevel(), getVersion(), "SBML Level 1 does not support MathML."); delete mMath; return false; } if (mMath) { if (getLevel() < 3) { logError(NotSchemaConformant, getLevel(), getVersion(), "Only one <math> element is permitted inside a " "particular containing element."); } else { logError(OneMathElementPerInitialAssign, getLevel(), getVersion()); } } /* check for MathML namespace * this may be explicitly declared here * or implicitly declared on the whole document */ const XMLToken elem = stream.peek(); unsigned int match = 0; int n; if (elem.getNamespaces().getLength() != 0) { for (n = 0; n < elem.getNamespaces().getLength(); n++) { if (!strcmp(elem.getNamespaces().getURI(n).c_str(), "http://www.w3.org/1998/Math/MathML")) { match = 1; break; } } } if (match == 0) { if( mSBML->getNamespaces() != NULL) /* check for implicit declaration */ { for (n = 0; n < mSBML->getNamespaces()->getLength(); n++) { if (!strcmp(mSBML->getNamespaces()->getURI(n).c_str(), "http://www.w3.org/1998/Math/MathML")) { match = 1; break; } } } } if (match == 0) { logError(InvalidMathElement); } delete mMath; mMath = readMathML(stream); if (mMath) mMath->setParentSBMLObject(this); read = true; } return read; }