Initial Drupal 11 with DDEV setup
This commit is contained in:
157
vendor/drupal/core-composer-scaffold/Interpolator.php
vendored
Normal file
157
vendor/drupal/core-composer-scaffold/Interpolator.php
vendored
Normal file
@ -0,0 +1,157 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\Composer\Plugin\Scaffold;
|
||||
|
||||
/**
|
||||
* Injects config values from an associative array into a string.
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class Interpolator {
|
||||
|
||||
/**
|
||||
* The character sequence that identifies the start of a token.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $startToken;
|
||||
|
||||
/**
|
||||
* The character sequence that identifies the end of a token.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $endToken;
|
||||
|
||||
/**
|
||||
* The associative array of replacements.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $data = [];
|
||||
|
||||
/**
|
||||
* Interpolator constructor.
|
||||
*
|
||||
* @param string $start_token
|
||||
* The start marker for a token, e.g. '['.
|
||||
* @param string $end_token
|
||||
* The end marker for a token, e.g. ']'.
|
||||
*/
|
||||
public function __construct($start_token = '\\[', $end_token = '\\]') {
|
||||
$this->startToken = $start_token;
|
||||
$this->endToken = $end_token;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the data set to use when interpolating.
|
||||
*
|
||||
* @param array $data
|
||||
* The key:value pairs to use when interpolating.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setData(array $data) {
|
||||
$this->data = $data;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds to the data set to use when interpolating.
|
||||
*
|
||||
* @param array $data
|
||||
* The key:value pairs to use when interpolating.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function addData(array $data) {
|
||||
$this->data = array_merge($this->data, $data);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces tokens in a string with values from an associative array.
|
||||
*
|
||||
* Tokens are surrounded by delimiters, e.g. square brackets "[key]". The
|
||||
* characters that surround the key may be defined when the Interpolator is
|
||||
* constructed.
|
||||
*
|
||||
* Example:
|
||||
* If the message is 'Hello, [user.name]', then the value of the user.name
|
||||
* item is fetched from the array, and the token [user.name] is replaced with
|
||||
* the result.
|
||||
*
|
||||
* @param string $message
|
||||
* Message containing tokens to be replaced.
|
||||
* @param array $extra
|
||||
* Data to use for interpolation in addition to whatever was provided to
|
||||
* self::setData().
|
||||
* @param string|bool $default
|
||||
* (optional) The value to substitute for tokens that are not found in the
|
||||
* data. If FALSE, then missing tokens are not replaced. Defaults to an
|
||||
* empty string.
|
||||
*
|
||||
* @return string
|
||||
* The message after replacements have been made.
|
||||
*/
|
||||
public function interpolate($message, array $extra = [], $default = '') {
|
||||
$data = $extra + $this->data;
|
||||
$replacements = $this->replacements($message, $data, $default);
|
||||
return strtr($message, $replacements);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the tokens that exist in a message and builds a replacement array.
|
||||
*
|
||||
* All of the replacements in the data array are looked up given the token
|
||||
* keys from the provided message. Keys that do not exist in the configuration
|
||||
* are replaced with the default value.
|
||||
*
|
||||
* @param string $message
|
||||
* String with tokens.
|
||||
* @param array $data
|
||||
* Data to use for interpolation.
|
||||
* @param string $default
|
||||
* (optional) The value to substitute for tokens that are not found in the
|
||||
* data. If FALSE, then missing tokens are not replaced. Defaults to an
|
||||
* empty string.
|
||||
*
|
||||
* @return string[]
|
||||
* An array of replacements to make. Keyed by tokens and the replacements
|
||||
* are the values.
|
||||
*/
|
||||
protected function replacements($message, array $data, $default = '') {
|
||||
$tokens = $this->findTokens($message);
|
||||
$replacements = [];
|
||||
foreach ($tokens as $sourceText => $key) {
|
||||
$replacement_text = array_key_exists($key, $data) ? $data[$key] : $default;
|
||||
if ($replacement_text !== FALSE) {
|
||||
$replacements[$sourceText] = $replacement_text;
|
||||
}
|
||||
}
|
||||
return $replacements;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds all of the tokens in the provided message.
|
||||
*
|
||||
* @param string $message
|
||||
* String with tokens.
|
||||
*
|
||||
* @return string[]
|
||||
* map of token to key, e.g. {{key}} => key
|
||||
*/
|
||||
protected function findTokens($message) {
|
||||
$reg_ex = '#' . $this->startToken . '([a-zA-Z0-9._-]+)' . $this->endToken . '#';
|
||||
if (!preg_match_all($reg_ex, $message, $matches, PREG_SET_ORDER)) {
|
||||
return [];
|
||||
}
|
||||
$tokens = [];
|
||||
foreach ($matches as $matchSet) {
|
||||
[$sourceText, $key] = $matchSet;
|
||||
$tokens[$sourceText] = $key;
|
||||
}
|
||||
return $tokens;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user