36 #ifndef MCE_TEXTREADER_H
37 #define MCE_TEXTREADER_H
56 #include <libxml/xmlwriter.h>
64 xmlTextReaderPtr reader;
153 #define mce_start_document(_reader_) \
154 if (NULL!=(_reader_)) { \
155 mceTextReaderRead(_reader_); \
162 #define mce_end_document(_reader_) \
172 #define mce_start_choice(_reader_) \
179 #define mce_end_choice(_reader_)
187 #define mce_skip_attributes(_reader_) \
188 mce_start_attributes(_reader_) { \
189 } mce_end_attributes(_reader_);
197 #define mce_skip_children(_reader_) \
198 mce_start_children(_reader_) { \
199 } mce_end_children(_reader_);
205 #define mce_start_children(_reader_) \
206 if (!xmlTextReaderIsEmptyElement((_reader_)->reader)) { \
207 mceTextReaderRead(_reader_); do { \
214 #define mce_end_children(_reader_) \
216 if (XML_READER_TYPE_END_ELEMENT!=xmlTextReaderNodeType((_reader_)->reader)) { \
217 mceTextReaderNext(_reader_); \
220 } while(XML_READER_TYPE_END_ELEMENT!=xmlTextReaderNodeType((_reader_)->reader) && \
221 XML_READER_TYPE_NONE!=xmlTextReaderNodeType((_reader_)->reader)); \
252 #define mce_match_element(_reader_, ns, ln) \
253 } else if (XML_READER_TYPE_ELEMENT==xmlTextReaderNodeType((_reader_)->reader) \
254 && (NULL==ns || 0==xmlStrcmp(ns, xmlTextReaderConstNamespaceUri((_reader_)->reader))) \
255 && (NULL==ln || 0==xmlStrcmp(ln, xmlTextReaderConstLocalName((_reader_)->reader)))) {
285 #define mce_start_element(_reader_, ns, ln) \
286 mce_match_element(_reader_, ns, ln)
292 #define mce_end_element(_reader_) \
293 mceTextReaderNext(_reader_)
299 #define mce_match_text(_reader_) \
300 } else if (XML_READER_TYPE_TEXT==xmlTextReaderNodeType((_reader_)->reader) \
301 || XML_READER_TYPE_SIGNIFICANT_WHITESPACE==xmlTextReaderNodeType((_reader_)->reader)) {
308 #define mce_start_text(_reader_) \
309 mce_match_text(_reader_)
315 #define mce_end_text(_reader_) \
316 mceTextReaderNext(_reader_)
322 #define mce_start_attributes(_reader_) \
323 if (1==xmlTextReaderMoveToFirstAttribute((_reader_)->reader)) { \
331 #define mce_end_attributes(_reader_) \
333 } while(1==xmlTextReaderMoveToNextAttribute((_reader_)->reader)); \
334 xmlTextReaderMoveToElement((_reader_)->reader); }
363 #define mce_match_attribute(_reader_, ns, ln) \
364 } else if ((NULL==ns || 0==xmlStrcmp(ns, xmlTextReaderConstNamespaceUri((_reader_)->reader))) \
365 && (NULL==ln || 0==xmlStrcmp(ln, xmlTextReaderConstLocalName((_reader_)->reader)))) {
371 #define mce_start_attribute(_reader_, ns, ln) \
372 mce_match_attribute(_reader_, ns, ln)
378 #define mce_end_attribute(_reader_)
410 #define mce_error_guard_start(_reader_) if (MCE_ERROR_NONE==(_reader_)->mceCtx.error) do {
416 #define mce_error_guard_end(_reader_) } while(0)
422 #define mce_error(_reader_, guard, err, msg) if (guard) { (_reader_)->mceCtx.error=(err); fprintf(stderr, (NULL!=msg?msg:#err)); continue; }
428 #if defined(__GNUC__)
429 #define mce_errorf(_reader_, guard, err, msg, ...) if (guard) { mceRaiseError((_reader_)->reader, &(_reader_)->mceCtx, err, _X((NULL!=msg?msg:#err)), ##__VA_ARGS__ ); continue; }
431 #define mce_errorf(_reader_, guard, err, msg, ...) if (guard) { mceRaiseError((_reader_)->reader, &(_reader_)->mceCtx, err, _X((NULL!=msg?msg:#err)), __VA_ARGS__ ); continue; }
438 #define mce_error_strict mce_error
444 #define mce_error_strictf mce_errorf
457 #define mce_ref(r) (r)
pbool_t mceTextReaderDisableMCE(mceTextReader_t *mceTextReader, pbool_t flag)
Definition: textreader.c:418
void mceRaiseError(xmlTextReader *reader, mceCtx_t *ctx, mceError_t error, const xmlChar *str,...)
Definition: textreader.c:80
Definition: textreader.h:63
int mceTextReaderCleanup(mceTextReader_t *mceTextReader)
Definition: textreader.c:42
int mceTextReaderDump(mceTextReader_t *mceTextReader, xmlTextWriter *writer, pbool_t fragment)
Definition: textreader.c:349
int mceTextReaderUnderstandsNamespace(mceTextReader_t *mceTextReader, const xmlChar *ns)
Definition: textreader.c:414
mceError_t mceTextReaderGetError(mceTextReader_t *mceTextReader)
Definition: textreader.c:336
int mceTextReaderPostprocess(xmlTextReader *reader, mceCtx_t *ctx, int ret)
Definition: textreader.c:284
int mceTextReaderRead(mceTextReader_t *mceTextReader)
Definition: textreader.c:340
int mceTextReaderInit(mceTextReader_t *mceTextReader, xmlTextReaderPtr reader)
Definition: textreader.c:35
int mceTextReaderNext(mceTextReader_t *mceTextReader)
Definition: textreader.c:344