Quick Links:

bal | bbl | bdl | bsl

Public Types | Public Member Functions | Static Public Member Functions

balxml::Reader Class Reference

#include <balxml_reader.h>

Inheritance diagram for balxml::Reader:
balxml::MiniReader balxml::Utf8ReaderWrapper balxml::ValidatingReader

List of all members.

Public Types

enum  NodeType {
  e_NODE_TYPE_NONE = 0, e_NODE_TYPE_ELEMENT = 1, e_NODE_TYPE_TEXT = 2, e_NODE_TYPE_CDATA = 3,
  e_NODE_TYPE_ENTITY_REFERENCE = 4, e_NODE_TYPE_ENTITY = 5, e_NODE_TYPE_PROCESSING_INSTRUCTION = 6, e_NODE_TYPE_COMMENT = 7,
  e_NODE_TYPE_DOCUMENT = 8, e_NODE_TYPE_DOCUMENT_TYPE = 9, e_NODE_TYPE_DOCUMENT_FRAGMENT = 10, e_NODE_TYPE_NOTATION = 11,
  e_NODE_TYPE_WHITESPACE = 12, e_NODE_TYPE_SIGNIFICANT_WHITESPACE = 13, e_NODE_TYPE_END_ELEMENT = 14, e_NODE_TYPE_END_ENTITY = 15,
  e_NODE_TYPE_XML_DECLARATION = 16, BAEXML_NODE_TYPE_NONE = e_NODE_TYPE_NONE, BAEXML_NODE_TYPE_ELEMENT = e_NODE_TYPE_ELEMENT, BAEXML_NODE_TYPE_TEXT = e_NODE_TYPE_TEXT,
  BAEXML_NODE_TYPE_CDATA = e_NODE_TYPE_CDATA, BAEXML_NODE_TYPE_ENTITY_REFERENCE = e_NODE_TYPE_ENTITY_REFERENCE, BAEXML_NODE_TYPE_ENTITY = e_NODE_TYPE_ENTITY, BAEXML_NODE_TYPE_PROCESSING_INSTRUCTION,
  BAEXML_NODE_TYPE_COMMENT = e_NODE_TYPE_COMMENT, BAEXML_NODE_TYPE_DOCUMENT = e_NODE_TYPE_DOCUMENT, BAEXML_NODE_TYPE_DOCUMENT_TYPE = e_NODE_TYPE_DOCUMENT_TYPE, BAEXML_NODE_TYPE_DOCUMENT_FRAGMENT = e_NODE_TYPE_DOCUMENT_FRAGMENT,
  BAEXML_NODE_TYPE_NOTATION = e_NODE_TYPE_NOTATION, BAEXML_NODE_TYPE_WHITESPACE = e_NODE_TYPE_WHITESPACE, BAEXML_NODE_TYPE_SIGNIFICANT_WHITESPACE, BAEXML_NODE_TYPE_END_ELEMENT = e_NODE_TYPE_END_ELEMENT,
  BAEXML_NODE_TYPE_END_ENTITY = e_NODE_TYPE_END_ENTITY, BAEXML_NODE_TYPE_XML_DECLARATION = e_NODE_TYPE_XML_DECLARATION, NODE_TYPE_NONE = e_NODE_TYPE_NONE, NODE_TYPE_ELEMENT = e_NODE_TYPE_ELEMENT,
  NODE_TYPE_TEXT = e_NODE_TYPE_TEXT, NODE_TYPE_CDATA = e_NODE_TYPE_CDATA, NODE_TYPE_ENTITY_REFERENCE = e_NODE_TYPE_ENTITY_REFERENCE, NODE_TYPE_ENTITY = e_NODE_TYPE_ENTITY,
  NODE_TYPE_PROCESSING_INSTRUCTION, NODE_TYPE_COMMENT = e_NODE_TYPE_COMMENT, NODE_TYPE_DOCUMENT = e_NODE_TYPE_DOCUMENT, NODE_TYPE_DOCUMENT_TYPE = e_NODE_TYPE_DOCUMENT_TYPE,
  NODE_TYPE_DOCUMENT_FRAGMENT = e_NODE_TYPE_DOCUMENT_FRAGMENT, NODE_TYPE_NOTATION = e_NODE_TYPE_NOTATION, NODE_TYPE_WHITESPACE = e_NODE_TYPE_WHITESPACE, NODE_TYPE_SIGNIFICANT_WHITESPACE,
  NODE_TYPE_END_ELEMENT = e_NODE_TYPE_END_ELEMENT, NODE_TYPE_END_ENTITY = e_NODE_TYPE_END_ENTITY, NODE_TYPE_XML_DECLARATION = e_NODE_TYPE_XML_DECLARATION
}
typedef bslma::ManagedPtr
< bsl::streambuf > 
StreamBufPtr
typedef bsl::function
< StreamBufPtr(const char
*location, const char
*namespaceUri) 
XmlResolverFunctor )

