Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 39
TokenSerializer
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 10
272
0.00% covered (danger)
0.00%
0 / 39
 getOutput
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 getErrors
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 startDocument
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 endDocument
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 error
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 characters
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 startTag
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 10
 endTag
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 doctype
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 14
 comment
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
<?php
namespace RemexHtml\Tokenizer;
/**
 * A simple serializer for the token stream, mostly meant for debugging.
 *
 * The main reason this shouldn't be used in production for modification of
 * HTML documents is that element names are only determined by TreeBuilder
 * and are not known here. The correct serialization for a text node depends
 * on its parent element, including its namespace.
 */
class TokenSerializer implements TokenHandler {
    private $output;
    private $errors = [];
    public function getOutput() {
        return $this->output;
    }
    public function getErrors() {
        return $this->errors;
    }
    public function startDocument( Tokenizer $tokenizer, $fns, $fn ) {
        $this->output = '';
    }
    public function endDocument( $pos ) {
    }
    public function error( $text, $pos ) {
        $this->errors[] = [ $text, $pos ];
    }
    public function characters( $text, $start, $length, $sourceStart, $sourceLength ) {
        $this->output .= htmlspecialchars( substr( $text, $start, $length ) );
    }
    public function startTag( $name, Attributes $attrs, $selfClose, $sourceStart, $sourceLength ) {
        $attrs = $attrs->getValues();
        $this->output .= "<$name";
        foreach ( $attrs as $name => $value ) {
            $this->output .= " $name=\"" . str_replace( '"', '&quot;', $value ) . '"';
        }
        if ( $selfClose ) {
            $this->output .= ' /';
        }
        $this->output .= '>';
    }
    public function endTag( $name, $sourceStart, $sourceLength ) {
        $this->output .= "</$name>";
    }
    public function doctype( $name, $public, $system, $quirks, $sourceStart, $sourceLength ) {
        $this->output .= "<!DOCTYPE $name";
        if ( strlen( $public ) ) {
            $this->output .= " PUBLIC \"$public\"";
            if ( strlen( $system ) ) {
                $this->output .= " \"$system\"";
            }
        } elseif ( strlen( $system ) ) {
            $this->output .= " SYSTEM \"$system\"";
        }
        $this->output .= '>';
        if ( $quirks ) {
            $this->output .= '<!--quirks-->';
        }
    }
    public function comment( $text, $sourceStart, $sourceLength ) {
        $this->output .= '<!--' . $text . '-->';
    }
}