-
- function startElement( $parser, $name, $attribs ) {
- $this->clearOpenElement( null );
- $this->lastName = $name;
-
- if ( $name == 'revision' ) {
- $this->state = $name;
- $this->egress->writeOpenPage( null, $this->buffer );
- $this->buffer = "";
- } elseif ( $name == 'page' ) {
- $this->state = $name;
- if ( $this->atStart ) {
- $this->egress->writeOpenStream( $this->buffer );
- $this->buffer = "";
- $this->atStart = false;
- }
- }
-
- if ( $name == "text" && isset( $attribs['id'] ) ) {
- $text = $this->getText( $attribs['id'] );
- $this->openElement = array( $name, array( 'xml:space' => 'preserve' ) );
- if ( strlen( $text ) > 0 ) {
- $this->characterData( $parser, $text );
- }
- } else {
- $this->openElement = array( $name, $attribs );
- }
- }
-
- function endElement( $parser, $name ) {
- if ( $this->openElement ) {
- $this->clearOpenElement( "" );
- } else {
- $this->buffer .= "</$name>";
- }
-
- if ( $name == 'revision' ) {
- $this->egress->writeRevision( null, $this->buffer );
- $this->buffer = "";
- $this->thisRev = "";
- } elseif ( $name == 'page' ) {
- $this->egress->writeClosePage( $this->buffer );
- $this->buffer = "";
- $this->thisPage = "";
- } elseif ( $name == 'mediawiki' ) {
- $this->egress->writeCloseStream( $this->buffer );
- $this->buffer = "";
- }
- }
-
- function characterData( $parser, $data ) {
- $this->clearOpenElement( null );
- if ( $this->lastName == "id" ) {
- if ( $this->state == "revision" ) {
- $this->thisRev .= $data;
- } elseif ( $this->state == "page" ) {
- $this->thisPage .= $data;
- }
- }
- $this->buffer .= htmlspecialchars( $data );
- }
-
- function clearOpenElement( $style ) {
- if ( $this->openElement ) {
- $this->buffer .= Xml::element( $this->openElement[0], $this->openElement[1], $style );
- $this->openElement = false;
- }
- }