Public Member Functions

virtual ~Reader (void)
void dumpNode (bsl::ostream &os) const
bool isFatalError () const
bool isError () const
bool isWarning () const
virtual void setPrefixStack (PrefixStack *prefixes)=0
virtual void setResolver (XmlResolverFunctor resolver)=0
virtual int open (const char *filename, const char *encoding=0)=0
virtual int open (const char *buffer, bsl::size_t size, const char *url=0, const char *encoding=0)=0
virtual int open (bsl::streambuf *stream, const char *url=0, const char *encoding=0)=0
virtual void close ()=0
virtual int advanceToNextNode ()=0
virtual int lookupAttribute (ElementAttribute *attribute, int index) const =0
virtual int lookupAttribute (ElementAttribute *attribute, const char *qname) const =0
virtual int lookupAttribute (ElementAttribute *attribute, const char *localName, const char *namespaceUri) const =0
virtual int lookupAttribute (ElementAttribute *attribute, const char *localName, int namespaceId) const =0
virtual void setOptions (unsigned int flags)=0
virtual const char * documentEncoding () const =0
virtual XmlResolverFunctor resolver () const =0
virtual bool isOpen () const =0
virtual const ErrorInfoerrorInfo () const =0
virtual int getLineNumber () const =0
virtual int getColumnNumber () const =0
virtual PrefixStackprefixStack () const =0
virtual NodeType nodeType () const =0
virtual const char * nodeName () const =0
virtual const char * nodeLocalName () const =0
virtual const char * nodePrefix () const =0
virtual int nodeNamespaceId () const =0
virtual const char * nodeNamespaceUri () const =0
virtual const char * nodeBaseUri () const =0
virtual bool nodeHasValue () const =0
virtual const char * nodeValue () const =0
virtual int nodeDepth () const =0
virtual int numAttributes () const =0
virtual bool isEmptyElement () const =0
virtual unsigned int options () const =0

Static Public Member Functions

static const char * nodeTypeAsString (NodeType nodeType)

Detailed Description

This abstract class defines an interface for fast, forward-only access to XML data. An object belonging to a derived-class implementation of this protocol is required to be re-usable, such that a new XML document can be parsed using the same reader object by calling close followed by another open.

See Component balxml_reader


Member Typedef Documentation

typedef bsl::function<StreamBufPtr(const char *location, const char *namespaceUri) balxml::Reader::XmlResolverFunctor)

Type for a user supplied functor that finds and opens an external resource for the specified location and/or namespaceUri and returns that resource as a managed pointer to a stream. The location argument specifies the location of the external resource and is typically a filename or a URI, depending on the context. The namespaceUri argument always refers to the XML namespace of the entity to be resolved. A conforming functor returns an empty managed pointer if it cannot resolve the resource. For example, the reader may use a resolver to open an external entity, even if the reader does not do validation (see definition of <!ENTITY> in the XML standard). Note that either argument can be NULL in situations where its value is not needed or can be computed from the other argument.


Member Enumeration Documentation

Node types, returned by nodeType method, which represent a XML syntactic construct within a document. Note: Not every implementation of Reader will distinguish among all of the node types.

