Update website
This commit is contained in:
parent
0591a4aeb4
commit
7cd3d51e77
@ -4,6 +4,7 @@ use RenanBr\BibTexParser\Listener;
|
|||||||
use RenanBr\BibTexParser\Parser;
|
use RenanBr\BibTexParser\Parser;
|
||||||
use RenanBr\BibTexParser\Processor;
|
use RenanBr\BibTexParser\Processor;
|
||||||
use RenanBr\BibTexParser\Processor\NamesProcessor;
|
use RenanBr\BibTexParser\Processor\NamesProcessor;
|
||||||
|
use RenanBr\BibTexParser\Processor\LatexToUnicodeProcessor;
|
||||||
|
|
||||||
require dirname(__FILE__).'/common.php';
|
require dirname(__FILE__).'/common.php';
|
||||||
|
|
||||||
@ -177,6 +178,7 @@ $listener->addProcessor(static function (array $entry) {
|
|||||||
}
|
}
|
||||||
return $entry;
|
return $entry;
|
||||||
});
|
});
|
||||||
|
$listener->addProcessor(new LatexToUnicodeProcessor());
|
||||||
|
|
||||||
// Create a Parser and attach the listener
|
// Create a Parser and attach the listener
|
||||||
$parser = new Parser();
|
$parser = new Parser();
|
||||||
|
2
vendor/composer/autoload_psr4.php
vendored
2
vendor/composer/autoload_psr4.php
vendored
@ -19,6 +19,7 @@ return array(
|
|||||||
'Symfony\\Contracts\\HttpClient\\' => array($vendorDir . '/symfony/http-client-contracts'),
|
'Symfony\\Contracts\\HttpClient\\' => array($vendorDir . '/symfony/http-client-contracts'),
|
||||||
'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'),
|
'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'),
|
||||||
'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'),
|
'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'),
|
||||||
|
'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
|
||||||
'Symfony\\Component\\HttpClient\\' => array($vendorDir . '/symfony/http-client'),
|
'Symfony\\Component\\HttpClient\\' => array($vendorDir . '/symfony/http-client'),
|
||||||
'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'),
|
'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'),
|
||||||
'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'),
|
'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'),
|
||||||
@ -30,6 +31,7 @@ return array(
|
|||||||
'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
|
'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
|
||||||
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
||||||
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
|
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
|
||||||
|
'Pandoc\\' => array($vendorDir . '/ueberdosis/pandoc/src'),
|
||||||
'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
|
'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
|
||||||
'League\\OAuth2\\Client\\' => array($vendorDir . '/league/oauth2-client/src'),
|
'League\\OAuth2\\Client\\' => array($vendorDir . '/league/oauth2-client/src'),
|
||||||
'Lavaux\\Website\\' => array($baseDir . '/src'),
|
'Lavaux\\Website\\' => array($baseDir . '/src'),
|
||||||
|
10
vendor/composer/autoload_static.php
vendored
10
vendor/composer/autoload_static.php
vendored
@ -44,6 +44,7 @@ class ComposerStaticInitc94a8368bcea9853dd31683be0b15c06
|
|||||||
'Symfony\\Contracts\\HttpClient\\' => 29,
|
'Symfony\\Contracts\\HttpClient\\' => 29,
|
||||||
'Symfony\\Component\\VarDumper\\' => 28,
|
'Symfony\\Component\\VarDumper\\' => 28,
|
||||||
'Symfony\\Component\\String\\' => 25,
|
'Symfony\\Component\\String\\' => 25,
|
||||||
|
'Symfony\\Component\\Process\\' => 26,
|
||||||
'Symfony\\Component\\HttpClient\\' => 29,
|
'Symfony\\Component\\HttpClient\\' => 29,
|
||||||
'Symfony\\Component\\Finder\\' => 25,
|
'Symfony\\Component\\Finder\\' => 25,
|
||||||
'Symfony\\Component\\Filesystem\\' => 29,
|
'Symfony\\Component\\Filesystem\\' => 29,
|
||||||
@ -61,6 +62,7 @@ class ComposerStaticInitc94a8368bcea9853dd31683be0b15c06
|
|||||||
'Psr\\Http\\Client\\' => 16,
|
'Psr\\Http\\Client\\' => 16,
|
||||||
'Psr\\Container\\' => 14,
|
'Psr\\Container\\' => 14,
|
||||||
'Psr\\Cache\\' => 10,
|
'Psr\\Cache\\' => 10,
|
||||||
|
'Pandoc\\' => 7,
|
||||||
'PHPMailer\\PHPMailer\\' => 20,
|
'PHPMailer\\PHPMailer\\' => 20,
|
||||||
),
|
),
|
||||||
'L' =>
|
'L' =>
|
||||||
@ -137,6 +139,10 @@ class ComposerStaticInitc94a8368bcea9853dd31683be0b15c06
|
|||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/symfony/string',
|
0 => __DIR__ . '/..' . '/symfony/string',
|
||||||
),
|
),
|
||||||
|
'Symfony\\Component\\Process\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/symfony/process',
|
||||||
|
),
|
||||||
'Symfony\\Component\\HttpClient\\' =>
|
'Symfony\\Component\\HttpClient\\' =>
|
||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/symfony/http-client',
|
0 => __DIR__ . '/..' . '/symfony/http-client',
|
||||||
@ -182,6 +188,10 @@ class ComposerStaticInitc94a8368bcea9853dd31683be0b15c06
|
|||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/psr/cache/src',
|
0 => __DIR__ . '/..' . '/psr/cache/src',
|
||||||
),
|
),
|
||||||
|
'Pandoc\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/ueberdosis/pandoc/src',
|
||||||
|
),
|
||||||
'PHPMailer\\PHPMailer\\' =>
|
'PHPMailer\\PHPMailer\\' =>
|
||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src',
|
0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src',
|
||||||
|
124
vendor/composer/installed.json
vendored
124
vendor/composer/installed.json
vendored
@ -2555,6 +2555,71 @@
|
|||||||
],
|
],
|
||||||
"install-path": "../symfony/polyfill-php81"
|
"install-path": "../symfony/polyfill-php81"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/process",
|
||||||
|
"version": "v5.4.47",
|
||||||
|
"version_normalized": "5.4.47.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/process.git",
|
||||||
|
"reference": "5d1662fb32ebc94f17ddb8d635454a776066733d"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d",
|
||||||
|
"reference": "5d1662fb32ebc94f17ddb8d635454a776066733d",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2.5",
|
||||||
|
"symfony/polyfill-php80": "^1.16"
|
||||||
|
},
|
||||||
|
"time": "2024-11-06T11:36:42+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Component\\Process\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Executes commands in sub-processes",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/process/tree/v5.4.47"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"install-path": "../symfony/process"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/service-contracts",
|
"name": "symfony/service-contracts",
|
||||||
"version": "v2.5.3",
|
"version": "v2.5.3",
|
||||||
@ -3038,6 +3103,65 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"install-path": "../twig/twig"
|
"install-path": "../twig/twig"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ueberdosis/pandoc",
|
||||||
|
"version": "0.9.0",
|
||||||
|
"version_normalized": "0.9.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/ueberdosis/pandoc.git",
|
||||||
|
"reference": "c5f16d52170e0622d6d3ef8350e08d0799809049"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/ueberdosis/pandoc/zipball/c5f16d52170e0622d6d3ef8350e08d0799809049",
|
||||||
|
"reference": "c5f16d52170e0622d6d3ef8350e08d0799809049",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1|^8.0",
|
||||||
|
"symfony/process": ">4.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^8.0 || ^9.0"
|
||||||
|
},
|
||||||
|
"time": "2023-02-28T08:00:44+00:00",
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Pandoc\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Hans Pagel",
|
||||||
|
"email": "hans.pagel@ueber.io",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Pandoc PHP Package",
|
||||||
|
"homepage": "https://github.com/ueberdosis/pandoc",
|
||||||
|
"keywords": [
|
||||||
|
"pandoc",
|
||||||
|
"ueberdosis"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/ueberdosis/pandoc/issues",
|
||||||
|
"source": "https://github.com/ueberdosis/pandoc/tree/0.9.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/sponsors/ueberdosis/",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"install-path": "../ueberdosis/pandoc"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
22
vendor/composer/installed.php
vendored
22
vendor/composer/installed.php
vendored
@ -3,7 +3,7 @@
|
|||||||
'name' => 'lavaux/website',
|
'name' => 'lavaux/website',
|
||||||
'pretty_version' => 'dev-main',
|
'pretty_version' => 'dev-main',
|
||||||
'version' => 'dev-main',
|
'version' => 'dev-main',
|
||||||
'reference' => 'd72fc6fa906eab42d6a360e33e9a4cd5d0c1d0e2',
|
'reference' => '53c1909b4377d48864afc7bd7f8cbd6a28a2dfb6',
|
||||||
'type' => 'project',
|
'type' => 'project',
|
||||||
'install_path' => __DIR__ . '/../../',
|
'install_path' => __DIR__ . '/../../',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
@ -85,7 +85,7 @@
|
|||||||
'lavaux/website' => array(
|
'lavaux/website' => array(
|
||||||
'pretty_version' => 'dev-main',
|
'pretty_version' => 'dev-main',
|
||||||
'version' => 'dev-main',
|
'version' => 'dev-main',
|
||||||
'reference' => 'd72fc6fa906eab42d6a360e33e9a4cd5d0c1d0e2',
|
'reference' => '53c1909b4377d48864afc7bd7f8cbd6a28a2dfb6',
|
||||||
'type' => 'project',
|
'type' => 'project',
|
||||||
'install_path' => __DIR__ . '/../../',
|
'install_path' => __DIR__ . '/../../',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
@ -361,6 +361,15 @@
|
|||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
|
'symfony/process' => array(
|
||||||
|
'pretty_version' => 'v5.4.47',
|
||||||
|
'version' => '5.4.47.0',
|
||||||
|
'reference' => '5d1662fb32ebc94f17ddb8d635454a776066733d',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../symfony/process',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
'symfony/service-contracts' => array(
|
'symfony/service-contracts' => array(
|
||||||
'pretty_version' => 'v2.5.3',
|
'pretty_version' => 'v2.5.3',
|
||||||
'version' => '2.5.3.0',
|
'version' => '2.5.3.0',
|
||||||
@ -421,5 +430,14 @@
|
|||||||
0 => 'v5.3.3',
|
0 => 'v5.3.3',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
'ueberdosis/pandoc' => array(
|
||||||
|
'pretty_version' => '0.9.0',
|
||||||
|
'version' => '0.9.0.0',
|
||||||
|
'reference' => 'c5f16d52170e0622d6d3ef8350e08d0799809049',
|
||||||
|
'type' => 'library',
|
||||||
|
'install_path' => __DIR__ . '/../ueberdosis/pandoc',
|
||||||
|
'aliases' => array(),
|
||||||
|
'dev_requirement' => false,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
116
vendor/symfony/process/CHANGELOG.md
vendored
Normal file
116
vendor/symfony/process/CHANGELOG.md
vendored
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
CHANGELOG
|
||||||
|
=========
|
||||||
|
|
||||||
|
5.2.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added `Process::setOptions()` to set `Process` specific options
|
||||||
|
* added option `create_new_console` to allow a subprocess to continue
|
||||||
|
to run after the main script exited, both on Linux and on Windows
|
||||||
|
|
||||||
|
5.1.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added `Process::getStartTime()` to retrieve the start time of the process as float
|
||||||
|
|
||||||
|
5.0.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* removed `Process::inheritEnvironmentVariables()`
|
||||||
|
* removed `PhpProcess::setPhpBinary()`
|
||||||
|
* `Process` must be instantiated with a command array, use `Process::fromShellCommandline()` when the command should be parsed by the shell
|
||||||
|
* removed `Process::setCommandLine()`
|
||||||
|
|
||||||
|
4.4.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* deprecated `Process::inheritEnvironmentVariables()`: env variables are always inherited.
|
||||||
|
* added `Process::getLastOutputTime()` method
|
||||||
|
|
||||||
|
4.2.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added the `Process::fromShellCommandline()` to run commands in a shell wrapper
|
||||||
|
* deprecated passing a command as string when creating a `Process` instance
|
||||||
|
* deprecated the `Process::setCommandline()` and the `PhpProcess::setPhpBinary()` methods
|
||||||
|
* added the `Process::waitUntil()` method to wait for the process only for a
|
||||||
|
specific output, then continue the normal execution of your application
|
||||||
|
|
||||||
|
4.1.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added the `Process::isTtySupported()` method that allows to check for TTY support
|
||||||
|
* made `PhpExecutableFinder` look for the `PHP_BINARY` env var when searching the php binary
|
||||||
|
* added the `ProcessSignaledException` class to properly catch signaled process errors
|
||||||
|
|
||||||
|
4.0.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* environment variables will always be inherited
|
||||||
|
* added a second `array $env = []` argument to the `start()`, `run()`,
|
||||||
|
`mustRun()`, and `restart()` methods of the `Process` class
|
||||||
|
* added a second `array $env = []` argument to the `start()` method of the
|
||||||
|
`PhpProcess` class
|
||||||
|
* the `ProcessUtils::escapeArgument()` method has been removed
|
||||||
|
* the `areEnvironmentVariablesInherited()`, `getOptions()`, and `setOptions()`
|
||||||
|
methods of the `Process` class have been removed
|
||||||
|
* support for passing `proc_open()` options has been removed
|
||||||
|
* removed the `ProcessBuilder` class, use the `Process` class instead
|
||||||
|
* removed the `getEnhanceWindowsCompatibility()` and `setEnhanceWindowsCompatibility()` methods of the `Process` class
|
||||||
|
* passing a not existing working directory to the constructor of the `Symfony\Component\Process\Process` class is not
|
||||||
|
supported anymore
|
||||||
|
|
||||||
|
3.4.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* deprecated the ProcessBuilder class
|
||||||
|
* deprecated calling `Process::start()` without setting a valid working directory beforehand (via `setWorkingDirectory()` or constructor)
|
||||||
|
|
||||||
|
3.3.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added command line arrays in the `Process` class
|
||||||
|
* added `$env` argument to `Process::start()`, `run()`, `mustRun()` and `restart()` methods
|
||||||
|
* deprecated the `ProcessUtils::escapeArgument()` method
|
||||||
|
* deprecated not inheriting environment variables
|
||||||
|
* deprecated configuring `proc_open()` options
|
||||||
|
* deprecated configuring enhanced Windows compatibility
|
||||||
|
* deprecated configuring enhanced sigchild compatibility
|
||||||
|
|
||||||
|
2.5.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added support for PTY mode
|
||||||
|
* added the convenience method "mustRun"
|
||||||
|
* deprecation: Process::setStdin() is deprecated in favor of Process::setInput()
|
||||||
|
* deprecation: Process::getStdin() is deprecated in favor of Process::getInput()
|
||||||
|
* deprecation: Process::setInput() and ProcessBuilder::setInput() do not accept non-scalar types
|
||||||
|
|
||||||
|
2.4.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added the ability to define an idle timeout
|
||||||
|
|
||||||
|
2.3.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added ProcessUtils::escapeArgument() to fix the bug in escapeshellarg() function on Windows
|
||||||
|
* added Process::signal()
|
||||||
|
* added Process::getPid()
|
||||||
|
* added support for a TTY mode
|
||||||
|
|
||||||
|
2.2.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added ProcessBuilder::setArguments() to reset the arguments on a builder
|
||||||
|
* added a way to retrieve the standard and error output incrementally
|
||||||
|
* added Process:restart()
|
||||||
|
|
||||||
|
2.1.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added support for non-blocking processes (start(), wait(), isRunning(), stop())
|
||||||
|
* enhanced Windows compatibility
|
||||||
|
* added Process::getExitCodeText() that returns a string representation for
|
||||||
|
the exit code returned by the process
|
||||||
|
* added ProcessBuilder
|
21
vendor/symfony/process/Exception/ExceptionInterface.php
vendored
Normal file
21
vendor/symfony/process/Exception/ExceptionInterface.php
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Marker Interface for the Process Component.
|
||||||
|
*
|
||||||
|
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
|
||||||
|
*/
|
||||||
|
interface ExceptionInterface extends \Throwable
|
||||||
|
{
|
||||||
|
}
|
21
vendor/symfony/process/Exception/InvalidArgumentException.php
vendored
Normal file
21
vendor/symfony/process/Exception/InvalidArgumentException.php
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* InvalidArgumentException for the Process Component.
|
||||||
|
*
|
||||||
|
* @author Romain Neutron <imprec@gmail.com>
|
||||||
|
*/
|
||||||
|
class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
|
||||||
|
{
|
||||||
|
}
|
21
vendor/symfony/process/Exception/LogicException.php
vendored
Normal file
21
vendor/symfony/process/Exception/LogicException.php
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LogicException for the Process Component.
|
||||||
|
*
|
||||||
|
* @author Romain Neutron <imprec@gmail.com>
|
||||||
|
*/
|
||||||
|
class LogicException extends \LogicException implements ExceptionInterface
|
||||||
|
{
|
||||||
|
}
|
54
vendor/symfony/process/Exception/ProcessFailedException.php
vendored
Normal file
54
vendor/symfony/process/Exception/ProcessFailedException.php
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Exception;
|
||||||
|
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception for failed processes.
|
||||||
|
*
|
||||||
|
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
|
||||||
|
*/
|
||||||
|
class ProcessFailedException extends RuntimeException
|
||||||
|
{
|
||||||
|
private $process;
|
||||||
|
|
||||||
|
public function __construct(Process $process)
|
||||||
|
{
|
||||||
|
if ($process->isSuccessful()) {
|
||||||
|
throw new InvalidArgumentException('Expected a failed process, but the given process was successful.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$error = sprintf('The command "%s" failed.'."\n\nExit Code: %s(%s)\n\nWorking directory: %s",
|
||||||
|
$process->getCommandLine(),
|
||||||
|
$process->getExitCode(),
|
||||||
|
$process->getExitCodeText(),
|
||||||
|
$process->getWorkingDirectory()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!$process->isOutputDisabled()) {
|
||||||
|
$error .= sprintf("\n\nOutput:\n================\n%s\n\nError Output:\n================\n%s",
|
||||||
|
$process->getOutput(),
|
||||||
|
$process->getErrorOutput()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::__construct($error);
|
||||||
|
|
||||||
|
$this->process = $process;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getProcess()
|
||||||
|
{
|
||||||
|
return $this->process;
|
||||||
|
}
|
||||||
|
}
|
41
vendor/symfony/process/Exception/ProcessSignaledException.php
vendored
Normal file
41
vendor/symfony/process/Exception/ProcessSignaledException.php
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Exception;
|
||||||
|
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception that is thrown when a process has been signaled.
|
||||||
|
*
|
||||||
|
* @author Sullivan Senechal <soullivaneuh@gmail.com>
|
||||||
|
*/
|
||||||
|
final class ProcessSignaledException extends RuntimeException
|
||||||
|
{
|
||||||
|
private $process;
|
||||||
|
|
||||||
|
public function __construct(Process $process)
|
||||||
|
{
|
||||||
|
$this->process = $process;
|
||||||
|
|
||||||
|
parent::__construct(sprintf('The process has been signaled with signal "%s".', $process->getTermSignal()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getProcess(): Process
|
||||||
|
{
|
||||||
|
return $this->process;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSignal(): int
|
||||||
|
{
|
||||||
|
return $this->getProcess()->getTermSignal();
|
||||||
|
}
|
||||||
|
}
|
69
vendor/symfony/process/Exception/ProcessTimedOutException.php
vendored
Normal file
69
vendor/symfony/process/Exception/ProcessTimedOutException.php
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Exception;
|
||||||
|
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception that is thrown when a process times out.
|
||||||
|
*
|
||||||
|
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
|
||||||
|
*/
|
||||||
|
class ProcessTimedOutException extends RuntimeException
|
||||||
|
{
|
||||||
|
public const TYPE_GENERAL = 1;
|
||||||
|
public const TYPE_IDLE = 2;
|
||||||
|
|
||||||
|
private $process;
|
||||||
|
private $timeoutType;
|
||||||
|
|
||||||
|
public function __construct(Process $process, int $timeoutType)
|
||||||
|
{
|
||||||
|
$this->process = $process;
|
||||||
|
$this->timeoutType = $timeoutType;
|
||||||
|
|
||||||
|
parent::__construct(sprintf(
|
||||||
|
'The process "%s" exceeded the timeout of %s seconds.',
|
||||||
|
$process->getCommandLine(),
|
||||||
|
$this->getExceededTimeout()
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getProcess()
|
||||||
|
{
|
||||||
|
return $this->process;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isGeneralTimeout()
|
||||||
|
{
|
||||||
|
return self::TYPE_GENERAL === $this->timeoutType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isIdleTimeout()
|
||||||
|
{
|
||||||
|
return self::TYPE_IDLE === $this->timeoutType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getExceededTimeout()
|
||||||
|
{
|
||||||
|
switch ($this->timeoutType) {
|
||||||
|
case self::TYPE_GENERAL:
|
||||||
|
return $this->process->getTimeout();
|
||||||
|
|
||||||
|
case self::TYPE_IDLE:
|
||||||
|
return $this->process->getIdleTimeout();
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new \LogicException(sprintf('Unknown timeout type "%d".', $this->timeoutType));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
vendor/symfony/process/Exception/RuntimeException.php
vendored
Normal file
21
vendor/symfony/process/Exception/RuntimeException.php
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RuntimeException for the Process Component.
|
||||||
|
*
|
||||||
|
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
|
||||||
|
*/
|
||||||
|
class RuntimeException extends \RuntimeException implements ExceptionInterface
|
||||||
|
{
|
||||||
|
}
|
103
vendor/symfony/process/ExecutableFinder.php
vendored
Normal file
103
vendor/symfony/process/ExecutableFinder.php
vendored
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic executable finder.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
|
||||||
|
*/
|
||||||
|
class ExecutableFinder
|
||||||
|
{
|
||||||
|
private const CMD_BUILTINS = [
|
||||||
|
'assoc', 'break', 'call', 'cd', 'chdir', 'cls', 'color', 'copy', 'date',
|
||||||
|
'del', 'dir', 'echo', 'endlocal', 'erase', 'exit', 'for', 'ftype', 'goto',
|
||||||
|
'help', 'if', 'label', 'md', 'mkdir', 'mklink', 'move', 'path', 'pause',
|
||||||
|
'popd', 'prompt', 'pushd', 'rd', 'rem', 'ren', 'rename', 'rmdir', 'set',
|
||||||
|
'setlocal', 'shift', 'start', 'time', 'title', 'type', 'ver', 'vol',
|
||||||
|
];
|
||||||
|
|
||||||
|
private $suffixes = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces default suffixes of executable.
|
||||||
|
*/
|
||||||
|
public function setSuffixes(array $suffixes)
|
||||||
|
{
|
||||||
|
$this->suffixes = $suffixes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds new possible suffix to check for executable.
|
||||||
|
*/
|
||||||
|
public function addSuffix(string $suffix)
|
||||||
|
{
|
||||||
|
$this->suffixes[] = $suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds an executable by name.
|
||||||
|
*
|
||||||
|
* @param string $name The executable name (without the extension)
|
||||||
|
* @param string|null $default The default to return if no executable is found
|
||||||
|
* @param array $extraDirs Additional dirs to check into
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function find(string $name, ?string $default = null, array $extraDirs = [])
|
||||||
|
{
|
||||||
|
// windows built-in commands that are present in cmd.exe should not be resolved using PATH as they do not exist as exes
|
||||||
|
if ('\\' === \DIRECTORY_SEPARATOR && \in_array(strtolower($name), self::CMD_BUILTINS, true)) {
|
||||||
|
return $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
$dirs = array_merge(
|
||||||
|
explode(\PATH_SEPARATOR, getenv('PATH') ?: getenv('Path')),
|
||||||
|
$extraDirs
|
||||||
|
);
|
||||||
|
|
||||||
|
$suffixes = [];
|
||||||
|
if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||||
|
$pathExt = getenv('PATHEXT');
|
||||||
|
$suffixes = $this->suffixes;
|
||||||
|
$suffixes = array_merge($suffixes, $pathExt ? explode(\PATH_SEPARATOR, $pathExt) : ['.exe', '.bat', '.cmd', '.com']);
|
||||||
|
}
|
||||||
|
$suffixes = '' !== pathinfo($name, PATHINFO_EXTENSION) ? array_merge([''], $suffixes) : array_merge($suffixes, ['']);
|
||||||
|
foreach ($suffixes as $suffix) {
|
||||||
|
foreach ($dirs as $dir) {
|
||||||
|
if ('' === $dir) {
|
||||||
|
$dir = '.';
|
||||||
|
}
|
||||||
|
if (@is_file($file = $dir.\DIRECTORY_SEPARATOR.$name.$suffix) && ('\\' === \DIRECTORY_SEPARATOR || @is_executable($file))) {
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!@is_dir($dir) && basename($dir) === $name.$suffix && @is_executable($dir)) {
|
||||||
|
return $dir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('\\' === \DIRECTORY_SEPARATOR || !\function_exists('exec') || \strlen($name) !== strcspn($name, '/'.\DIRECTORY_SEPARATOR)) {
|
||||||
|
return $default;
|
||||||
|
}
|
||||||
|
|
||||||
|
$execResult = exec('command -v -- '.escapeshellarg($name));
|
||||||
|
|
||||||
|
if (($executablePath = substr($execResult, 0, strpos($execResult, \PHP_EOL) ?: null)) && @is_executable($executablePath)) {
|
||||||
|
return $executablePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $default;
|
||||||
|
}
|
||||||
|
}
|
96
vendor/symfony/process/InputStream.php
vendored
Normal file
96
vendor/symfony/process/InputStream.php
vendored
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process;
|
||||||
|
|
||||||
|
use Symfony\Component\Process\Exception\RuntimeException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a way to continuously write to the input of a Process until the InputStream is closed.
|
||||||
|
*
|
||||||
|
* @author Nicolas Grekas <p@tchwork.com>
|
||||||
|
*
|
||||||
|
* @implements \IteratorAggregate<int, string>
|
||||||
|
*/
|
||||||
|
class InputStream implements \IteratorAggregate
|
||||||
|
{
|
||||||
|
/** @var callable|null */
|
||||||
|
private $onEmpty = null;
|
||||||
|
private $input = [];
|
||||||
|
private $open = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a callback that is called when the write buffer becomes empty.
|
||||||
|
*/
|
||||||
|
public function onEmpty(?callable $onEmpty = null)
|
||||||
|
{
|
||||||
|
$this->onEmpty = $onEmpty;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends an input to the write buffer.
|
||||||
|
*
|
||||||
|
* @param resource|string|int|float|bool|\Traversable|null $input The input to append as scalar,
|
||||||
|
* stream resource or \Traversable
|
||||||
|
*/
|
||||||
|
public function write($input)
|
||||||
|
{
|
||||||
|
if (null === $input) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ($this->isClosed()) {
|
||||||
|
throw new RuntimeException(sprintf('"%s" is closed.', static::class));
|
||||||
|
}
|
||||||
|
$this->input[] = ProcessUtils::validateInput(__METHOD__, $input);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the write buffer.
|
||||||
|
*/
|
||||||
|
public function close()
|
||||||
|
{
|
||||||
|
$this->open = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells whether the write buffer is closed or not.
|
||||||
|
*/
|
||||||
|
public function isClosed()
|
||||||
|
{
|
||||||
|
return !$this->open;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Traversable<int, string>
|
||||||
|
*/
|
||||||
|
#[\ReturnTypeWillChange]
|
||||||
|
public function getIterator()
|
||||||
|
{
|
||||||
|
$this->open = true;
|
||||||
|
|
||||||
|
while ($this->open || $this->input) {
|
||||||
|
if (!$this->input) {
|
||||||
|
yield '';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$current = array_shift($this->input);
|
||||||
|
|
||||||
|
if ($current instanceof \Iterator) {
|
||||||
|
yield from $current;
|
||||||
|
} else {
|
||||||
|
yield $current;
|
||||||
|
}
|
||||||
|
if (!$this->input && $this->open && null !== $onEmpty = $this->onEmpty) {
|
||||||
|
$this->write($onEmpty($this));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
19
vendor/symfony/process/LICENSE
vendored
Normal file
19
vendor/symfony/process/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2004-present Fabien Potencier
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is furnished
|
||||||
|
to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
96
vendor/symfony/process/PhpExecutableFinder.php
vendored
Normal file
96
vendor/symfony/process/PhpExecutableFinder.php
vendored
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An executable finder specifically designed for the PHP executable.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
|
||||||
|
*/
|
||||||
|
class PhpExecutableFinder
|
||||||
|
{
|
||||||
|
private $executableFinder;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->executableFinder = new ExecutableFinder();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds The PHP executable.
|
||||||
|
*
|
||||||
|
* @return string|false
|
||||||
|
*/
|
||||||
|
public function find(bool $includeArgs = true)
|
||||||
|
{
|
||||||
|
if ($php = getenv('PHP_BINARY')) {
|
||||||
|
if (!is_executable($php) && !$php = $this->executableFinder->find($php)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (@is_dir($php)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $php;
|
||||||
|
}
|
||||||
|
|
||||||
|
$args = $this->findArguments();
|
||||||
|
$args = $includeArgs && $args ? ' '.implode(' ', $args) : '';
|
||||||
|
|
||||||
|
// PHP_BINARY return the current sapi executable
|
||||||
|
if (\PHP_BINARY && \in_array(\PHP_SAPI, ['cli', 'cli-server', 'phpdbg'], true)) {
|
||||||
|
return \PHP_BINARY.$args;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($php = getenv('PHP_PATH')) {
|
||||||
|
if (!@is_executable($php) || @is_dir($php)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $php;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($php = getenv('PHP_PEAR_PHP_BIN')) {
|
||||||
|
if (@is_executable($php) && !@is_dir($php)) {
|
||||||
|
return $php;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (@is_executable($php = \PHP_BINDIR.('\\' === \DIRECTORY_SEPARATOR ? '\\php.exe' : '/php')) && !@is_dir($php)) {
|
||||||
|
return $php;
|
||||||
|
}
|
||||||
|
|
||||||
|
$dirs = [\PHP_BINDIR];
|
||||||
|
if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||||
|
$dirs[] = 'C:\xampp\php\\';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->executableFinder->find('php', false, $dirs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the PHP executable arguments.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function findArguments()
|
||||||
|
{
|
||||||
|
$arguments = [];
|
||||||
|
if ('phpdbg' === \PHP_SAPI) {
|
||||||
|
$arguments[] = '-qrr';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $arguments;
|
||||||
|
}
|
||||||
|
}
|
72
vendor/symfony/process/PhpProcess.php
vendored
Normal file
72
vendor/symfony/process/PhpProcess.php
vendored
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process;
|
||||||
|
|
||||||
|
use Symfony\Component\Process\Exception\LogicException;
|
||||||
|
use Symfony\Component\Process\Exception\RuntimeException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PhpProcess runs a PHP script in an independent process.
|
||||||
|
*
|
||||||
|
* $p = new PhpProcess('<?php echo "foo"; ?>');
|
||||||
|
* $p->run();
|
||||||
|
* print $p->getOutput()."\n";
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class PhpProcess extends Process
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string $script The PHP script to run (as a string)
|
||||||
|
* @param string|null $cwd The working directory or null to use the working dir of the current PHP process
|
||||||
|
* @param array|null $env The environment variables or null to use the same environment as the current PHP process
|
||||||
|
* @param int $timeout The timeout in seconds
|
||||||
|
* @param array|null $php Path to the PHP binary to use with any additional arguments
|
||||||
|
*/
|
||||||
|
public function __construct(string $script, ?string $cwd = null, ?array $env = null, int $timeout = 60, ?array $php = null)
|
||||||
|
{
|
||||||
|
if (null === $php) {
|
||||||
|
$executableFinder = new PhpExecutableFinder();
|
||||||
|
$php = $executableFinder->find(false);
|
||||||
|
$php = false === $php ? null : array_merge([$php], $executableFinder->findArguments());
|
||||||
|
}
|
||||||
|
if ('phpdbg' === \PHP_SAPI) {
|
||||||
|
$file = tempnam(sys_get_temp_dir(), 'dbg');
|
||||||
|
file_put_contents($file, $script);
|
||||||
|
register_shutdown_function('unlink', $file);
|
||||||
|
$php[] = $file;
|
||||||
|
$script = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::__construct($php, $cwd, $env, $script, $timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static function fromShellCommandline(string $command, ?string $cwd = null, ?array $env = null, $input = null, ?float $timeout = 60)
|
||||||
|
{
|
||||||
|
throw new LogicException(sprintf('The "%s()" method cannot be called when using "%s".', __METHOD__, self::class));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function start(?callable $callback = null, array $env = [])
|
||||||
|
{
|
||||||
|
if (null === $this->getCommandLine()) {
|
||||||
|
throw new RuntimeException('Unable to find the PHP executable.');
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::start($callback, $env);
|
||||||
|
}
|
||||||
|
}
|
180
vendor/symfony/process/Pipes/AbstractPipes.php
vendored
Normal file
180
vendor/symfony/process/Pipes/AbstractPipes.php
vendored
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Pipes;
|
||||||
|
|
||||||
|
use Symfony\Component\Process\Exception\InvalidArgumentException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Romain Neutron <imprec@gmail.com>
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
abstract class AbstractPipes implements PipesInterface
|
||||||
|
{
|
||||||
|
public $pipes = [];
|
||||||
|
|
||||||
|
private $inputBuffer = '';
|
||||||
|
private $input;
|
||||||
|
private $blocked = true;
|
||||||
|
private $lastError;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param resource|string|int|float|bool|\Iterator|null $input
|
||||||
|
*/
|
||||||
|
public function __construct($input)
|
||||||
|
{
|
||||||
|
if (\is_resource($input) || $input instanceof \Iterator) {
|
||||||
|
$this->input = $input;
|
||||||
|
} elseif (\is_string($input)) {
|
||||||
|
$this->inputBuffer = $input;
|
||||||
|
} else {
|
||||||
|
$this->inputBuffer = (string) $input;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function close()
|
||||||
|
{
|
||||||
|
foreach ($this->pipes as $pipe) {
|
||||||
|
if (\is_resource($pipe)) {
|
||||||
|
fclose($pipe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->pipes = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if a system call has been interrupted.
|
||||||
|
*/
|
||||||
|
protected function hasSystemCallBeenInterrupted(): bool
|
||||||
|
{
|
||||||
|
$lastError = $this->lastError;
|
||||||
|
$this->lastError = null;
|
||||||
|
|
||||||
|
// stream_select returns false when the `select` system call is interrupted by an incoming signal
|
||||||
|
return null !== $lastError && false !== stripos($lastError, 'interrupted system call');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unblocks streams.
|
||||||
|
*/
|
||||||
|
protected function unblock()
|
||||||
|
{
|
||||||
|
if (!$this->blocked) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->pipes as $pipe) {
|
||||||
|
stream_set_blocking($pipe, 0);
|
||||||
|
}
|
||||||
|
if (\is_resource($this->input)) {
|
||||||
|
stream_set_blocking($this->input, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->blocked = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes input to stdin.
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException When an input iterator yields a non supported value
|
||||||
|
*/
|
||||||
|
protected function write(): ?array
|
||||||
|
{
|
||||||
|
if (!isset($this->pipes[0])) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
$input = $this->input;
|
||||||
|
|
||||||
|
if ($input instanceof \Iterator) {
|
||||||
|
if (!$input->valid()) {
|
||||||
|
$input = null;
|
||||||
|
} elseif (\is_resource($input = $input->current())) {
|
||||||
|
stream_set_blocking($input, 0);
|
||||||
|
} elseif (!isset($this->inputBuffer[0])) {
|
||||||
|
if (!\is_string($input)) {
|
||||||
|
if (!\is_scalar($input)) {
|
||||||
|
throw new InvalidArgumentException(sprintf('"%s" yielded a value of type "%s", but only scalars and stream resources are supported.', get_debug_type($this->input), get_debug_type($input)));
|
||||||
|
}
|
||||||
|
$input = (string) $input;
|
||||||
|
}
|
||||||
|
$this->inputBuffer = $input;
|
||||||
|
$this->input->next();
|
||||||
|
$input = null;
|
||||||
|
} else {
|
||||||
|
$input = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$r = $e = [];
|
||||||
|
$w = [$this->pipes[0]];
|
||||||
|
|
||||||
|
// let's have a look if something changed in streams
|
||||||
|
if (false === @stream_select($r, $w, $e, 0, 0)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($w as $stdin) {
|
||||||
|
if (isset($this->inputBuffer[0])) {
|
||||||
|
$written = fwrite($stdin, $this->inputBuffer);
|
||||||
|
$this->inputBuffer = substr($this->inputBuffer, $written);
|
||||||
|
if (isset($this->inputBuffer[0])) {
|
||||||
|
return [$this->pipes[0]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($input) {
|
||||||
|
while (true) {
|
||||||
|
$data = fread($input, self::CHUNK_SIZE);
|
||||||
|
if (!isset($data[0])) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$written = fwrite($stdin, $data);
|
||||||
|
$data = substr($data, $written);
|
||||||
|
if (isset($data[0])) {
|
||||||
|
$this->inputBuffer = $data;
|
||||||
|
|
||||||
|
return [$this->pipes[0]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (feof($input)) {
|
||||||
|
if ($this->input instanceof \Iterator) {
|
||||||
|
$this->input->next();
|
||||||
|
} else {
|
||||||
|
$this->input = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no input to read on resource, buffer is empty
|
||||||
|
if (!isset($this->inputBuffer[0]) && !($this->input instanceof \Iterator ? $this->input->valid() : $this->input)) {
|
||||||
|
$this->input = null;
|
||||||
|
fclose($this->pipes[0]);
|
||||||
|
unset($this->pipes[0]);
|
||||||
|
} elseif (!$w) {
|
||||||
|
return [$this->pipes[0]];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
public function handleError(int $type, string $msg)
|
||||||
|
{
|
||||||
|
$this->lastError = $msg;
|
||||||
|
}
|
||||||
|
}
|
61
vendor/symfony/process/Pipes/PipesInterface.php
vendored
Normal file
61
vendor/symfony/process/Pipes/PipesInterface.php
vendored
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Pipes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PipesInterface manages descriptors and pipes for the use of proc_open.
|
||||||
|
*
|
||||||
|
* @author Romain Neutron <imprec@gmail.com>
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
interface PipesInterface
|
||||||
|
{
|
||||||
|
public const CHUNK_SIZE = 16384;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of descriptors for the use of proc_open.
|
||||||
|
*/
|
||||||
|
public function getDescriptors(): array;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of filenames indexed by their related stream in case these pipes use temporary files.
|
||||||
|
*
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public function getFiles(): array;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads data in file handles and pipes.
|
||||||
|
*
|
||||||
|
* @param bool $blocking Whether to use blocking calls or not
|
||||||
|
* @param bool $close Whether to close pipes if they've reached EOF
|
||||||
|
*
|
||||||
|
* @return string[] An array of read data indexed by their fd
|
||||||
|
*/
|
||||||
|
public function readAndWrite(bool $blocking, bool $close = false): array;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if the current state has open file handles or pipes.
|
||||||
|
*/
|
||||||
|
public function areOpen(): bool;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if pipes are able to read output.
|
||||||
|
*/
|
||||||
|
public function haveReadSupport(): bool;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes file handles and pipes.
|
||||||
|
*/
|
||||||
|
public function close();
|
||||||
|
}
|
163
vendor/symfony/process/Pipes/UnixPipes.php
vendored
Normal file
163
vendor/symfony/process/Pipes/UnixPipes.php
vendored
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Pipes;
|
||||||
|
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UnixPipes implementation uses unix pipes as handles.
|
||||||
|
*
|
||||||
|
* @author Romain Neutron <imprec@gmail.com>
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
class UnixPipes extends AbstractPipes
|
||||||
|
{
|
||||||
|
private $ttyMode;
|
||||||
|
private $ptyMode;
|
||||||
|
private $haveReadSupport;
|
||||||
|
|
||||||
|
public function __construct(?bool $ttyMode, bool $ptyMode, $input, bool $haveReadSupport)
|
||||||
|
{
|
||||||
|
$this->ttyMode = $ttyMode;
|
||||||
|
$this->ptyMode = $ptyMode;
|
||||||
|
$this->haveReadSupport = $haveReadSupport;
|
||||||
|
|
||||||
|
parent::__construct($input);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __sleep(): array
|
||||||
|
{
|
||||||
|
throw new \BadMethodCallException('Cannot serialize '.__CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __wakeup()
|
||||||
|
{
|
||||||
|
throw new \BadMethodCallException('Cannot unserialize '.__CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
$this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getDescriptors(): array
|
||||||
|
{
|
||||||
|
if (!$this->haveReadSupport) {
|
||||||
|
$nullstream = fopen('/dev/null', 'c');
|
||||||
|
|
||||||
|
return [
|
||||||
|
['pipe', 'r'],
|
||||||
|
$nullstream,
|
||||||
|
$nullstream,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->ttyMode) {
|
||||||
|
return [
|
||||||
|
['file', '/dev/tty', 'r'],
|
||||||
|
['file', '/dev/tty', 'w'],
|
||||||
|
['file', '/dev/tty', 'w'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->ptyMode && Process::isPtySupported()) {
|
||||||
|
return [
|
||||||
|
['pty'],
|
||||||
|
['pty'],
|
||||||
|
['pty'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
['pipe', 'r'],
|
||||||
|
['pipe', 'w'], // stdout
|
||||||
|
['pipe', 'w'], // stderr
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getFiles(): array
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function readAndWrite(bool $blocking, bool $close = false): array
|
||||||
|
{
|
||||||
|
$this->unblock();
|
||||||
|
$w = $this->write();
|
||||||
|
|
||||||
|
$read = $e = [];
|
||||||
|
$r = $this->pipes;
|
||||||
|
unset($r[0]);
|
||||||
|
|
||||||
|
// let's have a look if something changed in streams
|
||||||
|
set_error_handler([$this, 'handleError']);
|
||||||
|
if (($r || $w) && false === stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) {
|
||||||
|
restore_error_handler();
|
||||||
|
// if a system call has been interrupted, forget about it, let's try again
|
||||||
|
// otherwise, an error occurred, let's reset pipes
|
||||||
|
if (!$this->hasSystemCallBeenInterrupted()) {
|
||||||
|
$this->pipes = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $read;
|
||||||
|
}
|
||||||
|
restore_error_handler();
|
||||||
|
|
||||||
|
foreach ($r as $pipe) {
|
||||||
|
// prior PHP 5.4 the array passed to stream_select is modified and
|
||||||
|
// lose key association, we have to find back the key
|
||||||
|
$read[$type = array_search($pipe, $this->pipes, true)] = '';
|
||||||
|
|
||||||
|
do {
|
||||||
|
$data = @fread($pipe, self::CHUNK_SIZE);
|
||||||
|
$read[$type] .= $data;
|
||||||
|
} while (isset($data[0]) && ($close || isset($data[self::CHUNK_SIZE - 1])));
|
||||||
|
|
||||||
|
if (!isset($read[$type][0])) {
|
||||||
|
unset($read[$type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($close && feof($pipe)) {
|
||||||
|
fclose($pipe);
|
||||||
|
unset($this->pipes[$type]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $read;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function haveReadSupport(): bool
|
||||||
|
{
|
||||||
|
return $this->haveReadSupport;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function areOpen(): bool
|
||||||
|
{
|
||||||
|
return (bool) $this->pipes;
|
||||||
|
}
|
||||||
|
}
|
204
vendor/symfony/process/Pipes/WindowsPipes.php
vendored
Normal file
204
vendor/symfony/process/Pipes/WindowsPipes.php
vendored
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process\Pipes;
|
||||||
|
|
||||||
|
use Symfony\Component\Process\Exception\RuntimeException;
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WindowsPipes implementation uses temporary files as handles.
|
||||||
|
*
|
||||||
|
* @see https://bugs.php.net/51800
|
||||||
|
* @see https://bugs.php.net/65650
|
||||||
|
*
|
||||||
|
* @author Romain Neutron <imprec@gmail.com>
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
class WindowsPipes extends AbstractPipes
|
||||||
|
{
|
||||||
|
private $files = [];
|
||||||
|
private $fileHandles = [];
|
||||||
|
private $lockHandles = [];
|
||||||
|
private $readBytes = [
|
||||||
|
Process::STDOUT => 0,
|
||||||
|
Process::STDERR => 0,
|
||||||
|
];
|
||||||
|
private $haveReadSupport;
|
||||||
|
|
||||||
|
public function __construct($input, bool $haveReadSupport)
|
||||||
|
{
|
||||||
|
$this->haveReadSupport = $haveReadSupport;
|
||||||
|
|
||||||
|
if ($this->haveReadSupport) {
|
||||||
|
// Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big.
|
||||||
|
// Workaround for this problem is to use temporary files instead of pipes on Windows platform.
|
||||||
|
//
|
||||||
|
// @see https://bugs.php.net/51800
|
||||||
|
$pipes = [
|
||||||
|
Process::STDOUT => Process::OUT,
|
||||||
|
Process::STDERR => Process::ERR,
|
||||||
|
];
|
||||||
|
$tmpDir = sys_get_temp_dir();
|
||||||
|
$lastError = 'unknown reason';
|
||||||
|
set_error_handler(function ($type, $msg) use (&$lastError) { $lastError = $msg; });
|
||||||
|
for ($i = 0;; ++$i) {
|
||||||
|
foreach ($pipes as $pipe => $name) {
|
||||||
|
$file = sprintf('%s\\sf_proc_%02X.%s', $tmpDir, $i, $name);
|
||||||
|
|
||||||
|
if (!$h = fopen($file.'.lock', 'w')) {
|
||||||
|
if (file_exists($file.'.lock')) {
|
||||||
|
continue 2;
|
||||||
|
}
|
||||||
|
restore_error_handler();
|
||||||
|
throw new RuntimeException('A temporary file could not be opened to write the process output: '.$lastError);
|
||||||
|
}
|
||||||
|
if (!flock($h, \LOCK_EX | \LOCK_NB)) {
|
||||||
|
continue 2;
|
||||||
|
}
|
||||||
|
if (isset($this->lockHandles[$pipe])) {
|
||||||
|
flock($this->lockHandles[$pipe], \LOCK_UN);
|
||||||
|
fclose($this->lockHandles[$pipe]);
|
||||||
|
}
|
||||||
|
$this->lockHandles[$pipe] = $h;
|
||||||
|
|
||||||
|
if (!($h = fopen($file, 'w')) || !fclose($h) || !$h = fopen($file, 'r')) {
|
||||||
|
flock($this->lockHandles[$pipe], \LOCK_UN);
|
||||||
|
fclose($this->lockHandles[$pipe]);
|
||||||
|
unset($this->lockHandles[$pipe]);
|
||||||
|
continue 2;
|
||||||
|
}
|
||||||
|
$this->fileHandles[$pipe] = $h;
|
||||||
|
$this->files[$pipe] = $file;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
restore_error_handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::__construct($input);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __sleep(): array
|
||||||
|
{
|
||||||
|
throw new \BadMethodCallException('Cannot serialize '.__CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __wakeup()
|
||||||
|
{
|
||||||
|
throw new \BadMethodCallException('Cannot unserialize '.__CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
$this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getDescriptors(): array
|
||||||
|
{
|
||||||
|
if (!$this->haveReadSupport) {
|
||||||
|
$nullstream = fopen('NUL', 'c');
|
||||||
|
|
||||||
|
return [
|
||||||
|
['pipe', 'r'],
|
||||||
|
$nullstream,
|
||||||
|
$nullstream,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// We're not using pipe on Windows platform as it hangs (https://bugs.php.net/51800)
|
||||||
|
// We're not using file handles as it can produce corrupted output https://bugs.php.net/65650
|
||||||
|
// So we redirect output within the commandline and pass the nul device to the process
|
||||||
|
return [
|
||||||
|
['pipe', 'r'],
|
||||||
|
['file', 'NUL', 'w'],
|
||||||
|
['file', 'NUL', 'w'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getFiles(): array
|
||||||
|
{
|
||||||
|
return $this->files;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function readAndWrite(bool $blocking, bool $close = false): array
|
||||||
|
{
|
||||||
|
$this->unblock();
|
||||||
|
$w = $this->write();
|
||||||
|
$read = $r = $e = [];
|
||||||
|
|
||||||
|
if ($blocking) {
|
||||||
|
if ($w) {
|
||||||
|
@stream_select($r, $w, $e, 0, Process::TIMEOUT_PRECISION * 1E6);
|
||||||
|
} elseif ($this->fileHandles) {
|
||||||
|
usleep((int) (Process::TIMEOUT_PRECISION * 1E6));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($this->fileHandles as $type => $fileHandle) {
|
||||||
|
$data = stream_get_contents($fileHandle, -1, $this->readBytes[$type]);
|
||||||
|
|
||||||
|
if (isset($data[0])) {
|
||||||
|
$this->readBytes[$type] += \strlen($data);
|
||||||
|
$read[$type] = $data;
|
||||||
|
}
|
||||||
|
if ($close) {
|
||||||
|
ftruncate($fileHandle, 0);
|
||||||
|
fclose($fileHandle);
|
||||||
|
flock($this->lockHandles[$type], \LOCK_UN);
|
||||||
|
fclose($this->lockHandles[$type]);
|
||||||
|
unset($this->fileHandles[$type], $this->lockHandles[$type]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $read;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function haveReadSupport(): bool
|
||||||
|
{
|
||||||
|
return $this->haveReadSupport;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function areOpen(): bool
|
||||||
|
{
|
||||||
|
return $this->pipes && $this->fileHandles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function close()
|
||||||
|
{
|
||||||
|
parent::close();
|
||||||
|
foreach ($this->fileHandles as $type => $handle) {
|
||||||
|
ftruncate($handle, 0);
|
||||||
|
fclose($handle);
|
||||||
|
flock($this->lockHandles[$type], \LOCK_UN);
|
||||||
|
fclose($this->lockHandles[$type]);
|
||||||
|
}
|
||||||
|
$this->fileHandles = $this->lockHandles = [];
|
||||||
|
}
|
||||||
|
}
|
1674
vendor/symfony/process/Process.php
vendored
Normal file
1674
vendor/symfony/process/Process.php
vendored
Normal file
File diff suppressed because it is too large
Load Diff
69
vendor/symfony/process/ProcessUtils.php
vendored
Normal file
69
vendor/symfony/process/ProcessUtils.php
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Process;
|
||||||
|
|
||||||
|
use Symfony\Component\Process\Exception\InvalidArgumentException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ProcessUtils is a bunch of utility methods.
|
||||||
|
*
|
||||||
|
* This class contains static methods only and is not meant to be instantiated.
|
||||||
|
*
|
||||||
|
* @author Martin Hasoň <martin.hason@gmail.com>
|
||||||
|
*/
|
||||||
|
class ProcessUtils
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* This class should not be instantiated.
|
||||||
|
*/
|
||||||
|
private function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates and normalizes a Process input.
|
||||||
|
*
|
||||||
|
* @param string $caller The name of method call that validates the input
|
||||||
|
* @param mixed $input The input to validate
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException In case the input is not valid
|
||||||
|
*/
|
||||||
|
public static function validateInput(string $caller, $input)
|
||||||
|
{
|
||||||
|
if (null !== $input) {
|
||||||
|
if (\is_resource($input)) {
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
if (\is_string($input)) {
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
if (\is_scalar($input)) {
|
||||||
|
return (string) $input;
|
||||||
|
}
|
||||||
|
if ($input instanceof Process) {
|
||||||
|
return $input->getIterator($input::ITER_SKIP_ERR);
|
||||||
|
}
|
||||||
|
if ($input instanceof \Iterator) {
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
if ($input instanceof \Traversable) {
|
||||||
|
return new \IteratorIterator($input);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new InvalidArgumentException(sprintf('"%s" only accepts strings, Traversable objects or stream resources.', $caller));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
}
|
28
vendor/symfony/process/README.md
vendored
Normal file
28
vendor/symfony/process/README.md
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
Process Component
|
||||||
|
=================
|
||||||
|
|
||||||
|
The Process component executes commands in sub-processes.
|
||||||
|
|
||||||
|
Sponsor
|
||||||
|
-------
|
||||||
|
|
||||||
|
The Process component for Symfony 5.4/6.0 is [backed][1] by [SensioLabs][2].
|
||||||
|
|
||||||
|
As the creator of Symfony, SensioLabs supports companies using Symfony, with an
|
||||||
|
offering encompassing consultancy, expertise, services, training, and technical
|
||||||
|
assistance to ensure the success of web application development projects.
|
||||||
|
|
||||||
|
Help Symfony by [sponsoring][3] its development!
|
||||||
|
|
||||||
|
Resources
|
||||||
|
---------
|
||||||
|
|
||||||
|
* [Documentation](https://symfony.com/doc/current/components/process.html)
|
||||||
|
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
||||||
|
* [Report issues](https://github.com/symfony/symfony/issues) and
|
||||||
|
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
||||||
|
in the [main Symfony repository](https://github.com/symfony/symfony)
|
||||||
|
|
||||||
|
[1]: https://symfony.com/backers
|
||||||
|
[2]: https://sensiolabs.com
|
||||||
|
[3]: https://symfony.com/sponsor
|
29
vendor/symfony/process/composer.json
vendored
Normal file
29
vendor/symfony/process/composer.json
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"name": "symfony/process",
|
||||||
|
"type": "library",
|
||||||
|
"description": "Executes commands in sub-processes",
|
||||||
|
"keywords": [],
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2.5",
|
||||||
|
"symfony/polyfill-php80": "^1.16"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": { "Symfony\\Component\\Process\\": "" },
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"minimum-stability": "dev"
|
||||||
|
}
|
23
vendor/ueberdosis/pandoc/.github/dependabot.yml
vendored
Normal file
23
vendor/ueberdosis/pandoc/.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Dependabot creates pull requests to keep your dependencies secure and up-to-date.
|
||||||
|
# Documentation: https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
|
||||||
|
- package-ecosystem: 'github-actions'
|
||||||
|
directory: '/'
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
schedule:
|
||||||
|
interval: 'weekly'
|
||||||
|
day: 'monday'
|
||||||
|
reviewers:
|
||||||
|
- 'hanspagel'
|
||||||
|
|
||||||
|
- package-ecosystem: 'composer'
|
||||||
|
directory: '/'
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
schedule:
|
||||||
|
interval: 'weekly'
|
||||||
|
day: 'monday'
|
||||||
|
reviewers:
|
||||||
|
- 'hanspagel'
|
63
vendor/ueberdosis/pandoc/.github/workflows/main.yml
vendored
Normal file
63
vendor/ueberdosis/pandoc/.github/workflows/main.yml
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
name: run-tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: true
|
||||||
|
matrix:
|
||||||
|
php: [7.4, 8.0]
|
||||||
|
dependency-version: [prefer-stable]
|
||||||
|
|
||||||
|
env:
|
||||||
|
extensions: dom, curl, libxml, mbstring, zip, pcntl, bcmath, soap, intl, iconv
|
||||||
|
|
||||||
|
name: P${{ matrix.php }} - ${{ matrix.dependency-version }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Cache dependencies
|
||||||
|
uses: actions/cache@v3.0.1
|
||||||
|
with:
|
||||||
|
path: ~/.composer/cache/files
|
||||||
|
key: dependencies-laravel-${{ matrix.laravel }}-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
|
||||||
|
|
||||||
|
- name: Setup PHP extensions
|
||||||
|
id: cache-env
|
||||||
|
uses: shivammathur/cache-extensions@v1
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
extensions: ${{ env.extensions }}
|
||||||
|
key: php-extensions-cache-v1
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@2.18.0
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php }}
|
||||||
|
extensions: ${{ env.extensions }}
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction --no-suggest
|
||||||
|
|
||||||
|
- name: Install Pandoc
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y wget
|
||||||
|
sudo mkdir -p /usr/src/pandoc
|
||||||
|
cd /usr/src/pandoc
|
||||||
|
sudo wget https://github.com/jgm/pandoc/releases/download/2.15/pandoc-2.15-1-amd64.deb
|
||||||
|
sudo dpkg -i pandoc-2.15-1-amd64.deb
|
||||||
|
|
||||||
|
- name: Execute tests
|
||||||
|
run: vendor/bin/phpunit
|
31
vendor/ueberdosis/pandoc/.php_cs
vendored
Normal file
31
vendor/ueberdosis/pandoc/.php_cs
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$finder = Symfony\Component\Finder\Finder::create()
|
||||||
|
->notPath('vendor')
|
||||||
|
->notPath('bootstrap')
|
||||||
|
->notPath('storage')
|
||||||
|
->in(__DIR__)
|
||||||
|
->name('*.php')
|
||||||
|
->notName('*.blade.php')
|
||||||
|
->notName('_ide_helper.php');
|
||||||
|
|
||||||
|
return PhpCsFixer\Config::create()
|
||||||
|
->setUsingCache(false)
|
||||||
|
->setRules([
|
||||||
|
'@PSR2' => true,
|
||||||
|
'array_indentation' => true,
|
||||||
|
'array_syntax' => ['syntax' => 'short'],
|
||||||
|
'blank_line_after_opening_tag' => true,
|
||||||
|
'cast_spaces' => true,
|
||||||
|
'concat_space' => ['spacing' => 'none'],
|
||||||
|
'elseif' => true,
|
||||||
|
'no_blank_lines_after_class_opening' => true,
|
||||||
|
'no_closing_tag' => true,
|
||||||
|
'no_leading_import_slash' => true,
|
||||||
|
'no_trailing_whitespace' => true,
|
||||||
|
'no_unused_imports' => true,
|
||||||
|
'no_useless_else' => true,
|
||||||
|
'ordered_imports' => ['sortAlgorithm' => 'length'],
|
||||||
|
'trailing_comma_in_multiline_array' => true,
|
||||||
|
])
|
||||||
|
->setFinder($finder);
|
4
vendor/ueberdosis/pandoc/.styleci.yml
vendored
Normal file
4
vendor/ueberdosis/pandoc/.styleci.yml
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
preset: laravel
|
||||||
|
|
||||||
|
disabled:
|
||||||
|
- single_class_element_per_statement
|
47
vendor/ueberdosis/pandoc/CHANGELOG.md
vendored
Normal file
47
vendor/ueberdosis/pandoc/CHANGELOG.md
vendored
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to `pandoc` will be documented in this file
|
||||||
|
|
||||||
|
## 0.5.0 - 2020-03-20
|
||||||
|
|
||||||
|
- add symfony/process executable finder
|
||||||
|
|
||||||
|
## 0.4.0 - 2020-03-20
|
||||||
|
|
||||||
|
- add magic from method (e. g. ->fromMarkdown()))
|
||||||
|
- add magic to method (e. g. ->toHtml()))
|
||||||
|
- add BadMethodCall exception
|
||||||
|
|
||||||
|
## 0.3.0 - 2020-03-19
|
||||||
|
|
||||||
|
- add LogFileNotWriteable exception
|
||||||
|
- add InputFileNotFound exception
|
||||||
|
|
||||||
|
## 0.2.1 - 2020-03-19
|
||||||
|
|
||||||
|
- add support for --data-dir (custom templates)
|
||||||
|
|
||||||
|
## 0.2.0 - 2020-03-18
|
||||||
|
|
||||||
|
- changed namespace
|
||||||
|
|
||||||
|
## 0.1.2 - 2020-03-18
|
||||||
|
|
||||||
|
- add PandocNotFound exception
|
||||||
|
- add UnknownInputFormat exception
|
||||||
|
- add UnknownOutputFormat exception
|
||||||
|
|
||||||
|
## 0.1.1 - 2020-03-18
|
||||||
|
|
||||||
|
- compatibility with symfony/process 4.*
|
||||||
|
|
||||||
|
## 0.1.0 - 2020-03-18
|
||||||
|
|
||||||
|
- initial release
|
||||||
|
- return the converted text
|
||||||
|
- use a file as input and write a file as output
|
||||||
|
- change path to Pandoc
|
||||||
|
- list available input formats
|
||||||
|
- list available output formats
|
||||||
|
- write a log file
|
||||||
|
- retrieve Pandoc version
|
55
vendor/ueberdosis/pandoc/CONTRIBUTING.md
vendored
Normal file
55
vendor/ueberdosis/pandoc/CONTRIBUTING.md
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
Contributions are **welcome** and will be fully **credited**.
|
||||||
|
|
||||||
|
Please read and understand the contribution guide before creating an issue or pull request.
|
||||||
|
|
||||||
|
## Etiquette
|
||||||
|
|
||||||
|
This project is open source, and as such, the maintainers give their free time to build and maintain the source code
|
||||||
|
held within. They make the code freely available in the hope that it will be of use to other developers. It would be
|
||||||
|
extremely unfair for them to suffer abuse or anger for their hard work.
|
||||||
|
|
||||||
|
Please be considerate towards maintainers when raising issues or presenting pull requests. Let's show the
|
||||||
|
world that developers are civilized and selfless people.
|
||||||
|
|
||||||
|
It's the duty of the maintainer to ensure that all submissions to the project are of sufficient
|
||||||
|
quality to benefit the project. Many developers have different skillsets, strengths, and weaknesses. Respect the maintainer's decision, and do not be upset or abusive if your submission is not used.
|
||||||
|
|
||||||
|
## Viability
|
||||||
|
|
||||||
|
When requesting or submitting new features, first consider whether it might be useful to others. Open
|
||||||
|
source projects are used by many developers, who may have entirely different needs to your own. Think about
|
||||||
|
whether or not your feature is likely to be used by other users of the project.
|
||||||
|
|
||||||
|
## Procedure
|
||||||
|
|
||||||
|
Before filing an issue:
|
||||||
|
|
||||||
|
- Attempt to replicate the problem, to ensure that it wasn't a coincidental incident.
|
||||||
|
- Check to make sure your feature suggestion isn't already present within the project.
|
||||||
|
- Check the pull requests tab to ensure that the bug doesn't have a fix in progress.
|
||||||
|
- Check the pull requests tab to ensure that the feature isn't already in progress.
|
||||||
|
|
||||||
|
Before submitting a pull request:
|
||||||
|
|
||||||
|
- Check the codebase to ensure that your feature doesn't already exist.
|
||||||
|
- Check the pull requests to ensure that another person hasn't already submitted the feature or fix.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
If the project maintainer has any additional requirements, you will find them listed here.
|
||||||
|
|
||||||
|
- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](https://pear.php.net/package/PHP_CodeSniffer).
|
||||||
|
|
||||||
|
- **Add tests!** - Your patch won't be accepted if it doesn't have tests.
|
||||||
|
|
||||||
|
- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date.
|
||||||
|
|
||||||
|
- **Consider our release cycle** - We try to follow [SemVer v2.0.0](https://semver.org/). Randomly breaking public APIs is not an option.
|
||||||
|
|
||||||
|
- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests.
|
||||||
|
|
||||||
|
- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](https://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting.
|
||||||
|
|
||||||
|
**Happy coding**!
|
21
vendor/ueberdosis/pandoc/LICENSE.md
vendored
Normal file
21
vendor/ueberdosis/pandoc/LICENSE.md
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) Hans Pagel
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
144
vendor/ueberdosis/pandoc/README.md
vendored
Normal file
144
vendor/ueberdosis/pandoc/README.md
vendored
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
# Pandoc PHP Package
|
||||||
|
[![](https://img.shields.io/packagist/v/ueberdosis/pandoc.svg)](https://packagist.org/packages/ueberdosis/pandoc)
|
||||||
|
[![Integrate](https://github.com/ueberdosis/pandoc/workflows/run-tests/badge.svg?branch=main)](https://github.com/ueberdosis/pandoc/actions)
|
||||||
|
[![](https://img.shields.io/packagist/dt/ueberdosis/pandoc.svg)](https://packagist.org/packages/ueberdosis/pandoc)
|
||||||
|
[![Sponsor](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub)](https://github.com/sponsors/ueberdosis)
|
||||||
|
|
||||||
|
If you need to convert text files from one format to another, [pandoc](https://pandoc.org/) is your swiss-army knife. This package is a PHP wrapper for pandoc.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
You can install the package via composer:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer require ueberdosis/pandoc
|
||||||
|
```
|
||||||
|
|
||||||
|
This package is a wrapper for the command-line tool pandoc. Don’t forget to install pandoc. Here is an example for Ubuntu:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y wget
|
||||||
|
sudo mkdir -p /usr/src/pandoc
|
||||||
|
cd /usr/src/pandoc
|
||||||
|
sudo wget https://github.com/jgm/pandoc/releases/download/2.15/pandoc-2.15-1-amd64.deb
|
||||||
|
sudo dpkg -i pandoc-2.15-1-amd64.deb
|
||||||
|
```
|
||||||
|
|
||||||
|
[More examples are available in the pandoc documentation](https://pandoc.org/installing.html)
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Return the converted text as string
|
||||||
|
```php
|
||||||
|
$output = (new \Pandoc\Pandoc)
|
||||||
|
->from('markdown')
|
||||||
|
->input('# Test')
|
||||||
|
->to('html')
|
||||||
|
->run();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use a file as input and write a file as output
|
||||||
|
```php
|
||||||
|
(new \Pandoc\Pandoc)
|
||||||
|
->from('markdown')
|
||||||
|
->inputFile('tests/data/example.md')
|
||||||
|
->to('plain')
|
||||||
|
->output('tests/temp/example.txt')
|
||||||
|
->run();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Change path to Pandoc
|
||||||
|
```php
|
||||||
|
new \Pandoc\Pandoc([
|
||||||
|
'command' => '/usr/local/bin/pandoc',
|
||||||
|
]);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Change working directory
|
||||||
|
```php
|
||||||
|
(new \Pandoc\Pandoc)->cwd('/tmp/pandoc/');
|
||||||
|
```
|
||||||
|
|
||||||
|
### List available input formats
|
||||||
|
```php
|
||||||
|
(new \Pandoc\Pandoc)->listInputFormats();
|
||||||
|
```
|
||||||
|
|
||||||
|
### List available output formats
|
||||||
|
```php
|
||||||
|
(new \Pandoc\Pandoc)->listOutputFormats();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Write a log file
|
||||||
|
```php
|
||||||
|
echo (new \Pandoc\Pandoc)
|
||||||
|
->from('markdown')
|
||||||
|
->input('# Markdown')
|
||||||
|
->to('html')
|
||||||
|
->log('log.txt')
|
||||||
|
->run();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Retrieve Pandoc version
|
||||||
|
```php
|
||||||
|
echo (new \Pandoc\Pandoc)->version();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Use magic methods to make calls shorter
|
||||||
|
```php
|
||||||
|
$output = (new \Pandoc\Pandoc)
|
||||||
|
->fromMarkdown('# Test')
|
||||||
|
->toHtml('tests/temp/example.txt')
|
||||||
|
->run();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pass options to Pandoc
|
||||||
|
```php
|
||||||
|
echo (new \Pandoc\Pandoc)
|
||||||
|
->fromMarkdown('# Test')
|
||||||
|
->toHtml('tests/temp/example.txt')
|
||||||
|
->option('fail-if-warnings')
|
||||||
|
->option('data-dir', './tmp')
|
||||||
|
->run();
|
||||||
|
```
|
||||||
|
|
||||||
|
See https://pandoc.org/MANUAL.html for a full list of available options
|
||||||
|
|
||||||
|
### Laravel Facade
|
||||||
|
This package includes a Laravel facade for people that like that little bit of syntactic sugar.
|
||||||
|
|
||||||
|
```php
|
||||||
|
echo \Pandoc\Facades\Pandoc::version();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exceptions
|
||||||
|
If something went wrong, the package throws a generic `\Symfony\Component\Process\Exception\ProcessFailedException`. There are even a few specific exceptions.
|
||||||
|
|
||||||
|
* \Pandoc\Exceptions\PandocNotFound
|
||||||
|
* \Pandoc\Exceptions\InputFileNotFound
|
||||||
|
* \Pandoc\Exceptions\UnknownInputFormat
|
||||||
|
* \Pandoc\Exceptions\UnknownOutputFormat
|
||||||
|
* \Pandoc\Exceptions\LogFileNotWriteable
|
||||||
|
* \Pandoc\Exceptions\BadMethodCall
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
``` bash
|
||||||
|
composer test
|
||||||
|
```
|
||||||
|
|
||||||
|
### Changelog
|
||||||
|
Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
- [Hans Pagel](https://github.com/hanspagel)
|
||||||
|
- [Miguel Piedrafita](https://github.com/m1guelpf)
|
||||||
|
- [All Contributors](../../contributors)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.
|
49
vendor/ueberdosis/pandoc/composer.json
vendored
Normal file
49
vendor/ueberdosis/pandoc/composer.json
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
"name": "ueberdosis/pandoc",
|
||||||
|
"description": "Pandoc PHP Package",
|
||||||
|
"keywords": [
|
||||||
|
"ueberdosis",
|
||||||
|
"pandoc"
|
||||||
|
],
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/ueberdosis/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/ueberdosis/pandoc",
|
||||||
|
"license": "MIT",
|
||||||
|
"type": "library",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Hans Pagel",
|
||||||
|
"email": "hans.pagel@ueber.io",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1|^8.0",
|
||||||
|
"symfony/process": ">4.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^8.0 || ^9.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Pandoc\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"Pandoc\\Tests\\": "tests"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "vendor/bin/phpunit",
|
||||||
|
"test-coverage": "vendor/bin/phpunit --coverage-html coverage"
|
||||||
|
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"sort-packages": true
|
||||||
|
}
|
||||||
|
}
|
9
vendor/ueberdosis/pandoc/src/Exceptions/BadMethodCall.php
vendored
Normal file
9
vendor/ueberdosis/pandoc/src/Exceptions/BadMethodCall.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pandoc\Exceptions;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class BadMethodCall extends Exception
|
||||||
|
{
|
||||||
|
}
|
9
vendor/ueberdosis/pandoc/src/Exceptions/InputFileNotFound.php
vendored
Normal file
9
vendor/ueberdosis/pandoc/src/Exceptions/InputFileNotFound.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pandoc\Exceptions;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class InputFileNotFound extends Exception
|
||||||
|
{
|
||||||
|
}
|
9
vendor/ueberdosis/pandoc/src/Exceptions/LogFileNotWriteable.php
vendored
Normal file
9
vendor/ueberdosis/pandoc/src/Exceptions/LogFileNotWriteable.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pandoc\Exceptions;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class LogFileNotWriteable extends Exception
|
||||||
|
{
|
||||||
|
}
|
9
vendor/ueberdosis/pandoc/src/Exceptions/PandocNotFound.php
vendored
Normal file
9
vendor/ueberdosis/pandoc/src/Exceptions/PandocNotFound.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pandoc\Exceptions;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class PandocNotFound extends Exception
|
||||||
|
{
|
||||||
|
}
|
9
vendor/ueberdosis/pandoc/src/Exceptions/UnknownInputFormat.php
vendored
Normal file
9
vendor/ueberdosis/pandoc/src/Exceptions/UnknownInputFormat.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pandoc\Exceptions;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class UnknownInputFormat extends Exception
|
||||||
|
{
|
||||||
|
}
|
9
vendor/ueberdosis/pandoc/src/Exceptions/UnknownOutputFormat.php
vendored
Normal file
9
vendor/ueberdosis/pandoc/src/Exceptions/UnknownOutputFormat.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pandoc\Exceptions;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class UnknownOutputFormat extends Exception
|
||||||
|
{
|
||||||
|
}
|
13
vendor/ueberdosis/pandoc/src/Facades/Pandoc.php
vendored
Normal file
13
vendor/ueberdosis/pandoc/src/Facades/Pandoc.php
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pandoc\Facades;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Facade;
|
||||||
|
|
||||||
|
class Pandoc extends Facade
|
||||||
|
{
|
||||||
|
protected static function getFacadeAccessor()
|
||||||
|
{
|
||||||
|
return \Pandoc\Pandoc::class;
|
||||||
|
}
|
||||||
|
}
|
304
vendor/ueberdosis/pandoc/src/Pandoc.php
vendored
Normal file
304
vendor/ueberdosis/pandoc/src/Pandoc.php
vendored
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Pandoc;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use Pandoc\Exceptions\BadMethodCall;
|
||||||
|
use Pandoc\Exceptions\PandocNotFound;
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
use Pandoc\Exceptions\InputFileNotFound;
|
||||||
|
use Pandoc\Exceptions\UnknownInputFormat;
|
||||||
|
use Pandoc\Exceptions\LogFileNotWriteable;
|
||||||
|
use Pandoc\Exceptions\UnknownOutputFormat;
|
||||||
|
use Symfony\Component\Process\ExecutableFinder;
|
||||||
|
use Symfony\Component\Process\Exception\ProcessFailedException;
|
||||||
|
|
||||||
|
class Pandoc
|
||||||
|
{
|
||||||
|
public $config;
|
||||||
|
|
||||||
|
protected $input;
|
||||||
|
|
||||||
|
protected $standalone = true;
|
||||||
|
|
||||||
|
protected $inputFile;
|
||||||
|
|
||||||
|
protected $from;
|
||||||
|
|
||||||
|
protected $to;
|
||||||
|
|
||||||
|
protected $output;
|
||||||
|
|
||||||
|
protected $log;
|
||||||
|
|
||||||
|
protected $dataDir;
|
||||||
|
|
||||||
|
protected $cwd;
|
||||||
|
|
||||||
|
protected $options;
|
||||||
|
|
||||||
|
public function __construct($config = [])
|
||||||
|
{
|
||||||
|
$this->config = array_merge([
|
||||||
|
'command' => (new ExecutableFinder)->find('pandoc', 'pandoc'),
|
||||||
|
], $config);
|
||||||
|
|
||||||
|
$this->options = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function inputFile($value)
|
||||||
|
{
|
||||||
|
$this->inputFile = $value;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function input($value)
|
||||||
|
{
|
||||||
|
$this->input = $value;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function from($value)
|
||||||
|
{
|
||||||
|
$this->from = $value;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function to($value)
|
||||||
|
{
|
||||||
|
$this->to = $value;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function output($value)
|
||||||
|
{
|
||||||
|
$this->output = $value;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function option($name, $value = false)
|
||||||
|
{
|
||||||
|
$this->options[$name] = $value;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function log($value)
|
||||||
|
{
|
||||||
|
$this->log = $value;
|
||||||
|
$this->option('log', $value);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dataDir($value)
|
||||||
|
{
|
||||||
|
$this->dataDir = $value;
|
||||||
|
$this->option('data-dir', $value);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function cwd($value)
|
||||||
|
{
|
||||||
|
$this->cwd = $value;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convenience wrappers around option() */
|
||||||
|
public function columns($value)
|
||||||
|
{
|
||||||
|
$this->option('columns', $value);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function tocDepth($value)
|
||||||
|
{
|
||||||
|
$this->option('toc-depth', $value);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function standalone()
|
||||||
|
{
|
||||||
|
$this->option('standalone');
|
||||||
|
$this->standalone = true;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function noStandalone()
|
||||||
|
{
|
||||||
|
$this->standalone = false;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function execute(array $parameters = [])
|
||||||
|
{
|
||||||
|
$parameters = array_merge([
|
||||||
|
$this->config['command'],
|
||||||
|
], $parameters);
|
||||||
|
|
||||||
|
if (!empty($this->options)) {
|
||||||
|
foreach ($this->options as $name => $value) {
|
||||||
|
if ($value !== false) {
|
||||||
|
array_push($parameters, "--{$name}", $value);
|
||||||
|
} else {
|
||||||
|
array_push($parameters, "--{$name}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$process = new Process($parameters);
|
||||||
|
|
||||||
|
if ($this->cwd) {
|
||||||
|
$process->setWorkingDirectory($this->cwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->input) {
|
||||||
|
$process->setInput($this->input);
|
||||||
|
}
|
||||||
|
|
||||||
|
$process->run();
|
||||||
|
|
||||||
|
if (!$process->isSuccessful()) {
|
||||||
|
$output = $process->getErrorOutput();
|
||||||
|
|
||||||
|
if (strpos($output, "pandoc: {$this->inputFile}: openBinaryFile: does not exist") !== false) {
|
||||||
|
throw new InputFileNotFound;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($output, "pandoc: {$this->log}: openBinaryFile: does not exist") !== false) {
|
||||||
|
throw new LogFileNotWriteable;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($output, 'Unknown input format') !== false) {
|
||||||
|
throw new UnknownInputFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($output, 'Unknown output format') !== false) {
|
||||||
|
throw new UnknownOutputFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($output, 'not found') !== false) {
|
||||||
|
throw new PandocNotFound;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new ProcessFailedException($process);
|
||||||
|
}
|
||||||
|
|
||||||
|
$output = $process->getOutput();
|
||||||
|
|
||||||
|
if ($output === '') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
$parameters = [
|
||||||
|
'--sandbox',
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($this->standalone) {
|
||||||
|
array_push($parameters, '--standalone');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->inputFile) {
|
||||||
|
array_push($parameters, $this->inputFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->from) {
|
||||||
|
array_push($parameters, '--from', "{$this->from}");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->to) {
|
||||||
|
array_push($parameters, '--to', "{$this->to}");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->output) {
|
||||||
|
array_push($parameters, '--output', "{$this->output}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->execute($parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function version()
|
||||||
|
{
|
||||||
|
$output = $this->execute(['--version']);
|
||||||
|
|
||||||
|
preg_match("~^.*\K\d(?<![a-z\d.].)\d*(?:\.\d+)*+~mi", $output, $matches);
|
||||||
|
list($version) = $matches;
|
||||||
|
|
||||||
|
if (!$version) {
|
||||||
|
throw new Exception('Couldn’t find a pandoc version number in the output.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function listInputFormats()
|
||||||
|
{
|
||||||
|
$output = $this->execute(['--list-input-formats']);
|
||||||
|
|
||||||
|
return array_filter(explode("\n", $output));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function listOutputFormats()
|
||||||
|
{
|
||||||
|
$output = $this->execute(['--list-output-formats']);
|
||||||
|
|
||||||
|
return array_filter(explode("\n", $output));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __call($method, $args)
|
||||||
|
{
|
||||||
|
$stringsStartsWithFrom = strpos($method, 'from') === 0;
|
||||||
|
$desiredInputFormat = strtolower(
|
||||||
|
array_reverse(explode('from', $method, 2))[0]
|
||||||
|
);
|
||||||
|
$availableInputFormats = $this->listInputFormats();
|
||||||
|
|
||||||
|
if ($stringsStartsWithFrom && in_array($desiredInputFormat, $availableInputFormats)) {
|
||||||
|
$this->from($desiredInputFormat);
|
||||||
|
|
||||||
|
if (! empty($args)) {
|
||||||
|
$this->input(...$args);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
$stringStartsWithTo = strpos($method, 'to') === 0;
|
||||||
|
$desiredOutputFormat = strtolower(
|
||||||
|
array_reverse(explode('to', $method, 2))[0]
|
||||||
|
);
|
||||||
|
$availableOutputFormats = $this->listOutputFormats();
|
||||||
|
|
||||||
|
if ($stringStartsWithTo && in_array($desiredOutputFormat, $availableOutputFormats)) {
|
||||||
|
$this->to($desiredOutputFormat);
|
||||||
|
|
||||||
|
if (! empty($args)) {
|
||||||
|
$this->output(...$args);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new BadMethodCall(sprintf(
|
||||||
|
'Call to undefined method %s::%s()',
|
||||||
|
get_class($this),
|
||||||
|
$method
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user