mirror of
https://github.com/WPMultisite/wp-multisite-subscriptions.git
synced 2025-08-08 02:29:13 +08:00
重命名:分叉 WP Ultimo
This commit is contained in:
parent
675cc66211
commit
afc807397f
5350 changed files with 1354268 additions and 604 deletions
133
dependencies/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php
vendored
Normal file
133
dependencies/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php
vendored
Normal file
|
@ -0,0 +1,133 @@
|
|||
<?php
|
||||
|
||||
declare (strict_types=1);
|
||||
/**
|
||||
* This file is part of phpDocumentor.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*
|
||||
* @link http://phpdoc.org
|
||||
*/
|
||||
namespace WP_Ultimo\Dependencies\phpDocumentor\Reflection\DocBlock;
|
||||
|
||||
use WP_Ultimo\Dependencies\phpDocumentor\Reflection\DocBlock\Tags\Example;
|
||||
use function array_slice;
|
||||
use function file;
|
||||
use function getcwd;
|
||||
use function implode;
|
||||
use function is_readable;
|
||||
use function rtrim;
|
||||
use function sprintf;
|
||||
use function trim;
|
||||
use const DIRECTORY_SEPARATOR;
|
||||
/**
|
||||
* Class used to find an example file's location based on a given ExampleDescriptor.
|
||||
*/
|
||||
class ExampleFinder
|
||||
{
|
||||
/** @var string */
|
||||
private $sourceDirectory = '';
|
||||
/** @var string[] */
|
||||
private $exampleDirectories = [];
|
||||
/**
|
||||
* Attempts to find the example contents for the given descriptor.
|
||||
*/
|
||||
public function find(Example $example) : string
|
||||
{
|
||||
$filename = $example->getFilePath();
|
||||
$file = $this->getExampleFileContents($filename);
|
||||
if (!$file) {
|
||||
return sprintf('** File not found : %s **', $filename);
|
||||
}
|
||||
return implode('', array_slice($file, $example->getStartingLine() - 1, $example->getLineCount()));
|
||||
}
|
||||
/**
|
||||
* Registers the project's root directory where an 'examples' folder can be expected.
|
||||
*/
|
||||
public function setSourceDirectory(string $directory = '') : void
|
||||
{
|
||||
$this->sourceDirectory = $directory;
|
||||
}
|
||||
/**
|
||||
* Returns the project's root directory where an 'examples' folder can be expected.
|
||||
*/
|
||||
public function getSourceDirectory() : string
|
||||
{
|
||||
return $this->sourceDirectory;
|
||||
}
|
||||
/**
|
||||
* Registers a series of directories that may contain examples.
|
||||
*
|
||||
* @param string[] $directories
|
||||
*/
|
||||
public function setExampleDirectories(array $directories) : void
|
||||
{
|
||||
$this->exampleDirectories = $directories;
|
||||
}
|
||||
/**
|
||||
* Returns a series of directories that may contain examples.
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getExampleDirectories() : array
|
||||
{
|
||||
return $this->exampleDirectories;
|
||||
}
|
||||
/**
|
||||
* Attempts to find the requested example file and returns its contents or null if no file was found.
|
||||
*
|
||||
* This method will try several methods in search of the given example file, the first one it encounters is
|
||||
* returned:
|
||||
*
|
||||
* 1. Iterates through all examples folders for the given filename
|
||||
* 2. Checks the source folder for the given filename
|
||||
* 3. Checks the 'examples' folder in the current working directory for examples
|
||||
* 4. Checks the path relative to the current working directory for the given filename
|
||||
*
|
||||
* @return string[] all lines of the example file
|
||||
*/
|
||||
private function getExampleFileContents(string $filename) : ?array
|
||||
{
|
||||
$normalizedPath = null;
|
||||
foreach ($this->exampleDirectories as $directory) {
|
||||
$exampleFileFromConfig = $this->constructExamplePath($directory, $filename);
|
||||
if (is_readable($exampleFileFromConfig)) {
|
||||
$normalizedPath = $exampleFileFromConfig;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$normalizedPath) {
|
||||
if (is_readable($this->getExamplePathFromSource($filename))) {
|
||||
$normalizedPath = $this->getExamplePathFromSource($filename);
|
||||
} elseif (is_readable($this->getExamplePathFromExampleDirectory($filename))) {
|
||||
$normalizedPath = $this->getExamplePathFromExampleDirectory($filename);
|
||||
} elseif (is_readable($filename)) {
|
||||
$normalizedPath = $filename;
|
||||
}
|
||||
}
|
||||
$lines = $normalizedPath && is_readable($normalizedPath) ? file($normalizedPath) : \false;
|
||||
return $lines !== \false ? $lines : null;
|
||||
}
|
||||
/**
|
||||
* Get example filepath based on the example directory inside your project.
|
||||
*/
|
||||
private function getExamplePathFromExampleDirectory(string $file) : string
|
||||
{
|
||||
return getcwd() . DIRECTORY_SEPARATOR . 'examples' . DIRECTORY_SEPARATOR . $file;
|
||||
}
|
||||
/**
|
||||
* Returns a path to the example file in the given directory..
|
||||
*/
|
||||
private function constructExamplePath(string $directory, string $file) : string
|
||||
{
|
||||
return rtrim($directory, '\\/') . DIRECTORY_SEPARATOR . $file;
|
||||
}
|
||||
/**
|
||||
* Get example filepath based on sourcecode.
|
||||
*/
|
||||
private function getExamplePathFromSource(string $file) : string
|
||||
{
|
||||
return sprintf('%s%s%s', trim($this->getSourceDirectory(), '\\/'), DIRECTORY_SEPARATOR, trim($file, '"'));
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue