libopc
Data Structures | Macros | Typedefs | Functions
textreader.h File Reference
#include <mce/config.h>
#include <opc/opc.h>
#include <mce/helper.h>
#include <libxml/xmlwriter.h>

Go to the source code of this file.

Data Structures

struct  MCE_TEXTREADER
 

Macros

#define mce_start_document(_reader_)
 
#define mce_end_document(_reader_)
 
#define mce_start_choice(_reader_)
 
#define mce_end_choice(_reader_)
 
#define mce_skip_attributes(_reader_)
 
#define mce_skip_children(_reader_)
 
#define mce_start_children(_reader_)
 
#define mce_end_children(_reader_)
 
#define mce_match_element(_reader_, ns, ln)
 
#define mce_start_element(_reader_, ns, ln)
 
#define mce_end_element(_reader_)
 
#define mce_match_text(_reader_)
 
#define mce_start_text(_reader_)
 
#define mce_end_text(_reader_)
 
#define mce_start_attributes(_reader_)
 
#define mce_end_attributes(_reader_)
 
#define mce_match_attribute(_reader_, ns, ln)
 
#define mce_start_attribute(_reader_, ns, ln)
 
#define mce_end_attribute(_reader_)
 
#define mce_error_guard_start(_reader_)
 
#define mce_error_guard_end(_reader_)
 
#define mce_error(_reader_, guard, err, msg)
 
#define mce_errorf(_reader_, guard, err, msg, ...)
 
#define mce_error_strict
 
#define mce_error_strictf
 
#define mce_def
 
#define mce_ref(r)
 

Typedefs

typedef struct MCE_TEXTREADER mceTextReader_t
 

Functions

int mceTextReaderRead (mceTextReader_t *mceTextReader)
 
int mceTextReaderNext (mceTextReader_t *mceTextReader)
 
int mceTextReaderInit (mceTextReader_t *mceTextReader, xmlTextReaderPtr reader)
 
int mceTextReaderCleanup (mceTextReader_t *mceTextReader)
 
int mceTextReaderDump (mceTextReader_t *mceTextReader, xmlTextWriter *writer, pbool_t fragment)
 
int mceTextReaderUnderstandsNamespace (mceTextReader_t *mceTextReader, const xmlChar *ns)
 
pbool_t mceTextReaderDisableMCE (mceTextReader_t *mceTextReader, pbool_t flag)
 
void mceRaiseError (xmlTextReader *reader, mceCtx_t *ctx, mceError_t error, const xmlChar *str,...)
 
int mceTextReaderPostprocess (xmlTextReader *reader, mceCtx_t *ctx, int ret)
 
mceError_t mceTextReaderGetError (mceTextReader_t *mceTextReader)
 

Macro Definition Documentation

#define mce_def

Marker for a MCE defintion.

Examples:
opc_xml.c.
#define mce_end_attribute (   _reader_)
#define mce_end_attributes (   _reader_)
See also
mce_start_element.
Examples:
opc_xml.c.
#define mce_end_children (   _reader_)
See also
mce_start_element.
Examples:
opc_text.c, opc_xml.c, and opc_xml2.c.
#define mce_end_choice (   _reader_)
#define mce_end_document (   _reader_)
#define mce_end_element (   _reader_)
See also
mce_start_element.
Examples:
opc_text.c, opc_xml.c, and opc_xml2.c.
#define mce_end_text (   _reader_)
See also
mce_start_element.
Examples:
opc_text.c, opc_xml.c, and opc_xml2.c.
#define mce_error (   _reader_,
  guard,
  err,
  msg 
)

Signal an error if guard if false.

#define mce_error_guard_end (   _reader_)
#define mce_error_guard_start (   _reader_)

Error handling for MCE parsers.

