Файл: vendor/intervention/image/src/Alignment.php
Строк: 183
<?php
declare(strict_types=1);
namespace InterventionImage;
use Error;
use InterventionImageExceptionsInvalidArgumentException;
enum Alignment: string
{
case TOP = 'top';
case TOP_RIGHT = 'top-right';
case RIGHT = 'right';
case BOTTOM_RIGHT = 'bottom-right';
case BOTTOM = 'bottom';
case BOTTOM_LEFT = 'bottom-left';
case LEFT = 'left';
case TOP_LEFT = 'top-left';
case CENTER = 'center';
/**
* Create position from given identifier.
*
* @throws InvalidArgumentException
*/
public static function create(string|self $identifier): self
{
if ($identifier instanceof self) {
return $identifier;
}
try {
$position = self::from(strtolower($identifier));
} catch (Error) {
$position = match (strtolower($identifier)) {
'top-center',
'top_center',
'topcenter',
'center-top',
'center_top',
'centertop',
'top-middle',
'top_middle',
'topmiddle',
'middle-top',
'middle_top',
'middletop' => self::TOP,
'top_right',
'topright',
'right-top',
'right_top',
'righttop' => self::TOP_RIGHT,
'right-center',
'right_center',
'rightcenter',
'center-right',
'center_right',
'centerright',
'right-middle',
'right_middle',
'rightmiddle',
'middle-right',
'middle_right',
'middleright' => self::RIGHT,
'bottom_right',
'bottomright',
'right-bottom',
'right_bottom',
'rightbottom' => self::BOTTOM_RIGHT,
'bottom-center',
'bottom_center',
'bottomcenter',
'center-bottom',
'center_bottom',
'centerbottom',
'bottom-middle',
'bottom_middle',
'bottommiddle',
'middle-bottom',
'middle_bottom',
'middlebottom' => self::BOTTOM,
'bottom_left',
'bottomleft',
'left-bottom',
'left_bottom',
'leftbottom' => self::BOTTOM_LEFT,
'left-center',
'left_center',
'leftcenter',
'center-left',
'center_left',
'centerleft',
'left-middle',
'left_middle',
'leftmiddle',
'middle-left',
'middle_left',
'middleleft' => self::LEFT,
'top_left',
'topleft',
'left-top',
'left_top',
'lefttop' => self::TOP_LEFT,
'middle',
'center-center',
'center_center',
'centercenter',
'center-middle',
'center_middle',
'centermiddle',
'middle-center',
'middle_center',
'middlecenter' => self::CENTER,
default => throw new InvalidArgumentException(
'Unable to create ' . self::class . ' from "' . $identifier . '"',
),
};
}
return $position;
}
/**
* Try to create position from given identifier or return null on failure.
*/
public static function tryCreate(string|self $identifier): ?self
{
try {
return self::create($identifier);
} catch (InvalidArgumentException) {
return null;
}
}
/**
* Change the current alignment by adjusting only the horizontal axis to the specified value.
*/
public function alignHorizontally(string|self $alignment): self
{
// handle "leftish" alignments
if (in_array($alignment, [self::LEFT, self::BOTTOM_LEFT, self::TOP_LEFT])) {
return match ($this) {
self::TOP, self::TOP_RIGHT, self::TOP_LEFT => self::TOP_LEFT,
self::BOTTOM, self::BOTTOM_RIGHT, self::BOTTOM_LEFT => self::BOTTOM_LEFT,
self::CENTER, self::LEFT, self::RIGHT => self::LEFT,
};
}
// handle "rightish" alignments
if (in_array($alignment, [self::RIGHT, self::TOP_RIGHT, self::BOTTOM_RIGHT])) {
return match ($this) {
self::TOP, self::TOP_RIGHT, self::TOP_LEFT => self::TOP_RIGHT,
self::BOTTOM, self::BOTTOM_RIGHT, self::BOTTOM_LEFT => self::BOTTOM_RIGHT,
self::CENTER, self::LEFT, self::RIGHT => self::RIGHT,
};
}
// handle centering
if (in_array($alignment, [self::CENTER, self::TOP, self::BOTTOM])) {
return match ($this) {
self::TOP, self::TOP_RIGHT, self::TOP_LEFT => self::TOP,
self::BOTTOM, self::BOTTOM_RIGHT, self::BOTTOM_LEFT => self::BOTTOM,
self::CENTER, self::LEFT, self::RIGHT => self::CENTER,
};
}
return $this;
}
/**
* Change the current alignment by adjusting only the vertical axis to the specified value.
*/
public function alignVertically(string|self $alignment): self
{
// handle "bottomish" alignments
if (in_array($alignment, [self::BOTTOM, self::BOTTOM_RIGHT, self::BOTTOM_LEFT])) {
return match ($this) {
self::LEFT, self::TOP_LEFT, self::BOTTOM_LEFT => self::BOTTOM_LEFT,
self::RIGHT, self::TOP_RIGHT, self::BOTTOM_RIGHT => self::BOTTOM_RIGHT,
self::CENTER, self::TOP, self::BOTTOM => self::BOTTOM,
};
}
// handle "topish" alignments
if (in_array($alignment, [self::TOP, self::TOP_RIGHT, self::TOP_LEFT])) {
return match ($this) {
self::LEFT, self::TOP_LEFT, self::BOTTOM_LEFT => self::TOP_LEFT,
self::RIGHT, self::TOP_RIGHT, self::BOTTOM_RIGHT => self::TOP_RIGHT,
self::CENTER, self::TOP, self::BOTTOM => self::TOP,
};
}
// handle centering
if (in_array($alignment, [self::CENTER, self::RIGHT, self::LEFT])) {
return match ($this) {
self::LEFT, self::TOP_LEFT, self::BOTTOM_LEFT => self::LEFT,
self::RIGHT, self::TOP_RIGHT, self::BOTTOM_RIGHT => self::RIGHT,
self::CENTER, self::TOP, self::BOTTOM => self::CENTER,
};
}
return $this;
}
/**
* Return only the horizontal alignment.
*/
public function horizontal(): self
{
return match ($this) {
self::TOP, self::CENTER, self::BOTTOM => self::CENTER,
self::RIGHT, self::TOP_RIGHT, self::BOTTOM_RIGHT => self::RIGHT,
self::LEFT, self::TOP_LEFT, self::BOTTOM_LEFT => self::LEFT,
};
}
/**
* Return only the vertical alignment.
*/
public function vertical(): self
{
return match ($this) {
self::CENTER, self::RIGHT, self::LEFT => self::CENTER,
self::TOP, self::TOP_RIGHT, self::TOP_LEFT => self::TOP,
self::BOTTOM, self::BOTTOM_RIGHT, self::BOTTOM_LEFT => self::BOTTOM,
};
}
}