ipe::XmlParser Class Reference
Ipe Base

`#include <ipexml.h>`

Inherited by ipe::ImlParser.

## Public Member Functions

| XmlParser (DataSource &source)
virtual | ~XmlParser ()
int | parsePosition () const
String | parseToTag ()
bool | parseAttributes (XmlAttributes &attr, bool qm=false)
bool | parsePCDATA (String tag, String &pcdata)
bool | isTagChar (int ch)
void | getChar ()
bool | eos ()
void | skipWhitespace ()

## Protected Member Functions

String | parseToTagX ()

## Protected Attributes

DataSource & | iSource
String | iTopElement
int | iCh
int | iPos

## Detailed Description

Base class for XML stream parsing.

This is the base class for Ipe's XML parser. It only provides some utility functions for parsing tags and PCDATA. Derived classes implement the actual parsing using recursive descent parsers—after experimenting with various schemes for XML parsing, this seems to work best for Ipe.

Tag names and attribute names must consist of ASCII letters only. Only entities for '&', '<', and '>' are recognized.

## Constructor & Destructor Documentation

## XmlParser()

XmlParser::XmlParser | ( | DataSource & | source | ) |

Construct with a data source.

References getChar(), and iPos.

## ~XmlParser()

XmlParser::~XmlParser | ( |  | ) |

virtual

Virtual destructor, so one can destroy through pointer.

## Member Function Documentation

## parsePosition()

int ipe::XmlParser::parsePosition | ( |  | ) | const

inline

References iPos.

## parseToTag()

String XmlParser::parseToTag | ( |  | ) |

Parse whitespace and the name of a tag.

Like ParseToTagX, but silently skips over all tags whose name starts with "x-"

References parseAttributes(), parseToTagX(), and ipe::String::size().

Referenced by ipe::ImlParser::parseDocument(), ipe::ImlParser::parseObject(), ipe::ImlParser::parsePage(), ipe::ImlParser::parsePageSelection(), ipe::ImlParser::parseStyle(), ipe::ImlParser::parseStyleSheet(), and ipe::ImlParser::parseView().

## parseAttributes()

bool XmlParser::parseAttributes | ( | XmlAttributes & | attr,
|  | bool | qm = false )

Parse XML attributes.

Returns with stream just after >. Caller can check whether the tag ended with a / by checking attr.slash().

Set qm to true to allow a question mark just before the >.

References ipe::XmlAttributes::add(), ipe::XmlAttributes::clear(), ipe::String::empty(), eos(), getChar(), iCh, isTagChar(), ipe::XmlAttributes::setSlash(), and skipWhitespace().

Referenced by ipe::ImlParser::parseBitmap(), ipe::ImlParser::parseDocument(), ipe::ImlParser::parseObject(), ipe::ImlParser::parsePage(), ipe::ImlParser::parsePageSelection(), ipe::ImlParser::parseStyle(), ipe::ImlParser::parseStyleSheet(), parseToTag(), and ipe::ImlParser::parseView().

## parsePCDATA()

bool XmlParser::parsePCDATA | ( | String | tag,
|  | String & | pcdata )

Parse PCDATA.

Checks whether the data is terminated by `</tag>`, and returns with stream past the >.

References eos(), getChar(), iCh, ipe::String::size(), and skipWhitespace().

Referenced by ipe::ImlParser::parseBitmap(), ipe::ImlParser::parseDocument(), ipe::ImlParser::parseObject(), ipe::ImlParser::parsePage(), and ipe::ImlParser::parseStyle().

## isTagChar()

bool ipe::XmlParser::isTagChar | ( | int | ch | ) |

inline

Referenced by parseAttributes(), and parseToTagX().

## getChar()

void ipe::XmlParser::getChar | ( |  | ) |

inline

References ipe::DataSource::getChar(), iCh, iPos, and iSource.

Referenced by parseAttributes(), parsePCDATA(), parseToTagX(), skipWhitespace(), and XmlParser().

## eos()

bool ipe::XmlParser::eos | ( |  | ) |

inline

References iCh.

Referenced by parseAttributes(), parsePCDATA(), parseToTagX(), and skipWhitespace().

## skipWhitespace()

void XmlParser::skipWhitespace | ( |  | ) |

References eos(), getChar(), and iCh.

Referenced by parseAttributes(), parsePCDATA(), and parseToTagX().

## parseToTagX()

String XmlParser::parseToTagX | ( |  | ) |

protected

Parse whitespace and the name of a tag.

If the tag is a closing tag, skips > and returns with stream after that. Otherwise, returns with stream just after the tag name.

Comments and <!TAG .. > are skipped silently.

References eos(), getChar(), iCh, isTagChar(), and skipWhitespace().

Referenced by parseToTag().

## Member Data Documentation

## iSource

DataSource& ipe::XmlParser::iSource

protected

Referenced by getChar().

## iTopElement

String ipe::XmlParser::iTopElement

protected

## iCh

int ipe::XmlParser::iCh

protected

Referenced by eos(), getChar(), parseAttributes(), parsePCDATA(), parseToTagX(), and skipWhitespace().

## iPos

int ipe::XmlParser::iPos

protected

Referenced by getChar(), parsePosition(), and XmlParser().

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

- ipexml.h
- ipexml.cpp