Current File : /home/jvzmxxx/wiki/extensions/Wikibase/lib/includes/Formatters/EscapingSnakFormatter.php
<?php

namespace Wikibase\Lib;

use Wikibase\DataModel\Snak\Snak;
use Wikimedia\Assert\Assert;
use Wikimedia\Assert\ParameterTypeException;

/**
 * EscapingSnakFormatter wraps another SnakFormatter and
 * applies a transformation (escaping) to that formatter's output.
 *
 * @since 0.5
 *
 * @license GPL-2.0+
 * @author Daniel Kinzler
 */
class EscapingSnakFormatter implements SnakFormatter {

	/**
	 * @var string One of the SnakFormatter::FORMAT_... constants.
	 */
	private $format;

	/**
	 * @var SnakFormatter
	 */
	private $formatter;

	/**
	 * @var callable
	 */
	private $escapeCallback;

	/**
	 * @param string $format One of the SnakFormatter::FORMAT_... constants.
	 * @param SnakFormatter $formatter A formatter returning plain text.
	 * @param callable $escapeCallback A callable taking plain text and returning escaped text.
	 *
	 * @throws ParameterTypeException
	 */
	public function __construct( $format, SnakFormatter $formatter, $escapeCallback ) {
		Assert::parameterType( 'string', $format, '$format' );
		Assert::parameterType( 'callable', $escapeCallback, '$escapeCallback' );

		$this->format = $format;
		$this->formatter = $formatter;
		$this->escapeCallback = $escapeCallback;
	}

	/**
	 * @see SnakFormatter::formatSnak
	 *
	 * @param Snak $snak
	 *
	 * @return string Typically wikitext or HTML, depending on the $escapeCallback provided.
	 */
	public function formatSnak( Snak $snak ) {
		$text = $this->formatter->formatSnak( $snak );
		$escaped = call_user_func( $this->escapeCallback, $text );
		return $escaped;
	}

	/**
	 * @see SnakFormatter::getFormat
	 *
	 * @return string One of the SnakFormatter::FORMAT_... constants.
	 */
	public function getFormat() {
		return $this->format;
	}

}