83 #define START_ELEMENT -1
84 #define UNKNOWN_ELEMENT -2
86 #ifdef COPASI_TEMPLATE
87 CCopasiXMLParser::TEMPLATEElement::TEMPLATEElement(
CCopasiXMLParser & parser,
92 CCopasiXMLParser::TEMPLATEElement::~TEMPLATEElement()
97 void CCopasiXMLParser::TEMPLATEElement::start(
const XML_Char *pszName,
98 const XML_Char **papszAttrs)
100 mpCurrentHandler = NULL;
101 mCurrentElement = mLastKnownElement;
103 while (mpCurrentHandler == NULL)
107 switch (mCurrentElement)
111 if (strcmp(pszName,
"TEMPLATE"))
113 pszName,
"TEMPLATE", mParser.getCurrentLineNumber());
115 mLastKnownElement = TEMPLATE;
122 if (!strcmp(pszName,
"etc"))
126 mpetcElement =
new etcElement(mParser, mCommon);
128 mpCurrentHandler = mpetcElement;
134 pszName,
"etc", mParser.getCurrentLineNumber());
141 mpCurrentHandler = &mParser.mUnknownElement;
146 mParser.pushElementHandler(mpCurrentHandler);
148 if (mpCurrentHandler != &mParser.mUnknownElement)
150 mLastKnownElement = mCurrentElement;
153 mParser.onStartElement(pszName, papszAttrs);
158 void CCopasiXMLParser::TEMPLATEElement::end(
const XML_Char *pszName)
160 switch (mCurrentElement)
164 if (strcmp(pszName,
"TEMPLATE"))
166 pszName,
"TEMPLATE", mParser.getCurrentLineNumber());
168 mParser.popElementHandler();
172 mParser.onEndElement(pszName);
177 if (strcmp(pszName,
"etc"))
179 pszName,
"etc", mParser.getCurrentLineNumber());
190 pszName,
"???", mParser.getCurrentLineNumber());
194 mCurrentElement = TEMPLATE;
198 #endif // COPASI_TEMPLATE
205 mElementHandlerStack(),
206 mUnknownElement(*this, this->mCommon),
207 mCharacterDataElement(*this, this->mCommon),
208 mListOfUnsupportedAnnotationsElement(*this, this->mCommon),
209 mCommentElement(*this, this->mCommon),
210 mMiriamAnnotationElement(*this, this->mCommon)
267 const XML_Char **papszAttrs)
284 long i =
mParser.getCurrentByteIndex();
289 long i =
mParser.getCurrentByteIndex();
308 int is_parameter_entity)
327 Data.append(pszData, nLength);
333 const std::string & join)
339 if (toBeStripped ==
"")
return tmp;
341 std::string::size_type Start = tmp.find_first_of(toBeStripped);
342 std::string::size_type End = 0;
344 while (Start != std::string::npos)
346 End = tmp.find_first_not_of(toBeStripped, Start);
348 tmp.erase(Start, End - Start);
350 if (Start && End != std::string::npos)
352 tmp.insert(Start, join);
353 Start += join.length();
356 Start = tmp.find_first_of(toBeStripped, Start);
423 deleteCurrentHandler();
432 if (mCurrentElement == Unknown)
434 mLineNumber =
mParser.getCurrentLineNumber();
442 switch (mCurrentElement)
449 pszName, mLineNumber);
472 const XML_Char **papszAttrs)
475 mpCurrentHandler = NULL;
477 const char * versionMajor;
479 const char * versionMinor;
481 const char * versionDevel;
483 bool CopasiSourcesModified =
true;
485 switch (mCurrentElement)
489 if (!strcmp(pszName,
"COPASI"))
491 versionMajor =
mParser.getAttributeValue(
"versionMajor", papszAttrs,
"0");
492 VersionMajor =
strToInt(versionMajor);
493 versionMinor =
mParser.getAttributeValue(
"versionMinor", papszAttrs,
"0");
494 VersionMinor =
strToInt(versionMinor);
495 versionDevel =
mParser.getAttributeValue(
"versionDevel", papszAttrs,
"0");
496 VersionDevel =
strToInt(versionDevel);
497 CopasiSourcesModified =
mParser.toBool(
mParser.getAttributeValue(
"copasiSourcesModified", papszAttrs,
"true"));
504 else if (!strcmp(pszName,
"ParameterGroup"))
510 mpCurrentHandler = &
mParser.mUnknownElement;
513 pszName,
"COPASI",
mParser.getCurrentLineNumber());
518 case ListOfFunctions:
520 if (!strcmp(pszName,
"ListOfFunctions"))
527 if (!strcmp(pszName,
"Model"))
534 if (!strcmp(pszName,
"ListOfTasks"))
541 if (!strcmp(pszName,
"ListOfReports"))
548 if (!strcmp(pszName,
"ListOfPlots"))
555 if (!strcmp(pszName,
"GUI"))
560 mpCurrentHandler = &
mParser.mUnknownElement;
567 if (!strcmp(pszName,
"ListOfLayouts"))
574 if (!strcmp(pszName,
"SBMLReference"))
580 mpCurrentHandler = &
mParser.mUnknownElement;
584 if (mpCurrentHandler)
585 mParser.pushElementHandler(mpCurrentHandler);
587 mParser.onStartElement(pszName, papszAttrs);
594 if (!strcmp(pszName,
"COPASI"))
602 for (; it != end; ++it)
607 if (pParameter != NULL &&
616 pParameter->
setValue(std::string(
""));
630 if (!strcmp(pszName,
"ParameterGroup"))
634 else if (!strcmp(pszName,
"GUI") &&
mCommon.
pGUI == NULL)
639 deleteCurrentHandler();
653 deleteCurrentHandler();
657 const XML_Char **papszAttrs)
661 switch (mCurrentElement)
663 case ListOfFunctions:
665 if (strcmp(pszName,
"ListOfFunctions"))
667 pszName,
"ListOfFunctions",
mParser.getCurrentLineNumber());
676 if (strcmp(pszName,
"Function"))
678 pszName,
"Function",
mParser.getCurrentLineNumber());
681 if (!mpCurrentHandler)
685 mParser.pushElementHandler(mpCurrentHandler);
686 mpCurrentHandler->start(pszName, papszAttrs);
690 mLastKnownElement = mCurrentElement - 1;
693 mParser.onStartElement(pszName, papszAttrs);
702 switch (mCurrentElement)
704 case ListOfFunctions:
706 if (strcmp(pszName,
"ListOfFunctions"))
708 pszName,
"ListOfFunctions",
mParser.getCurrentLineNumber());
720 if (pFunction && !pFunction->
compile())
724 mParser.getCurrentLineNumber());
737 if (strcmp(pszName,
"Function"))
739 pszName,
"Function",
mParser.getCurrentLineNumber());
741 mCurrentElement = ListOfFunctions;
745 mCurrentElement = mLastKnownElement;
750 pszName,
"???",
mParser.getCurrentLineNumber());
760 mpMathMLElement(NULL),
761 mpListOfParameterDescriptionsElement(NULL)
767 pdelete(mpListOfParameterDescriptionsElement);
771 const XML_Char **papszAttrs)
776 const char * Reversible;
779 mpCurrentHandler = NULL;
780 mCurrentElement = mLastKnownElement;
782 while (mpCurrentHandler == NULL)
787 switch (mCurrentElement)
791 if (strcmp(pszName,
"Function"))
793 pszName,
"Function",
mParser.getCurrentLineNumber());
795 mKey =
mParser.getAttributeValue(
"key", papszAttrs);
796 Name =
mParser.getAttributeValue(
"name", papszAttrs);
797 type =
mParser.getAttributeValue(
"type", papszAttrs);
800 Reversible =
mParser.getAttributeValue(
"reversible", papszAttrs,
false);
803 Reversible =
mParser.getAttributeValue(
"positive", papszAttrs,
"unspecified");
805 mLastKnownElement = Function;
809 mExistingFunctionIndex.clear();
827 if (!strcmp(Reversible,
"true"))
829 else if (!strcmp(Reversible,
"false"))
838 mExistingFunctionIndex.insert(Index);
858 std::ostringstream ss;
859 ss << Name <<
" [" << Counter <<
"]";
866 mExistingFunctionIndex.insert(Index);
890 std::ostringstream ss;
891 ss << Name <<
" [" << Counter <<
"]";
898 mExistingFunctionIndex.insert(Index);
916 std::ostringstream ss;
917 ss << Name <<
" [" << Counter <<
"]";
924 mExistingFunctionIndex.insert(Index);
940 case MiriamAnnotation:
942 if (!strcmp(pszName,
"MiriamAnnotation"))
943 mpCurrentHandler = &
mParser.mMiriamAnnotationElement;
949 if (!strcmp(pszName,
"Comment"))
950 mpCurrentHandler = &
mParser.mCommentElement;
954 case ListOfUnsupportedAnnotations:
956 if (!strcmp(pszName,
"ListOfUnsupportedAnnotations"))
957 mpCurrentHandler = &
mParser.mListOfUnsupportedAnnotationsElement;
963 if (!strcmp(pszName,
"Expression"))
964 mpCurrentHandler = &
mParser.mCharacterDataElement;
965 else if (!strcmp(pszName,
"MathML"))
968 if (!mpMathMLElement)
971 mCurrentElement = MathML;
972 mpCurrentHandler = mpMathMLElement;
976 pszName,
"Expression",
mParser.getCurrentLineNumber());
980 case ListOfParameterDescriptions:
982 if (strcmp(pszName,
"ListOfParameterDescriptions"))
984 pszName,
"ListOfParameterDescriptions",
mParser.getCurrentLineNumber());
987 if (!mpListOfParameterDescriptionsElement)
991 mpCurrentHandler = mpListOfParameterDescriptionsElement;
996 mpCurrentHandler = &
mParser.mUnknownElement;
1001 mParser.pushElementHandler(mpCurrentHandler);
1003 if (mpCurrentHandler != &
mParser.mUnknownElement)
1005 mLastKnownElement = mCurrentElement;
1008 mParser.onStartElement(pszName, papszAttrs);
1013 switch (mCurrentElement)
1017 if (strcmp(pszName,
"Function"))
1019 pszName,
"Function",
mParser.getCurrentLineNumber());
1025 mParser.onEndElement(pszName);
1034 std::set< size_t >::const_iterator it = mExistingFunctionIndex.begin();
1035 std::set< size_t >::const_iterator end = mExistingFunctionIndex.end();
1037 for (; it != end; ++it)
1062 for (; it != end; ++it)
1070 case MiriamAnnotation:
1072 if (strcmp(pszName,
"MiriamAnnotation"))
1074 pszName,
"MiriamAnnotation",
mParser.getCurrentLineNumber());
1086 if (strcmp(pszName,
"Comment"))
1088 pszName,
"Comment",
mParser.getCurrentLineNumber());
1098 case ListOfUnsupportedAnnotations:
1100 if (strcmp(pszName,
"ListOfUnsupportedAnnotations"))
1102 pszName,
"ListOfUnsupportedAnnotations",
mParser.getCurrentLineNumber());
1113 if (strcmp(pszName,
"Expression"))
1115 pszName,
"Expression",
mParser.getCurrentLineNumber());
1133 case ListOfParameterDescriptions:
1135 if (strcmp(pszName,
"ListOfParameterDescriptions"))
1137 pszName,
"ListOfParameterDescriptions",
mParser.getCurrentLineNumber());
1143 if (strcmp(pszName,
"MathML"))
1145 pszName,
"MathML",
mParser.getCurrentLineNumber());
1158 mLastKnownElement = Expression;
1166 pszName,
"???",
mParser.getCurrentLineNumber());
1170 mCurrentElement = Function;
1182 deleteCurrentHandler();
1186 const XML_Char **papszAttrs)
1190 switch (mCurrentElement)
1194 if (strcmp(pszName,
"MathML"))
1196 pszName,
"MathML",
mParser.getCurrentLineNumber());
1202 if (strcmp(pszName,
"Text"))
1204 pszName,
"Text",
mParser.getCurrentLineNumber());
1207 if (!mpCurrentHandler)
1211 mParser.pushElementHandler(mpCurrentHandler);
1212 mpCurrentHandler->start(pszName, papszAttrs);
1216 mLastKnownElement = mCurrentElement - 1;
1219 mParser.onStartElement(pszName, papszAttrs);
1228 switch (mCurrentElement)
1232 if (strcmp(pszName,
"MathML"))
1234 pszName,
"MathML",
mParser.getCurrentLineNumber());
1240 mParser.onEndElement(pszName);
1245 if (strcmp(pszName,
"Text"))
1247 pszName,
"Text",
mParser.getCurrentLineNumber());
1249 mCurrentElement = MathML;
1254 mCurrentElement = mLastKnownElement;
1259 pszName,
"???",
mParser.getCurrentLineNumber());
1273 const XML_Char ** papszAttrs)
1277 switch (mCurrentElement)
1280 mCurrentElementName = pszName;
1281 mParser.enableCharacterDataHandler(
true);
1285 mLastKnownElement = mCurrentElement - 1;
1288 mParser.onStartElement(pszName, papszAttrs);
1297 switch (mCurrentElement)
1301 if (strcmp(pszName, mCurrentElementName.c_str()))
1303 pszName, mCurrentElementName.c_str(),
mParser.getCurrentLineNumber());
1311 if (Start == std::string::npos)
1317 if (End == std::string::npos)
1324 mParser.onEndElement(pszName);
1328 mCurrentElement = mLastKnownElement;
1333 pszName,
"???",
mParser.getCurrentLineNumber());
1345 deleteCurrentHandler();
1349 const XML_Char **papszAttrs)
1353 switch (mCurrentElement)
1355 case ListOfParameterDescriptions:
1359 if (strcmp(pszName,
"ListOfParameterDescriptions"))
1361 pszName,
"ListOfParameterDescriptions",
mParser.getCurrentLineNumber());
1363 if (mpCurrentHandler) mpCurrentHandler->reset();
1367 case ParameterDescription:
1369 if (strcmp(pszName,
"ParameterDescription"))
1371 pszName,
"ParameterDescription",
mParser.getCurrentLineNumber());
1374 if (!mpCurrentHandler)
1378 mParser.pushElementHandler(mpCurrentHandler);
1379 mpCurrentHandler->start(pszName, papszAttrs);
1383 mLastKnownElement = mCurrentElement - 1;
1386 mParser.onStartElement(pszName, papszAttrs);
1395 switch (mCurrentElement)
1397 case ListOfParameterDescriptions:
1399 if (strcmp(pszName,
"ListOfParameterDescriptions"))
1401 pszName,
"ListOfParameterDescriptions",
mParser.getCurrentLineNumber());
1413 size_t i = Variables.
size() - 1;
1420 mParser.onEndElement(pszName);
1423 case ParameterDescription:
1425 if (strcmp(pszName,
"ParameterDescription"))
1427 pszName,
"ParameterDescription",
mParser.getCurrentLineNumber());
1429 mCurrentElement = ListOfParameterDescriptions;
1433 mCurrentElement = mLastKnownElement;
1438 pszName,
"???",
mParser.getCurrentLineNumber());
1453 deleteCurrentHandler();
1457 const XML_Char **papszAttrs)
1465 const char * minOccurs;
1467 const char * maxOccurs;
1476 if (!pFunction) mCurrentElement++;
1478 switch (mCurrentElement)
1480 case ParameterDescription:
1482 if (strcmp(pszName,
"ParameterDescription"))
1484 pszName,
"ParameterDescription",
mParser.getCurrentLineNumber());
1486 Key =
mParser.getAttributeValue(
"key", papszAttrs);
1487 Name =
mParser.getAttributeValue(
"name", papszAttrs);
1489 order =
mParser.getAttributeValue(
"order", papszAttrs);
1490 Order = (
unsigned C_INT32) atoi(order);
1492 role =
mParser.getAttributeValue(
"role", papszAttrs);
1496 minOccurs =
mParser.getAttributeValue(
"minOccurs", papszAttrs,
"1");
1499 maxOccurs =
mParser.getAttributeValue(
"maxOccurs", papszAttrs ,
"1");
1501 if (std::string(
"unbounded") == std::string(maxOccurs))
1502 MaxOccurs = (
unsigned C_INT32) - 1;
1536 std::string NewName =
StringPrint(
"TMP_%d", Counter++);
1554 if (MaxOccurs == 1 && MinOccurs == 1)
1565 mLastKnownElement = mCurrentElement - 1;
1568 mParser.onStartElement(pszName, papszAttrs);
1577 switch (mCurrentElement)
1579 case ParameterDescription:
1581 if (strcmp(pszName,
"ParameterDescription"))
1583 pszName,
"ParameterDescription",
mParser.getCurrentLineNumber());
1589 mParser.onEndElement(pszName);
1593 mCurrentElement = mLastKnownElement;
1598 pszName,
"???",
mParser.getCurrentLineNumber());
1615 deleteCurrentHandler();
1619 const XML_Char **papszAttrs)
1622 const char * timeUnit;
1624 const char * volumeUnit;
1626 const char * areaUnit;
1628 const char * lengthUnit;
1630 const char * quantityUnit;
1635 mpCurrentHandler = NULL;
1638 switch (mCurrentElement)
1642 if (strcmp(pszName,
"Model"))
1644 pszName,
"Model",
mParser.getCurrentLineNumber());
1646 mKey =
mParser.getAttributeValue(
"key", papszAttrs);
1647 Name =
mParser.getAttributeValue(
"name", papszAttrs);
1649 timeUnit =
mParser.getAttributeValue(
"timeUnit", papszAttrs);
1654 if (strcmp(timeUnit,
"m"))
1660 volumeUnit =
mParser.getAttributeValue(
"volumeUnit", papszAttrs);
1665 areaUnit =
mParser.getAttributeValue(
"areaUnit", papszAttrs,
"m\xc2\xb2");
1668 lengthUnit =
mParser.getAttributeValue(
"lengthUnit", papszAttrs,
"m");
1671 quantityUnit =
mParser.getAttributeValue(
"quantityUnit", papszAttrs);
1677 ModelType =
toEnum(
mParser.getAttributeValue(
"type", papszAttrs,
"deterministic"),
1700 case MiriamAnnotation:
1702 if (!strcmp(pszName,
"MiriamAnnotation"))
1704 mpCurrentHandler = &
mParser.mMiriamAnnotationElement;
1705 mLastKnownElement = mCurrentElement;
1712 if (!strcmp(pszName,
"Comment"))
1714 mpCurrentHandler = &
mParser.mCommentElement;
1715 mLastKnownElement = mCurrentElement;
1720 case ListOfUnsupportedAnnotations:
1722 if (!strcmp(pszName,
"ListOfUnsupportedAnnotations"))
1724 mpCurrentHandler = &
mParser.mListOfUnsupportedAnnotationsElement;
1725 mLastKnownElement = mCurrentElement;
1730 case InitialExpression:
1732 if (!strcmp(pszName,
"InitialExpression"))
1734 mpCurrentHandler = &
mParser.mCharacterDataElement;
1735 mLastKnownElement = mCurrentElement;
1740 case ListOfCompartments:
1742 if (!strcmp(pszName,
"ListOfCompartments"))
1745 mLastKnownElement = mCurrentElement;
1750 case ListOfMetabolites:
1752 if (!strcmp(pszName,
"ListOfMetabolites"))
1755 mLastKnownElement = mCurrentElement;
1760 case ListOfModelValues:
1762 if (!strcmp(pszName,
"ListOfModelValues"))
1765 mLastKnownElement = mCurrentElement;
1770 case ListOfReactions:
1772 if (!strcmp(pszName,
"ListOfReactions"))
1775 mLastKnownElement = mCurrentElement;
1782 if (!strcmp(pszName,
"ListOfEvents"))
1785 mLastKnownElement = mCurrentElement;
1790 case ListOfModelParameterSets:
1792 if (!strcmp(pszName,
"ListOfModelParameterSets"))
1795 mLastKnownElement = mCurrentElement;
1802 if (!strcmp(pszName,
"StateTemplate"))
1805 mLastKnownElement = mCurrentElement;
1812 if (!strcmp(pszName,
"InitialState"))
1815 mLastKnownElement = mCurrentElement;
1822 mpCurrentHandler = &
mParser.mUnknownElement;
1826 if (mpCurrentHandler)
1827 mParser.pushElementHandler(mpCurrentHandler);
1829 mParser.onStartElement(pszName, papszAttrs);
1836 switch (mCurrentElement)
1840 if (strcmp(pszName,
"Model"))
1842 pszName,
"Model",
mParser.getCurrentLineNumber());
1850 mParser.onEndElement(pszName);
1853 case MiriamAnnotation:
1855 if (strcmp(pszName,
"MiriamAnnotation"))
1857 pszName,
"MiriamAnnotation",
mParser.getCurrentLineNumber());
1865 if (strcmp(pszName,
"Comment"))
1867 pszName,
"Comment",
mParser.getCurrentLineNumber());
1873 case ListOfUnsupportedAnnotations:
1875 if (strcmp(pszName,
"ListOfUnsupportedAnnotations"))
1877 pszName,
"ListOfUnsupportedAnnotations",
mParser.getCurrentLineNumber());
1882 case InitialExpression:
1884 if (strcmp(pszName,
"InitialExpression"))
1886 pszName,
"InitialExpression",
mParser.getCurrentLineNumber());
1901 mCurrentElement = MiriamAnnotation;
1904 case ListOfCompartments:
1906 if (strcmp(pszName,
"ListOfCompartments"))
1908 pszName,
"ListOfCompartments",
mParser.getCurrentLineNumber());
1910 deleteCurrentHandler();
1913 case ListOfMetabolites:
1915 if (strcmp(pszName,
"ListOfMetabolites"))
1917 pszName,
"ListOfMetabolites",
mParser.getCurrentLineNumber());
1919 deleteCurrentHandler();
1922 case ListOfModelValues:
1924 if (strcmp(pszName,
"ListOfModelValues"))
1926 pszName,
"ListOfModelValues",
mParser.getCurrentLineNumber());
1928 deleteCurrentHandler();
1931 case ListOfReactions:
1933 if (strcmp(pszName,
"ListOfReactions"))
1935 pszName,
"ListOfReactions",
mParser.getCurrentLineNumber());
1937 deleteCurrentHandler();
1942 if (strcmp(pszName,
"ListOfEvents"))
1944 pszName,
"ListOfEvents",
mParser.getCurrentLineNumber());
1946 deleteCurrentHandler();
1949 case ListOfModelParameterSets:
1951 if (strcmp(pszName,
"ListOfModelParameterSets"))
1953 pszName,
"ListOfModelParameterSets",
mParser.getCurrentLineNumber());
1955 deleteCurrentHandler();
1956 mCurrentElement = Model;
1961 if (strcmp(pszName,
"StateTemplate"))
1963 pszName,
"StateTemplate",
mParser.getCurrentLineNumber());
1965 deleteCurrentHandler();
1970 if (strcmp(pszName,
"InitialState"))
1972 pszName,
"InitialState",
mParser.getCurrentLineNumber());
1974 deleteCurrentHandler();
1975 mCurrentElement = Model;
1979 mCurrentElement = mLastKnownElement;
1980 mCurrentElement = Model;
1985 pszName,
"???",
mParser.getCurrentLineNumber());
2001 deleteCurrentHandler();
2005 const XML_Char ** papszAttrs)
2008 const XML_Char ** ppAttrs;
2010 if (mLevel) mCurrentElement = xhtml;
2012 switch (mCurrentElement)
2016 if (strcmp(pszName,
"Comment"))
2018 pszName,
"Comment",
mParser.getCurrentLineNumber());
2022 mParser.enableCharacterDataHandler();
2023 mParser.enableSkippedEntityHandler();
2026 mElementEmpty.push(
false);
2031 if (mElementEmpty.top() ==
true)
2034 mElementEmpty.top() =
false;
2038 mXhtml <<
"<" << pszName;
2040 for (ppAttrs = papszAttrs; *ppAttrs && **ppAttrs; ppAttrs += 2)
2041 mXhtml <<
" " << *ppAttrs <<
"=\""
2045 mElementEmpty.push(
true);
2047 mParser.enableCharacterDataHandler();
2051 mLastKnownElement = mCurrentElement - 1;
2054 mParser.onStartElement(pszName, papszAttrs);
2065 switch (mCurrentElement)
2069 if (strcmp(pszName,
"Comment"))
2071 pszName,
"Comment",
mParser.getCurrentLineNumber());
2073 mXhtml <<
mParser.getCharacterData();
2090 mParser.enableSkippedEntityHandler(
false);
2095 mElementEmpty.pop();
2097 deleteCurrentHandler();
2100 mParser.onEndElement(pszName);
2104 Xhtml =
mParser.getCharacterData();
2107 if (mElementEmpty.top() ==
true)
2111 mElementEmpty.top() =
false;
2120 if (mElementEmpty.top() ==
false)
2121 mXhtml <<
"</" << pszName <<
">";
2123 mElementEmpty.pop();
2124 mElementEmpty.top() =
false;
2127 if (!mLevel) mCurrentElement = Comment;
2129 mParser.enableCharacterDataHandler();
2133 mCurrentElement = mLastKnownElement;
2138 pszName,
"???",
mParser.getCurrentLineNumber());
2152 deleteCurrentHandler();
2156 const XML_Char **papszAttrs)
2160 switch (mCurrentElement)
2162 case ListOfCompartments:
2164 if (strcmp(pszName,
"ListOfCompartments"))
2166 pszName,
"ListOfCompartments",
mParser.getCurrentLineNumber());
2173 if (strcmp(pszName,
"Compartment"))
2175 pszName,
"Compartment",
mParser.getCurrentLineNumber());
2178 if (!mpCurrentHandler)
2182 mParser.pushElementHandler(mpCurrentHandler);
2183 mpCurrentHandler->start(pszName, papszAttrs);
2187 mLastKnownElement = mCurrentElement - 1;
2190 mParser.onStartElement(pszName, papszAttrs);
2199 switch (mCurrentElement)
2201 case ListOfCompartments:
2203 if (strcmp(pszName,
"ListOfCompartments"))
2205 pszName,
"ListOfCompartments",
mParser.getCurrentLineNumber());
2211 mParser.onEndElement(pszName);
2216 if (strcmp(pszName,
"Compartment"))
2218 pszName,
"Compartment",
mParser.getCurrentLineNumber());
2220 mCurrentElement = ListOfCompartments;
2224 mCurrentElement = mLastKnownElement;
2229 pszName,
"???",
mParser.getCurrentLineNumber());
2246 const XML_Char **papszAttrs)
2249 const char * simulationType;
2250 const char * Dimensionality;
2253 mpCurrentHandler = NULL;
2254 mCurrentElement = mLastKnownElement;
2256 while (mpCurrentHandler == NULL)
2260 switch (mCurrentElement)
2264 if (strcmp(pszName,
"Compartment"))
2266 pszName,
"Compartment",
mParser.getCurrentLineNumber());
2268 mKey =
mParser.getAttributeValue(
"key", papszAttrs);
2269 Name =
mParser.getAttributeValue(
"name", papszAttrs);
2270 simulationType =
mParser.getAttributeValue(
"simulationType", papszAttrs,
"fixed");
2272 Dimensionality =
mParser.getAttributeValue(
"dimensionality", papszAttrs,
"3");
2275 addFix(mKey, mpCompartment);
2277 mpCompartment->setObjectName(Name);
2278 mpCompartment->setStatus(SimulationType);
2282 mLastKnownElement = Compartment;
2285 case MiriamAnnotation:
2287 if (!strcmp(pszName,
"MiriamAnnotation"))
2288 mpCurrentHandler = &
mParser.mMiriamAnnotationElement;
2294 if (!strcmp(pszName,
"Comment"))
2295 mpCurrentHandler = &
mParser.mCommentElement;
2299 case ListOfUnsupportedAnnotations:
2301 if (!strcmp(pszName,
"ListOfUnsupportedAnnotations"))
2302 mpCurrentHandler = &
mParser.mListOfUnsupportedAnnotationsElement;
2308 if (!strcmp(pszName,
"Expression"))
2309 mpCurrentHandler = &
mParser.mCharacterDataElement;
2313 case InitialExpression:
2315 if (!strcmp(pszName,
"InitialExpression"))
2316 mpCurrentHandler = &
mParser.mCharacterDataElement;
2322 mpCurrentHandler = &
mParser.mUnknownElement;
2327 mParser.pushElementHandler(mpCurrentHandler);
2329 if (mpCurrentHandler != &
mParser.mUnknownElement)
2331 mLastKnownElement = mCurrentElement;
2334 mParser.onStartElement(pszName, papszAttrs);
2341 switch (mCurrentElement)
2345 if (strcmp(pszName,
"Compartment"))
2347 pszName,
"Compartment",
mParser.getCurrentLineNumber());
2353 mParser.onEndElement(pszName);
2356 case MiriamAnnotation:
2358 if (strcmp(pszName,
"MiriamAnnotation"))
2360 pszName,
"MiriamAnnotation",
mParser.getCurrentLineNumber());
2368 if (strcmp(pszName,
"Comment"))
2370 pszName,
"Comment",
mParser.getCurrentLineNumber());
2376 case ListOfUnsupportedAnnotations:
2378 if (strcmp(pszName,
"ListOfUnsupportedAnnotations"))
2380 pszName,
"ListOfUnsupportedAnnotations",
mParser.getCurrentLineNumber());
2382 mpCompartment->getUnsupportedAnnotations() =
mParser.mListOfUnsupportedAnnotationsElement.getUnsupportedAnnotations();
2388 if (strcmp(pszName,
"Expression"))
2390 pszName,
"Expression",
mParser.getCurrentLineNumber());
2404 case InitialExpression:
2406 if (strcmp(pszName,
"InitialExpression"))
2408 pszName,
"InitialExpression",
mParser.getCurrentLineNumber());
2428 pszName,
"???",
mParser.getCurrentLineNumber());
2432 mCurrentElement = Compartment;
2443 deleteCurrentHandler();
2447 const XML_Char **papszAttrs)
2451 switch (mCurrentElement)
2453 case ListOfMetabolites:
2455 if (strcmp(pszName,
"ListOfMetabolites"))
2457 pszName,
"ListOfMetabolites",
mParser.getCurrentLineNumber());
2463 if (strcmp(pszName,
"Metabolite"))
2465 pszName,
"Metabolite",
mParser.getCurrentLineNumber());
2468 if (!mpCurrentHandler)
2472 mParser.pushElementHandler(mpCurrentHandler);
2473 mpCurrentHandler->start(pszName, papszAttrs);
2477 mLastKnownElement = mCurrentElement - 1;
2480 mParser.onStartElement(pszName, papszAttrs);
2489 switch (mCurrentElement)
2491 case ListOfMetabolites:
2493 if (strcmp(pszName,
"ListOfMetabolites"))
2495 pszName,
"ListOfMetabolites",
mParser.getCurrentLineNumber());
2501 mParser.onEndElement(pszName);
2506 if (strcmp(pszName,
"Metabolite"))
2508 pszName,
"Metabolite",
mParser.getCurrentLineNumber());
2510 mCurrentElement = ListOfMetabolites;
2514 mCurrentElement = mLastKnownElement;
2519 pszName,
"???",
mParser.getCurrentLineNumber());
2536 const XML_Char **papszAttrs)
2540 const char * simulationType;
2542 const char reactions[] =
"reactions";
2543 const char * Compartment;
2545 mpCurrentHandler = NULL;
2546 mCurrentElement = mLastKnownElement;
2548 while (mpCurrentHandler == NULL)
2552 switch (mCurrentElement)
2556 if (strcmp(pszName,
"Metabolite"))
2558 pszName,
"Metabolite",
mParser.getCurrentLineNumber());
2560 mKey =
mParser.getAttributeValue(
"key", papszAttrs);
2561 Name =
mParser.getAttributeValue(
"name", papszAttrs);
2563 simulationType =
mParser.getAttributeValue(
"simulationType", papszAttrs,
false);
2566 if (!simulationType)
2568 simulationType =
mParser.getAttributeValue(
"status", papszAttrs,
false);
2570 if (!simulationType)
2571 simulationType =
mParser.getAttributeValue(
"simulationType", papszAttrs);
2572 else if (!strcmp(simulationType,
"variable"))
2573 simulationType = reactions;
2577 Compartment =
mParser.getAttributeValue(
"compartment", papszAttrs);
2579 mpMetabolite =
new CMetab();
2580 addFix(mKey, mpMetabolite);
2581 mpMetabolite->setObjectName(Name);
2582 mpMetabolite->setStatus(SimulationType);
2592 mLastKnownElement = mCurrentElement;
2595 case MiriamAnnotation:
2597 if (!strcmp(pszName,
"MiriamAnnotation"))
2598 mpCurrentHandler = &
mParser.mMiriamAnnotationElement;
2604 if (!strcmp(pszName,
"Comment"))
2606 mpCurrentHandler = &
mParser.mCommentElement;
2607 mLastKnownElement = mCurrentElement;
2612 case ListOfUnsupportedAnnotations:
2614 if (!strcmp(pszName,
"ListOfUnsupportedAnnotations"))
2615 mpCurrentHandler = &
mParser.mListOfUnsupportedAnnotationsElement;
2621 if (!strcmp(pszName,
"Expression"))
2622 mpCurrentHandler = &
mParser.mCharacterDataElement;
2626 case InitialExpression:
2628 if (!strcmp(pszName,
"InitialExpression"))
2629 mpCurrentHandler = &
mParser.mCharacterDataElement;
2635 mpCurrentHandler = &
mParser.mUnknownElement;
2640 mParser.pushElementHandler(mpCurrentHandler);
2642 if (mpCurrentHandler != &
mParser.mUnknownElement)
2644 mLastKnownElement = mCurrentElement;
2647 mParser.onStartElement(pszName, papszAttrs);
2654 switch (mCurrentElement)
2658 if (strcmp(pszName,
"Metabolite"))
2660 pszName,
"Metabolite",
mParser.getCurrentLineNumber());
2666 mParser.onEndElement(pszName);
2669 case MiriamAnnotation:
2671 if (strcmp(pszName,
"MiriamAnnotation"))
2673 pszName,
"MiriamAnnotation",
mParser.getCurrentLineNumber());
2681 if (strcmp(pszName,
"Comment"))
2683 pszName,
"Comment",
mParser.getCurrentLineNumber());
2689 case ListOfUnsupportedAnnotations:
2691 if (strcmp(pszName,
"ListOfUnsupportedAnnotations"))
2693 pszName,
"ListOfUnsupportedAnnotations",
mParser.getCurrentLineNumber());
2695 mpMetabolite->getUnsupportedAnnotations() =
mParser.mListOfUnsupportedAnnotationsElement.getUnsupportedAnnotations();
2701 if (strcmp(pszName,
"Expression"))
2703 pszName,
"Expression",
mParser.getCurrentLineNumber());
2718 case InitialExpression:
2720 if (strcmp(pszName,
"InitialExpression"))
2722 pszName,
"InitialExpression",
mParser.getCurrentLineNumber());
2742 pszName,
"???",
mParser.getCurrentLineNumber());
2746 mCurrentElement = Metabolite;
2759 deleteCurrentHandler();
2763 const XML_Char **papszAttrs)
2767 switch (mCurrentElement)
2769 case ListOfModelValues:
2771 if (strcmp(pszName,
"ListOfModelValues"))
2773 pszName,
"ListOfModelValues",
mParser.getCurrentLineNumber());
2779 if (strcmp(pszName,
"ModelValue"))
2781 pszName,
"ModelValue",
mParser.getCurrentLineNumber());
2784 if (!mpCurrentHandler)
2788 mParser.pushElementHandler(mpCurrentHandler);
2789 mpCurrentHandler->start(pszName, papszAttrs);
2793 mLastKnownElement = mCurrentElement - 1;
2796 mParser.onStartElement(pszName, papszAttrs);
2805 switch (mCurrentElement)
2807 case ListOfModelValues:
2809 if (strcmp(pszName,
"ListOfModelValues"))
2811 pszName,
"ListOfModelValues",
mParser.getCurrentLineNumber());
2817 mParser.onEndElement(pszName);
2822 if (strcmp(pszName,
"ModelValue"))
2824 pszName,
"ModelValue",
mParser.getCurrentLineNumber());
2826 mCurrentElement = ListOfModelValues;
2830 mCurrentElement = mLastKnownElement;
2835 pszName,
"???",
mParser.getCurrentLineNumber());
2846 mpMathMLElement(NULL),
2856 const XML_Char **papszAttrs)
2859 const char * simulationType;
2862 mpCurrentHandler = NULL;
2863 mCurrentElement = mLastKnownElement;
2865 while (mpCurrentHandler == NULL)
2869 switch (mCurrentElement)
2873 if (strcmp(pszName,
"ModelValue"))
2875 pszName,
"ModelValue",
mParser.getCurrentLineNumber());
2877 mKey =
mParser.getAttributeValue(
"key", papszAttrs);
2878 Name =
mParser.getAttributeValue(
"name", papszAttrs);
2879 simulationType =
mParser.getAttributeValue(
"simulationType", papszAttrs,
false);
2882 if (!simulationType)
2884 simulationType =
mParser.getAttributeValue(
"status", papszAttrs,
false);
2886 if (!simulationType)
2887 simulationType =
mParser.getAttributeValue(
"simulationType", papszAttrs);
2894 mpMV->setObjectName(Name);
2895 mpMV->setStatus(SimulationType);
2898 mLastKnownElement = mCurrentElement;
2902 case MiriamAnnotation:
2904 if (!strcmp(pszName,
"MiriamAnnotation"))
2905 mpCurrentHandler = &
mParser.mMiriamAnnotationElement;
2911 if (!strcmp(pszName,
"Comment"))
2912 mpCurrentHandler = &
mParser.mCommentElement;
2916 case ListOfUnsupportedAnnotations:
2918 if (!strcmp(pszName,
"ListOfUnsupportedAnnotations"))
2919 mpCurrentHandler = &
mParser.mListOfUnsupportedAnnotationsElement;
2925 if (!strcmp(pszName,
"Expression"))
2926 mpCurrentHandler = &
mParser.mCharacterDataElement;
2930 case InitialExpression:
2932 if (!strcmp(pszName,
"InitialExpression"))
2933 mpCurrentHandler = &
mParser.mCharacterDataElement;
2939 if (!strcmp(pszName,
"MathML"))
2942 if (!mpMathMLElement)
2945 mpCurrentHandler = mpMathMLElement;
2952 mpCurrentHandler = &
mParser.mUnknownElement;
2957 mParser.pushElementHandler(mpCurrentHandler);
2959 if (mpCurrentHandler != &
mParser.mUnknownElement)
2961 mLastKnownElement = mCurrentElement;
2964 mParser.onStartElement(pszName, papszAttrs);
2971 switch (mCurrentElement)
2975 if (strcmp(pszName,
"ModelValue"))
2977 pszName,
"ModelValue",
mParser.getCurrentLineNumber());
2983 mParser.onEndElement(pszName);
2986 case MiriamAnnotation:
2988 if (strcmp(pszName,
"MiriamAnnotation"))
2990 pszName,
"MiriamAnnotation",
mParser.getCurrentLineNumber());
2998 if (strcmp(pszName,
"Comment"))
3000 pszName,
"Comment",
mParser.getCurrentLineNumber());
3006 case ListOfUnsupportedAnnotations:
3008 if (strcmp(pszName,
"ListOfUnsupportedAnnotations"))
3010 pszName,
"ListOfUnsupportedAnnotations",
mParser.getCurrentLineNumber());
3012 mpMV->getUnsupportedAnnotations() =
mParser.mListOfUnsupportedAnnotationsElement.getUnsupportedAnnotations();
3018 if (strcmp(pszName,
"Expression"))
3020 pszName,
"Expression",
mParser.getCurrentLineNumber());
3036 case InitialExpression:
3038 if (strcmp(pszName,
"InitialExpression"))
3040 pszName,
"InitialExpression",
mParser.getCurrentLineNumber());
3057 if (strcmp(pszName,
"MathML"))
3059 pszName,
"MathML",
mParser.getCurrentLineNumber());
3080 pszName,
"???",
mParser.getCurrentLineNumber());
3084 mCurrentElement = ModelValue;
3097 deleteCurrentHandler();
3101 const XML_Char **papszAttrs)
3105 switch (mCurrentElement)
3109 if (strcmp(pszName,
"ListOfEvents"))
3111 pszName,
"ListOfEvents",
mParser.getCurrentLineNumber());
3113 mEventOrders.clear();
3118 if (strcmp(pszName,
"Event"))
3120 pszName,
"Event",
mParser.getCurrentLineNumber());
3123 if (!mpCurrentHandler)
3127 mParser.pushElementHandler(mpCurrentHandler);
3128 mpCurrentHandler->start(pszName, papszAttrs);
3132 mLastKnownElement = mCurrentElement - 1;
3135 mParser.onStartElement(pszName, papszAttrs);
3144 switch (mCurrentElement)
3148 if (strcmp(pszName,
"ListOfEvents"))
3150 pszName,
"ListOfEvents",
mParser.getCurrentLineNumber());
3156 mParser.onEndElement(pszName);
3161 if (strcmp(pszName,
"Event"))
3163 pszName,
"Event",
mParser.getCurrentLineNumber());
3165 mCurrentElement = ListOfEvents;
3169 mCurrentElement = mLastKnownElement;
3174 pszName,
"???",
mParser.getCurrentLineNumber());
3184 mpListOfAssignmentsElementHandler(NULL)
3189 pdelete(mpListOfAssignmentsElementHandler);
3193 const XML_Char **papszAttrs)
3196 bool DelayAssignment;
3197 bool FireAtInitialTime;
3198 bool PersistentTrigger;
3200 mpCurrentHandler = NULL;
3201 mCurrentElement = mLastKnownElement;
3203 while (mpCurrentHandler == NULL)
3207 switch (mCurrentElement)
3211 if (strcmp(pszName,
"Event"))
3213 pszName,
"Event",
mParser.getCurrentLineNumber());
3215 mKey =
mParser.getAttributeValue(
"key", papszAttrs);
3216 Name =
mParser.getAttributeValue(
"name", papszAttrs);
3218 mParser.toBool(
mParser.getAttributeValue(
"delayAssignment", papszAttrs,
false));
3220 mParser.toBool(
mParser.getAttributeValue(
"fireAtInitialTime", papszAttrs,
false));
3224 PersistentTrigger =
true;
3228 PersistentTrigger =
mParser.toBool(
mParser.getAttributeValue(
"persistentTrigger", papszAttrs,
true));
3240 mLastKnownElement = Event;
3243 case MiriamAnnotation:
3245 if (!strcmp(pszName,
"MiriamAnnotation"))
3246 mpCurrentHandler = &
mParser.mMiriamAnnotationElement;
3252 if (!strcmp(pszName,
"Comment"))
3253 mpCurrentHandler = &
mParser.mCommentElement;
3257 case ListOfUnsupportedAnnotations:
3259 if (!strcmp(pszName,
"ListOfUnsupportedAnnotations"))
3260 mpCurrentHandler = &
mParser.mListOfUnsupportedAnnotationsElement;
3264 case TriggerExpression:
3266 if (!strcmp(pszName,
"TriggerExpression"))
3267 mpCurrentHandler = &
mParser.mCharacterDataElement;
3271 case DelayExpression:
3273 if (!strcmp(pszName,
"DelayExpression"))
3274 mpCurrentHandler = &
mParser.mCharacterDataElement;
3278 case ListOfAssignments:
3280 if (!strcmp(pszName,
"ListOfAssignments"))
3282 if (!mpListOfAssignmentsElementHandler)
3284 mpListOfAssignmentsElementHandler =
3291 mpCurrentHandler = mpListOfAssignmentsElementHandler;
3298 mpCurrentHandler = &
mParser.mUnknownElement;
3303 mParser.pushElementHandler(mpCurrentHandler);
3305 if (mpCurrentHandler != &
mParser.mUnknownElement)
3307 mLastKnownElement = mCurrentElement;
3310 mParser.onStartElement(pszName, papszAttrs);
3317 switch (mCurrentElement)
3321 if (strcmp(pszName,
"Event"))
3323 pszName,
"Event",
mParser.getCurrentLineNumber());
3329 mParser.onEndElement(pszName);
3332 case MiriamAnnotation:
3334 if (strcmp(pszName,
"MiriamAnnotation"))
3336 pszName,
"MiriamAnnotation",
mParser.getCurrentLineNumber());
3344 if (strcmp(pszName,
"Comment"))
3346 pszName,
"Comment",
mParser.getCurrentLineNumber());
3352 case ListOfUnsupportedAnnotations:
3354 if (strcmp(pszName,
"ListOfUnsupportedAnnotations"))
3356 pszName,
"ListOfUnsupportedAnnotations",
mParser.getCurrentLineNumber());
3362 case TriggerExpression:
3364 if (strcmp(pszName,
"TriggerExpression"))
3367 pszName,
"TriggerExpression",
mParser.getCurrentLineNumber());
3385 case DelayExpression:
3387 if (strcmp(pszName,
"DelayExpression"))
3390 pszName,
"DelayExpression",
mParser.getCurrentLineNumber());
3408 case ListOfAssignments:
3416 pszName,
"???",
mParser.getCurrentLineNumber());
3420 mCurrentElement = Event;
3432 {deleteCurrentHandler();}
3435 const XML_Char **papszAttrs)
3439 switch (mCurrentElement)
3441 case ListOfAssignments:
3443 if (strcmp(pszName,
"ListOfAssignments"))
3445 pszName,
"ListOfAssignments",
mParser.getCurrentLineNumber());
3451 if (strcmp(pszName,
"Assignment"))
3453 pszName,
"Assignment",
mParser.getCurrentLineNumber());
3456 if (!mpCurrentHandler)
3462 mParser.pushElementHandler(mpCurrentHandler);
3463 mpCurrentHandler->start(pszName, papszAttrs);
3467 mLastKnownElement = mCurrentElement - 1;
3470 mParser.onStartElement(pszName, papszAttrs);
3479 switch (mCurrentElement)
3481 case ListOfAssignments:
3483 if (strcmp(pszName,
"ListOfAssignments"))
3485 pszName,
"ListOfAssignments",
mParser.getCurrentLineNumber());
3491 mParser.onEndElement(pszName);
3496 if (strcmp(pszName,
"Assignment"))
3498 pszName,
"Assignment",
mParser.getCurrentLineNumber());
3500 mCurrentElement = ListOfAssignments;
3504 mCurrentElement = mLastKnownElement;
3509 pszName,
"???",
mParser.getCurrentLineNumber());
3522 {deleteCurrentHandler();}
3525 const XML_Char **papszAttrs)
3527 mpCurrentHandler = NULL;
3532 switch (mCurrentElement)
3536 if (strcmp(pszName,
"Assignment"))
3538 pszName,
"Assignment",
mParser.getCurrentLineNumber());
3541 mKey =
mParser.getAttributeValue(
"targetKey", papszAttrs);
3555 if (!strcmp(pszName,
"Expression"))
3557 mpCurrentHandler = &
mParser.mCharacterDataElement;
3563 mLastKnownElement = mCurrentElement - 1;
3565 mpCurrentHandler = &
mParser.mUnknownElement;
3569 if (mpCurrentHandler)
3570 mParser.pushElementHandler(mpCurrentHandler);
3572 mParser.onStartElement(pszName, papszAttrs);
3579 switch (mCurrentElement)
3583 if (strcmp(pszName,
"Assignment"))
3585 pszName,
"Assignment",
mParser.getCurrentLineNumber());
3591 mParser.onEndElement(pszName);
3596 if (strcmp(pszName,
"Expression"))
3598 pszName,
"Expression",
mParser.getCurrentLineNumber());
3616 mCurrentElement = Assignment;
3620 mCurrentElement = mLastKnownElement;
3625 pszName,
"???",
mParser.getCurrentLineNumber());
3641 deleteCurrentHandler();
3645 const XML_Char **papszAttrs)
3649 switch (mCurrentElement)
3651 case ListOfReactions:
3653 if (strcmp(pszName,
"ListOfReactions"))
3655 pszName,
"ListOfReactions",
mParser.getCurrentLineNumber());
3662 if (strcmp(pszName,
"Reaction"))
3664 pszName,
"Reaction",
mParser.getCurrentLineNumber());
3667 if (!mpCurrentHandler)
3671 mParser.pushElementHandler(mpCurrentHandler);
3672 mpCurrentHandler->start(pszName, papszAttrs);
3676 mLastKnownElement = mCurrentElement - 1;
3679 mParser.onStartElement(pszName, papszAttrs);
3688 switch (mCurrentElement)
3690 case ListOfReactions:
3692 if (strcmp(pszName,
"ListOfReactions"))
3694 pszName,
"ListOfReactions",
mParser.getCurrentLineNumber());
3700 mParser.onEndElement(pszName);
3705 if (strcmp(pszName,
"Reaction"))
3707 pszName,
"Reaction",
mParser.getCurrentLineNumber());
3709 mCurrentElement = ListOfReactions;
3713 mCurrentElement = mLastKnownElement;
3718 pszName,
"???",
mParser.getCurrentLineNumber());
3728 mpListOfSubstratesElement(NULL),
3729 mpListOfProductsElement(NULL),
3730 mpListOfModifiersElement(NULL),
3731 mpListOfConstantsElement(NULL),
3732 mpKineticLawElement(NULL)
3737 pdelete(mpListOfSubstratesElement);
3738 pdelete(mpListOfProductsElement);
3739 pdelete(mpListOfModifiersElement);
3740 pdelete(mpListOfConstantsElement);
3745 const XML_Char **papszAttrs)
3749 const char * Compartment;
3750 const char * reversible;
3754 const char * SBMLId;
3756 mCurrentElement = mLastKnownElement;
3757 mpCurrentHandler = NULL;
3759 while (mpCurrentHandler == NULL)
3763 switch (mCurrentElement)
3767 if (strcmp(pszName,
"Reaction"))
3769 pszName,
"Reaction",
mParser.getCurrentLineNumber());
3771 mKey =
mParser.getAttributeValue(
"key", papszAttrs);
3772 Name =
mParser.getAttributeValue(
"name", papszAttrs);
3773 Compartment =
mParser.getAttributeValue(
"compartment", papszAttrs,
3776 reversible =
mParser.getAttributeValue(
"reversible", papszAttrs);
3777 Reversible =
mParser.toBool(reversible);
3779 fast =
mParser.getAttributeValue(
"fast", papszAttrs,
"false");
3787 SBMLId =
mParser.getAttributeValue(
"sbmlid", papszAttrs,
"");
3789 if (std::string(SBMLId) != std::string(
""))
3794 if (strcmp(Compartment,
"Compartment_00"))
3806 mLastKnownElement = Reaction;
3810 case MiriamAnnotation:
3812 if (!strcmp(pszName,
"MiriamAnnotation"))
3813 mpCurrentHandler = &
mParser.mMiriamAnnotationElement;
3819 if (!strcmp(pszName,
"Comment"))
3821 mpCurrentHandler = &
mParser.mCommentElement;
3822 mLastKnownElement = mCurrentElement;
3827 case ListOfUnsupportedAnnotations:
3829 if (!strcmp(pszName,
"ListOfUnsupportedAnnotations"))
3830 mpCurrentHandler = &
mParser.mListOfUnsupportedAnnotationsElement;
3834 case ListOfSubstrates:
3836 if (!strcmp(pszName,
"ListOfSubstrates"))
3839 if (!mpListOfSubstratesElement)
3840 mpListOfSubstratesElement =
3843 mpCurrentHandler = mpListOfSubstratesElement;
3848 case ListOfProducts:
3850 if (!strcmp(pszName,
"ListOfProducts"))
3852 if (!mpListOfProductsElement)
3853 mpListOfProductsElement =
3856 mpCurrentHandler = mpListOfProductsElement;
3861 case ListOfModifiers:
3863 if (!strcmp(pszName,
"ListOfModifiers"))
3865 if (!mpListOfModifiersElement)
3866 mpListOfModifiersElement =
3869 mpCurrentHandler = mpListOfModifiersElement;
3874 case ListOfConstants:
3876 if (!strcmp(pszName,
"ListOfConstants"))
3878 if (!mpListOfConstantsElement)
3879 mpListOfConstantsElement =
3882 mpCurrentHandler = mpListOfConstantsElement;
3889 if (!strcmp(pszName,
"KineticLaw"))
3891 if (!mpKineticLawElement)
3894 mpCurrentHandler = mpKineticLawElement;
3901 mpCurrentHandler = &
mParser.mUnknownElement;
3906 mParser.pushElementHandler(mpCurrentHandler);
3908 if (mpCurrentHandler != &
mParser.mUnknownElement)
3910 mLastKnownElement = mCurrentElement;
3913 mParser.onStartElement(pszName, papszAttrs);
3920 switch (mCurrentElement)
3924 if (strcmp(pszName,
"Reaction"))
3926 pszName,
"Reaction",
mParser.getCurrentLineNumber());
3932 mParser.onEndElement(pszName);
3935 case MiriamAnnotation:
3937 if (strcmp(pszName,
"MiriamAnnotation"))
3939 pszName,
"MiriamAnnotation",
mParser.getCurrentLineNumber());
3947 if (strcmp(pszName,
"Comment"))
3949 pszName,
"Comment",
mParser.getCurrentLineNumber());
3955 case ListOfUnsupportedAnnotations:
3957 if (strcmp(pszName,
"ListOfUnsupportedAnnotations"))
3959 pszName,
"ListOfUnsupportedAnnotations",
mParser.getCurrentLineNumber());
3965 case ListOfSubstrates:
3967 if (strcmp(pszName,
"ListOfSubstrates"))
3969 pszName,
"ListOfSubstrates",
mParser.getCurrentLineNumber());
3973 case ListOfProducts:
3975 if (strcmp(pszName,
"ListOfProducts"))
3977 pszName,
"ListOfProducts",
mParser.getCurrentLineNumber());
3981 case ListOfModifiers:
3983 if (strcmp(pszName,
"ListOfModifiers"))
3985 pszName,
"ListOfModifiers",
mParser.getCurrentLineNumber());
3989 case ListOfConstants:
3991 if (strcmp(pszName,
"ListOfConstants"))
3993 pszName,
"ListOfConstants",
mParser.getCurrentLineNumber());
3999 if (strcmp(pszName,
"KineticLaw"))
4001 pszName,
"KineticLaw",
mParser.getCurrentLineNumber());
4010 pszName,
"???",
mParser.getCurrentLineNumber());
4014 mCurrentElement = Reaction;
4026 deleteCurrentHandler();
4030 const XML_Char **papszAttrs)
4034 switch (mCurrentElement)
4036 case ListOfSubstrates:
4038 if (strcmp(pszName,
"ListOfSubstrates"))
4040 pszName,
"ListOfSubstrates",
mParser.getCurrentLineNumber());
4046 if (strcmp(pszName,
"Substrate"))
4048 pszName,
"Substrate",
mParser.getCurrentLineNumber());
4051 if (!mpCurrentHandler)
4055 mParser.pushElementHandler(mpCurrentHandler);
4056 mpCurrentHandler->start(pszName, papszAttrs);
4060 mLastKnownElement = mCurrentElement - 1;
4063 mParser.onStartElement(pszName, papszAttrs);
4072 switch (mCurrentElement)
4074 case ListOfSubstrates:
4076 if (strcmp(pszName,
"ListOfSubstrates"))
4078 pszName,
"ListOfSubstrates",
mParser.getCurrentLineNumber());
4084 mParser.onEndElement(pszName);
4089 if (strcmp(pszName,
"Substrate"))
4091 pszName,
"Substrate",
mParser.getCurrentLineNumber());
4093 mCurrentElement = ListOfSubstrates;
4097 mCurrentElement = mLastKnownElement;
4102 pszName,
"???",
mParser.getCurrentLineNumber());
4116 deleteCurrentHandler();
4120 const XML_Char **papszAttrs)
4122 const char * Metabolite;
4125 const char * Stoichiometry;
4129 switch (mCurrentElement)
4133 if (strcmp(pszName,
"Substrate"))
4135 pszName,
"Substrate",
mParser.getCurrentLineNumber());
4137 Metabolite =
mParser.getAttributeValue(
"metabolite", papszAttrs);
4138 Stoichiometry =
mParser.getAttributeValue(
"stoichiometry", papszAttrs);
4149 mLastKnownElement = mCurrentElement - 1;
4152 mParser.onStartElement(pszName, papszAttrs);
4161 switch (mCurrentElement)
4165 if (strcmp(pszName,
"Substrate"))
4167 pszName,
"Substrate",
mParser.getCurrentLineNumber());
4173 mParser.onEndElement(pszName);
4177 mCurrentElement = mLastKnownElement;
4182 pszName,
"???",
mParser.getCurrentLineNumber());
4196 deleteCurrentHandler();
4200 const XML_Char **papszAttrs)
4204 switch (mCurrentElement)
4206 case ListOfProducts:
4208 if (strcmp(pszName,
"ListOfProducts"))
4210 pszName,
"ListOfProducts",
mParser.getCurrentLineNumber());
4216 if (strcmp(pszName,
"Product"))
4218 pszName,
"Product",
mParser.getCurrentLineNumber());
4221 if (!mpCurrentHandler)
4225 mParser.pushElementHandler(mpCurrentHandler);
4226 mpCurrentHandler->start(pszName, papszAttrs);
4230 mLastKnownElement = mCurrentElement - 1;
4233 mParser.onStartElement(pszName, papszAttrs);
4242 switch (mCurrentElement)
4244 case ListOfProducts:
4246 if (strcmp(pszName,
"ListOfProducts"))
4248 pszName,
"ListOfProducts",
mParser.getCurrentLineNumber());
4254 mParser.onEndElement(pszName);
4259 if (strcmp(pszName,
"Product"))
4261 pszName,
"Product",
mParser.getCurrentLineNumber());
4263 mCurrentElement = ListOfProducts;
4267 mCurrentElement = mLastKnownElement;
4272 pszName,
"???",
mParser.getCurrentLineNumber());
4286 deleteCurrentHandler();
4290 const XML_Char **papszAttrs)
4292 const char * Metabolite;
4295 const char * Stoichiometry;
4299 switch (mCurrentElement)
4303 if (strcmp(pszName,
"Product"))
4305 pszName,
"Product",
mParser.getCurrentLineNumber());
4307 Metabolite =
mParser.getAttributeValue(
"metabolite", papszAttrs);
4308 Stoichiometry =
mParser.getAttributeValue(
"stoichiometry", papszAttrs);
4319 mLastKnownElement = mCurrentElement - 1;
4322 mParser.onStartElement(pszName, papszAttrs);
4331 switch (mCurrentElement)
4335 if (strcmp(pszName,
"Product"))
4337 pszName,
"Product",
mParser.getCurrentLineNumber());
4343 mParser.onEndElement(pszName);
4347 mCurrentElement = mLastKnownElement;
4352 pszName,
"???",
mParser.getCurrentLineNumber());
4366 deleteCurrentHandler();
4370 const XML_Char **papszAttrs)
4374 switch (mCurrentElement)
4376 case ListOfModifiers:
4378 if (strcmp(pszName,
"ListOfModifiers"))
4380 pszName,
"ListOfModifiers",
mParser.getCurrentLineNumber());
4386 if (strcmp(pszName,
"Modifier"))
4388 pszName,
"Modifier",
mParser.getCurrentLineNumber());
4391 if (!mpCurrentHandler)
4395 mParser.pushElementHandler(mpCurrentHandler);
4396 mpCurrentHandler->start(pszName, papszAttrs);
4400 mLastKnownElement = mCurrentElement - 1;
4403 mParser.onStartElement(pszName, papszAttrs);
4412 switch (mCurrentElement)
4414 case ListOfModifiers:
4416 if (strcmp(pszName,
"ListOfModifiers"))
4418 pszName,
"ListOfModifiers",
mParser.getCurrentLineNumber());
4424 mParser.onEndElement(pszName);
4429 if (strcmp(pszName,
"Modifier"))
4431 pszName,
"Modifier",
mParser.getCurrentLineNumber());
4433 mCurrentElement = ListOfModifiers;
4437 mCurrentElement = mLastKnownElement;
4442 pszName,
"???",
mParser.getCurrentLineNumber());
4456 deleteCurrentHandler();
4460 const XML_Char **papszAttrs)
4462 const char * Metabolite;
4465 const char * Stoichiometry;
4469 switch (mCurrentElement)
4473 if (strcmp(pszName,
"Modifier"))
4475 pszName,
"Modifier",
mParser.getCurrentLineNumber());
4477 Metabolite =
mParser.getAttributeValue(
"metabolite", papszAttrs);
4478 Stoichiometry =
mParser.getAttributeValue(
"stoichiometry", papszAttrs);
4489 mLastKnownElement = mCurrentElement - 1;
4492 mParser.onStartElement(pszName, papszAttrs);
4501 switch (mCurrentElement)
4505 if (strcmp(pszName,
"Modifier"))
4507 pszName,
"Modifier",
mParser.getCurrentLineNumber());
4513 mParser.onEndElement(pszName);
4517 mCurrentElement = mLastKnownElement;
4522 pszName,
"???",
mParser.getCurrentLineNumber());
4536 deleteCurrentHandler();
4540 const XML_Char **papszAttrs)
4544 switch (mCurrentElement)
4546 case ListOfConstants:
4548 if (strcmp(pszName,
"ListOfConstants"))
4550 pszName,
"ListOfConstants",
mParser.getCurrentLineNumber());
4557 if (strcmp(pszName,
"Constant"))
4559 pszName,
"Constant",
mParser.getCurrentLineNumber());
4562 if (!mpCurrentHandler)
4566 mParser.pushElementHandler(mpCurrentHandler);
4567 mpCurrentHandler->start(pszName, papszAttrs);
4571 mLastKnownElement = mCurrentElement - 1;
4574 mParser.onStartElement(pszName, papszAttrs);
4583 switch (mCurrentElement)
4585 case ListOfConstants:
4587 if (strcmp(pszName,
"ListOfConstants"))
4589 pszName,
"ListOfConstants",
mParser.getCurrentLineNumber());
4595 mParser.onEndElement(pszName);
4600 if (strcmp(pszName,
"Constant"))
4602 pszName,
"Constant",
mParser.getCurrentLineNumber());
4604 mCurrentElement = ListOfConstants;
4608 mCurrentElement = mLastKnownElement;
4613 pszName,
"???",
mParser.getCurrentLineNumber());
4627 deleteCurrentHandler();
4631 const XML_Char **papszAttrs)
4639 switch (mCurrentElement)
4643 if (strcmp(pszName,
"Constant"))
4645 pszName,
"Constant",
mParser.getCurrentLineNumber());
4647 Key =
mParser.getAttributeValue(
"key", papszAttrs);
4648 Name =
mParser.getAttributeValue(
"name", papszAttrs);
4649 Value =
mParser.getAttributeValue(
"value", papszAttrs);
4652 getParameters().addParameter(Name,
4662 mLastKnownElement = mCurrentElement - 1;
4665 mParser.onStartElement(pszName, papszAttrs);
4674 switch (mCurrentElement)
4678 if (strcmp(pszName,
"Constant"))
4680 pszName,
"Constant",
mParser.getCurrentLineNumber());
4686 mParser.onEndElement(pszName);
4690 mCurrentElement = mLastKnownElement;
4695 pszName,
"???",
mParser.getCurrentLineNumber());
4709 deleteCurrentHandler();
4713 const XML_Char **papszAttrs)
4715 const char * Function;
4719 switch (mCurrentElement)
4723 if (strcmp(pszName,
"KineticLaw"))
4725 pszName,
"KineticLaw",
mParser.getCurrentLineNumber());
4727 Function =
mParser.getAttributeValue(
"function", papszAttrs);
4736 mParser.getCurrentLineNumber());
4745 case ListOfCallParameters:
4747 if (strcmp(pszName,
"ListOfCallParameters"))
4749 pszName,
"ListOfCallParameters",
mParser.getCurrentLineNumber());
4752 mParser.onStartElement(pszName, papszAttrs);
4755 if (!mpCurrentHandler)
4759 mParser.pushElementHandler(mpCurrentHandler);
4760 mpCurrentHandler->start(pszName, papszAttrs);
4764 mLastKnownElement = mCurrentElement - 1;
4767 mParser.onStartElement(pszName, papszAttrs);
4776 switch (mCurrentElement)
4780 if (strcmp(pszName,
"KineticLaw"))
4782 pszName,
"KineticLaw",
mParser.getCurrentLineNumber());
4787 std::map< std::string, std::vector< std::string > >::const_iterator it
4789 std::map< std::string, std::vector< std::string > >::const_iterator end
4792 for (; it != end; ++it)
4793 if (it->second.size() > 0)
4802 mParser.onEndElement(pszName);
4805 case ListOfCallParameters:
4807 if (strcmp(pszName,
"ListOfCallParameters"))
4809 pszName,
"ListOfCallParameters",
mParser.getCurrentLineNumber());
4811 mCurrentElement = KineticLaw;
4817 mCurrentElement = KineticLaw;
4819 mCurrentElement = mLastKnownElement;
4825 pszName,
"???",
mParser.getCurrentLineNumber());
4839 deleteCurrentHandler();
4843 const XML_Char **papszAttrs)
4847 switch (mCurrentElement)
4849 case ListOfCallParameters:
4851 if (strcmp(pszName,
"ListOfCallParameters"))
4853 pszName,
"ListOfCallParameters",
mParser.getCurrentLineNumber());
4859 if (strcmp(pszName,
"CallParameter"))
4861 pszName,
"CallParameter",
mParser.getCurrentLineNumber());
4864 if (!mpCurrentHandler)
4868 mParser.pushElementHandler(mpCurrentHandler);
4869 mpCurrentHandler->start(pszName, papszAttrs);
4873 mLastKnownElement = mCurrentElement - 1;
4876 mParser.onStartElement(pszName, papszAttrs);
4885 switch (mCurrentElement)
4887 case ListOfCallParameters:
4889 if (strcmp(pszName,
"ListOfCallParameters"))
4891 pszName,
"ListOfCallParameters",
mParser.getCurrentLineNumber());
4897 mParser.onEndElement(pszName);
4902 if (strcmp(pszName,
"CallParameter"))
4904 pszName,
"CallParameter",
mParser.getCurrentLineNumber());
4906 mCurrentElement = ListOfCallParameters;
4910 mCurrentElement = mLastKnownElement;
4915 pszName,
"???",
mParser.getCurrentLineNumber());
4929 deleteCurrentHandler();
4933 const XML_Char **papszAttrs)
4935 const char * FunctionParameter;
4939 switch (mCurrentElement)
4943 if (strcmp(pszName,
"CallParameter"))
4945 pszName,
"CallParameter",
mParser.getCurrentLineNumber());
4948 mParser.getAttributeValue(
"functionParameter", papszAttrs);
4960 case SourceParameter:
4962 if (strcmp(pszName,
"SourceParameter"))
4964 pszName,
"SourceParameter",
mParser.getCurrentLineNumber());
4967 if (!mpCurrentHandler)
4971 mParser.pushElementHandler(mpCurrentHandler);
4972 mpCurrentHandler->start(pszName, papszAttrs);
4976 mLastKnownElement = mCurrentElement - 1;
4979 mParser.onStartElement(pszName, papszAttrs);
4988 switch (mCurrentElement)
4992 if (strcmp(pszName,
"CallParameter"))
4994 pszName,
"CallParameter",
mParser.getCurrentLineNumber());
5000 mParser.onEndElement(pszName);
5003 case SourceParameter:
5005 if (strcmp(pszName,
"SourceParameter"))
5007 pszName,
"SourceParameter",
mParser.getCurrentLineNumber());
5009 mCurrentElement = CallParameter;
5013 mCurrentElement = mLastKnownElement;
5018 pszName,
"???",
mParser.getCurrentLineNumber());
5032 deleteCurrentHandler();
5036 const XML_Char **papszAttrs)
5040 const char * Reference;
5045 switch (mCurrentElement)
5047 case SourceParameter:
5049 if (strcmp(pszName,
"SourceParameter"))
5051 pszName,
"SourceParameter",
mParser.getCurrentLineNumber());
5054 mParser.getAttributeValue(
"reference", papszAttrs);
5058 if ((pParameter = dynamic_cast< CCopasiParameter * >(pObject)))
5067 else if ((pME = dynamic_cast<CModelEntity*>(pObject)))
5075 mLastKnownElement = mCurrentElement - 1;
5078 mParser.onStartElement(pszName, papszAttrs);
5087 switch (mCurrentElement)
5089 case SourceParameter:
5091 if (strcmp(pszName,
"SourceParameter"))
5093 pszName,
"SourceParameter",
mParser.getCurrentLineNumber());
5099 mParser.onEndElement(pszName);
5103 mCurrentElement = mLastKnownElement;
5108 pszName,
"???",
mParser.getCurrentLineNumber());
5122 deleteCurrentHandler();
5126 const XML_Char **papszAttrs)
5130 switch (mCurrentElement)
5134 if (strcmp(pszName,
"StateTemplate"))
5136 pszName,
"StateTemplate",
mParser.getCurrentLineNumber());
5141 case StateTemplateVariable:
5143 if (strcmp(pszName,
"StateTemplateVariable"))
5145 pszName,
"StateTemplateVariable",
mParser.getCurrentLineNumber());
5148 if (!mpCurrentHandler)
5152 mParser.pushElementHandler(mpCurrentHandler);
5153 mpCurrentHandler->start(pszName, papszAttrs);
5157 mLastKnownElement = mCurrentElement - 1;
5160 mParser.onStartElement(pszName, papszAttrs);
5169 switch (mCurrentElement)
5173 if (strcmp(pszName,
"StateTemplate"))
5175 pszName,
"StateTemplate",
mParser.getCurrentLineNumber());
5181 mParser.onEndElement(pszName);
5184 case StateTemplateVariable:
5186 if (strcmp(pszName,
"StateTemplateVariable"))
5188 pszName,
"StateTemplateVariable",
mParser.getCurrentLineNumber());
5190 mCurrentElement = StateTemplate;
5194 mCurrentElement = mLastKnownElement;
5199 pszName,
"???",
mParser.getCurrentLineNumber());
5213 deleteCurrentHandler();
5217 const XML_Char **papszAttrs)
5219 const char * ObjectReference;
5224 switch (mCurrentElement)
5226 case StateTemplateVariable:
5228 if (strcmp(pszName,
"StateTemplateVariable"))
5230 pszName,
"StateTemplateVariable",
mParser.getCurrentLineNumber());
5232 ObjectReference =
mParser.getAttributeValue(
"objectReference",
5244 mLastKnownElement = mCurrentElement - 1;
5247 mParser.onStartElement(pszName, papszAttrs);
5256 switch (mCurrentElement)
5258 case StateTemplateVariable:
5260 if (strcmp(pszName,
"StateTemplateVariable"))
5262 pszName,
"StateTemplateVariable",
mParser.getCurrentLineNumber());
5268 mParser.onEndElement(pszName);
5272 mCurrentElement = mLastKnownElement;
5277 pszName,
"???",
mParser.getCurrentLineNumber());
5291 deleteCurrentHandler();
5295 const XML_Char **papszAttrs)
5301 switch (mCurrentElement)
5305 if (strcmp(pszName,
"InitialState"))
5307 pszName,
"InitialState",
mParser.getCurrentLineNumber());
5309 Type =
mParser.getAttributeValue(
"type", papszAttrs,
"initialState");
5311 if (strcmp(Type,
"initialState"))
fatalError();
5313 mParser.enableCharacterDataHandler();
5317 mLastKnownElement = mCurrentElement - 1;
5320 mParser.onStartElement(pszName, papszAttrs);
5329 std::istringstream Values;
5330 std::string StringValue;
5331 std::vector< CModelEntity * >::iterator it;
5332 std::vector< CModelEntity * >::iterator end;
5340 switch (mCurrentElement)
5344 if (strcmp(pszName,
"InitialState"))
5346 pszName,
"InitialState",
mParser.getCurrentLineNumber());
5348 Values.str(
mParser.getCharacterData(
"\x0a\x0d\t ",
" "));
5353 for (Values >> StringValue; it != end; ++it, Values >> StringValue)
5355 if (Values.fail())
break;
5363 pValues[Index] = Value;
5370 if (it != end || !Values.fail() || !Values.eof())
5381 mParser.onEndElement(pszName);
5385 mCurrentElement = mLastKnownElement;
5390 pszName,
"???",
mParser.getCurrentLineNumber());
5404 deleteCurrentHandler();
5408 const XML_Char ** papszAttrs)
5412 switch (mCurrentElement)
5414 case ListOfPlotItems:
5416 if (strcmp(pszName,
"ListOfPlotItems"))
5418 pszName,
"ListOfPlotItems",
mParser.getCurrentLineNumber());
5424 if (strcmp(pszName,
"PlotItem"))
5426 pszName,
"PlotItem",
mParser.getCurrentLineNumber());
5429 if (!mpCurrentHandler)
5434 mParser.pushElementHandler(mpCurrentHandler);
5435 mpCurrentHandler->start(pszName, papszAttrs);
5439 mLastKnownElement = mCurrentElement - 1;
5442 mParser.onStartElement(pszName, papszAttrs);
5451 switch (mCurrentElement)
5453 case ListOfPlotItems:
5455 if (strcmp(pszName,
"ListOfPlotItems"))
5457 pszName,
"ListOfPlotItems",
mParser.getCurrentLineNumber());
5461 mParser.onEndElement(pszName);
5466 if (strcmp(pszName,
"PlotItem"))
5468 pszName,
"PlotItem",
mParser.getCurrentLineNumber());
5471 mCurrentElement = ListOfPlotItems;
5475 mCurrentElement = mLastKnownElement;
5480 pszName,
"???",
mParser.getCurrentLineNumber());
5494 deleteCurrentHandler();
5498 const XML_Char ** papszAttrs)
5502 switch (mCurrentElement)
5504 case ListOfChannels:
5506 if (strcmp(pszName,
"ListOfChannels"))
5508 pszName,
"ListOfChannels",
mParser.getCurrentLineNumber());
5514 if (strcmp(pszName,
"ChannelSpec"))
5516 pszName,
"ChannelSpec",
mParser.getCurrentLineNumber());
5518 if (!mpCurrentHandler)
5523 mParser.pushElementHandler(mpCurrentHandler);
5524 mpCurrentHandler->start(pszName, papszAttrs);
5528 mLastKnownElement = mCurrentElement - 1;
5531 mParser.onStartElement(pszName, papszAttrs);
5540 switch (mCurrentElement)
5542 case ListOfChannels:
5544 if (strcmp(pszName,
"ListOfChannels"))
5546 pszName,
"ListOfChannels",
mParser.getCurrentLineNumber());
5550 mParser.onEndElement(pszName);
5555 if (strcmp(pszName,
"ChannelSpec"))
5557 pszName,
"ChannelSpec",
mParser.getCurrentLineNumber());
5563 mCurrentElement = ListOfChannels;
5567 mCurrentElement = mLastKnownElement;
5572 pszName,
"???",
mParser.getCurrentLineNumber());
5586 deleteCurrentHandler();
5590 const XML_Char ** papszAttrs)
5594 switch (mCurrentElement)
5598 if (strcmp(pszName,
"ListOfPlots"))
5600 pszName,
"ListOfPlots",
mParser.getCurrentLineNumber());
5609 case PlotSpecification:
5611 if (strcmp(pszName,
"PlotSpecification"))
5613 pszName,
"PlotSpecification",
mParser.getCurrentLineNumber());
5616 if (!mpCurrentHandler)
5621 mParser.pushElementHandler(mpCurrentHandler);
5622 mpCurrentHandler->start(pszName, papszAttrs);
5626 mLastKnownElement = mCurrentElement - 1;
5629 mParser.onStartElement(pszName, papszAttrs);
5638 switch (mCurrentElement)
5642 if (strcmp(pszName,
"ListOfPlots"))
5644 pszName,
"ListOfPlots",
mParser.getCurrentLineNumber());
5648 mParser.onEndElement(pszName);