# tablepress/3.4/libraries/vendor/PhpSpreadsheet/RichText/RichText.php

TablePress – Tables in WordPress made easy, version 3.4. 165 lines.

- Page: https://pluginprobe.com/plugins/tablepress/3.4/code/libraries/vendor/PhpSpreadsheet/RichText/RichText.php
- Raw: https://pluginprobe.com/plugins/tablepress/3.4/raw/libraries/vendor/PhpSpreadsheet/RichText/RichText.php
- Modified: 2025-01-08T09:25:54+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/tablepress/3.4/code/libraries/vendor/PhpSpreadsheet/RichText/RichText.php#L10-L20`.

```php
<?php

namespace TablePress\PhpOffice\PhpSpreadsheet\RichText;

use TablePress\PhpOffice\PhpSpreadsheet\Cell\Cell;
use TablePress\PhpOffice\PhpSpreadsheet\Cell\DataType;
use TablePress\PhpOffice\PhpSpreadsheet\IComparable;
use Stringable;

class RichText implements IComparable
{
	/**
	 * Rich text elements.
	 *
	 * @var ITextElement[]
	 */
	private array $richTextElements;

	/**
	 * Create a new RichText instance.
	 */
	public function __construct(?Cell $cell = null)
	{
		// Initialise variables
		$this->richTextElements = [];

		// Rich-Text string attached to cell?
		if ($cell !== null) {
			// Add cell text and style
			if ($cell->getValueString() !== '') {
				$objRun = new Run($cell->getValueString());
				$objRun->setFont(clone $cell->getWorksheet()->getStyle($cell->getCoordinate())->getFont());
				$this->addText($objRun);
			}

			// Set parent value
			$cell->setValueExplicit($this, DataType::TYPE_STRING);
		}
	}

	/**
	 * Add text.
	 *
	 * @param ITextElement $text Rich text element
	 *
	 * @return $this
	 */
	public function addText(ITextElement $text)
	{
		$this->richTextElements[] = $text;

		return $this;
	}

	/**
	 * Create text.
	 *
	 * @param string $text Text
	 */
	public function createText(string $text): TextElement
	{
		$objText = new TextElement($text);
		$this->addText($objText);

		return $objText;
	}

	/**
	 * Create text run.
	 *
	 * @param string $text Text
	 */
	public function createTextRun(string $text): Run
	{
		$objText = new Run($text);
		$this->addText($objText);

		return $objText;
	}

	/**
	 * Get plain text.
	 */
	public function getPlainText(): string
	{
		// Return value
		$returnValue = '';

		// Loop through all ITextElements
		foreach ($this->richTextElements as $text) {
			$returnValue .= $text->getText();
		}

		return $returnValue;
	}

	/**
	 * Convert to string.
	 */
	public function __toString(): string
	{
		return $this->getPlainText();
	}

	/**
	 * Get Rich Text elements.
	 *
	 * @return ITextElement[]
	 */
	public function getRichTextElements(): array
	{
		return $this->richTextElements;
	}

	/**
	 * Set Rich Text elements.
	 *
	 * @param ITextElement[] $textElements Array of elements
	 *
	 * @return $this
	 */
	public function setRichTextElements(array $textElements)
	{
		$this->richTextElements = $textElements;

		return $this;
	}

	/**
	 * Get hash code.
	 *
	 * @return string Hash code
	 */
	public function getHashCode(): string
	{
		$hashElements = '';
		foreach ($this->richTextElements as $element) {
			$hashElements .= $element->getHashCode();
		}

		return md5(
			$hashElements
			. __CLASS__
		);
	}

	/**
	 * Implement PHP __clone to create a deep clone, not just a shallow copy.
	 */
	public function __clone()
	{
		$vars = get_object_vars($this);
		foreach ($vars as $key => $value) {
			$newValue = is_object($value) ? (clone $value) : $value;
			if (is_array($value)) {
				$newValue = [];
				foreach ($value as $key2 => $value2) {
					$newValue[$key2] = is_object($value2) ? (clone $value2) : $value2;
				}
			}
			$this->$key = $newValue;
		}
	}
}

```