Enumerator:
e_NODE_TYPE_NONE 
e_NODE_TYPE_ELEMENT 
e_NODE_TYPE_TEXT 
e_NODE_TYPE_CDATA 
e_NODE_TYPE_ENTITY_REFERENCE 
e_NODE_TYPE_ENTITY 
e_NODE_TYPE_PROCESSING_INSTRUCTION 
e_NODE_TYPE_COMMENT 
e_NODE_TYPE_DOCUMENT 
e_NODE_TYPE_DOCUMENT_TYPE 
e_NODE_TYPE_DOCUMENT_FRAGMENT 
e_NODE_TYPE_NOTATION 
e_NODE_TYPE_WHITESPACE 
e_NODE_TYPE_SIGNIFICANT_WHITESPACE 
e_NODE_TYPE_END_ELEMENT 
e_NODE_TYPE_END_ENTITY 
e_NODE_TYPE_XML_DECLARATION 
BAEXML_NODE_TYPE_NONE 
BAEXML_NODE_TYPE_ELEMENT 
BAEXML_NODE_TYPE_TEXT 
BAEXML_NODE_TYPE_CDATA 
BAEXML_NODE_TYPE_ENTITY_REFERENCE 
BAEXML_NODE_TYPE_ENTITY 
BAEXML_NODE_TYPE_PROCESSING_INSTRUCTION 
BAEXML_NODE_TYPE_COMMENT 
BAEXML_NODE_TYPE_DOCUMENT 
BAEXML_NODE_TYPE_DOCUMENT_TYPE 
BAEXML_NODE_TYPE_DOCUMENT_FRAGMENT 
BAEXML_NODE_TYPE_NOTATION 
BAEXML_NODE_TYPE_WHITESPACE 
BAEXML_NODE_TYPE_SIGNIFICANT_WHITESPACE 
BAEXML_NODE_TYPE_END_ELEMENT 
BAEXML_NODE_TYPE_END_ENTITY 
BAEXML_NODE_TYPE_XML_DECLARATION 
NODE_TYPE_NONE 
NODE_TYPE_ELEMENT 
NODE_TYPE_TEXT 
NODE_TYPE_CDATA 
NODE_TYPE_ENTITY_REFERENCE 
NODE_TYPE_ENTITY 
NODE_TYPE_PROCESSING_INSTRUCTION 
NODE_TYPE_COMMENT 
NODE_TYPE_DOCUMENT 
NODE_TYPE_DOCUMENT_TYPE 
NODE_TYPE_DOCUMENT_FRAGMENT 
NODE_TYPE_NOTATION 
NODE_TYPE_WHITESPACE 
NODE_TYPE_SIGNIFICANT_WHITESPACE 
NODE_TYPE_END_ELEMENT 
NODE_TYPE_END_ENTITY 
NODE_TYPE_XML_DECLARATION 

Constructor & Destructor Documentation

virtual balxml::Reader::~Reader ( void   )  [virtual]

Destroy this object. The implementation for this pure abstract base class does nothing.


Member Function Documentation

static const char* balxml::Reader::nodeTypeAsString ( NodeType  nodeType  )  [static]

Return a string representation for the specified nodeType code or "(* UNKNOWN NODE TYPE *)" if nodeType is not one of the values enumerated in NodeType.

void balxml::Reader::dumpNode ( bsl::ostream &  os  )  const

Print the information about the current node to the specified output os stream.

bool balxml::Reader::isFatalError (  )  const

Return true if the derived object encountered a fatal error. This method is equivalent to a call to errorInfo().isFatalError();

bool balxml::Reader::isError (  )  const

Return true if the derived object encountered a error. This method is equivalent to a call to errorInfo().isError();

bool balxml::Reader::isWarning (  )  const

Return true if the derived object encountered a warning. This method is equivalent to a call to errorInfo().isWarning();

virtual void balxml::Reader::setPrefixStack ( PrefixStack prefixes  )  [pure virtual]

Set the prefix stack to the stack at the optionally specified prefixes address or disable prefix stack support if prefixes is null. This stack is used to push and pop namespace prefixes as the parse progresses, so that, at any point, the stack will reflect the set of active prefixes for the current node. It is legitimate to pass a stack that already contains prefixes, these prefixes shall be preserved when close is called, i.e., the prefix stack shall be returned to the stack depth it had when setPrefixStack was called. The behavior is undefined if this method is called after calling open and before calling close.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual void balxml::Reader::setResolver ( XmlResolverFunctor  resolver  )  [pure virtual]

Set the external XML resource resolver to the specified resolver. The XML resource resolver is used by the balxml_reader to find and open an external resources (See the XmlResolverFunctor typedef for more details). The XML resource resolver remains valid; it is not affected by a call to close and should be available until the reader is destroyed. The behavior is undefined if this method is called after calling open and before calling close.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::open ( const char *  filename,
const char *  encoding = 0 
) [pure virtual]

Set up the reader for parsing using the data contained in the XML file described by the specified filename, and set the encoding value to the optionally specified encoding ("ASCII", "UTF-8", etc). Returns 0 on success and non-zero otherwise. The encoding passed to Reader::open will take effect only when there is no encoding information in the original document, i.e., the encoding information obtained from the XML file described by the filename trumps all. If there is no encoding provided within the document and encoding is null or a blank string is passed, then set the encoding to the default "UTF-8". It is an error to open a reader that is already open. Note that the reader will not be on a valid node until advanceToNextNode is called.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::open ( const char *  buffer,
bsl::size_t  size,
const char *  url = 0,
const char *  encoding = 0 
) [pure virtual]