1 mce_start_element(&reader, NULL, _X("Default")) {
2  const xmlChar *ext=NULL;
3  const xmlChar *type=NULL;
4  mce_start_attributes(&reader) {
5  mce_start_attribute(&reader, NULL, _X("Extension")) {
6  ext=xmlTextReaderConstValue(reader.reader);
7  } mce_end_attribute(&reader);
8  mce_start_attribute(&reader, NULL, _X("ContentType")) {
9  type=xmlTextReaderConstValue(reader.reader);
10  } mce_end_attribute(&reader);
11  } mce_end_attributes(&reader);
12  mce_error_guard_start(&reader) {
13  mce_error(&reader, NULL==ext || ext[0]==0, MCE_ERROR_VALIDATION, "Missing @Extension attribute!");
14  mce_error(&reader, NULL==type || type[0]==0, MCE_ERROR_VALIDATION, "Missing @ContentType attribute!");
15  opcContainerType *ct=insertType(c, type, OPC_TRUE);
16  mce_error(&reader, NULL==ct, MCE_ERROR_MEMORY, NULL);
17  opcContainerExtension *ce=opcContainerInsertExtension(c, ext, OPC_TRUE);
18  mce_error(&reader, NULL==ce, MCE_ERROR_MEMORY, NULL);
19  mce_errorf(&reader, NULL!=ce->type && 0!=xmlStrcmp(ce->type, type), MCE_ERROR_VALIDATION, "Extension \"%s\" is mapped to type \"%s\" as well as \"%s\"", ext, type, ce->type);
20  ce->type=ct->type;
21  } mce_error_guard_end(&reader);
22  mce_skip_children(&reader);
23 } mce_end_element(&reader);
#define mce_error_strict

Only issues the error when in "strict mode".

#define mce_error_strictf
#define mce_errorf (   _reader_,
  guard,
  err,
  msg,
  ... 
)

Signal an error if guard if false.

#define mce_match_attribute (   _reader_,
  ns,
  ln 
)

Helper macro to match an attribute. Usefull for calling code in a seperate function:

1 void handleA(reader) {
2  mce_start_choice(reader) {
3  mce_start_attribute(reader, _X("ns"), _X("attr")) {
4 
5  } mce_end_attribute(reader);
6  } mce_end_choice(reader);
7 }
8 
9 void parse(reader) {
10  mce_start_document(reader) {
11  mce_start_element(reader, _X("ns"), _X("ln")) {
12  mce_start_attributes(reader) {
13  mce_match_attribute(reader, _X("ns"), _X("attr")) {
14  handleA(reader);
15  }
16  } mce_end_attributes(reader);
17  mce_skip_children(reader);
18  } mce_end_element();
19  } mce_end_document(reader);
20 }
#define mce_match_element (   _reader_,
  ns,
  ln 
)

Helper macro to match an element. Usefull for calling code in a seperate function:

1 void handleElement(reader) {
2  mce_start_choice(reader) {
3  mce_start_element(reader, _X("ns"), _X("element")) {
4 
5  } mce_end_element(reader)
6  } mce_end_choice(reader);
7 }
8 
9 void parse(reader) {
10  mce_start_document(reader) {
11  mce_start_element(reader, _X("ns"), _X("ln")) {
12  mce_skip_attributes(reader);
13  mce_start_children(reader) {
14  mce_match_element(reader, _X("ns"), _X("element")) {
15  handleElement(reader);
16  }
17  } mce_end_children(reader);
18  } mce_end_element();
19  } mce_end_document(reader);
20 }
#define mce_match_text (   _reader_)

Matches #TEXT without consuming it.

#define mce_ref (   r)

Marker for a MCE reference.

Examples:
opc_xml.c.
#define mce_skip_attributes (   _reader_)

Skips the attributes.

See also
mce_match_element.
Examples:
opc_text.c, and opc_xml2.c.
#define mce_skip_children (   _reader_)

Skips the attributes.

See also
mce_match_attribute.
#define mce_start_attribute (   _reader_,
  ns,
  ln 
)
#define mce_start_attributes (   _reader_)
See also
mce_start_element.
Examples:
opc_xml.c.
#define mce_start_children (   _reader_)
See also
mce_start_element.
Examples:
opc_text.c, opc_xml.c, and opc_xml2.c.
#define mce_start_choice (   _reader_)

Container for mce_start_element and mce_start_attribute declarations.

See also
mce_match_element
mce_match_attribute
#define mce_start_document (   _reader_)

Helper macro to declare a start/end document block in a declarative way:

1 mce_start_document(reader) {
2 } mce_end_document(reader);
Examples:
opc_text.c, opc_xml.c, and opc_xml2.c.
#define mce_start_element (   _reader_,
  ns,
  ln 
)

Helper macro to declare a element block in a declarative way:

1 mce_start_element(reader) {
2  mce_start_attributes(reader) {
3  mce_start_attribute(reader, _X("ns"), _X("lnA")) {
4  // code for handling lnA.
5  } mce_end_attribute(reader);
6  mce_start_attribute(reader, _X("ns"), _X("lnB")) {
7  // code for handling lnB.
8  } mce_end_attribute(reader);
9  } mce_end_attributes(reader);
10  mce_start_children(reader) {
11  mce_start_element(reader, _X("ns"), _X("lnA")) {
12  // code for handling lnA.
13  } mce_end_element(reader);
14  mce_start_element(reader, _X("ns"), _X("lnB")) {
15  // code for handling lnB.
16  } mce_end_element(reader);
17  mce_start_text(reader) {
18  // code for handling text.
19  } mce_end_text(reader);
20  } mce_end_children(reader);
21 } mce_end_element(reader);
Examples:
opc_text.c, opc_xml.c, and opc_xml2.c.
#define mce_start_text (   _reader_)
See also
mce_start_element.
Examples:
opc_text.c, opc_xml.c, and opc_xml2.c.

Typedef Documentation

A handle to an MCE-aware libxml2 xmlTextReader.

Function Documentation

void mceRaiseError ( xmlTextReader *  reader,
mceCtx_t ctx,
mceError_t  error,
const xmlChar *  str,
  ... 
)

Signal an error to the MCE processor.

int mceTextReaderCleanup ( mceTextReader_t mceTextReader)

Cleanup MCE reader, i.e. free all resources. Also calls xmlTextReaderClose and xmlFreeTextReader.

See also
http://xmlsoft.org/html/libxml-xmlreader.html#xmlTextReaderClose
http://xmlsoft.org/html/libxml-xmlreader.html#xmlFreeTextReader
Examples:
mce_read.c, opc_part.c, opc_text.c, opc_xml.c, and opc_xml2.c.
pbool_t mceTextReaderDisableMCE ( mceTextReader_t mceTextReader,
pbool_t  flag 
)

Disable MCE processing.

Returns
Returns old value.
int mceTextReaderDump ( mceTextReader_t mceTextReader,
xmlTextWriter *  writer,
pbool_t  fragment 
)

Reads all events mceTextReader and pipes them to .

1 mceTextReader reader;
2 mceTextReaderInit(&reader, xmlNewTextReaderFilename("sample.xml"));
3 mceTextReaderUnderstandsNamespace(&reader, _X("http://myextension"));
4 xmlTextWriterPtr writer=xmlNewTextWriterFilename("out.xml", 0);
5 mceTextReaderDump(&reader, writer, P_FALSE);
6 xmlFreeTextWriter(writer);
7 mceTextReaderCleanup(&reader);
Examples:
mce_read.c, and opc_part.c.
mceError_t mceTextReaderGetError ( mceTextReader_t mceTextReader)

Get the error code.

int mceTextReaderInit ( mceTextReader_t mceTextReader,
xmlTextReaderPtr  reader 
)

Creates an mceTextReader from an XmlTextReader.

1 mceTextReader reader;
2 mceTextReaderInit(&reader, xmlNewTextReaderFilename("sample.xml"));
3 // reader is ready to use.
4 mceTextReaderCleanup(&reader);
See also
http://xmlsoft.org/html/libxml-xmlreader.html#xmlNewTextReaderFilename
Examples:
mce_read.c.
int mceTextReaderNext ( mceTextReader_t mceTextReader)

Wrapper around a libxml2 xmlTextReaderNext function.

See also
http://xmlsoft.org/html/libxml-xmlreader.html#xmlTextReaderNext
int mceTextReaderPostprocess ( xmlTextReader *  reader,
mceCtx_t ctx,
int  ret 
)

Internal function which does the MCE postprocessing. E.g. mceTextReaderRead() is implemented as

1 mceTextReaderPostprocess(mceTextReader->reader, &mceTextReader->mceCtx, xmlTextReaderRead(mceTextReader->reader))

This function is exposed to make existing libxm2 xmlTextReader MCE aware.

int mceTextReaderRead ( mceTextReader_t mceTextReader)

Wrapper around an libxml2 xmlTextReaderRead function.

See also
http://xmlsoft.org/html/libxml-xmlreader.html#xmlTextReaderRead
int mceTextReaderUnderstandsNamespace ( mceTextReader_t mceTextReader,
const xmlChar *  ns 
)

Registers an MCE namespace.

See also
mceTextReaderDump()
Examples:
mce_read.c.