19 #define START_ELEMENT -1
20 #define UNKNOWN_ELEMENT -2
37 const XML_Char **papszAttrs)
40 const XML_Char ** ppAttrs;
42 if (mLevel) mCurrentElement = Content;
44 switch (mCurrentElement)
46 case UnsupportedAnnotation:
48 if (strcmp(pszName,
"UnsupportedAnnotation"))
50 pszName,
"UnsupportedAnnotation",
mParser.getCurrentLineNumber());
52 mName =
mParser.getAttributeValue(
"name", papszAttrs);
55 mParser.enableCharacterDataHandler();
56 mElementEmpty.push(
false);
61 if (mElementEmpty.top() ==
true)
64 mElementEmpty.top() =
false;
68 mXML <<
"<" << pszName;
70 for (ppAttrs = papszAttrs; *ppAttrs && **ppAttrs; ppAttrs += 2)
71 mXML <<
" " << *ppAttrs <<
"=\""
75 mElementEmpty.push(
true);
77 mParser.enableCharacterDataHandler();
81 mLastKnownElement = mCurrentElement - 1;
84 mParser.onStartElement(pszName, papszAttrs);
96 switch (mCurrentElement)
98 case UnsupportedAnnotation:
100 if (strcmp(pszName,
"UnsupportedAnnotation"))
102 pszName,
"UnsupportedAnnotation",
mParser.getCurrentLineNumber());
110 std::string::size_type pos = XML.find_first_not_of(
"\x0a\x0d\t ");
112 if (pos != 0) XML.erase(0, pos);
115 pos = XML.find_last_not_of(
"\x0a\x0d\t ");
117 if (pos < XML.length())
118 XML = XML.substr(0, pos + 1);
127 deleteCurrentHandler();
134 XML =
mParser.getCharacterData();
137 if (mElementEmpty.top() ==
true)
141 mElementEmpty.top() =
false;
151 if (mElementEmpty.top() ==
false)
152 mXML <<
"</" << pszName <<
">";
155 mElementEmpty.top() =
false;
158 if (!mLevel) mCurrentElement = UnsupportedAnnotation;
160 mParser.enableCharacterDataHandler();
164 mCurrentElement = mLastKnownElement;
169 pszName,
"???",
mParser.getCurrentLineNumber());
189 mUnsupportedAnnotations(),
190 mpUnsupportedAnnotationElement(NULL)
196 pdelete(mpUnsupportedAnnotationElement);
201 const XML_Char **papszAttrs)
203 mpCurrentHandler = NULL;
204 mCurrentElement = mLastKnownElement;
206 while (mpCurrentHandler == NULL)
210 switch (mCurrentElement)
212 case ListOfUnsupportedAnnotations:
214 if (strcmp(pszName,
"ListOfUnsupportedAnnotations"))
216 pszName,
"ListOfUnsupportedAnnotations",
mParser.getCurrentLineNumber());
218 mLastKnownElement = ListOfUnsupportedAnnotations;
219 mUnsupportedAnnotations.clear();
223 case UnsupportedAnnotation:
225 if (!strcmp(pszName,
"UnsupportedAnnotation"))
228 if (!mpUnsupportedAnnotationElement)
231 mpCurrentHandler = mpUnsupportedAnnotationElement;
238 mpCurrentHandler = &
mParser.mUnknownElement;
243 mParser.pushElementHandler(mpCurrentHandler);
245 if (mpCurrentHandler != &
mParser.mUnknownElement)
247 mLastKnownElement = mCurrentElement;
250 mParser.onStartElement(pszName, papszAttrs);
256 switch (mCurrentElement)
258 case ListOfUnsupportedAnnotations:
260 if (strcmp(pszName,
"ListOfUnsupportedAnnotations"))
262 pszName,
"ListOfUnsupportedAnnotations",
mParser.getCurrentLineNumber());
272 case UnsupportedAnnotation:
274 if (strcmp(pszName,
"UnsupportedAnnotation"))
276 pszName,
"UnsupportedAnnotation",
mParser.getCurrentLineNumber());
278 if (mpUnsupportedAnnotationElement != NULL)
280 mUnsupportedAnnotations[mpUnsupportedAnnotationElement->getName()] =
281 mpUnsupportedAnnotationElement->getXML();
284 mLastKnownElement = ListOfUnsupportedAnnotations;
285 mCurrentElement = ListOfUnsupportedAnnotations;
289 mCurrentElement = mLastKnownElement;
294 pszName,
"???",
mParser.getCurrentLineNumber());
303 return mUnsupportedAnnotations;
SCopasiXMLParserCommon mCommon
virtual ~UnsupportedAnnotationElement()
virtual void end(const XML_Char *pszName)
const CAnnotation::UnsupportedAnnotation & getUnsupportedAnnotations() const
UnsupportedAnnotationElement(CCopasiXMLParser &parser, SCopasiXMLParserCommon &common)
ListOfUnsupportedAnnotationsElement(CCopasiXMLParser &parser, SCopasiXMLParserCommon &common)
virtual ~ListOfUnsupportedAnnotationsElement()
virtual void end(const XML_Char *pszName)
std::string getXML() const
const std::string & getName() const
virtual void start(const XML_Char *pszName, const XML_Char **papszAttrs)
std::map< std::string, std::string > UnsupportedAnnotation
static std::string encode(const std::string &str, const EncodingType &type=standard)
virtual void start(const XML_Char *pszName, const XML_Char **papszAttrs)