Set up the reader for parsing using the data contained in the specified (XML) buffer of the specified size, set the base URL to the optionally specified url and set the encoding value to the optionally specified encoding ("ASCII", "UTF-8", etc). Return 0 on success and non-zero otherwise. If url is null or a blank string is passed, then base URL will be empty. The encoding passed to Reader::open will take effect only when there is no encoding information in the original document, i.e., the encoding information obtained from the (XML) buffer trumps all. If there is no encoding provided within the document and encoding is null or a blank string is passed, then set the encoding to the default "UTF-8". It is an error to open a reader that is already open. Note that the reader will not be on a valid node until advanceToNextNode is called.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::open ( bsl::streambuf *  stream,
const char *  url = 0,
const char *  encoding = 0 
) [pure virtual]

Set up the reader for parsing using the data contained in the specified (XML) stream, set the base URL to the optionally specified url and set the encoding value to the optionally specified encoding ("ASCII", "UTF-8", etc). Return 0 on success and non-zero otherwise. If url is null or a blank string is passed, then base URL will be empty. The encoding passed to Reader::open will take effect only when there is no encoding information in the original document, i.e., the encoding information obtained from the (XML) stream trumps all. If there is no encoding provided within the document and encoding is null or a blank string is passed, then set the encoding to the default "UTF-8". It is an error to open a reader that is already open. Note that the reader will not be on a valid node until advanceToNextNode is called.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual void balxml::Reader::close (  )  [pure virtual]

Close the reader. Most, but not all state is reset. Specifically, the XML resource resolver and the prefix stack remain. The prefix stack shall be returned to the stack depth it had when setPrefixStack was called. Call the method open to reuse the reader. Note that close invalidates all strings and data structures obtained via Reader accessors. E.g., the pointer returned from nodeName for this node will not be valid once close is called.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::advanceToNextNode (  )  [pure virtual]

Move to the next node in the data steam created by open thus allowing the node's properties to be queried via the Reader accessors. Return 0 on successful read, 1 if there are no more nodes to read, and a negative number otherwise. Note that each call to advanceToNextNode invalidates strings and data structures returned when Reader accessors where call for the "prior node". E.g., the pointer returned from nodeName for this node will not be valid once advanceToNextNode is called. Note that the reader will not be on a valid node until the first call to advanceToNextNode after the reader is opened. TBD: add comment about insignificant white space.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::lookupAttribute ( ElementAttribute attribute,
int  index 
) const [pure virtual]

Find the attribute at the specified index in the current node, and fill in the specified attribute structure. Return 0 on success, 1 if no attribute is found at the index, and an a negative value otherwise. The strings that were filled into the attribute structure are invalid upon the next advanceToNextNode or close is called.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::lookupAttribute ( ElementAttribute attribute,
const char *  qname 
) const [pure virtual]

Find the attribute with the specified qname (qualified name) in the current node, and fill in the specified attribute structure. Return 0 on success, 1 if there is no attribute found with qname, and a negative value otherwise. The strings that were filled into the attribute structure are invalid upon the next advanceToNextNode or close is called.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::lookupAttribute ( ElementAttribute attribute,
const char *  localName,
const char *  namespaceUri 
) const [pure virtual]

Find the attribute with the specified localName and specified namespaceUri in the current node, and fill in the specified attribute structure. Return 0 on success, 1 if there is no attribute found with localName and namespaceUri, and a negative value otherwise. If namespaceUri == 0 or a blank string is passed, then the document's default namespace will be used. The strings that were filled into the attribute structure are invalid upon the next advanceToNextNode or close is called.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::lookupAttribute ( ElementAttribute attribute,
const char *  localName,
int  namespaceId 
) const [pure virtual]

Find the attribute with the specified localName and specified namespaceId in the current node, and fill in the specified attribute structure. Return 0 on success, 1 if there is no attribute found with localName and namespaceId, and a negative value otherwise. If namespaceId == -1, then the document's default namespace will be used. The strings that were filled into the attribute structure are invalid upon the next advanceToNextNode or close is called.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual void balxml::Reader::setOptions ( unsigned int  flags  )  [pure virtual]

Set the options to the flags in the specified flags. The options for the reader are persistent, i.e., the options are not reset by close. The behavior is undefined if this method is called after calling open and before calling close; except that derived classes are permitted to specify valid behavior for calling this function for specific arguments while the reader is open.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual const char* balxml::Reader::documentEncoding (  )  const [pure virtual]

