protected function finalizeOutput()
	{
		// Output the rest of the text and close the last paragraph
		$this->outputText($this->textLen, 0, true);

		// Remove empty tag pairs, e.g. <I><U></U></I> as well as empty paragraphs
		do
		{
			$this->output = preg_replace('(<([^ />]++)[^>]*></\\1>)', '', $this->output, -1, $cnt);
		}
		while ($cnt > 0);

		// Merge consecutive <i> tags
		if (strpos($this->output, '</i><i>') !== false)
		{
			$this->output = str_replace('</i><i>', '', $this->output);
		}

		// Remove control characters from the output to ensure it's valid XML
		$this->output = preg_replace('([\\x00-\\x08\\x0B-\\x1F])', '', $this->output);

		// Encode Unicode characters that are outside of the BMP
		$this->output = Utils::encodeUnicodeSupplementaryCharacters($this->output);

		// Use a <r> root if the text is rich, or <t> for plain text (including <p></p> and <br/>)
		$tagName = ($this->isRich) ? 'r' : 't';

		// Prepare the root node with all the namespace declarations
		$tmp = '<' . $tagName;
		foreach (array_keys($this->namespaces) as $prefix)
		{
			$tmp .= ' xmlns:' . $prefix . '="urn:s9e:TextFormatter:' . $prefix . '"';
		}

		$this->output = $tmp . '>' . $this->output . '</' . $tagName . '>';
	}
protected function finalizeOutput()
	{
		// Output the rest of the text and close the last paragraph
		$this->outputText($this->textLen, 0, true);

		// Remove empty tag pairs, e.g. <I><U></U></I> as well as empty paragraphs
		do
		{
			$this->output = preg_replace('(<([^ />]++)[^>]*></\\1>)', '', $this->output, -1, $cnt);
		}
		while ($cnt > 0);

		// Merge consecutive <i> tags
		if (strpos($this->output, '</i><i>') !== false)
		{
			$this->output = str_replace('</i><i>', '', $this->output);
		}

		// Remove control characters from the output to ensure it's valid XML
		$this->output = preg_replace('([\\x00-\\x08\\x0B-\\x1F])', '', $this->output);

		// Encode Unicode characters that are outside of the BMP
		$this->output = Utils::encodeUnicodeSupplementaryCharacters($this->output);

		// Use a <r> root if the text is rich, or <t> for plain text (including <p></p> and <br/>)
		$tagName = ($this->isRich) ? 'r' : 't';

		// Prepare the root node with all the namespace declarations
		$tmp = '<' . $tagName;
		foreach (array_keys($this->namespaces) as $prefix)
		{
			$tmp .= ' xmlns:' . $prefix . '="urn:s9e:TextFormatter:' . $prefix . '"';
		}

		$this->output = $tmp . '>' . $this->output . '</' . $tagName . '>';
	}
protected function finalizeOutput ( ) { // Output the rest of the text and close the last paragraph $ this -> outputText ( $ this -> textLen , 0 , true ) ; // Remove empty tag pairs, e.g. <I><U></U></I> as well as empty paragraphs do { $ this -> output = preg_replace ( '(<([^ />]++)[^>]*></\\1>)' , '' , $ this -> output , - 1 , $ cnt ) ; } while ( $ cnt > 0 ) ; // Merge consecutive <i> tags if ( strpos ( $ this -> output , '</i><i>' ) !== false ) { $ this -> output = str_replace ( '</i><i>' , '' , $ this -> output ) ; } // Remove control characters from the output to ensure it's valid XML $ this -> output = preg_replace ( '([\\x00-\\x08\\x0B-\\x1F])' , '' , $ this -> output ) ; // Encode Unicode characters that are outside of the BMP $ this -> output = Utils :: encodeUnicodeSupplementaryCharacters ( $ this -> output ) ; // Use a <r> root if the text is rich, or <t> for plain text (including <p></p> and <br/>) $ tagName = ( $ this -> isRich ) ? 'r' : 't' ; // Prepare the root node with all the namespace declarations $ tmp = '<' . $ tagName ; foreach ( array_keys ( $ this -> namespaces ) as $ prefix ) { $ tmp .= ' xmlns:' . $ prefix . '="urn:s9e:TextFormatter:' . $ prefix . '"' ; } $ this -> output = $ tmp . '>' . $ this -> output . '</' . $ tagName . '>' ; }
Finalize the output by appending the rest of the unprocessed text and create the root node

@return void
Finalize the output by appending the rest of the unprocessed text and create the root node