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( '"', '"', $value ) . '"'; } if ( $selfClose ) { $this->output .= ' /'; } $this->output .= '>'; } public function endTag( $name, $sourceStart, $sourceLength ) { $this->output .= ""; } public function doctype( $name, $public, $system, $quirks, $sourceStart, $sourceLength ) { $this->output .= "output .= " PUBLIC \"$public\""; if ( strlen( $system ) ) { $this->output .= " \"$system\""; } } elseif ( strlen( $system ) ) { $this->output .= " SYSTEM \"$system\""; } $this->output .= '>'; if ( $quirks ) { $this->output .= ''; } } public function comment( $text, $sourceStart, $sourceLength ) { $this->output .= ''; } }