Return the document encoding or NULL on error. The returned pointer is owned by this object and must not be modified or deallocated by the caller. The returned pointer becomes invalid when close is called or the reader is destroyed.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual XmlResolverFunctor balxml::Reader::resolver (  )  const [pure virtual]

Return the external XML resource resolver.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual bool balxml::Reader::isOpen (  )  const [pure virtual]

Return true if open was called successfully and close has not yet been called and false otherwise.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual const ErrorInfo& balxml::Reader::errorInfo (  )  const [pure virtual]

Return a reference to the non-modifiable error information for this reader. The returned value becomes invalid when close is called or the reader is destroyed.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::getLineNumber (  )  const [pure virtual]

Return the current line number within the input stream. The current line is the last line for which the reader has not yet seen a newline. Lines are counted starting at one from the time a stream is provided to open. Return 0 if not available. Note that a derived-class implementation is not required to count lines and may just return 0.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::getColumnNumber (  )  const [pure virtual]

Return the current column number within the input stream. The current column number is the number of characters since the last newline was read by the reader plus one, i.e., the first column of each line is column number one. Return 0 if not available. Note that a derived-class implementation is not required to count columns and may just return 0.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual PrefixStack* balxml::Reader::prefixStack (  )  const [pure virtual]

Return a pointer to the modifiable prefix stack that is used by this reader to manage namespace prefixes or 0 if namespace support is disabled. The behavior is undefined if the returned prefix stack is augmented in any way after calling open and before calling close.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual NodeType balxml::Reader::nodeType (  )  const [pure virtual]

Return the node type of the current node if the reader isOpen and has not encounter an error and Reader::NONE otherwise.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual const char* balxml::Reader::nodeName (  )  const [pure virtual]

Return the qualified name of the current node if the current node has a name and NULL otherwise. The returned pointer is owned by this object and must not be modified or deallocated by the caller. The returned pointer becomes invalid upon the next advanceToNextNode, when close is called or the reader is destroyed.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual const char* balxml::Reader::nodeLocalName (  )  const [pure virtual]

Return the local name of the current node if the current node has a local name and NULL otherwise. The returned pointer is owned by this object and must not be modified or deallocated by the caller. The returned pointer becomes invalid upon the next advanceToNextNode, when close is called or the reader is destroyed.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual const char* balxml::Reader::nodePrefix (  )  const [pure virtual]

Return the prefix name of the current node if the correct node has a prefix name and NULL otherwise. The returned pointer is owned by this object and must not be modified or deallocated by the caller. The returned pointer becomes invalid upon the next advanceToNextNode, when close is called or the reader is destroyed.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::nodeNamespaceId (  )  const [pure virtual]

Return the namespace ID of the current node if the current node has a namespace id and a negative number otherwise.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual const char* balxml::Reader::nodeNamespaceUri (  )  const [pure virtual]

Return the namespace URI name of the current node if the current node has a namespace URI and NULL otherwise. The returned pointer is owned by this object and must not be modified or deallocated by the caller. The returned pointer becomes invalid upon the next advanceToNextNode, when close is called or the reader is destroyed.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual const char* balxml::Reader::nodeBaseUri (  )  const [pure virtual]

Return the base URI name of the current node if the current node has a base URI and NULL otherwise. The returned pointer is owned by this object and must not be modified or deallocated by the caller. The returned pointer becomes invalid upon the next advanceToNextNode, when close is called or the reader is destroyed.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual bool balxml::Reader::nodeHasValue (  )  const [pure virtual]

Return true if the current node has a value and false otherwise.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual const char* balxml::Reader::nodeValue (  )  const [pure virtual]

Return the value of the current node if the current node has a value and NULL otherwise. The returned pointer is owned by this object and must not be modified or deallocated by the caller. The returned pointer becomes invalid upon the next advanceToNextNode, when close is called or the reader is destroyed.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::nodeDepth (  )  const [pure virtual]

Return the nesting depth of the current node in the XML document. The root node has depth 0.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual int balxml::Reader::numAttributes (  )  const [pure virtual]

Return the number of attributes for the current node if that node has attributes and 0 otherwise.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual bool balxml::Reader::isEmptyElement (  )  const [pure virtual]

Return true if the current node is an element (i.e., node type is BAEXML_NODE_TYPE_ELEMENT) that ends with />; and false otherwise. Note that <a/> will be considered empty but <a></a> will not.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.

virtual unsigned int balxml::Reader::options (  )  const [pure virtual]

Return the option flags.

Implemented in balxml::MiniReader, and balxml::Utf8ReaderWrapper.


The documentation for this class was generated from the following file: