From 7278fe13a0225b4eed0275498954d384377b1622 Mon Sep 17 00:00:00 2001 From: Joshua Parker Date: Tue, 20 Sep 2016 14:34:13 -0400 Subject: [PATCH 01/23] Updated .gitignore. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 60d150b0..f1959985 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ composer.json composer.lock app/plugins/etsis-smtp/ app/plugins/amazonS3Backup/ +etmigrate.php From 81530c06664f2e708a3748947ad61a0790c79ec3 Mon Sep 17 00:00:00 2001 From: Joshua Parker Date: Tue, 20 Sep 2016 15:00:56 -0400 Subject: [PATCH 02/23] Fixed api router and removed old database global scope. --- app/routers/api.router.php | 43 +++++++++++++++++++------------------- config.sample.php | 3 +-- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/app/routers/api.router.php b/app/routers/api.router.php index 7f3ea551..14e7031f 100755 --- a/app/routers/api.router.php +++ b/app/routers/api.router.php @@ -24,7 +24,7 @@ }); // RESTful API -$app->group('/api', function() use ($app, $orm) { +$app->group('/api', function() use ($app) { /** * Will result in /api/ which is the root @@ -37,27 +37,28 @@ /** * Will result in /api/dbtable/ */ - $app->get('/(\w+)', function ($table) use($app, $orm) { + $app->get('/(\w+)', function ($table) use($app) { + + $t = $app->db->$table(); if(isset($_GET['by']) === true) { if(isset($_GET['order']) !== true) { $_GET['order'] = 'ASC'; } - $table->orderBy($_GET['by'], $_GET['order']); + $t->orderBy($_GET['by'], $_GET['order']); } if(isset($_GET['limit']) === true) { - $table->limit($_GET['limit']); + $t->limit($_GET['limit']); if(isset($_GET['offset']) === true) { - $table->offset($_GET['offset']); + $t->offset($_GET['offset']); } } - $table = $orm->$table(); /** * Use closure as callback. */ - $q = $table->find(function($data) { + $q = $t->find(function($data) { $array = []; foreach ($data as $d) { $array[] = $d; @@ -92,9 +93,9 @@ /** * Will result in /api/dbtable/columnname/data/ */ - $app->get('/(\w+)/(\w+)/(.+)', function ($table, $field, $any) use($app, $orm) { - $table = $orm->$table(); - $q = $table->select()->where("$field = ?", $any); + $app->get('/(\w+)/(\w+)/(.+)', function ($table, $field, $any) use($app) { + $t = $app->db->$table(); + $q = $t->select()->where("$field = ?", $any); /** * Use closure as callback. */ @@ -130,14 +131,14 @@ } }); - $app->delete('/(\w+)/(\w+)/(\d+)', function($table, $field, $id) use($app, $orm) { + $app->delete('/(\w+)/(\w+)/(\d+)', function($table, $field, $id) use($app) { $query = [ sprintf('DELETE FROM %s WHERE %s = ?', $table, $field), ]; $query = sprintf('%s;', implode(' ', $query)); - $result = $orm->query($query, [$id]); + $result = $app->db->query($query, [$id]); if ($result === false) { $app->res->_format('json', 404); @@ -165,7 +166,7 @@ unset($data); } - $app->post('/(\w+)/', function($table) use($app, $orm) { + $app->post('/(\w+)/', function($table) use($app) { if (empty($_POST) === true) { $app->res->_format('json', 204); @@ -194,20 +195,20 @@ } if (count($queries) > 1) { - $orm->query()->beginTransaction(); + $app->db->query()->beginTransaction(); while (is_null($query = array_shift($queries)) !== true) { - if (($result = $orm->query($query[0], array_values($query[1]))) === false) { - $orm->query->rollBack(); + if (($result = $app->db->query($query[0], array_values($query[1]))) === false) { + $app->db->query->rollBack(); break; } } - if (($result !== false) && ($orm->query->inTransaction() === true)) { - $result = $orm->query()->commit(); + if (($result !== false) && ($app->db->query->inTransaction() === true)) { + $result = $app->db->query()->commit(); } } else if (is_null($query = array_shift($queries)) !== true) { - $result = $orm->query($query[0], array_values($query[1])); + $result = $app->db->query($query[0], array_values($query[1])); } if ($result === false) { @@ -218,7 +219,7 @@ } }); - $app->put('/(\w+)/(\w+)/(\d+)', function($table, $field, $id) use($app, $orm) { + $app->put('/(\w+)/(\w+)/(\d+)', function($table, $field, $id) use($app) { if (empty($GLOBALS['_PUT']) === true) { $app->res->_format('json', 204); @@ -235,7 +236,7 @@ $query = sprintf('%s;', implode(' ', $query)); $values = array_values($GLOBALS['_PUT']); - $result = $orm->query($query, array_merge($values, [$id])); + $result = $app->db->query($query, array_merge($values, [$id])); if ($result === false) { $app->res->_format('json', 409); diff --git a/config.sample.php b/config.sample.php index 1a9866a4..9d86b1c4 100644 --- a/config.sample.php +++ b/config.sample.php @@ -24,5 +24,4 @@ $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); $pdo->query('SET CHARACTER SET utf8'); return new \Liten\Orm($pdo); -}); -$orm = $app->inst->db; +}); \ No newline at end of file From 1759cdfba4f5935c95342377bbb4417babf1c314 Mon Sep 17 00:00:00 2001 From: Joshua Parker Date: Tue, 20 Sep 2016 15:04:24 -0400 Subject: [PATCH 03/23] Deleted .ini install file. --- etsis.ini | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 etsis.ini diff --git a/etsis.ini b/etsis.ini deleted file mode 100644 index dcb30e7f..00000000 --- a/etsis.ini +++ /dev/null @@ -1,35 +0,0 @@ -; \ No newline at end of file From 2216bd4eea9b79e69c41ee23c5b9e661cfd66cc2 Mon Sep 17 00:00:00 2001 From: Joshua Parker Date: Tue, 20 Sep 2016 15:05:05 -0400 Subject: [PATCH 04/23] Updated student header to show hiatus. --- app/functions/student-function.php | 68 ++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 12 deletions(-) diff --git a/app/functions/student-function.php b/app/functions/student-function.php index b01024f7..4319add0 100755 --- a/app/functions/student-function.php +++ b/app/functions/student-function.php @@ -554,6 +554,48 @@ function get_stu_restriction($stu_id) return $q; } +/** + * Student hiatuses. + * + * @since 6.2.10 + * @return Hiatus proper name. + */ +function get_shis_name($code) { + switch ($code) { + case "W": + $hiatus = "Withdrawal"; + break; + case "LOA": + $hiatus = "Leave of Absence"; + break; + case "SA": + $hiatus = "Study Abroad"; + break; + case "ILLN": + $hiatus = "Illness"; + break; + case "DISM": + $hiatus = "Dismissal"; + break; + } + return $hiatus; +} + +/** + * Retrieve student's hiatus status. + * + * @since 6.2.10 + * @return Student's hiatus status. + */ +function get_stu_shis($stu_id, $field) { + $app = \Liten\Liten::getInstance(); + $shis = $app->db->hiatus() + ->where('endDate <= "0000-00-00"')->_and_() + ->where('stuID = ?', $stu_id) + ->findOne(); + return _h($shis->$field); +} + function get_stu_header($stu_id) { $student = get_student($stu_id); @@ -575,32 +617,32 @@ function get_stu_header($stu_id)
- +
- +
stuID, $student->email1, '90'); ?>
- + - +

address1); ?> address2); ?>

city); ?> state); ?> zip); ?>

phone1); ?>

- + - +

email1); ?>

-

dob) > '0000-00-00' ? date('D, M d, o', strtotime(_h($student->dob))) : ''); ?>

+

stuAddDate))); ?>

stuStatus) == 'A') ? _t( 'Active' ) : _t( 'Inactive' );?>

- + - +

stuID)); ?> stuID)) == 'Yes') : ?> @@ -614,12 +656,14 @@ function get_stu_header($stu_id)

-

stuAddDate))); ?>

+

+ stuID), 'shisCode'); ?> +

- +
- +
From 5658be9093bb11f460af9a1fa772e5c82ffe583c Mon Sep 17 00:00:00 2001 From: Joshua Parker Date: Tue, 20 Sep 2016 15:09:55 -0400 Subject: [PATCH 05/23] Fixes #27 @5m --- app/routers/section.router.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/routers/section.router.php b/app/routers/section.router.php index 6a046ba9..22ef30b3 100755 --- a/app/routers/section.router.php +++ b/app/routers/section.router.php @@ -830,7 +830,7 @@ WHERE c.courseSecID = ? AND c.termCode = a.termCode AND a.status IN('A','N','D') - AND b.addDate = (SELECT MAX(addDate) FROM stu_program WHERE stuID = a.stuID) + AND b.addDate = (SELECT MAX(addDate) FROM stu_acad_level WHERE stuID = a.stuID) GROUP BY a.stuID,a.courseSecCode,a.termCode", [ $id]); $q = $sros->find(function($data) { $array = []; From b7ac61474caf4374ce61047376c095a62829d108 Mon Sep 17 00:00:00 2001 From: Joshua Parker Date: Tue, 20 Sep 2016 15:12:28 -0400 Subject: [PATCH 06/23] Updated core updater. --- app/src/Core/etsis_Updater.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/Core/etsis_Updater.php b/app/src/Core/etsis_Updater.php index 3498ce81..1922a17f 100644 --- a/app/src/Core/etsis_Updater.php +++ b/app/src/Core/etsis_Updater.php @@ -108,7 +108,7 @@ private function __construct(\Liten\Liten $liten = null) $this->local_base_dir = BASE_PATH; $this->local_backup_dir = '/tmp/'; $this->app = ! empty($liten) ? $liten : \Liten\Liten::getInstance(); - $this->update = new \VisualAppeal\AutoUpdate(rtrim($this->app->config('file.savepath'), '/'), BASE_PATH, 1800); + $this->update = new \VisualAppeal\AutoUpdate(rtrim($this->app->config('file.savepath'), '/'), rtrim(BASE_PATH, '/'), 1800); $this->current_release = $this->getCurrentRelease(); $this->current_release_value = $this->current_release['current_release']['current_release_value']; } @@ -151,7 +151,7 @@ public function getServerStatus() protected function getCurrentRelease() { - $file = parse_ini_string(_file_get_contents(BASE_PATH . 'etsis.ini'), true); + $file = parse_ini_string(_file_get_contents($this->url . 'core/1.1/update-check/etsis.ini'), true); return $file; } From f084ec8e9a66dec06b5c6e3e1aaefd816c1a2e1d Mon Sep 17 00:00:00 2001 From: Joshua Parker Date: Tue, 20 Sep 2016 15:27:59 -0400 Subject: [PATCH 07/23] Fixed issue with non-English characters. --- app/views/section/catalog-pdf.php | 6 +++--- app/views/section/templates/roster/default.template.php | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/section/catalog-pdf.php b/app/views/section/catalog-pdf.php index a9420784..81af7708 100755 --- a/app/views/section/catalog-pdf.php +++ b/app/views/section/catalog-pdf.php @@ -24,8 +24,8 @@ $pdf->SetHeaderData("", "", $catalog[0]['termCode'].' Course Catalog', ""); // set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); +$pdf->setHeaderFont(Array('freesans', '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array('freesans', '', PDF_FONT_SIZE_DATA)); // set default monospaced font $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); @@ -41,7 +41,7 @@ // --------------------------------------------------------- // set font -$pdf->SetFont('helvetica', '', 8); +$pdf->SetFont('freesans', '', 8); // column titles $table = ''; diff --git a/app/views/section/templates/roster/default.template.php b/app/views/section/templates/roster/default.template.php index 235db370..b76a2190 100755 --- a/app/views/section/templates/roster/default.template.php +++ b/app/views/section/templates/roster/default.template.php @@ -28,8 +28,8 @@ $pdf->SetHeaderData('', '', 'Section Roster', '', '', ''); // set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); +$pdf->setHeaderFont(Array('freesans', '', PDF_FONT_SIZE_MAIN)); +$pdf->setFooterFont(Array('freesans', '', PDF_FONT_SIZE_DATA)); // set default monospaced font $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); @@ -48,7 +48,7 @@ // --------------------------------------------------------- // set font -$pdf->SetFont('times', '', 10); +$pdf->SetFont('freesans', '', 10); // add a page $pdf->AddPage(); From 197da9b86b8809977d30a063e38c84adf3cad614 Mon Sep 17 00:00:00 2001 From: Joshua Parker Date: Tue, 20 Sep 2016 15:32:33 -0400 Subject: [PATCH 08/23] Updated a few libraries. --- .../vendor/composer/ClassLoader.php | 8 +- .../vendor/composer/autoload_namespaces.php | 2 - .../vendor/composer/autoload_psr4.php | 3 + .../vendor/composer/autoload_real.php | 5 - .../CoreUpdate/vendor/composer/installed.json | 1092 +++++---- .../reflection-common/.gitignore | 4 + .../phpdocumentor/reflection-common/LICENSE | 22 + .../phpdocumentor/reflection-common/README.md | 1 + .../reflection-common/phpunit.xml.dist | 26 + .../reflection-common/src/Element.php | 32 + .../reflection-common/src/File.php | 40 + .../reflection-common/src/Fqsen.php | 78 + .../reflection-common/src/Location.php | 57 + .../reflection-common/src/Project.php | 25 + .../reflection-common/src/ProjectFactory.php | 27 + .../reflection-docblock/.scrutinizer.yml | 32 + .../reflection-docblock/.travis.yml | 32 +- .../reflection-docblock/README.md | 72 +- .../01-interpreting-a-simple-docblock.php | 27 + .../examples/02-interpreting-tags.php | 24 + .../examples/03-reconstituting-a-docblock.php | 27 + .../examples/04-adding-your-own-tag.php | 135 + .../playing-with-descriptions/02-escaping.php | 47 + .../reflection-docblock/phpmd.xml.dist | 23 + .../reflection-docblock/phpunit.xml.dist | 25 +- .../reflection-docblock/src/DocBlock.php | 220 ++ .../src/DocBlock/Description.php | 103 + .../src/DocBlock/DescriptionFactory.php | 191 ++ .../src/DocBlock/ExampleFinder.php | 170 ++ .../src/DocBlock/Serializer.php | 143 ++ .../src/DocBlock/StandardTagFactory.php | 314 +++ .../reflection-docblock/src/DocBlock/Tag.php | 26 + .../src/DocBlock/TagFactory.php | 93 + .../src/DocBlock/Tags/Author.php | 100 + .../src/DocBlock/Tags/BaseTag.php | 52 + .../src/DocBlock/Tags/Covers.php | 84 + .../src/DocBlock/Tags/Deprecated.php | 94 + .../src/DocBlock/Tags/Example.php | 158 ++ .../DocBlock/Tags/Factory/StaticMethod.php | 18 + .../src/DocBlock/Tags/Factory/Strategy.php | 18 + .../src/DocBlock/Tags/Formatter.php | 27 + .../Tags/Formatter/PassthroughFormatter.php | 31 + .../src/DocBlock/Tags/Generic.php | 91 + .../src/DocBlock/Tags/Link.php | 77 + .../src/DocBlock/Tags/Method.php | 220 ++ .../src/DocBlock/Tags/Param.php | 141 ++ .../src/DocBlock/Tags/Property.php | 118 + .../src/DocBlock/Tags/PropertyRead.php | 118 + .../src/DocBlock/Tags/PropertyWrite.php | 118 + .../src/DocBlock/Tags/Return_.php | 73 + .../src/DocBlock/Tags/See.php | 81 + .../src/DocBlock/Tags/Since.php | 94 + .../src/DocBlock/Tags/Source.php | 96 + .../src/DocBlock/Tags/Throws.php | 72 + .../src/DocBlock/Tags/Uses.php | 83 + .../src/DocBlock/Tags/Var_.php | 118 + .../src/DocBlock/Tags/Version.php | 94 + .../src/DocBlockFactory.php | 277 +++ .../src/DocBlockFactoryInterface.php | 23 + .../src/phpDocumentor/Reflection/DocBlock.php | 468 ---- .../Reflection/DocBlock/Context.php | 154 -- .../Reflection/DocBlock/Description.php | 223 -- .../Reflection/DocBlock/Location.php | 76 - .../Reflection/DocBlock/Serializer.php | 198 -- .../phpDocumentor/Reflection/DocBlock/Tag.php | 377 --- .../Reflection/DocBlock/Tag/AuthorTag.php | 131 - .../Reflection/DocBlock/Tag/CoversTag.php | 24 - .../Reflection/DocBlock/Tag/DeprecatedTag.php | 26 - .../Reflection/DocBlock/Tag/ExampleTag.php | 156 -- .../Reflection/DocBlock/Tag/LinkTag.php | 81 - .../Reflection/DocBlock/Tag/MethodTag.php | 209 -- .../Reflection/DocBlock/Tag/ParamTag.php | 119 - .../DocBlock/Tag/PropertyReadTag.php | 24 - .../Reflection/DocBlock/Tag/PropertyTag.php | 24 - .../DocBlock/Tag/PropertyWriteTag.php | 24 - .../Reflection/DocBlock/Tag/ReturnTag.php | 99 - .../Reflection/DocBlock/Tag/SeeTag.php | 81 - .../Reflection/DocBlock/Tag/SinceTag.php | 26 - .../Reflection/DocBlock/Tag/SourceTag.php | 137 -- .../Reflection/DocBlock/Tag/ThrowsTag.php | 24 - .../Reflection/DocBlock/Tag/UsesTag.php | 24 - .../Reflection/DocBlock/Tag/VarTag.php | 24 - .../Reflection/DocBlock/Tag/VersionTag.php | 108 - .../Reflection/DocBlock/Type/Collection.php | 221 -- .../phpdocumentor/type-resolver/.gitignore | 3 + .../type-resolver/.scrutinizer.yml | 31 + .../phpdocumentor/type-resolver/.travis.yml | 34 + .../phpdocumentor/type-resolver/LICENSE | 21 + .../phpdocumentor/type-resolver/README.md | 169 ++ .../examples/01-resolving-simple-types.php | 13 + .../examples/02-resolving-classes.php | 12 + .../examples/03-resolving-all-elements.php | 17 + ...ing-the-context-using-class-reflection.php | 30 + ...ng-the-context-using-method-reflection.php | 30 + ...vering-the-context-using-file-contents.php | 22 + .../type-resolver/examples/Classy.php | 16 + .../type-resolver/phpmd.xml.dist | 23 + .../type-resolver/phpunit.xml.dist | 31 + .../type-resolver/src/FqsenResolver.php | 76 + .../phpdocumentor/type-resolver/src/Type.php | 18 + .../type-resolver/src/TypeResolver.php | 266 ++ .../type-resolver/src/Types/Array_.php | 87 + .../type-resolver/src/Types/Boolean.php | 31 + .../type-resolver/src/Types/Callable_.php | 31 + .../type-resolver/src/Types/Compound.php | 82 + .../type-resolver/src/Types/Context.php | 84 + .../src/Types/ContextFactory.php | 210 ++ .../type-resolver/src/Types/Float_.php | 31 + .../type-resolver/src/Types/Integer.php | 28 + .../type-resolver/src/Types/Mixed.php | 31 + .../type-resolver/src/Types/Null_.php | 31 + .../type-resolver/src/Types/Object_.php | 70 + .../type-resolver/src/Types/Resource.php | 31 + .../type-resolver/src/Types/Scalar.php | 31 + .../type-resolver/src/Types/Self_.php | 33 + .../type-resolver/src/Types/Static_.php | 38 + .../type-resolver/src/Types/String_.php | 31 + .../type-resolver/src/Types/This.php | 34 + .../type-resolver/src/Types/Void_.php | 34 + .../vendor/phpspec/prophecy/.gitignore | 4 +- .../vendor/phpspec/prophecy/.travis.yml | 14 +- .../vendor/phpspec/prophecy/CHANGES.md | 25 + .../vendor/phpspec/prophecy/CONTRIBUTING.md | 4 +- .../vendor/phpspec/prophecy/README.md | 1 + .../Token/ApproximateValueTokenSpec.php | 55 + .../prophecy/spec/Prophecy/ArgumentSpec.php | 6 + .../Comparator/ProphecyComparatorSpec.php | 39 + .../Doubler/ClassPatch/MagicCallPatchSpec.php | 51 +- .../ClassPatch/SplFileInfoPatchSpec.php | 16 + .../Generator/ClassCodeGeneratorSpec.php | 138 +- .../Doubler/Generator/ClassMirrorSpec.php | 202 +- .../Generator/Node/ArgumentNodeSpec.php | 30 + .../Doubler/Generator/Node/ClassNodeSpec.php | 46 + .../Doubler/Generator/Node/MethodNodeSpec.php | 5 +- .../MethodNotExtendableExceptionSpec.php | 29 + .../prophecy/src/Prophecy/Argument.php | 14 + .../Argument/Token/ApproximateValueToken.php | 55 + .../prophecy/src/Prophecy/Call/CallCenter.php | 12 +- .../src/Prophecy/Comparator/Factory.php | 1 + .../Comparator/ProphecyComparator.php | 28 + .../Doubler/ClassPatch/MagicCallPatch.php | 22 +- .../Doubler/ClassPatch/SplFileInfoPatch.php | 20 + .../Doubler/Generator/ClassCodeGenerator.php | 34 +- .../Doubler/Generator/ClassMirror.php | 62 +- .../Doubler/Generator/Node/ArgumentNode.php | 16 + .../Doubler/Generator/Node/ClassNode.php | 36 + .../Doubler/Generator/Node/MethodNode.php | 13 +- .../Doubler/MethodNotExtendableException.php | 41 + .../ClassAndInterfaceTagRetriever.php | 69 + .../PhpDocumentor/ClassTagRetriever.php | 52 + .../PhpDocumentor/LegacyClassTagRetriever.php | 35 + .../MethodTagRetrieverInterface.php | 30 + .../Promise/ReturnArgumentPromise.php | 4 +- .../src/Prophecy/Promise/ThrowPromise.php | 4 +- .../src/Prophecy/Prophecy/MethodProphecy.php | 1 + .../src/Prophecy/Prophecy/ObjectProphecy.php | 4 +- .../prophecy/src/Prophecy/Util/ExportUtil.php | 184 +- .../vendor/psr/log/Psr/Log/AbstractLogger.php | 24 +- .../vendor/psr/log/Psr/Log/LogLevel.php | 16 +- .../psr/log/Psr/Log/LoggerAwareInterface.php | 5 +- .../psr/log/Psr/Log/LoggerAwareTrait.php | 8 +- .../psr/log/Psr/Log/LoggerInterface.php | 33 +- .../vendor/psr/log/Psr/Log/LoggerTrait.php | 33 +- .../vendor/psr/log/Psr/Log/NullLogger.php | 7 +- .../log/Psr/Log/Test/LoggerInterfaceTest.php | 46 +- .../vendor/sebastian/diff/.gitignore | 1 + .../CoreUpdate/vendor/sebastian/diff/.php_cs | 66 + .../vendor/sebastian/diff/src/Chunk.php | 6 - .../vendor/sebastian/diff/src/Diff.php | 6 - .../vendor/sebastian/diff/src/Differ.php | 49 +- .../diff/src/LCS/LongestCommonSubsequence.php | 12 +- ...LongestCommonSubsequenceImplementation.php | 13 +- ...LongestCommonSubsequenceImplementation.php | 14 +- .../vendor/sebastian/diff/src/Line.php | 10 +- .../vendor/sebastian/diff/src/Parser.php | 12 +- .../vendor/sebastian/environment/.gitignore | 1 - .../vendor/sebastian/environment/phpunit.xml | 20 + .../sebastian/environment/phpunit.xml.dist | 20 - .../sebastian/environment/src/Console.php | 48 +- .../sebastian/environment/src/Runtime.php | 6 +- .../sebastian/exporter/src/Exporter.php | 19 +- .../sebastian/recursion-context/.gitignore | 1 + .../recursion-context/src/Context.php | 2 +- .../CoreUpdate/vendor/symfony/yaml/.gitignore | 1 + .../CoreUpdate/vendor/symfony/yaml/Dumper.php | 8 +- .../vendor/symfony/yaml/Escaper.php | 10 +- .../CoreUpdate/vendor/symfony/yaml/Inline.php | 61 +- .../CoreUpdate/vendor/symfony/yaml/LICENSE | 2 +- .../CoreUpdate/vendor/symfony/yaml/Parser.php | 243 +- .../CoreUpdate/vendor/symfony/yaml/README.md | 20 +- .../vendor/symfony/yaml/Unescaper.php | 21 +- .../CoreUpdate/vendor/symfony/yaml/Yaml.php | 23 +- .../webmozart/assert/.composer-auth.json | 7 + .../vendor/webmozart/assert/.gitignore | 2 + .../vendor/webmozart/assert/.styleci.yml | 7 + .../vendor/webmozart/assert/.travis.yml | 35 + .../vendor/webmozart/assert/LICENSE | 20 + .../vendor/webmozart/assert/README.md | 235 ++ .../vendor/webmozart/assert/appveyor.yml | 36 + .../vendor/webmozart/assert/phpunit.xml.dist | 16 + .../vendor/webmozart/assert/src/Assert.php | 903 +++++++ .../vendor/composer/installed.json | 253 +- .../vendor/symfony/console/Application.php | 45 +- .../symfony/console/Command/Command.php | 9 +- .../vendor/symfony/console/ConsoleEvents.php | 16 +- .../console/Descriptor/TextDescriptor.php | 2 +- .../Exception/CommandNotFoundException.php | 10 +- .../console/Helper/FormatterHelper.php | 24 + .../vendor/symfony/console/Helper/Helper.php | 32 +- .../symfony/console/Helper/HelperSet.php | 8 +- .../symfony/console/Helper/ProgressBar.php | 51 +- .../console/Helper/ProgressIndicator.php | 52 +- .../console/Helper/SymfonyQuestionHelper.php | 12 + .../vendor/symfony/console/Helper/Table.php | 133 +- .../symfony/console/Helper/TableSeparator.php | 3 +- .../symfony/console/Input/ArgvInput.php | 40 +- .../symfony/console/Input/ArrayInput.php | 31 +- .../vendor/symfony/console/Input/Input.php | 68 +- .../symfony/console/Input/InputInterface.php | 25 +- .../symfony/console/Output/ConsoleOutput.php | 15 +- .../symfony/console/Output/NullOutput.php | 12 + .../vendor/symfony/console/Output/Output.php | 12 + .../symfony/console/Output/StreamOutput.php | 10 +- .../console/Question/ChoiceQuestion.php | 10 + .../symfony/console/Question/Question.php | 4 +- .../vendor/symfony/console/README.md | 69 +- .../symfony/console/Style/SymfonyStyle.php | 100 +- .../console/Tester/ApplicationTester.php | 76 +- .../symfony/console/Tester/CommandTester.php | 2 +- .../vendor/symfony/console/phpunit.xml.dist | 10 + .../symfony/polyfill-mbstring/Mbstring.php | 4 +- .../Resources/unidata/lowerCase.php | 1101 +++++++++ .../Resources/unidata/lowerCase.ser | 1 - .../Resources/unidata/upperCase.php | 1109 +++++++++ .../Resources/unidata/upperCase.ser | 1 - .../vendor/symfony/yaml/Dumper.php | 8 +- .../vendor/symfony/yaml/Escaper.php | 4 +- .../vendor/symfony/yaml/Inline.php | 30 +- .../vendor/symfony/yaml/Parser.php | 110 +- .../vendor/symfony/yaml/README.md | 20 +- .../vendor/symfony/yaml/Unescaper.php | 8 +- .../vendor/symfony/yaml/Yaml.php | 16 +- .../PHPMailer/vendor/composer/ClassLoader.php | 8 +- .../vendor/composer/autoload_real.php | 5 - .../PHPMailer/vendor/composer/installed.json | 15 +- .../vendor/phpmailer/phpmailer/.gitignore | 1 - .../vendor/phpmailer/phpmailer/README.md | 24 +- .../vendor/phpmailer/phpmailer/VERSION | 2 +- .../phpmailer/phpmailer/class.phpmailer.php | 125 +- .../phpmailer/class.phpmaileroauthgoogle.php | 3 +- .../vendor/phpmailer/phpmailer/class.pop3.php | 2 +- .../vendor/phpmailer/phpmailer/class.smtp.php | 21 +- .../docs/Callback_function_notes.txt | 17 + .../phpmailer/docs/DomainKeys_notes.txt | 55 + .../docs/Note_for_SMTP_debugging.txt | 17 + .../phpmailer/phpmailer/docs/extending.html | 128 + .../vendor/phpmailer/phpmailer/docs/faq.html | 28 + .../phpmailer/phpmailer/docs/generatedocs.sh | 8 + .../phpmailer/phpmailer/docs/pop3_article.txt | 50 + .../phpmailer/phpmailer/examples/DKIM.phps | 38 + .../phpmailer/examples/code_generator.phps | 597 +++++ .../phpmailer/examples/contents.html | 17 + .../phpmailer/examples/contentsutf8.html | 20 + .../phpmailer/examples/exceptions.phps | 35 + .../phpmailer/phpmailer/examples/gmail.phps | 75 + .../phpmailer/examples/gmail_xoauth.phps | 85 + .../phpmailer/examples/images/phpmailer.png | Bin 0 -> 5831 bytes .../examples/images/phpmailer_mini.png | Bin 0 -> 1842 bytes .../phpmailer/phpmailer/examples/index.html | 48 + .../phpmailer/phpmailer/examples/mail.phps | 31 + .../phpmailer/examples/mailing_list.phps | 59 + .../phpmailer/examples/pop_before_smtp.phps | 54 + .../phpmailer/examples/scripts/XRegExp.js | 664 +++++ .../examples/scripts/shAutoloader.js | 122 + .../phpmailer/examples/scripts/shBrushPhp.js | 72 + .../phpmailer/examples/scripts/shCore.js | 1 + .../phpmailer/examples/scripts/shLegacy.js | 141 ++ .../phpmailer/examples/send_file_upload.phps | 49 + .../examples/send_multiple_file_upload.phps | 51 + .../phpmailer/examples/sendmail.phps | 33 + .../phpmailer/examples/signed-mail.phps | 89 + .../phpmailer/phpmailer/examples/smtp.phps | 54 + .../phpmailer/examples/smtp_check.phps | 55 + .../phpmailer/examples/smtp_no_auth.phps | 50 + .../phpmailer/examples/ssl_options.phps | 74 + .../phpmailer/examples/styles/shCore.css | 46 + .../examples/styles/shCoreDefault.css | 77 + .../examples/styles/shCoreDjango.css | 78 + .../examples/styles/shCoreEclipse.css | 80 + .../phpmailer/examples/styles/shCoreEmacs.css | 76 + .../examples/styles/shCoreFadeToGrey.css | 77 + .../examples/styles/shCoreMDUltra.css | 76 + .../examples/styles/shCoreMidnight.css | 76 + .../phpmailer/examples/styles/shCoreRDark.css | 76 + .../examples/styles/shThemeAppleScript.css | 21 + .../examples/styles/shThemeDefault.css | 31 + .../examples/styles/shThemeDjango.css | 32 + .../examples/styles/shThemeEclipse.css | 34 + .../examples/styles/shThemeEmacs.css | 30 + .../examples/styles/shThemeFadeToGrey.css | 31 + .../examples/styles/shThemeMDUltra.css | 30 + .../examples/styles/shThemeMidnight.css | 30 + .../examples/styles/shThemeRDark.css | 30 + .../examples/styles/shThemeVisualStudio.css | 31 + .../phpmailer/examples/styles/wrapping.png | Bin 0 -> 631 bytes .../phpmailer/extras/EasyPeasyICS.php | 148 ++ .../phpmailer/phpmailer/extras/README.md | 17 + .../phpmailer/phpmailer/extras/htmlfilter.php | 1166 +++++++++ .../phpmailer/extras/ntlm_sasl_client.php | 185 ++ .../phpmailer/phpmailer/get_oauth_token.php | 162 ++ .../phpmailer/language/phpmailer.lang-ka.php | 2 +- .../phpmailer/language/phpmailer.lang-pl.php | 2 +- .../phpmailer/language/phpmailer.lang-ru.php | 4 +- .../phpmailer/phpmailer/test/bootstrap.php | 5 + .../phpmailer/phpmailer/test/fakepopserver.sh | 125 + .../phpmailer/phpmailer/test/fakesendmail.sh | 22 + .../phpmailer/test/phpmailerLangTest.php | 76 + .../phpmailer/test/phpmailerTest.php | 2166 +++++++++++++++++ .../phpmailer/test/runfakepopserver.sh | 10 + .../phpmailer/test/test_callback.php | 81 + .../phpmailer/test/testbootstrap-dist.php | 7 + .../phpmailer/travis.phpunit.xml.dist | 34 + 322 files changed, 21011 insertions(+), 4682 deletions(-) create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/.gitignore create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/LICENSE create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/README.md create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/phpunit.xml.dist create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Element.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/File.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Fqsen.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Location.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Project.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/ProjectFactory.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/.scrutinizer.yml create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Strategy.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Serializer.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php delete mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.gitignore create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.scrutinizer.yml create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.travis.yml create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/LICENSE create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/README.md create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/Classy.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/phpmd.xml.dist create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/phpunit.xml.dist create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Type.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/TypeResolver.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Array_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Boolean.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Callable_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Compound.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Context.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Float_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Integer.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Null_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Object_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Resource.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Scalar.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Self_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Static_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/String_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/This.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Void_.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ApproximateValueToken.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Comparator/ProphecyComparator.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotExtendableException.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassAndInterfaceTagRetriever.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassTagRetriever.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/LegacyClassTagRetriever.php create mode 100644 app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/MethodTagRetrieverInterface.php create mode 100644 app/src/vendor/CoreUpdate/vendor/sebastian/diff/.php_cs create mode 100644 app/src/vendor/CoreUpdate/vendor/sebastian/environment/phpunit.xml delete mode 100644 app/src/vendor/CoreUpdate/vendor/sebastian/environment/phpunit.xml.dist create mode 100644 app/src/vendor/CoreUpdate/vendor/webmozart/assert/.composer-auth.json create mode 100644 app/src/vendor/CoreUpdate/vendor/webmozart/assert/.gitignore create mode 100644 app/src/vendor/CoreUpdate/vendor/webmozart/assert/.styleci.yml create mode 100644 app/src/vendor/CoreUpdate/vendor/webmozart/assert/.travis.yml create mode 100644 app/src/vendor/CoreUpdate/vendor/webmozart/assert/LICENSE create mode 100644 app/src/vendor/CoreUpdate/vendor/webmozart/assert/README.md create mode 100644 app/src/vendor/CoreUpdate/vendor/webmozart/assert/appveyor.yml create mode 100644 app/src/vendor/CoreUpdate/vendor/webmozart/assert/phpunit.xml.dist create mode 100644 app/src/vendor/CoreUpdate/vendor/webmozart/assert/src/Assert.php create mode 100644 app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php delete mode 100644 app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.ser create mode 100644 app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php delete mode 100644 app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.ser create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/Callback_function_notes.txt create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/DomainKeys_notes.txt create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/Note_for_SMTP_debugging.txt create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/extending.html create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/faq.html create mode 100755 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/generatedocs.sh create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/pop3_article.txt create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/DKIM.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/code_generator.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/contents.html create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/contentsutf8.html create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/exceptions.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/gmail.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/images/phpmailer.png create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/index.html create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/mail.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/mailing_list.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/shBrushPhp.js create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/shCore.js create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/shLegacy.js create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/send_file_upload.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/send_multiple_file_upload.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/sendmail.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/signed-mail.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/smtp.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/smtp_check.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/smtp_no_auth.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/ssl_options.phps create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shCore.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shCoreDefault.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shCoreDjango.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shCoreEclipse.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shCoreEmacs.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shCoreFadeToGrey.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shCoreMDUltra.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shCoreMidnight.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shCoreRDark.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shThemeAppleScript.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shThemeDefault.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shThemeDjango.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shThemeEclipse.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shThemeEmacs.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shThemeFadeToGrey.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shThemeMDUltra.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shThemeMidnight.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shThemeRDark.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/shThemeVisualStudio.css create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/styles/wrapping.png create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/extras/EasyPeasyICS.php create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/extras/README.md create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/extras/htmlfilter.php create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/extras/ntlm_sasl_client.php create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/get_oauth_token.php create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/test/bootstrap.php create mode 100755 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/test/fakepopserver.sh create mode 100755 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/test/fakesendmail.sh create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/test/phpmailerLangTest.php create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/test/phpmailerTest.php create mode 100755 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/test/runfakepopserver.sh create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/test/test_callback.php create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/test/testbootstrap-dist.php create mode 100644 app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/travis.phpunit.xml.dist diff --git a/app/src/vendor/CoreUpdate/vendor/composer/ClassLoader.php b/app/src/vendor/CoreUpdate/vendor/composer/ClassLoader.php index 5e1469e8..ff6ecfb8 100644 --- a/app/src/vendor/CoreUpdate/vendor/composer/ClassLoader.php +++ b/app/src/vendor/CoreUpdate/vendor/composer/ClassLoader.php @@ -13,9 +13,7 @@ namespace Composer\Autoload; /** - * ClassLoader implements a PSR-0 class loader - * - * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. * * $loader = new \Composer\Autoload\ClassLoader(); * @@ -39,6 +37,8 @@ * * @author Fabien Potencier * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ */ class ClassLoader { @@ -147,7 +147,7 @@ public function add($prefix, $paths, $prepend = false) * appending or prepending to the ones previously set for this namespace. * * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-0 base directories + * @param array|string $paths The PSR-4 base directories * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException diff --git a/app/src/vendor/CoreUpdate/vendor/composer/autoload_namespaces.php b/app/src/vendor/CoreUpdate/vendor/composer/autoload_namespaces.php index 608be803..3fe0d610 100644 --- a/app/src/vendor/CoreUpdate/vendor/composer/autoload_namespaces.php +++ b/app/src/vendor/CoreUpdate/vendor/composer/autoload_namespaces.php @@ -8,7 +8,5 @@ return array( 'vierbergenlars\\SemVer\\' => array($vendorDir . '/vierbergenlars/php-semver/src'), 'vierbergenlars\\LibJs\\' => array($vendorDir . '/vierbergenlars/php-semver/src'), - 'phpDocumentor' => array($vendorDir . '/phpdocumentor/reflection-docblock/src'), - 'Psr\\Log\\' => array($vendorDir . '/psr/log'), 'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'), ); diff --git a/app/src/vendor/CoreUpdate/vendor/composer/autoload_psr4.php b/app/src/vendor/CoreUpdate/vendor/composer/autoload_psr4.php index 33d48ef3..8a875797 100644 --- a/app/src/vendor/CoreUpdate/vendor/composer/autoload_psr4.php +++ b/app/src/vendor/CoreUpdate/vendor/composer/autoload_psr4.php @@ -6,8 +6,11 @@ $baseDir = dirname($vendorDir); return array( + 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/type-resolver/src', $vendorDir . '/phpdocumentor/reflection-docblock/src'), + 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), 'VisualAppeal\\' => array($baseDir . '/src'), 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), + 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), 'Desarrolla2\\Cache\\' => array($vendorDir . '/desarrolla2/cache/src'), diff --git a/app/src/vendor/CoreUpdate/vendor/composer/autoload_real.php b/app/src/vendor/CoreUpdate/vendor/composer/autoload_real.php index 49363344..fd3c490c 100644 --- a/app/src/vendor/CoreUpdate/vendor/composer/autoload_real.php +++ b/app/src/vendor/CoreUpdate/vendor/composer/autoload_real.php @@ -47,8 +47,3 @@ public static function getLoader() return $loader; } } - -function composerRequirec3a4a7fe07c4716a87264b99264a4b6b($file) -{ - require $file; -} diff --git a/app/src/vendor/CoreUpdate/vendor/composer/installed.json b/app/src/vendor/CoreUpdate/vendor/composer/installed.json index e2ad8979..3dcbb6ec 100644 --- a/app/src/vendor/CoreUpdate/vendor/composer/installed.json +++ b/app/src/vendor/CoreUpdate/vendor/composer/installed.json @@ -1,44 +1,4 @@ [ - { - "name": "psr/log", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", - "shasum": "" - }, - "time": "2012-12-21 11:40:51", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Psr\\Log\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "keywords": [ - "log", - "psr", - "psr-3" - ] - }, { "name": "monolog/monolog", "version": "1.12.0", @@ -311,31 +271,33 @@ ] }, { - "name": "sebastian/recursion-context", - "version": "1.0.1", - "version_normalized": "1.0.1.0", + "name": "sebastian/comparator", + "version": "1.2.0", + "version_normalized": "1.2.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "994d4a811bafe801fb06dccbee797863ba2792ba" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba", - "reference": "994d4a811bafe801fb06dccbee797863ba2792ba", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2" }, "require-dev": { "phpunit/phpunit": "~4.4" }, - "time": "2015-06-21 08:04:50", + "time": "2015-07-26 15:48:44", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "installation-source": "dist", @@ -354,113 +316,102 @@ "email": "whatthejeff@gmail.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Volker Dusch", + "email": "github@wallbash.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context" + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ] }, { - "name": "sebastian/exporter", - "version": "1.2.1", - "version_normalized": "1.2.1.0", + "name": "doctrine/instantiator", + "version": "1.0.5", + "version_normalized": "1.0.5.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e" + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "php": ">=5.3,<8.0-DEV" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" }, - "time": "2015-06-21 07:55:53", + "time": "2015-06-14 21:17:01", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", "keywords": [ - "export", - "exporter" + "constructor", + "instantiate" ] }, { - "name": "sebastian/environment", - "version": "1.3.2", - "version_normalized": "1.3.2.0", + "name": "phpunit/php-text-template", + "version": "1.2.1", + "version_normalized": "1.2.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6324c907ce7a52478eeeaede764f48733ef5ae44", - "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "time": "2015-08-03 06:14:51", + "time": "2015-06-21 13:50:34", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, "installation-source": "dist", "autoload": { "classmap": [ @@ -474,43 +425,48 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "Xdebug", - "environment", - "hhvm" + "template" ] }, { - "name": "sebastian/diff", - "version": "1.3.0", - "version_normalized": "1.3.0.0", + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "version_normalized": "2.3.8.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", "shasum": "" }, "require": { - "php": ">=5.3.3" + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" }, - "time": "2015-02-22 15:13:53", + "time": "2015-10-02 06:51:40", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "2.3.x-dev" } }, "installation-source": "dist", @@ -524,49 +480,46 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "Diff implementation", - "homepage": "http://www.github.com/sebastianbergmann/diff", + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", "keywords": [ - "diff" + "mock", + "xunit" ] }, { - "name": "sebastian/comparator", - "version": "1.2.0", - "version_normalized": "1.2.0.0", + "name": "phpunit/php-token-stream", + "version": "1.4.8", + "version_normalized": "1.4.8.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "ext-tokenizer": "*", + "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "~4.2" }, - "time": "2015-07-26 15:48:44", + "time": "2015-09-15 10:49:45", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.4-dev" } }, "installation-source": "dist", @@ -580,108 +533,224 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ - "comparator", - "compare", - "equality" + "tokenizer" ] }, { - "name": "symfony/yaml", - "version": "v2.7.7", - "version_normalized": "2.7.7.0", + "name": "phpunit/php-file-iterator", + "version": "1.3.4", + "version_normalized": "1.3.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "4cfcd7a9fceba662b3c036b7d9a91f6197af046c" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4cfcd7a9fceba662b3c036b7d9a91f6197af046c", - "reference": "4cfcd7a9fceba662b3c036b7d9a91f6197af046c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", + "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.3" }, - "time": "2015-11-18 13:41:01", + "time": "2013-10-10 15:34:57", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } + "installation-source": "dist", + "autoload": { + "classmap": [ + "File/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ] + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "version_normalized": "2.2.4.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "time": "2015-10-06 15:47:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } }, "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ] + }, + { + "name": "phpunit/phpunit", + "version": "4.5.1", + "version_normalized": "4.5.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "d6429b0995b24a2d9dfe5587ee3a7071c1161af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d6429b0995b24a2d9dfe5587ee3a7071c1161af4", + "reference": "d6429b0995b24a2d9dfe5587ee3a7071c1161af4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "~1.3,>=1.3.1", + "phpunit/php-code-coverage": "~2.0,>=2.0.11", + "phpunit/php-file-iterator": "~1.3.2", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "~1.0.2", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.1", + "sebastian/diff": "~1.1", + "sebastian/environment": "~1.2", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "time": "2015-03-29 09:24:05", + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.5.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com" + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ] }, { - "name": "doctrine/instantiator", - "version": "1.0.5", - "version_normalized": "1.0.5.0", + "name": "sebastian/recursion-context", + "version": "1.0.2", + "version_normalized": "1.0.2.0", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": ">=5.3.3" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "~4.4" }, - "time": "2015-06-14 21:17:01", + "time": "2015-11-11 19:50:13", "type": "library", "extra": { "branch-alias": { @@ -690,66 +759,187 @@ }, "installation-source": "dist", "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "version_normalized": "1.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "time": "2016-06-17 09:04:28", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ - "constructor", - "instantiate" + "export", + "exporter" ] }, { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", - "version_normalized": "2.0.4.0", + "name": "sebastian/diff", + "version": "1.4.1", + "version_normalized": "1.4.1.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.8" }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" + "time": "2015-12-08 07:14:41", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ] + }, + { + "name": "webmozart/assert", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", + "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", + "shasum": "" + }, + "require": { + "php": "^5.3.3|^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, - "time": "2015-02-03 12:10:50", + "time": "2016-08-09 15:02:57", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.2-dev" } }, "installation-source": "dist", "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] + "psr-4": { + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -758,45 +948,51 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" ] }, { - "name": "phpspec/prophecy", - "version": "v1.5.0", - "version_normalized": "1.5.0.0", + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "version_normalized": "1.0.0.0", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7", - "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "phpdocumentor/reflection-docblock": "~2.0", - "sebastian/comparator": "~1.1" + "php": ">=5.5" }, "require-dev": { - "phpspec/phpspec": "~2.0" + "phpunit/phpunit": "^4.6" }, - "time": "2015-08-13 10:07:40", + "time": "2015-12-27 11:43:31", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -805,146 +1001,202 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ] }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "version_normalized": "1.2.1.0", + "name": "phpdocumentor/type-resolver", + "version": "0.2", + "version_normalized": "0.2.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", + "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "time": "2016-06-10 07:14:17", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ] + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.0", + "version_normalized": "3.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", + "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" }, - "time": "2015-06-21 13:50:34", + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "time": "2016-06-10 09:48:41", "type": "library", "installation-source": "dist", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ] + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock." }, { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.8", - "version_normalized": "2.3.8.0", + "name": "phpspec/prophecy", + "version": "v1.6.1", + "version_normalized": "1.6.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "58a8137754bc24b25740d4281399a4a3596058e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", - "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", + "reference": "58a8137754bc24b25740d4281399a4a3596058e0", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2", - "sebastian/exporter": "~1.2" + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpspec/phpspec": "^2.0" }, - "suggest": { - "ext-soap": "*" - }, - "time": "2015-10-02 06:51:40", + "time": "2016-06-07 08:13:47", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3.x-dev" + "dev-master": "1.6.x-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" - ] + "psr-0": { + "Prophecy\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ + "Double", + "Dummy", + "fake", "mock", - "xunit" + "spy", + "stub" ] }, { "name": "phpunit/php-timer", - "version": "1.0.7", - "version_normalized": "1.0.7.0", + "version": "1.0.8", + "version_normalized": "1.0.8.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "time": "2015-06-21 08:01:12", + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, + "time": "2016-05-12 18:03:57", "type": "library", "installation-source": "dist", "autoload": { @@ -970,32 +1222,31 @@ ] }, { - "name": "phpunit/php-token-stream", - "version": "1.4.8", - "version_normalized": "1.4.8.0", + "name": "sebastian/environment", + "version": "1.3.8", + "version_normalized": "1.3.8.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^4.8 || ^5.0" }, - "time": "2015-09-15 10:49:45", + "time": "2016-08-18 05:49:44", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.3.x-dev" } }, "installation-source": "dist", @@ -1014,195 +1265,112 @@ "email": "sebastian@phpunit.de" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ] - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.3.4", - "version_normalized": "1.3.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2013-10-10 15:34:57", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "File/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "filesystem", - "iterator" + "Xdebug", + "environment", + "hhvm" ] }, { - "name": "phpunit/php-code-coverage", - "version": "2.2.4", - "version_normalized": "2.2.4.0", + "name": "symfony/yaml", + "version": "v2.8.11", + "version_normalized": "2.8.11.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + "url": "https://github.com/symfony/yaml.git", + "reference": "e7540734bad981fe59f8ef14b6fc194ae9df8d9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", - "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e7540734bad981fe59f8ef14b6fc194ae9df8d9c", + "reference": "e7540734bad981fe59f8ef14b6fc194ae9df8d9c", "shasum": "" }, "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "^1.3.2", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" + "php": ">=5.3.9" }, - "time": "2015-10-06 15:47:00", + "time": "2016-09-02 01:57:56", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.8-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ] + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com" }, { - "name": "phpunit/phpunit", - "version": "4.5.1", - "version_normalized": "4.5.1.0", + "name": "psr/log", + "version": "1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d6429b0995b24a2d9dfe5587ee3a7071c1161af4" + "url": "https://github.com/php-fig/log.git", + "reference": "5277094ed527a1c4477177d102fe4c53551953e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d6429b0995b24a2d9dfe5587ee3a7071c1161af4", - "reference": "d6429b0995b24a2d9dfe5587ee3a7071c1161af4", + "url": "https://api.github.com/repos/php-fig/log/zipball/5277094ed527a1c4477177d102fe4c53551953e0", + "reference": "5277094ed527a1c4477177d102fe4c53551953e0", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpspec/prophecy": "~1.3,>=1.3.1", - "phpunit/php-code-coverage": "~2.0,>=2.0.11", - "phpunit/php-file-iterator": "~1.3.2", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0.2", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.1", - "sebastian/environment": "~1.2", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" + "php": ">=5.3.0" }, - "time": "2015-03-29 09:24:05", - "bin": [ - "phpunit" - ], + "time": "2016-09-19 16:02:08", "type": "library", "extra": { "branch-alias": { - "dev-master": "4.5.x-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "phpunit", - "testing", - "xunit" + "log", + "psr", + "psr-3" ] } ] diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/.gitignore b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/.gitignore new file mode 100644 index 00000000..c56f6719 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/.gitignore @@ -0,0 +1,4 @@ +composer.phar +vendor/ +build/ + diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/LICENSE b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/LICENSE new file mode 100644 index 00000000..ed6926c1 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 phpDocumentor + +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. + diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/README.md b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/README.md new file mode 100644 index 00000000..52b12bc0 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/README.md @@ -0,0 +1 @@ +# ReflectionCommon diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/phpunit.xml.dist b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/phpunit.xml.dist new file mode 100644 index 00000000..31811501 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/phpunit.xml.dist @@ -0,0 +1,26 @@ + + + + + + ./tests/unit/ + + + + + src + + + + + + + + diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Element.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Element.php new file mode 100644 index 00000000..712e30e8 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Element.php @@ -0,0 +1,32 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection; + +/** + * Interface for files processed by the ProjectFactory + */ +interface File +{ + /** + * Returns the content of the file as a string. + * + * @return string + */ + public function getContents(); + + /** + * Returns md5 hash of the file. + * + * @return string + */ + public function md5(); + + /** + * Returns an relative path to the file. + * + * @return string + */ + public function path(); +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Fqsen.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Fqsen.php new file mode 100644 index 00000000..c7be3f15 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Fqsen.php @@ -0,0 +1,78 @@ +fqsen = $fqsen; + + if (isset($matches[2])) { + $this->name = $matches[2]; + } else { + $matches = explode('\\', $fqsen); + $this->name = trim(end($matches), '()'); + } + } + + /** + * converts this class to string. + * + * @return string + */ + public function __toString() + { + return $this->fqsen; + } + + /** + * Returns the name of the element without path. + * + * @return string + */ + public function getName() + { + return $this->name; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Location.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Location.php new file mode 100644 index 00000000..57603219 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Location.php @@ -0,0 +1,57 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection; + +/** + * The location where an element occurs within a file. + */ +final class Location +{ + /** @var int */ + private $lineNumber = 0; + + /** @var int */ + private $columnNumber = 0; + + /** + * Initializes the location for an element using its line number in the file and optionally the column number. + * + * @param int $lineNumber + * @param int $columnNumber + */ + public function __construct($lineNumber, $columnNumber = 0) + { + $this->lineNumber = $lineNumber; + $this->columnNumber = $columnNumber; + } + + /** + * Returns the line number that is covered by this location. + * + * @return integer + */ + public function getLineNumber() + { + return $this->lineNumber; + } + + /** + * Returns the column number (character position on a line) for this location object. + * + * @return integer + */ + public function getColumnNumber() + { + return $this->columnNumber; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Project.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Project.php new file mode 100644 index 00000000..3ed1e393 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-common/src/Project.php @@ -0,0 +1,25 @@ + /dev/null - - phpenv rehash > /dev/null - - composer selfupdate --quiet - - composer install --no-interaction --prefer-source --dev - - vendor/bin/phpunit - - composer update --no-interaction --prefer-source --dev + - composer install --no-interaction + +after_script: + - wget https://scrutinizer-ci.com/ocular.phar + - php ocular.phar code-coverage:upload --format=php-clover coverage.clover notifications: irc: "irc.freenode.org#phpdocumentor" diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/README.md b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/README.md index 6405d1a1..a1984a15 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/README.md +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/README.md @@ -24,34 +24,46 @@ You can install the component in the following ways: Usage ----- -The ReflectionDocBlock component is designed to work in an identical fashion to -PHP's own Reflection extension (http://php.net/manual/en/book.reflection.php). - -Parsing can be initiated by instantiating the -`\phpDocumentor\Reflection\DocBlock()` class and passing it a string containing -a DocBlock (including asterisks) or by passing an object supporting the -`getDocComment()` method. - -> *Examples of objects having the `getDocComment()` method are the -> `ReflectionClass` and the `ReflectionMethod` classes of the PHP -> Reflection extension* - -Example: - - $class = new ReflectionClass('MyClass'); - $phpdoc = new \phpDocumentor\Reflection\DocBlock($class); - -or - - $docblock = <<create($docComment); +``` + +The `create` method will yield an object of type `\phpDocumentor\Reflection\DocBlock` +whose methods can be queried as shown in the following example. + +```php +// Should contain the summary for this DocBlock +$summary = $docblock->getSummary(); + +// Contains an object of type \phpDocumentor\Reflection\DocBlock\Description; +// you can either cast it to string or use the render method to get a string +// representation of the Description. +$description = $docblock->getDescription(); +``` + +> For more examples it would be best to review the scripts in the `/examples` +> folder. diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php new file mode 100644 index 00000000..6d67dea4 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php @@ -0,0 +1,27 @@ +create($docComment); + +// Should contain the first line of the DocBlock +$summary = $docblock->getSummary(); + +// Contains an object of type Description; you can either cast it to string or use +// the render method to get a string representation of the Description. +// +// In subsequent examples we will be fiddling a bit more with the Description. +$description = $docblock->getDescription(); diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php new file mode 100644 index 00000000..23995889 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php @@ -0,0 +1,24 @@ +create($docComment); + +// You can check if a DocBlock has one or more see tags +$hasSeeTag = $docblock->hasTag('see'); + +// Or we can get a complete list of all tags +$tags = $docblock->getTags(); + +// But we can also grab all tags of a specific type, such as `see` +$seeTags = $docblock->getTagsByName('see'); diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php new file mode 100644 index 00000000..6bc10baf --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php @@ -0,0 +1,27 @@ +create($docComment); + +// Create the serializer that will reconstitute the DocBlock back to its original form. +$serializer = new Serializer(); + +// Reconstitution is performed by the `getDocComment()` method. +$reconstitutedDocComment = $serializer->getDocComment($docblock); + diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php new file mode 100644 index 00000000..026d6069 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php @@ -0,0 +1,135 @@ + Important: Tag classes that act as Factories using the `create` method should implement the TagFactory interface. + */ +final class MyTag extends BaseTag implements StaticMethod +{ + /** + * A required property that is used by Formatters to reconstitute the complete tag line. + * + * @see Formatter + * + * @var string + */ + protected $name = 'my-tag'; + + /** + * The constructor for this Tag; this should contain all properties for this object. + * + * @param Description $description An example of how to add a Description to the tag; the Description is often + * an optional variable so passing null is allowed in this instance (though you can + * also construct an empty description object). + * + * @see BaseTag for the declaration of the description property and getDescription method. + */ + public function __construct(Description $description = null) + { + $this->description = $description; + } + + /** + * A static Factory that creates a new instance of the current Tag. + * + * In this example the MyTag tag can be created by passing a description text as $body. Because we have added + * a $descriptionFactory that is type-hinted as DescriptionFactory we can now construct a new Description object + * and pass that to the constructor. + * + * > You could directly instantiate a Description object here but that won't be parsed for inline tags and Types + * > won't be resolved. The DescriptionFactory will take care of those actions. + * + * The `create` method's interface states that this method only features a single parameter (`$body`) but the + * {@see TagFactory} will read the signature of this method and if it has more parameters then it will try + * to find declarations for it in the ServiceLocator of the TagFactory (see {@see TagFactory::$serviceLocator}). + * + * > Important: all properties following the `$body` should default to `null`, otherwise PHP will error because + * > it no longer matches the interface. This is why you often see the default tags check that an optional argument + * > is not null nonetheless. + * + * @param string $body + * @param DescriptionFactory $descriptionFactory + * @param Context|null $context The Context is used to resolve Types and FQSENs, although optional + * it is highly recommended to pass it. If you omit it then it is assumed that + * the DocBlock is in the global namespace and has no `use` statements. + * + * @see Tag for the interface declaration of the `create` method. + * @see Tag::create() for more information on this method's workings. + * + * @return MyTag + */ + public static function create($body, DescriptionFactory $descriptionFactory = null, Context $context = null) + { + Assert::string($body); + Assert::notNull($descriptionFactory); + + return new static($descriptionFactory->create($body, $context)); + } + + /** + * Returns a rendition of the original tag line. + * + * This method is used to reconstitute a DocBlock into its original form by the {@see Serializer}. It should + * feature all parts of the tag so that the serializer can put it back together. + * + * @return string + */ + public function __toString() + { + return (string)$this->description; + } +} + +$docComment = << MyTag::class]; + +// Do pass the list of custom tags to the Factory for the DocBlockFactory. +$factory = DocBlockFactory::createInstance($customTags); +// You can also add Tags later using `$factory->registerTagHandler()` with a tag name and Tag class name. + +// Create the DocBlock +$docblock = $factory->create($docComment); + +// Take a look: the $customTagObjects now contain an array with your newly added tag +$customTagObjects = $docblock->getTagsByName('my-tag'); + +// As an experiment: let's reconstitute the DocBlock and observe that because we added a __toString() method +// to the tag class that we can now also see it. +$serializer = new Serializer(); +$reconstitutedDocComment = $serializer->getDocComment($docblock); diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php new file mode 100644 index 00000000..5ec772fe --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php @@ -0,0 +1,47 @@ +create($docComment); + +// Escaping is automatic so this happens in the DescriptionFactory. +$description = $docblock->getDescription(); + +// This is the rendition that we will receive of the Description. +$receivedDocComment = <<render(); diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist new file mode 100644 index 00000000..9abf85cf --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + 40 + + + diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist index f67ad2a2..3c2e9a37 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist @@ -1,14 +1,33 @@ - + - - ./tests/ + + ./tests/unit + + ./tests/integration + ./src/ + + ./vendor/ + + + + diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php new file mode 100644 index 00000000..39911406 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php @@ -0,0 +1,220 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection; + +use phpDocumentor\Reflection\DocBlock\Tag; +use Webmozart\Assert\Assert; + +final class DocBlock +{ + /** @var string The opening line for this docblock. */ + private $summary = ''; + + /** @var DocBlock\Description The actual description for this docblock. */ + private $description = null; + + /** @var Tag[] An array containing all the tags in this docblock; except inline. */ + private $tags = array(); + + /** @var Types\Context Information about the context of this DocBlock. */ + private $context = null; + + /** @var Location Information about the location of this DocBlock. */ + private $location = null; + + /** @var bool Is this DocBlock (the start of) a template? */ + private $isTemplateStart = false; + + /** @var bool Does this DocBlock signify the end of a DocBlock template? */ + private $isTemplateEnd = false; + + /** + * @param string $summary + * @param DocBlock\Description $description + * @param DocBlock\Tag[] $tags + * @param Types\Context $context The context in which the DocBlock occurs. + * @param Location $location The location within the file that this DocBlock occurs in. + * @param bool $isTemplateStart + * @param bool $isTemplateEnd + */ + public function __construct( + $summary = '', + DocBlock\Description $description = null, + array $tags = [], + Types\Context $context = null, + Location $location = null, + $isTemplateStart = false, + $isTemplateEnd = false + ) + { + Assert::string($summary); + Assert::boolean($isTemplateStart); + Assert::boolean($isTemplateEnd); + Assert::allIsInstanceOf($tags, Tag::class); + + $this->summary = $summary; + $this->description = $description ?: new DocBlock\Description(''); + foreach ($tags as $tag) { + $this->addTag($tag); + } + + $this->context = $context; + $this->location = $location; + + $this->isTemplateEnd = $isTemplateEnd; + $this->isTemplateStart = $isTemplateStart; + } + + /** + * @return string + */ + public function getSummary() + { + return $this->summary; + } + + /** + * @return DocBlock\Description + */ + public function getDescription() + { + return $this->description; + } + + /** + * Returns the current context. + * + * @return Types\Context + */ + public function getContext() + { + return $this->context; + } + + /** + * Returns the current location. + * + * @return Location + */ + public function getLocation() + { + return $this->location; + } + + /** + * Returns whether this DocBlock is the start of a Template section. + * + * A Docblock may serve as template for a series of subsequent DocBlocks. This is indicated by a special marker + * (`#@+`) that is appended directly after the opening `/**` of a DocBlock. + * + * An example of such an opening is: + * + * ``` + * /**#@+ + * * My DocBlock + * * / + * ``` + * + * The description and tags (not the summary!) are copied onto all subsequent DocBlocks and also applied to all + * elements that follow until another DocBlock is found that contains the closing marker (`#@-`). + * + * @see self::isTemplateEnd() for the check whether a closing marker was provided. + * + * @return boolean + */ + public function isTemplateStart() + { + return $this->isTemplateStart; + } + + /** + * Returns whether this DocBlock is the end of a Template section. + * + * @see self::isTemplateStart() for a more complete description of the Docblock Template functionality. + * + * @return boolean + */ + public function isTemplateEnd() + { + return $this->isTemplateEnd; + } + + /** + * Returns the tags for this DocBlock. + * + * @return Tag[] + */ + public function getTags() + { + return $this->tags; + } + + /** + * Returns an array of tags matching the given name. If no tags are found + * an empty array is returned. + * + * @param string $name String to search by. + * + * @return Tag[] + */ + public function getTagsByName($name) + { + Assert::string($name); + + $result = array(); + + /** @var Tag $tag */ + foreach ($this->getTags() as $tag) { + if ($tag->getName() != $name) { + continue; + } + + $result[] = $tag; + } + + return $result; + } + + /** + * Checks if a tag of a certain type is present in this DocBlock. + * + * @param string $name Tag name to check for. + * + * @return bool + */ + public function hasTag($name) + { + Assert::string($name); + + /** @var Tag $tag */ + foreach ($this->getTags() as $tag) { + if ($tag->getName() == $name) { + return true; + } + } + + return false; + } + + /** + * Adds a tag to this DocBlock. + * + * @param Tag $tag The tag to add. + * + * @return void + */ + private function addTag(Tag $tag) + { + $this->tags[] = $tag; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php new file mode 100644 index 00000000..d1d7fc64 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php @@ -0,0 +1,103 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +use phpDocumentor\Reflection\DocBlock\Tags\Formatter; +use phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter; +use Webmozart\Assert\Assert; + +/** + * Object representing to description for a DocBlock. + * + * A Description object can consist of plain text but can also include tags. A Description Formatter can then combine + * a body template with sprintf-style placeholders together with formatted tags in order to reconstitute a complete + * description text using the format that you would prefer. + * + * Because parsing a Description text can be a verbose process this is handled by the {@see DescriptionFactory}. It is + * thus recommended to use that to create a Description object, like this: + * + * $description = $descriptionFactory->create('This is a {@see Description}', $context); + * + * The description factory will interpret the given body and create a body template and list of tags from them, and pass + * that onto the constructor if this class. + * + * > The $context variable is a class of type {@see \phpDocumentor\Reflection\Types\Context} and contains the namespace + * > and the namespace aliases that apply to this DocBlock. These are used by the Factory to resolve and expand partial + * > type names and FQSENs. + * + * If you do not want to use the DescriptionFactory you can pass a body template and tag listing like this: + * + * $description = new Description( + * 'This is a %1$s', + * [ new See(new Fqsen('\phpDocumentor\Reflection\DocBlock\Description')) ] + * ); + * + * It is generally recommended to use the Factory as that will also apply escaping rules, while the Description object + * is mainly responsible for rendering. + * + * @see DescriptionFactory to create a new Description. + * @see Description\Formatter for the formatting of the body and tags. + */ +class Description +{ + /** @var string */ + private $bodyTemplate; + + /** @var Tag[] */ + private $tags; + + /** + * Initializes a Description with its body (template) and a listing of the tags used in the body template. + * + * @param string $bodyTemplate + * @param Tag[] $tags + */ + public function __construct($bodyTemplate, array $tags = []) + { + Assert::string($bodyTemplate); + + $this->bodyTemplate = $bodyTemplate; + $this->tags = $tags; + } + + /** + * Renders this description as a string where the provided formatter will format the tags in the expected string + * format. + * + * @param Formatter|null $formatter + * + * @return string + */ + public function render(Formatter $formatter = null) + { + if ($formatter === null) { + $formatter = new PassthroughFormatter(); + } + + $tags = []; + foreach ($this->tags as $tag) { + $tags[] = '{' . $formatter->format($tag) . '}'; + } + return vsprintf($this->bodyTemplate, $tags); + } + + /** + * Returns a plain string representation of this description. + * + * @return string + */ + public function __toString() + { + return $this->render(); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php new file mode 100644 index 00000000..d59858b7 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php @@ -0,0 +1,191 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +use phpDocumentor\Reflection\Types\Context as TypeContext; + +/** + * Creates a new Description object given a body of text. + * + * Descriptions in phpDocumentor are somewhat complex entities as they can contain one or more tags inside their + * body that can be replaced with a readable output. The replacing is done by passing a Formatter object to the + * Description object's `render` method. + * + * In addition to the above does a Description support two types of escape sequences: + * + * 1. `{@}` to escape the `@` character to prevent it from being interpreted as part of a tag, i.e. `{{@}link}` + * 2. `{}` to escape the `}` character, this can be used if you want to use the `}` character in the description + * of an inline tag. + * + * If a body consists of multiple lines then this factory will also remove any superfluous whitespace at the beginning + * of each line while maintaining any indentation that is used. This will prevent formatting parsers from tripping + * over unexpected spaces as can be observed with tag descriptions. + */ +class DescriptionFactory +{ + /** @var TagFactory */ + private $tagFactory; + + /** + * Initializes this factory with the means to construct (inline) tags. + * + * @param TagFactory $tagFactory + */ + public function __construct(TagFactory $tagFactory) + { + $this->tagFactory = $tagFactory; + } + + /** + * Returns the parsed text of this description. + * + * @param string $contents + * @param TypeContext $context + * + * @return Description + */ + public function create($contents, TypeContext $context = null) + { + list($text, $tags) = $this->parse($this->lex($contents), $context); + + return new Description($text, $tags); + } + + /** + * Strips the contents from superfluous whitespace and splits the description into a series of tokens. + * + * @param string $contents + * + * @return string[] A series of tokens of which the description text is composed. + */ + private function lex($contents) + { + $contents = $this->removeSuperfluousStartingWhitespace($contents); + + // performance optimalization; if there is no inline tag, don't bother splitting it up. + if (strpos($contents, '{@') === false) { + return [$contents]; + } + + return preg_split( + '/\{ + # "{@}" is not a valid inline tag. This ensures that we do not treat it as one, but treat it literally. + (?!@\}) + # We want to capture the whole tag line, but without the inline tag delimiters. + (\@ + # Match everything up to the next delimiter. + [^{}]* + # Nested inline tag content should not be captured, or it will appear in the result separately. + (?: + # Match nested inline tags. + (?: + # Because we did not catch the tag delimiters earlier, we must be explicit with them here. + # Notice that this also matches "{}", as a way to later introduce it as an escape sequence. + \{(?1)?\} + | + # Make sure we match hanging "{". + \{ + ) + # Match content after the nested inline tag. + [^{}]* + )* # If there are more inline tags, match them as well. We use "*" since there may not be any + # nested inline tags. + ) + \}/Sux', + $contents, + null, + PREG_SPLIT_DELIM_CAPTURE + ); + } + + /** + * Parses the stream of tokens in to a new set of tokens containing Tags. + * + * @param string[] $tokens + * @param TypeContext $context + * + * @return string[]|Tag[] + */ + private function parse($tokens, TypeContext $context) + { + $count = count($tokens); + $tagCount = 0; + $tags = []; + + for ($i = 1; $i < $count; $i += 2) { + $tags[] = $this->tagFactory->create($tokens[$i], $context); + $tokens[$i] = '%' . ++$tagCount . '$s'; + } + + //In order to allow "literal" inline tags, the otherwise invalid + //sequence "{@}" is changed to "@", and "{}" is changed to "}". + //See unit tests for examples. + for ($i = 0; $i < $count; $i += 2) { + $tokens[$i] = str_replace(['{@}', '{}'], ['@', '}'], $tokens[$i]); + } + + return [implode('', $tokens), $tags]; + } + + /** + * Removes the superfluous from a multi-line description. + * + * When a description has more than one line then it can happen that the second and subsequent lines have an + * additional indentation. This is commonly in use with tags like this: + * + * {@}since 1.1.0 This is an example + * description where we have an + * indentation in the second and + * subsequent lines. + * + * If we do not normalize the indentation then we have superfluous whitespace on the second and subsequent + * lines and this may cause rendering issues when, for example, using a Markdown converter. + * + * @param string $contents + * + * @return string + */ + private function removeSuperfluousStartingWhitespace($contents) + { + $lines = explode("\n", $contents); + + // if there is only one line then we don't have lines with superfluous whitespace and + // can use the contents as-is + if (count($lines) <= 1) { + return $contents; + } + + // determine how many whitespace characters need to be stripped + $startingSpaceCount = 9999999; + for ($i = 1; $i < count($lines); $i++) { + // lines with a no length do not count as they are not indented at all + if (strlen(trim($lines[$i])) === 0) { + continue; + } + + // determine the number of prefixing spaces by checking the difference in line length before and after + // an ltrim + $startingSpaceCount = min($startingSpaceCount, strlen($lines[$i]) - strlen(ltrim($lines[$i]))); + } + + // strip the number of spaces from each line + if ($startingSpaceCount > 0) { + for ($i = 1; $i < count($lines); $i++) { + $lines[$i] = substr($lines[$i], $startingSpaceCount); + } + } + + return implode("\n", $lines); + } + +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php new file mode 100644 index 00000000..3cc5dab3 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php @@ -0,0 +1,170 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection; + +use phpDocumentor\Reflection\DocBlock\Tags\Example; + +/** + * Class used to find an example file's location based on a given ExampleDescriptor. + */ +class ExampleFinder +{ + /** @var string */ + private $sourceDirectory = ''; + + /** @var string[] */ + private $exampleDirectories = array(); + + /** + * Attempts to find the example contents for the given descriptor. + * + * @param Example $example + * + * @return string + */ + public function find(Example $example) + { + $filename = $example->getFilePath(); + + $file = $this->getExampleFileContents($filename); + if (!$file) { + return "** File not found : {$filename} **"; + } + + return implode('', array_slice($file, $example->getStartingLine() - 1, $example->getLineCount())); + } + + /** + * Registers the project's root directory where an 'examples' folder can be expected. + * + * @param string $directory + * + * @return void + */ + public function setSourceDirectory($directory = '') + { + $this->sourceDirectory = $directory; + } + + /** + * Returns the project's root directory where an 'examples' folder can be expected. + * + * @return string + */ + public function getSourceDirectory() + { + return $this->sourceDirectory; + } + + /** + * Registers a series of directories that may contain examples. + * + * @param string[] $directories + */ + public function setExampleDirectories(array $directories) + { + $this->exampleDirectories = $directories; + } + + /** + * Returns a series of directories that may contain examples. + * + * @return string[] + */ + public function getExampleDirectories() + { + return $this->exampleDirectories; + } + + /** + * Attempts to find the requested example file and returns its contents or null if no file was found. + * + * This method will try several methods in search of the given example file, the first one it encounters is + * returned: + * + * 1. Iterates through all examples folders for the given filename + * 2. Checks the source folder for the given filename + * 3. Checks the 'examples' folder in the current working directory for examples + * 4. Checks the path relative to the current working directory for the given filename + * + * @param string $filename + * + * @return string|null + */ + private function getExampleFileContents($filename) + { + $normalizedPath = null; + + foreach ($this->exampleDirectories as $directory) { + $exampleFileFromConfig = $this->constructExamplePath($directory, $filename); + if (is_readable($exampleFileFromConfig)) { + $normalizedPath = $exampleFileFromConfig; + break; + } + } + + if (!$normalizedPath) { + if (is_readable($this->getExamplePathFromSource($filename))) { + $normalizedPath = $this->getExamplePathFromSource($filename); + } elseif (is_readable($this->getExamplePathFromExampleDirectory($filename))) { + $normalizedPath = $this->getExamplePathFromExampleDirectory($filename); + } elseif (is_readable($filename)) { + $normalizedPath = $filename; + } + } + + return $normalizedPath && is_readable($normalizedPath) ? file($normalizedPath) : null; + } + + /** + * Get example filepath based on the example directory inside your project. + * + * @param string $file + * + * @return string + */ + private function getExamplePathFromExampleDirectory($file) + { + return getcwd() . DIRECTORY_SEPARATOR . 'examples' . DIRECTORY_SEPARATOR . $file; + } + + /** + * Returns a path to the example file in the given directory.. + * + * @param string $directory + * @param string $file + * + * @return string + */ + private function constructExamplePath($directory, $file) + { + return rtrim($directory, '\\/') . DIRECTORY_SEPARATOR . $file; + } + + /** + * Get example filepath based on sourcecode. + * + * @param string $file + * + * @return string + */ + private function getExamplePathFromSource($file) + { + return sprintf( + '%s%s%s', + trim($this->getSourceDirectory(), '\\/'), + DIRECTORY_SEPARATOR, + trim($file, '"') + ); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php new file mode 100644 index 00000000..7f1c89d3 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php @@ -0,0 +1,143 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +use phpDocumentor\Reflection\DocBlock; +use Webmozart\Assert\Assert; + +/** + * Converts a DocBlock back from an object to a complete DocComment including Asterisks. + */ +class Serializer +{ + /** @var string The string to indent the comment with. */ + protected $indentString = ' '; + + /** @var int The number of times the indent string is repeated. */ + protected $indent = 0; + + /** @var bool Whether to indent the first line with the given indent amount and string. */ + protected $isFirstLineIndented = true; + + /** @var int|null The max length of a line. */ + protected $lineLength = null; + + /** + * Create a Serializer instance. + * + * @param int $indent The number of times the indent string is repeated. + * @param string $indentString The string to indent the comment with. + * @param bool $indentFirstLine Whether to indent the first line. + * @param int|null $lineLength The max length of a line or NULL to disable line wrapping. + */ + public function __construct($indent = 0, $indentString = ' ', $indentFirstLine = true, $lineLength = null) + { + Assert::integer($indent); + Assert::string($indentString); + Assert::boolean($indentFirstLine); + Assert::nullOrInteger($lineLength); + + $this->indent = $indent; + $this->indentString = $indentString; + $this->isFirstLineIndented = $indentFirstLine; + $this->lineLength = $lineLength; + } + + /** + * Generate a DocBlock comment. + * + * @param DocBlock $docblock The DocBlock to serialize. + * + * @return string The serialized doc block. + */ + public function getDocComment(DocBlock $docblock) + { + $indent = str_repeat($this->indentString, $this->indent); + $firstIndent = $this->isFirstLineIndented ? $indent : ''; + // 3 === strlen(' * ') + $wrapLength = $this->lineLength ? $this->lineLength - strlen($indent) - 3 : null; + + $text = $this->removeTrailingSpaces( + $indent, + $this->addAsterisksForEachLine( + $indent, + $this->getSummaryAndDescriptionTextBlock($docblock, $wrapLength) + ) + ); + + $comment = "{$firstIndent}/**\n{$indent} * {$text}\n{$indent} *\n"; + $comment = $this->addTagBlock($docblock, $wrapLength, $indent, $comment); + $comment .= $indent . ' */'; + + return $comment; + } + + /** + * @param $indent + * @param $text + * @return mixed + */ + private function removeTrailingSpaces($indent, $text) + { + return str_replace("\n{$indent} * \n", "\n{$indent} *\n", $text); + } + + /** + * @param $indent + * @param $text + * @return mixed + */ + private function addAsterisksForEachLine($indent, $text) + { + return str_replace("\n", "\n{$indent} * ", $text); + } + + /** + * @param DocBlock $docblock + * @param $wrapLength + * @return string + */ + private function getSummaryAndDescriptionTextBlock(DocBlock $docblock, $wrapLength) + { + $text = $docblock->getSummary() . ((string)$docblock->getDescription() ? "\n\n" . $docblock->getDescription() + : ''); + if ($wrapLength !== null) { + $text = wordwrap($text, $wrapLength); + return $text; + } + return $text; + } + + /** + * @param DocBlock $docblock + * @param $wrapLength + * @param $indent + * @param $comment + * @return string + */ + private function addTagBlock(DocBlock $docblock, $wrapLength, $indent, $comment) + { + foreach ($docblock->getTags() as $tag) { + $formatter = new DocBlock\Tags\Formatter\PassthroughFormatter(); + $tagText = $formatter->format($tag); + if ($wrapLength !== null) { + $tagText = wordwrap($tagText, $wrapLength); + } + $tagText = str_replace("\n", "\n{$indent} * ", $tagText); + + $comment .= "{$indent} * {$tagText}\n"; + } + + return $comment; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php new file mode 100644 index 00000000..0a656466 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php @@ -0,0 +1,314 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +use phpDocumentor\Reflection\DocBlock\Tags\Factory\StaticMethod; +use phpDocumentor\Reflection\DocBlock\Tags\Generic; +use phpDocumentor\Reflection\FqsenResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Creates a Tag object given the contents of a tag. + * + * This Factory is capable of determining the appropriate class for a tag and instantiate it using its `create` + * factory method. The `create` factory method of a Tag can have a variable number of arguments; this way you can + * pass the dependencies that you need to construct a tag object. + * + * > Important: each parameter in addition to the body variable for the `create` method must default to null, otherwise + * > it violates the constraint with the interface; it is recommended to use the {@see Assert::notNull()} method to + * > verify that a dependency is actually passed. + * + * This Factory also features a Service Locator component that is used to pass the right dependencies to the + * `create` method of a tag; each dependency should be registered as a service or as a parameter. + * + * When you want to use a Tag of your own with custom handling you need to call the `registerTagHandler` method, pass + * the name of the tag and a Fully Qualified Class Name pointing to a class that implements the Tag interface. + */ +final class StandardTagFactory implements TagFactory +{ + /** PCRE regular expression matching a tag name. */ + const REGEX_TAGNAME = '[\w\-\_\\\\]+'; + + /** + * @var string[] An array with a tag as a key, and an FQCN to a class that handles it as an array value. + */ + private $tagHandlerMappings = [ + 'author' => '\phpDocumentor\Reflection\DocBlock\Tags\Author', + 'covers' => '\phpDocumentor\Reflection\DocBlock\Tags\Covers', + 'deprecated' => '\phpDocumentor\Reflection\DocBlock\Tags\Deprecated', + // 'example' => '\phpDocumentor\Reflection\DocBlock\Tags\Example', + 'link' => '\phpDocumentor\Reflection\DocBlock\Tags\Link', + 'method' => '\phpDocumentor\Reflection\DocBlock\Tags\Method', + 'param' => '\phpDocumentor\Reflection\DocBlock\Tags\Param', + 'property-read' => '\phpDocumentor\Reflection\DocBlock\Tags\PropertyRead', + 'property' => '\phpDocumentor\Reflection\DocBlock\Tags\Property', + 'property-write' => '\phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite', + 'return' => '\phpDocumentor\Reflection\DocBlock\Tags\Return_', + 'see' => '\phpDocumentor\Reflection\DocBlock\Tags\See', + 'since' => '\phpDocumentor\Reflection\DocBlock\Tags\Since', + 'source' => '\phpDocumentor\Reflection\DocBlock\Tags\Source', + 'throw' => '\phpDocumentor\Reflection\DocBlock\Tags\Throws', + 'throws' => '\phpDocumentor\Reflection\DocBlock\Tags\Throws', + 'uses' => '\phpDocumentor\Reflection\DocBlock\Tags\Uses', + 'var' => '\phpDocumentor\Reflection\DocBlock\Tags\Var_', + 'version' => '\phpDocumentor\Reflection\DocBlock\Tags\Version' + ]; + + /** + * @var \ReflectionParameter[][] a lazy-loading cache containing parameters for each tagHandler that has been used. + */ + private $tagHandlerParameterCache = []; + + /** + * @var FqsenResolver + */ + private $fqsenResolver; + + /** + * @var mixed[] an array representing a simple Service Locator where we can store parameters and + * services that can be inserted into the Factory Methods of Tag Handlers. + */ + private $serviceLocator = []; + + /** + * Initialize this tag factory with the means to resolve an FQSEN and optionally a list of tag handlers. + * + * If no tag handlers are provided than the default list in the {@see self::$tagHandlerMappings} property + * is used. + * + * @param FqsenResolver $fqsenResolver + * @param string[] $tagHandlers + * + * @see self::registerTagHandler() to add a new tag handler to the existing default list. + */ + public function __construct(FqsenResolver $fqsenResolver, array $tagHandlers = null) + { + $this->fqsenResolver = $fqsenResolver; + if ($tagHandlers !== null) { + $this->tagHandlerMappings = $tagHandlers; + } + + $this->addService($fqsenResolver, FqsenResolver::class); + } + + /** + * {@inheritDoc} + */ + public function create($tagLine, TypeContext $context = null) + { + if (! $context) { + $context = new TypeContext(''); + } + + list($tagName, $tagBody) = $this->extractTagParts($tagLine); + + return $this->createTag($tagBody, $tagName, $context); + } + + /** + * {@inheritDoc} + */ + public function addParameter($name, $value) + { + $this->serviceLocator[$name] = $value; + } + + /** + * {@inheritDoc} + */ + public function addService($service, $alias = null) + { + $this->serviceLocator[$alias ?: get_class($service)] = $service; + } + + /** + * {@inheritDoc} + */ + public function registerTagHandler($tagName, $handler) + { + Assert::stringNotEmpty($tagName); + Assert::stringNotEmpty($handler); + Assert::classExists($handler); + Assert::implementsInterface($handler, StaticMethod::class); + + if (strpos($tagName, '\\') && $tagName[0] !== '\\') { + throw new \InvalidArgumentException( + 'A namespaced tag must have a leading backslash as it must be fully qualified' + ); + } + + $this->tagHandlerMappings[$tagName] = $handler; + } + + /** + * Extracts all components for a tag. + * + * @param string $tagLine + * + * @return string[] + */ + private function extractTagParts($tagLine) + { + $matches = array(); + if (! preg_match('/^@(' . self::REGEX_TAGNAME . ')(?:\s*([^\s].*)|$)?/us', $tagLine, $matches)) { + throw new \InvalidArgumentException( + 'The tag "' . $tagLine . '" does not seem to be wellformed, please check it for errors' + ); + } + + if (count($matches) < 3) { + $matches[] = ''; + } + + return array_slice($matches, 1); + } + + /** + * Creates a new tag object with the given name and body or returns null if the tag name was recognized but the + * body was invalid. + * + * @param string $body + * @param string $name + * @param TypeContext $context + * + * @return Tag|null + */ + private function createTag($body, $name, TypeContext $context) + { + $handlerClassName = $this->findHandlerClassName($name, $context); + $arguments = $this->getArgumentsForParametersFromWiring( + $this->fetchParametersForHandlerFactoryMethod($handlerClassName), + $this->getServiceLocatorWithDynamicParameters($context, $name, $body) + ) + ; + + return call_user_func_array([$handlerClassName, 'create'], $arguments); + } + + /** + * Determines the Fully Qualified Class Name of the Factory or Tag (containing a Factory Method `create`). + * + * @param string $tagName + * @param TypeContext $context + * + * @return string + */ + private function findHandlerClassName($tagName, TypeContext $context) + { + $handlerClassName = Generic::class; + if (isset($this->tagHandlerMappings[$tagName])) { + $handlerClassName = $this->tagHandlerMappings[$tagName]; + } elseif ($this->isAnnotation($tagName)) { + // TODO: Annotation support is planned for a later stage and as such is disabled for now + // $tagName = (string)$this->fqsenResolver->resolve($tagName, $context); + // if (isset($this->annotationMappings[$tagName])) { + // $handlerClassName = $this->annotationMappings[$tagName]; + // } + } + + return $handlerClassName; + } + + /** + * Retrieves the arguments that need to be passed to the Factory Method with the given Parameters. + * + * @param \ReflectionParameter[] $parameters + * @param mixed[] $locator + * + * @return mixed[] A series of values that can be passed to the Factory Method of the tag whose parameters + * is provided with this method. + */ + private function getArgumentsForParametersFromWiring($parameters, $locator) + { + $arguments = []; + foreach ($parameters as $index => $parameter) { + $typeHint = $parameter->getClass() ? $parameter->getClass()->getName() : null; + if (isset($locator[$typeHint])) { + $arguments[] = $locator[$typeHint]; + continue; + } + + $parameterName = $parameter->getName(); + if (isset($locator[$parameterName])) { + $arguments[] = $locator[$parameterName]; + continue; + } + + $arguments[] = null; + } + + return $arguments; + } + + /** + * Retrieves a series of ReflectionParameter objects for the static 'create' method of the given + * tag handler class name. + * + * @param string $handlerClassName + * + * @return \ReflectionParameter[] + */ + private function fetchParametersForHandlerFactoryMethod($handlerClassName) + { + if (! isset($this->tagHandlerParameterCache[$handlerClassName])) { + $methodReflection = new \ReflectionMethod($handlerClassName, 'create'); + $this->tagHandlerParameterCache[$handlerClassName] = $methodReflection->getParameters(); + } + + return $this->tagHandlerParameterCache[$handlerClassName]; + } + + /** + * Returns a copy of this class' Service Locator with added dynamic parameters, such as the tag's name, body and + * Context. + * + * @param TypeContext $context The Context (namespace and aliasses) that may be passed and is used to resolve FQSENs. + * @param string $tagName The name of the tag that may be passed onto the factory method of the Tag class. + * @param string $tagBody The body of the tag that may be passed onto the factory method of the Tag class. + * + * @return mixed[] + */ + private function getServiceLocatorWithDynamicParameters(TypeContext $context, $tagName, $tagBody) + { + $locator = array_merge( + $this->serviceLocator, + [ + 'name' => $tagName, + 'body' => $tagBody, + TypeContext::class => $context + ] + ); + + return $locator; + } + + /** + * Returns whether the given tag belongs to an annotation. + * + * @param string $tagContent + * + * @todo this method should be populated once we implement Annotation notation support. + * + * @return bool + */ + private function isAnnotation($tagContent) + { + // 1. Contains a namespace separator + // 2. Contains parenthesis + // 3. Is present in a list of known annotations (make the algorithm smart by first checking is the last part + // of the annotation class name matches the found tag name + + return false; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php new file mode 100644 index 00000000..e7653678 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php @@ -0,0 +1,26 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +use phpDocumentor\Reflection\DocBlock\Tags\Formatter; + +interface Tag +{ + public function getName(); + + public static function create($body); + + public function render(Formatter $formatter = null); + + public function __toString(); +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php new file mode 100644 index 00000000..3c1d1132 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php @@ -0,0 +1,93 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock; + +use phpDocumentor\Reflection\Types\Context as TypeContext; + +interface TagFactory +{ + /** + * Adds a parameter to the service locator that can be injected in a tag's factory method. + * + * When calling a tag's "create" method we always check the signature for dependencies to inject. One way is to + * typehint a parameter in the signature so that we can use that interface or class name to inject a dependency + * (see {@see addService()} for more information on that). + * + * Another way is to check the name of the argument against the names in the Service Locator. With this method + * you can add a variable that will be inserted when a tag's create method is not typehinted and has a matching + * name. + * + * Be aware that there are two reserved names: + * + * - name, representing the name of the tag. + * - body, representing the complete body of the tag. + * + * These parameters are injected at the last moment and will override any existing parameter with those names. + * + * @param string $name + * @param mixed $value + * + * @return void + */ + public function addParameter($name, $value); + + /** + * Registers a service with the Service Locator using the FQCN of the class or the alias, if provided. + * + * When calling a tag's "create" method we always check the signature for dependencies to inject. If a parameter + * has a typehint then the ServiceLocator is queried to see if a Service is registered for that typehint. + * + * Because interfaces are regularly used as type-hints this method provides an alias parameter; if the FQCN of the + * interface is passed as alias then every time that interface is requested the provided service will be returned. + * + * @param object $service + * @param string $alias + * + * @return void + */ + public function addService($service); + + /** + * Factory method responsible for instantiating the correct sub type. + * + * @param string $tagLine The text for this tag, including description. + * @param TypeContext $context + * + * @throws \InvalidArgumentException if an invalid tag line was presented. + * + * @return Tag A new tag object. + */ + public function create($tagLine, TypeContext $context = null); + + /** + * Registers a handler for tags. + * + * If you want to use your own tags then you can use this method to instruct the TagFactory to register the name + * of a tag with the FQCN of a 'Tag Handler'. The Tag handler should implement the {@see Tag} interface (and thus + * the create method). + * + * @param string $tagName Name of tag to register a handler for. When registering a namespaced tag, the full + * name, along with a prefixing slash MUST be provided. + * @param string $handler FQCN of handler. + * + * @throws \InvalidArgumentException if the tag name is not a string + * @throws \InvalidArgumentException if the tag name is namespaced (contains backslashes) but does not start with + * a backslash + * @throws \InvalidArgumentException if the handler is not a string + * @throws \InvalidArgumentException if the handler is not an existing class + * @throws \InvalidArgumentException if the handler does not implement the {@see Tag} interface + * + * @return void + */ + public function registerTagHandler($tagName, $handler); +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php new file mode 100644 index 00000000..41a27886 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php @@ -0,0 +1,100 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use Webmozart\Assert\Assert; + +/** + * Reflection class for an {@}author tag in a Docblock. + */ +final class Author extends BaseTag implements Factory\StaticMethod +{ + /** @var string register that this is the author tag. */ + protected $name = 'author'; + + /** @var string The name of the author */ + private $authorName = ''; + + /** @var string The email of the author */ + private $authorEmail = ''; + + /** + * Initializes this tag with the author name and e-mail. + * + * @param string $authorName + * @param string $authorEmail + */ + public function __construct($authorName, $authorEmail) + { + Assert::string($authorName); + Assert::string($authorEmail); + if ($authorEmail && !filter_var($authorEmail, FILTER_VALIDATE_EMAIL)) { + throw new \InvalidArgumentException('The author tag does not have a valid e-mail address'); + } + + $this->authorName = $authorName; + $this->authorEmail = $authorEmail; + } + + /** + * Gets the author's name. + * + * @return string The author's name. + */ + public function getAuthorName() + { + return $this->authorName; + } + + /** + * Returns the author's email. + * + * @return string The author's email. + */ + public function getEmail() + { + return $this->authorEmail; + } + + /** + * Returns this tag in string form. + * + * @return string + */ + public function __toString() + { + return $this->authorName . '<' . $this->authorEmail . '>'; + } + + /** + * Attempts to create a new Author object based on †he tag body. + * + * @param string $body + * + * @return static + */ + public static function create($body) + { + Assert::string($body); + + $splitTagContent = preg_match('/^([^\<]*)(?:\<([^\>]*)\>)?$/u', $body, $matches); + if (!$splitTagContent) { + return null; + } + + $authorName = trim($matches[1]); + $email = isset($matches[2]) ? trim($matches[2]) : ''; + + return new static($authorName, $email); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php new file mode 100644 index 00000000..14bb7177 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php @@ -0,0 +1,52 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock; +use phpDocumentor\Reflection\DocBlock\Description; + +/** + * Parses a tag definition for a DocBlock. + */ +abstract class BaseTag implements DocBlock\Tag +{ + /** @var string Name of the tag */ + protected $name = ''; + + /** @var Description|null Description of the tag. */ + protected $description; + + /** + * Gets the name of this tag. + * + * @return string The name of this tag. + */ + public function getName() + { + return $this->name; + } + + public function getDescription() + { + return $this->description; + } + + public function render(Formatter $formatter = null) + { + if ($formatter === null) { + $formatter = new Formatter\PassthroughFormatter(); + } + + return $formatter->format($this); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php new file mode 100644 index 00000000..31b4f82c --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php @@ -0,0 +1,84 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Fqsen; +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use phpDocumentor\Reflection\FqsenResolver; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a @covers tag in a Docblock. + */ +final class Covers extends BaseTag implements Factory\StaticMethod +{ + protected $name = 'covers'; + + /** @var Fqsen */ + private $refers = null; + + /** + * Initializes this tag. + * + * @param Fqsen $refers + * @param Description $description + */ + public function __construct(Fqsen $refers, Description $description = null) + { + $this->refers = $refers; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + DescriptionFactory $descriptionFactory = null, + FqsenResolver $resolver = null, + TypeContext $context = null + ) + { + Assert::string($body); + Assert::notEmpty($body); + + $parts = preg_split('/\s+/Su', $body, 2); + + return new static( + $resolver->resolve($parts[0], $context), + $descriptionFactory->create(isset($parts[1]) ? $parts[1] : '', $context) + ); + } + + /** + * Returns the structural element this tag refers to. + * + * @return Fqsen + */ + public function getReference() + { + return $this->refers; + } + + /** + * Returns a string representation of this tag. + * + * @return string + */ + public function __toString() + { + return $this->refers . ($this->description ? ' ' . $this->description->render() : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php new file mode 100644 index 00000000..d3a0bd7b --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php @@ -0,0 +1,94 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\Types\Context as TypeContext; +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}deprecated tag in a Docblock. + */ +final class Deprecated extends BaseTag implements Factory\StaticMethod +{ + protected $name = 'deprecated'; + + /** + * PCRE regular expression matching a version vector. + * Assumes the "x" modifier. + */ + const REGEX_VECTOR = '(?: + # Normal release vectors. + \d\S* + | + # VCS version vectors. Per PHPCS, they are expected to + # follow the form of the VCS name, followed by ":", followed + # by the version vector itself. + # By convention, popular VCSes like CVS, SVN and GIT use "$" + # around the actual version vector. + [^\s\:]+\:\s*\$[^\$]+\$ + )'; + + /** @var string The version vector. */ + private $version = ''; + + public function __construct($version = null, Description $description = null) + { + Assert::nullOrStringNotEmpty($version); + + $this->version = $version; + $this->description = $description; + } + + /** + * @return static + */ + public static function create($body, DescriptionFactory $descriptionFactory = null, TypeContext $context = null) + { + Assert::nullOrString($body); + if (empty($body)) { + return new static(); + } + + $matches = []; + if (!preg_match('/^(' . self::REGEX_VECTOR . ')\s*(.+)?$/sux', $body, $matches)) { + return null; + } + + return new static( + $matches[1], + $descriptionFactory->create(isset($matches[2]) ? $matches[2] : '', $context) + ); + } + + /** + * Gets the version section of the tag. + * + * @return string + */ + public function getVersion() + { + return $this->version; + } + + /** + * Returns a string representation for this tag. + * + * @return string + */ + public function __toString() + { + return $this->version . ($this->description ? ' ' . $this->description->render() : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php new file mode 100644 index 00000000..571ef8df --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php @@ -0,0 +1,158 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Tag; + +/** + * Reflection class for a {@}example tag in a Docblock. + */ +final class Example extends BaseTag +{ + /** + * @var string Path to a file to use as an example. May also be an absolute URI. + */ + private $filePath = ''; + + /** + * @var bool Whether the file path component represents an URI. This determines how the file portion + * appears at {@link getContent()}. + */ + private $isURI = false; + + /** + * {@inheritdoc} + */ + public function getContent() + { + if (null === $this->description) { + $filePath = '"' . $this->filePath . '"'; + if ($this->isURI) { + $filePath = $this->isUriRelative($this->filePath) + ? str_replace('%2F', '/', rawurlencode($this->filePath)) + :$this->filePath; + } + + $this->description = $filePath . ' ' . parent::getContent(); + } + + return $this->description; + } + + /** + * {@inheritdoc} + */ + public static function create($body) + { + // File component: File path in quotes or File URI / Source information + if (! preg_match('/^(?:\"([^\"]+)\"|(\S+))(?:\s+(.*))?$/sux', $body, $matches)) { + return null; + } + + $filePath = null; + $fileUri = null; + if ('' !== $matches[1]) { + $filePath = $matches[1]; + } else { + $fileUri = $matches[2]; + } + + $startingLine = 1; + $lineCount = null; + $description = null; + + // Starting line / Number of lines / Description + if (preg_match('/^([1-9]\d*)\s*(?:((?1))\s+)?(.*)$/sux', $matches[3], $matches)) { + $startingLine = (int)$matches[1]; + if (isset($matches[2]) && $matches[2] !== '') { + $lineCount = (int)$matches[2]; + } + $description = $matches[3]; + } + + return new static($filePath, $fileUri, $startingLine, $lineCount, $description); + } + + /** + * Returns the file path. + * + * @return string Path to a file to use as an example. + * May also be an absolute URI. + */ + public function getFilePath() + { + return $this->filePath; + } + + /** + * Sets the file path. + * + * @param string $filePath The new file path to use for the example. + * + * @return $this + */ + public function setFilePath($filePath) + { + $this->isURI = false; + $this->filePath = trim($filePath); + + $this->description = null; + return $this; + } + + /** + * Sets the file path as an URI. + * + * This function is equivalent to {@link setFilePath()}, except that it + * converts an URI to a file path before that. + * + * There is no getFileURI(), as {@link getFilePath()} is compatible. + * + * @param string $uri The new file URI to use as an example. + * + * @return $this + */ + public function setFileURI($uri) + { + $this->isURI = true; + $this->description = null; + + $this->filePath = $this->isUriRelative($uri) + ? rawurldecode(str_replace(array('/', '\\'), '%2F', $uri)) + : $this->filePath = $uri; + + return $this; + } + + /** + * Returns a string representation for this tag. + * + * @return string + */ + public function __toString() + { + return $this->filePath . ($this->description ? ' ' . $this->description->render() : ''); + } + + /** + * Returns true if the provided URI is relative or contains a complete scheme (and thus is absolute). + * + * @param string $uri + * + * @return bool + */ + private function isUriRelative($uri) + { + return false === strpos($uri, ':'); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php new file mode 100644 index 00000000..98aea455 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php @@ -0,0 +1,18 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Factory; + +interface StaticMethod +{ + public static function create($body); +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Strategy.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Strategy.php new file mode 100644 index 00000000..b9ca0b8a --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Strategy.php @@ -0,0 +1,18 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Factory; + +interface Strategy +{ + public function create($body); +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php new file mode 100644 index 00000000..64b2c603 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php @@ -0,0 +1,27 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Tag; + +interface Formatter +{ + /** + * Formats a tag into a string representation according to a specific format, such as Markdown. + * + * @param Tag $tag + * + * @return string + */ + public function format(Tag $tag); +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php new file mode 100644 index 00000000..aa97572c --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Formatter; + +use phpDocumentor\Reflection\DocBlock\Tag; +use phpDocumentor\Reflection\DocBlock\Tags\Formatter; + +class PassthroughFormatter implements Formatter +{ + /** + * Formats the given tag to return a simple plain text version. + * + * @param Tag $tag + * + * @return string + */ + public function format(Tag $tag) + { + return '@' . $tag->getName() . ' ' . (string)$tag; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php new file mode 100644 index 00000000..e4c53e00 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php @@ -0,0 +1,91 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\DocBlock\StandardTagFactory; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Parses a tag definition for a DocBlock. + */ +class Generic extends BaseTag implements Factory\StaticMethod +{ + /** + * Parses a tag and populates the member variables. + * + * @param string $name Name of the tag. + * @param Description $description The contents of the given tag. + */ + public function __construct($name, Description $description = null) + { + $this->validateTagName($name); + + $this->name = $name; + $this->description = $description; + } + + /** + * Creates a new tag that represents any unknown tag type. + * + * @param string $body + * @param string $name + * @param DescriptionFactory $descriptionFactory + * @param TypeContext $context + * + * @return static + */ + public static function create( + $body, + $name = '', + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) { + Assert::string($body); + Assert::stringNotEmpty($name); + Assert::notNull($descriptionFactory); + + $description = $descriptionFactory && $body ? $descriptionFactory->create($body, $context) : null; + + return new static($name, $description); + } + + /** + * Returns the tag as a serialized string + * + * @return string + */ + public function __toString() + { + return ($this->description ? $this->description->render() : ''); + } + + /** + * Validates if the tag name matches the expected format, otherwise throws an exception. + * + * @param string $name + * + * @return void + */ + private function validateTagName($name) + { + if (! preg_match('/^' . StandardTagFactory::REGEX_TAGNAME . '$/u', $name)) { + throw new \InvalidArgumentException( + 'The tag name "' . $name . '" is not wellformed. Tags may only consist of letters, underscores, ' + . 'hyphens and backslashes.' + ); + } + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php new file mode 100644 index 00000000..9c0e367e --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php @@ -0,0 +1,77 @@ + + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a @link tag in a Docblock. + */ +final class Link extends BaseTag implements Factory\StaticMethod +{ + protected $name = 'link'; + + /** @var string */ + private $link = ''; + + /** + * Initializes a link to a URL. + * + * @param string $link + * @param Description $description + */ + public function __construct($link, Description $description = null) + { + Assert::string($link); + + $this->link = $link; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create($body, DescriptionFactory $descriptionFactory = null, TypeContext $context = null) + { + Assert::string($body); + Assert::notNull($descriptionFactory); + + $parts = preg_split('/\s+/Su', $body, 2); + $description = isset($parts[1]) ? $descriptionFactory->create($parts[1], $context) : null; + + return new static($parts[0], $description); + } + + /** + * Gets the link + * + * @return string + */ + public function getLink() + { + return $this->link; + } + + /** + * Returns a string representation for this tag. + * + * @return string + */ + public function __toString() + { + return $this->link . ($this->description ? ' ' . $this->description->render() : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php new file mode 100644 index 00000000..72dd1a0a --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php @@ -0,0 +1,220 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Type; +use phpDocumentor\Reflection\TypeResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use phpDocumentor\Reflection\Types\Void_; +use Webmozart\Assert\Assert; + +/** + * Reflection class for an {@}method in a Docblock. + */ +final class Method extends BaseTag implements Factory\StaticMethod +{ + protected $name = 'method'; + + /** @var string */ + private $methodName = ''; + + /** @var string[] */ + private $arguments = []; + + /** @var bool */ + private $isStatic = false; + + /** @var Type */ + private $returnType; + + public function __construct( + $methodName, + array $arguments = [], + Type $returnType = null, + $static = false, + Description $description = null + ) { + Assert::stringNotEmpty($methodName); + Assert::boolean($static); + + if ($returnType === null) { + $returnType = new Void_(); + } + + $this->methodName = $methodName; + $this->arguments = $this->filterArguments($arguments); + $this->returnType = $returnType; + $this->isStatic = $static; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + TypeResolver $typeResolver = null, + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) { + Assert::stringNotEmpty($body); + Assert::allNotNull([ $typeResolver, $descriptionFactory ]); + + // 1. none or more whitespace + // 2. optionally the keyword "static" followed by whitespace + // 3. optionally a word with underscores followed by whitespace : as + // type for the return value + // 4. then optionally a word with underscores followed by () and + // whitespace : as method name as used by phpDocumentor + // 5. then a word with underscores, followed by ( and any character + // until a ) and whitespace : as method name with signature + // 6. any remaining text : as description + if (!preg_match( + '/^ + # Static keyword + # Declares a static method ONLY if type is also present + (?: + (static) + \s+ + )? + # Return type + (?: + ( + (?:[\w\|_\\\\]+) + # array notation + (?:\[\])* + )? + \s+ + )? + # Legacy method name (not captured) + (?: + [\w_]+\(\)\s+ + )? + # Method name + ([\w\|_\\\\]+) + # Arguments + (?: + \(([^\)]*)\) + )? + \s* + # Description + (.*) + $/sux', + $body, + $matches + )) { + return null; + } + + list(, $static, $returnType, $methodName, $arguments, $description) = $matches; + + $static = $static === 'static'; + $returnType = $typeResolver->resolve($returnType, $context); + $description = $descriptionFactory->create($description, $context); + + if ('' !== $arguments) { + $arguments = explode(',', $arguments); + foreach($arguments as &$argument) { + $argument = explode(' ', trim($argument)); + if ($argument[0][0] === '$') { + $argumentName = substr($argument[0], 1); + $argumentType = new Void_(); + } else { + $argumentType = $typeResolver->resolve($argument[0], $context); + $argumentName = ''; + if (isset($argument[1])) { + $argumentName = substr($argument[1], 1); + } + } + + $argument = [ 'name' => $argumentName, 'type' => $argumentType]; + } + } else { + $arguments = []; + } + + return new static($methodName, $arguments, $returnType, $static, $description); + } + + /** + * Retrieves the method name. + * + * @return string + */ + public function getMethodName() + { + return $this->methodName; + } + + /** + * @return string[] + */ + public function getArguments() + { + return $this->arguments; + } + + /** + * Checks whether the method tag describes a static method or not. + * + * @return bool TRUE if the method declaration is for a static method, FALSE otherwise. + */ + public function isStatic() + { + return $this->isStatic; + } + + /** + * @return Type + */ + public function getReturnType() + { + return $this->returnType; + } + + public function __toString() + { + $arguments = []; + foreach ($this->arguments as $argument) { + $arguments[] = $argument['type'] . ' $' . $argument['name']; + } + + return ($this->isStatic() ? 'static ' : '') + . (string)$this->returnType . ' ' + . $this->methodName + . '(' . implode(', ', $arguments) . ')' + . ($this->description ? ' ' . $this->description->render() : ''); + } + + private function filterArguments($arguments) + { + foreach ($arguments as &$argument) { + if (is_string($argument)) { + $argument = [ 'name' => $argument ]; + } + if (! isset($argument['type'])) { + $argument['type'] = new Void_(); + } + $keys = array_keys($argument); + if ($keys !== [ 'name', 'type' ]) { + throw new \InvalidArgumentException( + 'Arguments can only have the "name" and "type" fields, found: ' . var_export($keys, true) + ); + } + } + + return $arguments; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php new file mode 100644 index 00000000..1a51dc0d --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php @@ -0,0 +1,141 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Type; +use phpDocumentor\Reflection\TypeResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Reflection class for the {@}param tag in a Docblock. + */ +final class Param extends BaseTag implements Factory\StaticMethod +{ + /** @var string */ + protected $name = 'param'; + + /** @var Type */ + private $type; + + /** @var string */ + private $variableName = ''; + + /** @var bool determines whether this is a variadic argument */ + private $isVariadic = false; + + /** + * @param string $variableName + * @param Type $type + * @param bool $isVariadic + * @param Description $description + */ + public function __construct($variableName, Type $type = null, $isVariadic = false, Description $description = null) + { + Assert::string($variableName); + Assert::boolean($isVariadic); + + $this->variableName = $variableName; + $this->type = $type; + $this->isVariadic = $isVariadic; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + TypeResolver $typeResolver = null, + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) { + Assert::stringNotEmpty($body); + Assert::allNotNull([$typeResolver, $descriptionFactory]); + + $parts = preg_split('/(\s+)/Su', $body, 3, PREG_SPLIT_DELIM_CAPTURE); + $type = null; + $variableName = ''; + $isVariadic = false; + + // if the first item that is encountered is not a variable; it is a type + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] !== '$')) { + $type = $typeResolver->resolve(array_shift($parts), $context); + array_shift($parts); + } + + // if the next item starts with a $ or ...$ it must be the variable name + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$' || substr($parts[0], 0, 4) === '...$')) { + $variableName = array_shift($parts); + array_shift($parts); + + if (substr($variableName, 0, 3) === '...') { + $isVariadic = true; + $variableName = substr($variableName, 3); + } + + if (substr($variableName, 0, 1) === '$') { + $variableName = substr($variableName, 1); + } + } + + $description = $descriptionFactory->create(implode('', $parts), $context); + + return new static($variableName, $type, $isVariadic, $description); + } + + /** + * Returns the variable's name. + * + * @return string + */ + public function getVariableName() + { + return $this->variableName; + } + + /** + * Returns the variable's type or null if unknown. + * + * @return Type|null + */ + public function getType() + { + return $this->type; + } + + /** + * Returns whether this tag is variadic. + * + * @return boolean + */ + public function isVariadic() + { + return $this->isVariadic; + } + + /** + * Returns a string representation for this tag. + * + * @return string + */ + public function __toString() + { + return ($this->type ? $this->type . ' ' : '') + . ($this->isVariadic() ? '...' : '') + . '$' . $this->variableName + . ($this->description ? ' ' . $this->description : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php new file mode 100644 index 00000000..3c597133 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php @@ -0,0 +1,118 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Type; +use phpDocumentor\Reflection\TypeResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}property tag in a Docblock. + */ +class Property extends BaseTag implements Factory\StaticMethod +{ + /** @var string */ + protected $name = 'property'; + + /** @var Type */ + private $type; + + /** @var string */ + protected $variableName = ''; + + /** + * @param string $variableName + * @param Type $type + * @param Description $description + */ + public function __construct($variableName, Type $type = null, Description $description = null) + { + Assert::string($variableName); + + $this->variableName = $variableName; + $this->type = $type; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + TypeResolver $typeResolver = null, + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) { + Assert::stringNotEmpty($body); + Assert::allNotNull([$typeResolver, $descriptionFactory]); + + $parts = preg_split('/(\s+)/Su', $body, 3, PREG_SPLIT_DELIM_CAPTURE); + $type = null; + $variableName = ''; + + // if the first item that is encountered is not a variable; it is a type + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] !== '$')) { + $type = $typeResolver->resolve(array_shift($parts), $context); + array_shift($parts); + } + + // if the next item starts with a $ or ...$ it must be the variable name + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + $variableName = array_shift($parts); + array_shift($parts); + + if (substr($variableName, 0, 1) === '$') { + $variableName = substr($variableName, 1); + } + } + + $description = $descriptionFactory->create(implode('', $parts), $context); + + return new static($variableName, $type, $description); + } + + /** + * Returns the variable's name. + * + * @return string + */ + public function getVariableName() + { + return $this->variableName; + } + + /** + * Returns the variable's type or null if unknown. + * + * @return Type|null + */ + public function getType() + { + return $this->type; + } + + /** + * Returns a string representation for this tag. + * + * @return string + */ + public function __toString() + { + return ($this->type ? $this->type . ' ' : '') + . '$' . $this->variableName + . ($this->description ? ' ' . $this->description : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php new file mode 100644 index 00000000..bf2b8056 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php @@ -0,0 +1,118 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Type; +use phpDocumentor\Reflection\TypeResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}property-read tag in a Docblock. + */ +class PropertyRead extends BaseTag implements Factory\StaticMethod +{ + /** @var string */ + protected $name = 'property-read'; + + /** @var Type */ + private $type; + + /** @var string */ + protected $variableName = ''; + + /** + * @param string $variableName + * @param Type $type + * @param Description $description + */ + public function __construct($variableName, Type $type = null, Description $description = null) + { + Assert::string($variableName); + + $this->variableName = $variableName; + $this->type = $type; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + TypeResolver $typeResolver = null, + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) { + Assert::stringNotEmpty($body); + Assert::allNotNull([$typeResolver, $descriptionFactory]); + + $parts = preg_split('/(\s+)/Su', $body, 3, PREG_SPLIT_DELIM_CAPTURE); + $type = null; + $variableName = ''; + + // if the first item that is encountered is not a variable; it is a type + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] !== '$')) { + $type = $typeResolver->resolve(array_shift($parts), $context); + array_shift($parts); + } + + // if the next item starts with a $ or ...$ it must be the variable name + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + $variableName = array_shift($parts); + array_shift($parts); + + if (substr($variableName, 0, 1) === '$') { + $variableName = substr($variableName, 1); + } + } + + $description = $descriptionFactory->create(implode('', $parts), $context); + + return new static($variableName, $type, $description); + } + + /** + * Returns the variable's name. + * + * @return string + */ + public function getVariableName() + { + return $this->variableName; + } + + /** + * Returns the variable's type or null if unknown. + * + * @return Type|null + */ + public function getType() + { + return $this->type; + } + + /** + * Returns a string representation for this tag. + * + * @return string + */ + public function __toString() + { + return ($this->type ? $this->type . ' ' : '') + . '$' . $this->variableName + . ($this->description ? ' ' . $this->description : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php new file mode 100644 index 00000000..db37e0fb --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php @@ -0,0 +1,118 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Type; +use phpDocumentor\Reflection\TypeResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}property-write tag in a Docblock. + */ +class PropertyWrite extends BaseTag implements Factory\StaticMethod +{ + /** @var string */ + protected $name = 'property-write'; + + /** @var Type */ + private $type; + + /** @var string */ + protected $variableName = ''; + + /** + * @param string $variableName + * @param Type $type + * @param Description $description + */ + public function __construct($variableName, Type $type = null, Description $description = null) + { + Assert::string($variableName); + + $this->variableName = $variableName; + $this->type = $type; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + TypeResolver $typeResolver = null, + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) { + Assert::stringNotEmpty($body); + Assert::allNotNull([$typeResolver, $descriptionFactory]); + + $parts = preg_split('/(\s+)/Su', $body, 3, PREG_SPLIT_DELIM_CAPTURE); + $type = null; + $variableName = ''; + + // if the first item that is encountered is not a variable; it is a type + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] !== '$')) { + $type = $typeResolver->resolve(array_shift($parts), $context); + array_shift($parts); + } + + // if the next item starts with a $ or ...$ it must be the variable name + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + $variableName = array_shift($parts); + array_shift($parts); + + if (substr($variableName, 0, 1) === '$') { + $variableName = substr($variableName, 1); + } + } + + $description = $descriptionFactory->create(implode('', $parts), $context); + + return new static($variableName, $type, $description); + } + + /** + * Returns the variable's name. + * + * @return string + */ + public function getVariableName() + { + return $this->variableName; + } + + /** + * Returns the variable's type or null if unknown. + * + * @return Type|null + */ + public function getType() + { + return $this->type; + } + + /** + * Returns a string representation for this tag. + * + * @return string + */ + public function __toString() + { + return ($this->type ? $this->type . ' ' : '') + . '$' . $this->variableName + . ($this->description ? ' ' . $this->description : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php new file mode 100644 index 00000000..09a5870e --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php @@ -0,0 +1,73 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Type; +use phpDocumentor\Reflection\TypeResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}return tag in a Docblock. + */ +final class Return_ extends BaseTag implements Factory\StaticMethod +{ + protected $name = 'return'; + + /** @var Type */ + private $type; + + public function __construct(Type $type, Description $description = null) + { + $this->type = $type; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + TypeResolver $typeResolver = null, + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) + { + Assert::string($body); + Assert::allNotNull([$typeResolver, $descriptionFactory]); + + $parts = preg_split('/\s+/Su', $body, 2); + + $type = $typeResolver->resolve(isset($parts[0]) ? $parts[0] : '', $context); + $description = $descriptionFactory->create(isset($parts[1]) ? $parts[1] : '', $context); + + return new static($type, $description); + } + + /** + * Returns the type section of the variable. + * + * @return Type + */ + public function getType() + { + return $this->type; + } + + public function __toString() + { + return $this->type . ' ' . $this->description; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php new file mode 100644 index 00000000..64ee3d8e --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php @@ -0,0 +1,81 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Fqsen; +use phpDocumentor\Reflection\FqsenResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use phpDocumentor\Reflection\DocBlock\Description; +use Webmozart\Assert\Assert; + +/** + * Reflection class for an {@}see tag in a Docblock. + */ +class See extends BaseTag implements Factory\StaticMethod +{ + protected $name = 'see'; + + /** @var Fqsen */ + protected $refers = null; + + /** + * Initializes this tag. + * + * @param Fqsen $refers + * @param Description $description + */ + public function __construct(Fqsen $refers, Description $description = null) + { + $this->refers = $refers; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + FqsenResolver $resolver = null, + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) { + Assert::string($body); + Assert::allNotNull([$resolver, $descriptionFactory]); + + $parts = preg_split('/\s+/Su', $body, 2); + $description = isset($parts[1]) ? $descriptionFactory->create($parts[1], $context) : null; + + return new static($resolver->resolve($parts[0], $context), $description); + } + + /** + * Returns the structural element this tag refers to. + * + * @return Fqsen + */ + public function getReference() + { + return $this->refers; + } + + /** + * Returns a string representation of this tag. + * + * @return string + */ + public function __toString() + { + return $this->refers . ($this->description ? ' ' . $this->description->render() : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php new file mode 100644 index 00000000..3d002ed3 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php @@ -0,0 +1,94 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\Types\Context as TypeContext; +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}since tag in a Docblock. + */ +final class Since extends BaseTag implements Factory\StaticMethod +{ + protected $name = 'since'; + + /** + * PCRE regular expression matching a version vector. + * Assumes the "x" modifier. + */ + const REGEX_VECTOR = '(?: + # Normal release vectors. + \d\S* + | + # VCS version vectors. Per PHPCS, they are expected to + # follow the form of the VCS name, followed by ":", followed + # by the version vector itself. + # By convention, popular VCSes like CVS, SVN and GIT use "$" + # around the actual version vector. + [^\s\:]+\:\s*\$[^\$]+\$ + )'; + + /** @var string The version vector. */ + private $version = ''; + + public function __construct($version = null, Description $description = null) + { + Assert::nullOrStringNotEmpty($version); + + $this->version = $version; + $this->description = $description; + } + + /** + * @return static + */ + public static function create($body, DescriptionFactory $descriptionFactory = null, TypeContext $context = null) + { + Assert::nullOrString($body); + if (empty($body)) { + return new static(); + } + + $matches = []; + if (! preg_match('/^(' . self::REGEX_VECTOR . ')\s*(.+)?$/sux', $body, $matches)) { + return null; + } + + return new static( + $matches[1], + $descriptionFactory->create(isset($matches[2]) ? $matches[2] : '', $context) + ); + } + + /** + * Gets the version section of the tag. + * + * @return string + */ + public function getVersion() + { + return $this->version; + } + + /** + * Returns a string representation for this tag. + * + * @return string + */ + public function __toString() + { + return $this->version . ($this->description ? ' ' . $this->description->render() : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php new file mode 100644 index 00000000..b0646b96 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php @@ -0,0 +1,96 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}source tag in a Docblock. + */ +final class Source extends BaseTag implements Factory\StaticMethod +{ + /** @var string */ + protected $name = 'source'; + + /** @var int The starting line, relative to the structural element's location. */ + private $startingLine = 1; + + /** @var int|null The number of lines, relative to the starting line. NULL means "to the end". */ + private $lineCount = null; + + public function __construct($startingLine, $lineCount = null, Description $description = null) + { + Assert::integerish($startingLine); + Assert::nullOrIntegerish($lineCount); + + $this->startingLine = (int)$startingLine; + $this->lineCount = $lineCount !== null ? (int)$lineCount : null; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create($body, DescriptionFactory $descriptionFactory = null, TypeContext $context = null) + { + Assert::stringNotEmpty($body); + Assert::notNull($descriptionFactory); + + $startingLine = 1; + $lineCount = null; + $description = null; + + // Starting line / Number of lines / Description + if (preg_match('/^([1-9]\d*)\s*(?:((?1))\s+)?(.*)$/sux', $body, $matches)) { + $startingLine = (int)$matches[1]; + if (isset($matches[2]) && $matches[2] !== '') { + $lineCount = (int)$matches[2]; + } + $description = $matches[3]; + } + + return new static($startingLine, $lineCount, $descriptionFactory->create($description, $context)); + } + + /** + * Gets the starting line. + * + * @return int The starting line, relative to the structural element's + * location. + */ + public function getStartingLine() + { + return $this->startingLine; + } + + /** + * Returns the number of lines. + * + * @return int|null The number of lines, relative to the starting line. NULL + * means "to the end". + */ + public function getLineCount() + { + return $this->lineCount; + } + + public function __toString() + { + return $this->startingLine + . ($this->lineCount !== null ? ' ' . $this->lineCount : '') + . ($this->description ? ' ' . $this->description->render() : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php new file mode 100644 index 00000000..349e773b --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php @@ -0,0 +1,72 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Type; +use phpDocumentor\Reflection\TypeResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}throws tag in a Docblock. + */ +final class Throws extends BaseTag implements Factory\StaticMethod +{ + protected $name = 'throws'; + + /** @var Type */ + private $type; + + public function __construct(Type $type, Description $description = null) + { + $this->type = $type; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + TypeResolver $typeResolver = null, + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) { + Assert::string($body); + Assert::allNotNull([$typeResolver, $descriptionFactory]); + + $parts = preg_split('/\s+/Su', $body, 2); + + $type = $typeResolver->resolve(isset($parts[0]) ? $parts[0] : '', $context); + $description = $descriptionFactory->create(isset($parts[1]) ? $parts[1] : '', $context); + + return new static($type, $description); + } + + /** + * Returns the type section of the variable. + * + * @return Type + */ + public function getType() + { + return $this->type; + } + + public function __toString() + { + return $this->type . ' ' . $this->description; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php new file mode 100644 index 00000000..00dc3e3b --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php @@ -0,0 +1,83 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Fqsen; +use phpDocumentor\Reflection\FqsenResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}uses tag in a Docblock. + */ +final class Uses extends BaseTag implements Factory\StaticMethod +{ + protected $name = 'uses'; + + /** @var Fqsen */ + protected $refers = null; + + /** + * Initializes this tag. + * + * @param Fqsen $refers + * @param Description $description + */ + public function __construct(Fqsen $refers, Description $description = null) + { + $this->refers = $refers; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + FqsenResolver $resolver = null, + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) { + Assert::string($body); + Assert::allNotNull([$resolver, $descriptionFactory]); + + $parts = preg_split('/\s+/Su', $body, 2); + + return new static( + $resolver->resolve($parts[0], $context), + $descriptionFactory->create(isset($parts[1]) ? $parts[1] : '', $context) + ); + } + + /** + * Returns the structural element this tag refers to. + * + * @return Fqsen + */ + public function getReference() + { + return $this->refers; + } + + /** + * Returns a string representation of this tag. + * + * @return string + */ + public function __toString() + { + return $this->refers . ' ' . $this->description->render(); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php new file mode 100644 index 00000000..e23c694b --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php @@ -0,0 +1,118 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Type; +use phpDocumentor\Reflection\TypeResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}var tag in a Docblock. + */ +class Var_ extends BaseTag implements Factory\StaticMethod +{ + /** @var string */ + protected $name = 'var'; + + /** @var Type */ + private $type; + + /** @var string */ + protected $variableName = ''; + + /** + * @param string $variableName + * @param Type $type + * @param Description $description + */ + public function __construct($variableName, Type $type = null, Description $description = null) + { + Assert::string($variableName); + + $this->variableName = $variableName; + $this->type = $type; + $this->description = $description; + } + + /** + * {@inheritdoc} + */ + public static function create( + $body, + TypeResolver $typeResolver = null, + DescriptionFactory $descriptionFactory = null, + TypeContext $context = null + ) { + Assert::stringNotEmpty($body); + Assert::allNotNull([$typeResolver, $descriptionFactory]); + + $parts = preg_split('/(\s+)/Su', $body, 3, PREG_SPLIT_DELIM_CAPTURE); + $type = null; + $variableName = ''; + + // if the first item that is encountered is not a variable; it is a type + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] !== '$')) { + $type = $typeResolver->resolve(array_shift($parts), $context); + array_shift($parts); + } + + // if the next item starts with a $ or ...$ it must be the variable name + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + $variableName = array_shift($parts); + array_shift($parts); + + if (substr($variableName, 0, 1) === '$') { + $variableName = substr($variableName, 1); + } + } + + $description = $descriptionFactory->create(implode('', $parts), $context); + + return new static($variableName, $type, $description); + } + + /** + * Returns the variable's name. + * + * @return string + */ + public function getVariableName() + { + return $this->variableName; + } + + /** + * Returns the variable's type or null if unknown. + * + * @return Type|null + */ + public function getType() + { + return $this->type; + } + + /** + * Returns a string representation for this tag. + * + * @return string + */ + public function __toString() + { + return ($this->type ? $this->type . ' ' : '') + . '$' . $this->variableName + . ($this->description ? ' ' . $this->description : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php new file mode 100644 index 00000000..3e0e5bef --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php @@ -0,0 +1,94 @@ + + * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags; + +use phpDocumentor\Reflection\Types\Context as TypeContext; +use phpDocumentor\Reflection\DocBlock\Description; +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use Webmozart\Assert\Assert; + +/** + * Reflection class for a {@}version tag in a Docblock. + */ +final class Version extends BaseTag implements Factory\StaticMethod +{ + protected $name = 'version'; + + /** + * PCRE regular expression matching a version vector. + * Assumes the "x" modifier. + */ + const REGEX_VECTOR = '(?: + # Normal release vectors. + \d\S* + | + # VCS version vectors. Per PHPCS, they are expected to + # follow the form of the VCS name, followed by ":", followed + # by the version vector itself. + # By convention, popular VCSes like CVS, SVN and GIT use "$" + # around the actual version vector. + [^\s\:]+\:\s*\$[^\$]+\$ + )'; + + /** @var string The version vector. */ + private $version = ''; + + public function __construct($version = null, Description $description = null) + { + Assert::nullOrStringNotEmpty($version); + + $this->version = $version; + $this->description = $description; + } + + /** + * @return static + */ + public static function create($body, DescriptionFactory $descriptionFactory = null, TypeContext $context = null) + { + Assert::nullOrString($body); + if (empty($body)) { + return new static(); + } + + $matches = []; + if (!preg_match('/^(' . self::REGEX_VECTOR . ')\s*(.+)?$/sux', $body, $matches)) { + return null; + } + + return new static( + $matches[1], + $descriptionFactory->create(isset($matches[2]) ? $matches[2] : '', $context) + ); + } + + /** + * Gets the version section of the tag. + * + * @return string + */ + public function getVersion() + { + return $this->version; + } + + /** + * Returns a string representation for this tag. + * + * @return string + */ + public function __toString() + { + return $this->version . ($this->description ? ' ' . $this->description->render() : ''); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php new file mode 100644 index 00000000..9ec2455d --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php @@ -0,0 +1,277 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection; + +use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\DocBlock\StandardTagFactory; +use phpDocumentor\Reflection\DocBlock\Tag; +use phpDocumentor\Reflection\DocBlock\TagFactory; +use Webmozart\Assert\Assert; + +final class DocBlockFactory implements DocBlockFactoryInterface +{ + /** @var DocBlock\DescriptionFactory */ + private $descriptionFactory; + + /** @var DocBlock\TagFactory */ + private $tagFactory; + + /** + * Initializes this factory with the required subcontractors. + * + * @param DescriptionFactory $descriptionFactory + * @param TagFactory $tagFactory + */ + public function __construct(DescriptionFactory $descriptionFactory, TagFactory $tagFactory) + { + $this->descriptionFactory = $descriptionFactory; + $this->tagFactory = $tagFactory; + } + + /** + * Factory method for easy instantiation. + * + * @param string[] $additionalTags + * + * @return DocBlockFactory + */ + public static function createInstance(array $additionalTags = []) + { + $fqsenResolver = new FqsenResolver(); + $tagFactory = new StandardTagFactory($fqsenResolver); + $descriptionFactory = new DescriptionFactory($tagFactory); + + $tagFactory->addService($descriptionFactory); + $tagFactory->addService(new TypeResolver($fqsenResolver)); + + $docBlockFactory = new self($descriptionFactory, $tagFactory); + foreach ($additionalTags as $tagName => $tagHandler) { + $docBlockFactory->registerTagHandler($tagName, $tagHandler); + } + + return $docBlockFactory; + } + + /** + * @param object|string $docblock A string containing the DocBlock to parse or an object supporting the + * getDocComment method (such as a ReflectionClass object). + * @param Types\Context $context + * @param Location $location + * + * @return DocBlock + */ + public function create($docblock, Types\Context $context = null, Location $location = null) + { + if (is_object($docblock)) { + if (!method_exists($docblock, 'getDocComment')) { + $exceptionMessage = 'Invalid object passed; the given object must support the getDocComment method'; + throw new \InvalidArgumentException($exceptionMessage); + } + + $docblock = $docblock->getDocComment(); + } + + Assert::stringNotEmpty($docblock); + + if ($context === null) { + $context = new Types\Context(''); + } + + $parts = $this->splitDocBlock($this->stripDocComment($docblock)); + list($templateMarker, $summary, $description, $tags) = $parts; + + return new DocBlock( + $summary, + $description ? $this->descriptionFactory->create($description, $context) : null, + array_filter($this->parseTagBlock($tags, $context), function($tag) { + return $tag instanceof Tag; + }), + $context, + $location, + $templateMarker === '#@+', + $templateMarker === '#@-' + ); + } + + public function registerTagHandler($tagName, $handler) + { + $this->tagFactory->registerTagHandler($tagName, $handler); + } + + /** + * Strips the asterisks from the DocBlock comment. + * + * @param string $comment String containing the comment text. + * + * @return string + */ + private function stripDocComment($comment) + { + $comment = trim(preg_replace('#[ \t]*(?:\/\*\*|\*\/|\*)?[ \t]{0,1}(.*)?#u', '$1', $comment)); + + // reg ex above is not able to remove */ from a single line docblock + if (substr($comment, -2) == '*/') { + $comment = trim(substr($comment, 0, -2)); + } + + return str_replace(array("\r\n", "\r"), "\n", $comment); + } + + /** + * Splits the DocBlock into a template marker, summary, description and block of tags. + * + * @param string $comment Comment to split into the sub-parts. + * + * @author Richard van Velzen (@_richardJ) Special thanks to Richard for the regex responsible for the split. + * @author Mike van Riel for extending the regex with template marker support. + * + * @return string[] containing the template marker (if any), summary, description and a string containing the tags. + */ + private function splitDocBlock($comment) + { + // Performance improvement cheat: if the first character is an @ then only tags are in this DocBlock. This + // method does not split tags so we return this verbatim as the fourth result (tags). This saves us the + // performance impact of running a regular expression + if (strpos($comment, '@') === 0) { + return array('', '', '', $comment); + } + + // clears all extra horizontal whitespace from the line endings to prevent parsing issues + $comment = preg_replace('/\h*$/Sum', '', $comment); + + /* + * Splits the docblock into a template marker, summary, description and tags section. + * + * - The template marker is empty, #@+ or #@- if the DocBlock starts with either of those (a newline may + * occur after it and will be stripped). + * - The short description is started from the first character until a dot is encountered followed by a + * newline OR two consecutive newlines (horizontal whitespace is taken into account to consider spacing + * errors). This is optional. + * - The long description, any character until a new line is encountered followed by an @ and word + * characters (a tag). This is optional. + * - Tags; the remaining characters + * + * Big thanks to RichardJ for contributing this Regular Expression + */ + preg_match( + '/ + \A + # 1. Extract the template marker + (?:(\#\@\+|\#\@\-)\n?)? + + # 2. Extract the summary + (?: + (?! @\pL ) # The summary may not start with an @ + ( + [^\n.]+ + (?: + (?! \. \n | \n{2} ) # End summary upon a dot followed by newline or two newlines + [\n.] (?! [ \t]* @\pL ) # End summary when an @ is found as first character on a new line + [^\n.]+ # Include anything else + )* + \.? + )? + ) + + # 3. Extract the description + (?: + \s* # Some form of whitespace _must_ precede a description because a summary must be there + (?! @\pL ) # The description may not start with an @ + ( + [^\n]+ + (?: \n+ + (?! [ \t]* @\pL ) # End description when an @ is found as first character on a new line + [^\n]+ # Include anything else + )* + ) + )? + + # 4. Extract the tags (anything that follows) + (\s+ [\s\S]*)? # everything that follows + /ux', + $comment, + $matches + ); + array_shift($matches); + + while (count($matches) < 4) { + $matches[] = ''; + } + + return $matches; + } + + /** + * Creates the tag objects. + * + * @param string $tags Tag block to parse. + * @param Types\Context $context Context of the parsed Tag + * + * @return DocBlock\Tag[] + */ + private function parseTagBlock($tags, Types\Context $context) + { + $tags = $this->filterTagBlock($tags); + if (!$tags) { + return []; + } + + $result = $this->splitTagBlockIntoTagLines($tags); + foreach ($result as $key => $tagLine) { + $result[$key] = $this->tagFactory->create(trim($tagLine), $context); + } + + return $result; + } + + /** + * @param string $tags + * + * @return string[] + */ + private function splitTagBlockIntoTagLines($tags) + { + $result = array(); + foreach (explode("\n", $tags) as $tag_line) { + if (isset($tag_line[0]) && ($tag_line[0] === '@')) { + $result[] = $tag_line; + } else { + $result[count($result) - 1] .= "\n" . $tag_line; + } + } + + return $result; + } + + /** + * @param $tags + * @return string + */ + private function filterTagBlock($tags) + { + $tags = trim($tags); + if (!$tags) { + return null; + } + + if ('@' !== $tags[0]) { + // @codeCoverageIgnoreStart + // Can't simulate this; this only happens if there is an error with the parsing of the DocBlock that + // we didn't foresee. + throw new \LogicException('A tag block started with text instead of an at-sign(@): ' . $tags); + // @codeCoverageIgnoreEnd + } + + return $tags; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php new file mode 100644 index 00000000..b3533429 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php @@ -0,0 +1,23 @@ + - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\Context; -use phpDocumentor\Reflection\DocBlock\Location; - -/** - * Parses the DocBlock for any structure. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class DocBlock implements \Reflector -{ - /** @var string The opening line for this docblock. */ - protected $short_description = ''; - - /** - * @var DocBlock\Description The actual - * description for this docblock. - */ - protected $long_description = null; - - /** - * @var Tag[] An array containing all - * the tags in this docblock; except inline. - */ - protected $tags = array(); - - /** @var Context Information about the context of this DocBlock. */ - protected $context = null; - - /** @var Location Information about the location of this DocBlock. */ - protected $location = null; - - /** @var bool Is this DocBlock (the start of) a template? */ - protected $isTemplateStart = false; - - /** @var bool Does this DocBlock signify the end of a DocBlock template? */ - protected $isTemplateEnd = false; - - /** - * Parses the given docblock and populates the member fields. - * - * The constructor may also receive namespace information such as the - * current namespace and aliases. This information is used by some tags - * (e.g. @return, @param, etc.) to turn a relative Type into a FQCN. - * - * @param \Reflector|string $docblock A docblock comment (including - * asterisks) or reflector supporting the getDocComment method. - * @param Context $context The context in which the DocBlock - * occurs. - * @param Location $location The location within the file that this - * DocBlock occurs in. - * - * @throws \InvalidArgumentException if the given argument does not have the - * getDocComment method. - */ - public function __construct( - $docblock, - Context $context = null, - Location $location = null - ) { - if (is_object($docblock)) { - if (!method_exists($docblock, 'getDocComment')) { - throw new \InvalidArgumentException( - 'Invalid object passed; the given reflector must support ' - . 'the getDocComment method' - ); - } - - $docblock = $docblock->getDocComment(); - } - - $docblock = $this->cleanInput($docblock); - - list($templateMarker, $short, $long, $tags) = $this->splitDocBlock($docblock); - $this->isTemplateStart = $templateMarker === '#@+'; - $this->isTemplateEnd = $templateMarker === '#@-'; - $this->short_description = $short; - $this->long_description = new DocBlock\Description($long, $this); - $this->parseTags($tags); - - $this->context = $context; - $this->location = $location; - } - - /** - * Strips the asterisks from the DocBlock comment. - * - * @param string $comment String containing the comment text. - * - * @return string - */ - protected function cleanInput($comment) - { - $comment = trim( - preg_replace( - '#[ \t]*(?:\/\*\*|\*\/|\*)?[ \t]{0,1}(.*)?#u', - '$1', - $comment - ) - ); - - // reg ex above is not able to remove */ from a single line docblock - if (substr($comment, -2) == '*/') { - $comment = trim(substr($comment, 0, -2)); - } - - // normalize strings - $comment = str_replace(array("\r\n", "\r"), "\n", $comment); - - return $comment; - } - - /** - * Splits the DocBlock into a template marker, summary, description and block of tags. - * - * @param string $comment Comment to split into the sub-parts. - * - * @author Richard van Velzen (@_richardJ) Special thanks to Richard for the regex responsible for the split. - * @author Mike van Riel for extending the regex with template marker support. - * - * @return string[] containing the template marker (if any), summary, description and a string containing the tags. - */ - protected function splitDocBlock($comment) - { - // Performance improvement cheat: if the first character is an @ then only tags are in this DocBlock. This - // method does not split tags so we return this verbatim as the fourth result (tags). This saves us the - // performance impact of running a regular expression - if (strpos($comment, '@') === 0) { - return array('', '', '', $comment); - } - - // clears all extra horizontal whitespace from the line endings to prevent parsing issues - $comment = preg_replace('/\h*$/Sum', '', $comment); - - /* - * Splits the docblock into a template marker, short description, long description and tags section - * - * - The template marker is empty, #@+ or #@- if the DocBlock starts with either of those (a newline may - * occur after it and will be stripped). - * - The short description is started from the first character until a dot is encountered followed by a - * newline OR two consecutive newlines (horizontal whitespace is taken into account to consider spacing - * errors). This is optional. - * - The long description, any character until a new line is encountered followed by an @ and word - * characters (a tag). This is optional. - * - Tags; the remaining characters - * - * Big thanks to RichardJ for contributing this Regular Expression - */ - preg_match( - '/ - \A - # 1. Extract the template marker - (?:(\#\@\+|\#\@\-)\n?)? - - # 2. Extract the summary - (?: - (?! @\pL ) # The summary may not start with an @ - ( - [^\n.]+ - (?: - (?! \. \n | \n{2} ) # End summary upon a dot followed by newline or two newlines - [\n.] (?! [ \t]* @\pL ) # End summary when an @ is found as first character on a new line - [^\n.]+ # Include anything else - )* - \.? - )? - ) - - # 3. Extract the description - (?: - \s* # Some form of whitespace _must_ precede a description because a summary must be there - (?! @\pL ) # The description may not start with an @ - ( - [^\n]+ - (?: \n+ - (?! [ \t]* @\pL ) # End description when an @ is found as first character on a new line - [^\n]+ # Include anything else - )* - ) - )? - - # 4. Extract the tags (anything that follows) - (\s+ [\s\S]*)? # everything that follows - /ux', - $comment, - $matches - ); - array_shift($matches); - - while (count($matches) < 4) { - $matches[] = ''; - } - - return $matches; - } - - /** - * Creates the tag objects. - * - * @param string $tags Tag block to parse. - * - * @return void - */ - protected function parseTags($tags) - { - $result = array(); - $tags = trim($tags); - if ('' !== $tags) { - if ('@' !== $tags[0]) { - throw new \LogicException( - 'A tag block started with text instead of an actual tag,' - . ' this makes the tag block invalid: ' . $tags - ); - } - foreach (explode("\n", $tags) as $tag_line) { - if (isset($tag_line[0]) && ($tag_line[0] === '@')) { - $result[] = $tag_line; - } else { - $result[count($result) - 1] .= "\n" . $tag_line; - } - } - - // create proper Tag objects - foreach ($result as $key => $tag_line) { - $result[$key] = Tag::createInstance(trim($tag_line), $this); - } - } - - $this->tags = $result; - } - - /** - * Gets the text portion of the doc block. - * - * Gets the text portion (short and long description combined) of the doc - * block. - * - * @return string The text portion of the doc block. - */ - public function getText() - { - $short = $this->getShortDescription(); - $long = $this->getLongDescription()->getContents(); - - if ($long) { - return "{$short}\n\n{$long}"; - } else { - return $short; - } - } - - /** - * Set the text portion of the doc block. - * - * Sets the text portion (short and long description combined) of the doc - * block. - * - * @param string $docblock The new text portion of the doc block. - * - * @return $this This doc block. - */ - public function setText($comment) - { - list(,$short, $long) = $this->splitDocBlock($comment); - $this->short_description = $short; - $this->long_description = new DocBlock\Description($long, $this); - return $this; - } - /** - * Returns the opening line or also known as short description. - * - * @return string - */ - public function getShortDescription() - { - return $this->short_description; - } - - /** - * Returns the full description or also known as long description. - * - * @return DocBlock\Description - */ - public function getLongDescription() - { - return $this->long_description; - } - - /** - * Returns whether this DocBlock is the start of a Template section. - * - * A Docblock may serve as template for a series of subsequent DocBlocks. This is indicated by a special marker - * (`#@+`) that is appended directly after the opening `/**` of a DocBlock. - * - * An example of such an opening is: - * - * ``` - * /**#@+ - * * My DocBlock - * * / - * ``` - * - * The description and tags (not the summary!) are copied onto all subsequent DocBlocks and also applied to all - * elements that follow until another DocBlock is found that contains the closing marker (`#@-`). - * - * @see self::isTemplateEnd() for the check whether a closing marker was provided. - * - * @return boolean - */ - public function isTemplateStart() - { - return $this->isTemplateStart; - } - - /** - * Returns whether this DocBlock is the end of a Template section. - * - * @see self::isTemplateStart() for a more complete description of the Docblock Template functionality. - * - * @return boolean - */ - public function isTemplateEnd() - { - return $this->isTemplateEnd; - } - - /** - * Returns the current context. - * - * @return Context - */ - public function getContext() - { - return $this->context; - } - - /** - * Returns the current location. - * - * @return Location - */ - public function getLocation() - { - return $this->location; - } - - /** - * Returns the tags for this DocBlock. - * - * @return Tag[] - */ - public function getTags() - { - return $this->tags; - } - - /** - * Returns an array of tags matching the given name. If no tags are found - * an empty array is returned. - * - * @param string $name String to search by. - * - * @return Tag[] - */ - public function getTagsByName($name) - { - $result = array(); - - /** @var Tag $tag */ - foreach ($this->getTags() as $tag) { - if ($tag->getName() != $name) { - continue; - } - - $result[] = $tag; - } - - return $result; - } - - /** - * Checks if a tag of a certain type is present in this DocBlock. - * - * @param string $name Tag name to check for. - * - * @return bool - */ - public function hasTag($name) - { - /** @var Tag $tag */ - foreach ($this->getTags() as $tag) { - if ($tag->getName() == $name) { - return true; - } - } - - return false; - } - - /** - * Appends a tag at the end of the list of tags. - * - * @param Tag $tag The tag to add. - * - * @return Tag The newly added tag. - * - * @throws \LogicException When the tag belongs to a different DocBlock. - */ - public function appendTag(Tag $tag) - { - if (null === $tag->getDocBlock()) { - $tag->setDocBlock($this); - } - - if ($tag->getDocBlock() === $this) { - $this->tags[] = $tag; - } else { - throw new \LogicException( - 'This tag belongs to a different DocBlock object.' - ); - } - - return $tag; - } - - - /** - * Builds a string representation of this object. - * - * @todo determine the exact format as used by PHP Reflection and - * implement it. - * - * @return string - * @codeCoverageIgnore Not yet implemented - */ - public static function export() - { - throw new \Exception('Not yet implemented'); - } - - /** - * Returns the exported information (we should use the export static method - * BUT this throws an exception at this point). - * - * @return string - * @codeCoverageIgnore Not yet implemented - */ - public function __toString() - { - return 'Not yet implemented'; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php deleted file mode 100644 index 81aa83ce..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Context.php +++ /dev/null @@ -1,154 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -/** - * The context in which a DocBlock occurs. - * - * @author Vasil Rangelov - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Context -{ - /** @var string The current namespace. */ - protected $namespace = ''; - - /** @var array List of namespace aliases => Fully Qualified Namespace. */ - protected $namespace_aliases = array(); - - /** @var string Name of the structural element, within the namespace. */ - protected $lsen = ''; - - /** - * Cteates a new context. - * @param string $namespace The namespace where this DocBlock - * resides in. - * @param array $namespace_aliases List of namespace aliases => Fully - * Qualified Namespace. - * @param string $lsen Name of the structural element, within - * the namespace. - */ - public function __construct( - $namespace = '', - array $namespace_aliases = array(), - $lsen = '' - ) { - if (!empty($namespace)) { - $this->setNamespace($namespace); - } - $this->setNamespaceAliases($namespace_aliases); - $this->setLSEN($lsen); - } - - /** - * @return string The namespace where this DocBlock resides in. - */ - public function getNamespace() - { - return $this->namespace; - } - - /** - * @return array List of namespace aliases => Fully Qualified Namespace. - */ - public function getNamespaceAliases() - { - return $this->namespace_aliases; - } - - /** - * Returns the Local Structural Element Name. - * - * @return string Name of the structural element, within the namespace. - */ - public function getLSEN() - { - return $this->lsen; - } - - /** - * Sets a new namespace. - * - * Sets a new namespace for the context. Leading and trailing slashes are - * trimmed, and the keywords "global" and "default" are treated as aliases - * to no namespace. - * - * @param string $namespace The new namespace to set. - * - * @return $this - */ - public function setNamespace($namespace) - { - if ('global' !== $namespace - && 'default' !== $namespace - ) { - // Srip leading and trailing slash - $this->namespace = trim((string)$namespace, '\\'); - } else { - $this->namespace = ''; - } - return $this; - } - - /** - * Sets the namespace aliases, replacing all previous ones. - * - * @param array $namespace_aliases List of namespace aliases => Fully - * Qualified Namespace. - * - * @return $this - */ - public function setNamespaceAliases(array $namespace_aliases) - { - $this->namespace_aliases = array(); - foreach ($namespace_aliases as $alias => $fqnn) { - $this->setNamespaceAlias($alias, $fqnn); - } - return $this; - } - - /** - * Adds a namespace alias to the context. - * - * @param string $alias The alias name (the part after "as", or the last - * part of the Fully Qualified Namespace Name) to add. - * @param string $fqnn The Fully Qualified Namespace Name for this alias. - * Any form of leading/trailing slashes are accepted, but what will be - * stored is a name, prefixed with a slash, and no trailing slash. - * - * @return $this - */ - public function setNamespaceAlias($alias, $fqnn) - { - $this->namespace_aliases[$alias] = '\\' . trim((string)$fqnn, '\\'); - return $this; - } - - /** - * Sets a new Local Structural Element Name. - * - * Sets a new Local Structural Element Name. A local name also contains - * punctuation determining the kind of structural element (e.g. trailing "(" - * and ")" for functions and methods). - * - * @param string $lsen The new local name of a structural element. - * - * @return $this - */ - public function setLSEN($lsen) - { - $this->lsen = (string)$lsen; - return $this; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php deleted file mode 100644 index d41142e2..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Description.php +++ /dev/null @@ -1,223 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use phpDocumentor\Reflection\DocBlock; - -/** - * Parses a Description of a DocBlock or tag. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Description implements \Reflector -{ - /** @var string */ - protected $contents = ''; - - /** @var array The contents, as an array of strings and Tag objects. */ - protected $parsedContents = null; - - /** @var DocBlock The DocBlock which this description belongs to. */ - protected $docblock = null; - - /** - * Populates the fields of a description. - * - * @param string $content The description's conetnts. - * @param DocBlock $docblock The DocBlock which this description belongs to. - */ - public function __construct($content, DocBlock $docblock = null) - { - $this->setContent($content)->setDocBlock($docblock); - } - - /** - * Gets the text of this description. - * - * @return string - */ - public function getContents() - { - return $this->contents; - } - - /** - * Sets the text of this description. - * - * @param string $content The new text of this description. - * - * @return $this - */ - public function setContent($content) - { - $this->contents = trim($content); - - $this->parsedContents = null; - return $this; - } - - /** - * Returns the parsed text of this description. - * - * @return array An array of strings and tag objects, in the order they - * occur within the description. - */ - public function getParsedContents() - { - if (null === $this->parsedContents) { - $this->parsedContents = preg_split( - '/\{ - # "{@}" is not a valid inline tag. This ensures that - # we do not treat it as one, but treat it literally. - (?!@\}) - # We want to capture the whole tag line, but without the - # inline tag delimiters. - (\@ - # Match everything up to the next delimiter. - [^{}]* - # Nested inline tag content should not be captured, or - # it will appear in the result separately. - (?: - # Match nested inline tags. - (?: - # Because we did not catch the tag delimiters - # earlier, we must be explicit with them here. - # Notice that this also matches "{}", as a way - # to later introduce it as an escape sequence. - \{(?1)?\} - | - # Make sure we match hanging "{". - \{ - ) - # Match content after the nested inline tag. - [^{}]* - )* # If there are more inline tags, match them as well. - # We use "*" since there may not be any nested inline - # tags. - ) - \}/Sux', - $this->contents, - null, - PREG_SPLIT_DELIM_CAPTURE - ); - - $count = count($this->parsedContents); - for ($i=1; $i<$count; $i += 2) { - $this->parsedContents[$i] = Tag::createInstance( - $this->parsedContents[$i], - $this->docblock - ); - } - - //In order to allow "literal" inline tags, the otherwise invalid - //sequence "{@}" is changed to "@", and "{}" is changed to "}". - //See unit tests for examples. - for ($i=0; $i<$count; $i += 2) { - $this->parsedContents[$i] = str_replace( - array('{@}', '{}'), - array('@', '}'), - $this->parsedContents[$i] - ); - } - } - return $this->parsedContents; - } - - /** - * Return a formatted variant of the Long Description using MarkDown. - * - * @todo this should become a more intelligent piece of code where the - * configuration contains a setting what format long descriptions are. - * - * @codeCoverageIgnore Will be removed soon, in favor of adapters at - * PhpDocumentor itself that will process text in various formats. - * - * @return string - */ - public function getFormattedContents() - { - $result = $this->contents; - - // if the long description contains a plain HTML element, surround - // it with a pre element. Please note that we explicitly used str_replace - // and not preg_replace to gain performance - if (strpos($result, '') !== false) { - $result = str_replace( - array('', "\r\n", "\n", "\r", ''), - array('
', '', '', '', '
'), - $result - ); - } - - if (class_exists('Parsedown')) { - $markdown = \Parsedown::instance(); - $result = $markdown->parse($result); - } elseif (class_exists('dflydev\markdown\MarkdownExtraParser')) { - $markdown = new \dflydev\markdown\MarkdownExtraParser(); - $result = $markdown->transformMarkdown($result); - } - - return trim($result); - } - - /** - * Gets the docblock this tag belongs to. - * - * @return DocBlock The docblock this description belongs to. - */ - public function getDocBlock() - { - return $this->docblock; - } - - /** - * Sets the docblock this tag belongs to. - * - * @param DocBlock $docblock The new docblock this description belongs to. - * Setting NULL removes any association. - * - * @return $this - */ - public function setDocBlock(DocBlock $docblock = null) - { - $this->docblock = $docblock; - - return $this; - } - - /** - * Builds a string representation of this object. - * - * @todo determine the exact format as used by PHP Reflection - * and implement it. - * - * @return void - * @codeCoverageIgnore Not yet implemented - */ - public static function export() - { - throw new \Exception('Not yet implemented'); - } - - /** - * Returns the long description as a string. - * - * @return string - */ - public function __toString() - { - return $this->getContents(); - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php deleted file mode 100644 index 966ed44d..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Location.php +++ /dev/null @@ -1,76 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -/** - * The location a DocBlock occurs within a file. - * - * @author Vasil Rangelov - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Location -{ - /** @var int Line where the DocBlock text starts. */ - protected $lineNumber = 0; - - /** @var int Column where the DocBlock text starts. */ - protected $columnNumber = 0; - - public function __construct( - $lineNumber = 0, - $columnNumber = 0 - ) { - $this->setLineNumber($lineNumber)->setColumnNumber($columnNumber); - } - - /** - * @return int Line where the DocBlock text starts. - */ - public function getLineNumber() - { - return $this->lineNumber; - } - - /** - * - * @param type $lineNumber - * @return $this - */ - public function setLineNumber($lineNumber) - { - $this->lineNumber = (int)$lineNumber; - - return $this; - } - - /** - * @return int Column where the DocBlock text starts. - */ - public function getColumnNumber() - { - return $this->columnNumber; - } - - /** - * - * @param int $columnNumber - * @return $this - */ - public function setColumnNumber($columnNumber) - { - $this->columnNumber = (int)$columnNumber; - - return $this; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Serializer.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Serializer.php deleted file mode 100644 index c1617850..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Serializer.php +++ /dev/null @@ -1,198 +0,0 @@ - - * @copyright 2013 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use phpDocumentor\Reflection\DocBlock; - -/** - * Serializes a DocBlock instance. - * - * @author Barry vd. Heuvel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Serializer -{ - - /** @var string The string to indent the comment with. */ - protected $indentString = ' '; - - /** @var int The number of times the indent string is repeated. */ - protected $indent = 0; - - /** @var bool Whether to indent the first line. */ - protected $isFirstLineIndented = true; - - /** @var int|null The max length of a line. */ - protected $lineLength = null; - - /** - * Create a Serializer instance. - * - * @param int $indent The number of times the indent string is - * repeated. - * @param string $indentString The string to indent the comment with. - * @param bool $indentFirstLine Whether to indent the first line. - * @param int|null $lineLength The max length of a line or NULL to - * disable line wrapping. - */ - public function __construct( - $indent = 0, - $indentString = ' ', - $indentFirstLine = true, - $lineLength = null - ) { - $this->setIndentationString($indentString); - $this->setIndent($indent); - $this->setIsFirstLineIndented($indentFirstLine); - $this->setLineLength($lineLength); - } - - /** - * Sets the string to indent comments with. - * - * @param string $indentationString The string to indent comments with. - * - * @return $this This serializer object. - */ - public function setIndentationString($indentString) - { - $this->indentString = (string)$indentString; - return $this; - } - - /** - * Gets the string to indent comments with. - * - * @return string The indent string. - */ - public function getIndentationString() - { - return $this->indentString; - } - - /** - * Sets the number of indents. - * - * @param int $indent The number of times the indent string is repeated. - * - * @return $this This serializer object. - */ - public function setIndent($indent) - { - $this->indent = (int)$indent; - return $this; - } - - /** - * Gets the number of indents. - * - * @return int The number of times the indent string is repeated. - */ - public function getIndent() - { - return $this->indent; - } - - /** - * Sets whether or not the first line should be indented. - * - * Sets whether or not the first line (the one with the "/**") should be - * indented. - * - * @param bool $indentFirstLine The new value for this setting. - * - * @return $this This serializer object. - */ - public function setIsFirstLineIndented($indentFirstLine) - { - $this->isFirstLineIndented = (bool)$indentFirstLine; - return $this; - } - - /** - * Gets whether or not the first line should be indented. - * - * @return bool Whether or not the first line should be indented. - */ - public function isFirstLineIndented() - { - return $this->isFirstLineIndented; - } - - /** - * Sets the line length. - * - * Sets the length of each line in the serialization. Content will be - * wrapped within this limit. - * - * @param int|null $lineLength The length of each line. NULL to disable line - * wrapping altogether. - * - * @return $this This serializer object. - */ - public function setLineLength($lineLength) - { - $this->lineLength = null === $lineLength ? null : (int)$lineLength; - return $this; - } - - /** - * Gets the line length. - * - * @return int|null The length of each line or NULL if line wrapping is - * disabled. - */ - public function getLineLength() - { - return $this->lineLength; - } - - /** - * Generate a DocBlock comment. - * - * @param DocBlock The DocBlock to serialize. - * - * @return string The serialized doc block. - */ - public function getDocComment(DocBlock $docblock) - { - $indent = str_repeat($this->indentString, $this->indent); - $firstIndent = $this->isFirstLineIndented ? $indent : ''; - - $text = $docblock->getText(); - if ($this->lineLength) { - //3 === strlen(' * ') - $wrapLength = $this->lineLength - strlen($indent) - 3; - $text = wordwrap($text, $wrapLength); - } - $text = str_replace("\n", "\n{$indent} * ", $text); - - $comment = "{$firstIndent}/**\n{$indent} * {$text}\n{$indent} *\n"; - - /** @var Tag $tag */ - foreach ($docblock->getTags() as $tag) { - $tagText = (string) $tag; - if ($this->lineLength) { - $tagText = wordwrap($tagText, $wrapLength); - } - $tagText = str_replace("\n", "\n{$indent} * ", $tagText); - - $comment .= "{$indent} * {$tagText}\n"; - } - - $comment .= $indent . ' */'; - - return $comment; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php deleted file mode 100644 index a96db095..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag.php +++ /dev/null @@ -1,377 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use phpDocumentor\Reflection\DocBlock; - -/** - * Parses a tag definition for a DocBlock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Tag implements \Reflector -{ - /** - * PCRE regular expression matching a tag name. - */ - const REGEX_TAGNAME = '[\w\-\_\\\\]+'; - - /** @var string Name of the tag */ - protected $tag = ''; - - /** - * @var string|null Content of the tag. - * When set to NULL, it means it needs to be regenerated. - */ - protected $content = ''; - - /** @var string Description of the content of this tag */ - protected $description = ''; - - /** - * @var array|null The description, as an array of strings and Tag objects. - * When set to NULL, it means it needs to be regenerated. - */ - protected $parsedDescription = null; - - /** @var Location Location of the tag. */ - protected $location = null; - - /** @var DocBlock The DocBlock which this tag belongs to. */ - protected $docblock = null; - - /** - * @var array An array with a tag as a key, and an FQCN to a class that - * handles it as an array value. The class is expected to inherit this - * class. - */ - private static $tagHandlerMappings = array( - 'author' - => '\phpDocumentor\Reflection\DocBlock\Tag\AuthorTag', - 'covers' - => '\phpDocumentor\Reflection\DocBlock\Tag\CoversTag', - 'deprecated' - => '\phpDocumentor\Reflection\DocBlock\Tag\DeprecatedTag', - 'example' - => '\phpDocumentor\Reflection\DocBlock\Tag\ExampleTag', - 'link' - => '\phpDocumentor\Reflection\DocBlock\Tag\LinkTag', - 'method' - => '\phpDocumentor\Reflection\DocBlock\Tag\MethodTag', - 'param' - => '\phpDocumentor\Reflection\DocBlock\Tag\ParamTag', - 'property-read' - => '\phpDocumentor\Reflection\DocBlock\Tag\PropertyReadTag', - 'property' - => '\phpDocumentor\Reflection\DocBlock\Tag\PropertyTag', - 'property-write' - => '\phpDocumentor\Reflection\DocBlock\Tag\PropertyWriteTag', - 'return' - => '\phpDocumentor\Reflection\DocBlock\Tag\ReturnTag', - 'see' - => '\phpDocumentor\Reflection\DocBlock\Tag\SeeTag', - 'since' - => '\phpDocumentor\Reflection\DocBlock\Tag\SinceTag', - 'source' - => '\phpDocumentor\Reflection\DocBlock\Tag\SourceTag', - 'throw' - => '\phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag', - 'throws' - => '\phpDocumentor\Reflection\DocBlock\Tag\ThrowsTag', - 'uses' - => '\phpDocumentor\Reflection\DocBlock\Tag\UsesTag', - 'var' - => '\phpDocumentor\Reflection\DocBlock\Tag\VarTag', - 'version' - => '\phpDocumentor\Reflection\DocBlock\Tag\VersionTag' - ); - - /** - * Factory method responsible for instantiating the correct sub type. - * - * @param string $tag_line The text for this tag, including description. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. - * - * @throws \InvalidArgumentException if an invalid tag line was presented. - * - * @return static A new tag object. - */ - final public static function createInstance( - $tag_line, - DocBlock $docblock = null, - Location $location = null - ) { - if (!preg_match( - '/^@(' . self::REGEX_TAGNAME . ')(?:\s*([^\s].*)|$)?/us', - $tag_line, - $matches - )) { - throw new \InvalidArgumentException( - 'Invalid tag_line detected: ' . $tag_line - ); - } - - $handler = __CLASS__; - if (isset(self::$tagHandlerMappings[$matches[1]])) { - $handler = self::$tagHandlerMappings[$matches[1]]; - } elseif (isset($docblock)) { - $tagName = (string)new Type\Collection( - array($matches[1]), - $docblock->getContext() - ); - - if (isset(self::$tagHandlerMappings[$tagName])) { - $handler = self::$tagHandlerMappings[$tagName]; - } - } - - return new $handler( - $matches[1], - isset($matches[2]) ? $matches[2] : '', - $docblock, - $location - ); - } - - /** - * Registers a handler for tags. - * - * Registers a handler for tags. The class specified is autoloaded if it's - * not available. It must inherit from this class. - * - * @param string $tag Name of tag to regiser a handler for. When - * registering a namespaced tag, the full name, along with a prefixing - * slash MUST be provided. - * @param string|null $handler FQCN of handler. Specifing NULL removes the - * handler for the specified tag, if any. - * - * @return bool TRUE on success, FALSE on failure. - */ - final public static function registerTagHandler($tag, $handler) - { - $tag = trim((string)$tag); - - if (null === $handler) { - unset(self::$tagHandlerMappings[$tag]); - return true; - } - - if ('' !== $tag - && class_exists($handler, true) - && is_subclass_of($handler, __CLASS__) - && !strpos($tag, '\\') //Accept no slash, and 1st slash at offset 0. - ) { - self::$tagHandlerMappings[$tag] = $handler; - return true; - } - - return false; - } - - /** - * Parses a tag and populates the member variables. - * - * @param string $name Name of the tag. - * @param string $content The contents of the given tag. - * @param DocBlock $docblock The DocBlock which this tag belongs to. - * @param Location $location Location of the tag. - */ - public function __construct( - $name, - $content, - DocBlock $docblock = null, - Location $location = null - ) { - $this - ->setName($name) - ->setContent($content) - ->setDocBlock($docblock) - ->setLocation($location); - } - - /** - * Gets the name of this tag. - * - * @return string The name of this tag. - */ - public function getName() - { - return $this->tag; - } - - /** - * Sets the name of this tag. - * - * @param string $name The new name of this tag. - * - * @return $this - * @throws \InvalidArgumentException When an invalid tag name is provided. - */ - public function setName($name) - { - if (!preg_match('/^' . self::REGEX_TAGNAME . '$/u', $name)) { - throw new \InvalidArgumentException( - 'Invalid tag name supplied: ' . $name - ); - } - - $this->tag = $name; - - return $this; - } - - /** - * Gets the content of this tag. - * - * @return string - */ - public function getContent() - { - if (null === $this->content) { - $this->content = $this->description; - } - - return $this->content; - } - - /** - * Sets the content of this tag. - * - * @param string $content The new content of this tag. - * - * @return $this - */ - public function setContent($content) - { - $this->setDescription($content); - $this->content = $content; - - return $this; - } - - /** - * Gets the description component of this tag. - * - * @return string - */ - public function getDescription() - { - return $this->description; - } - - /** - * Sets the description component of this tag. - * - * @param string $description The new description component of this tag. - * - * @return $this - */ - public function setDescription($description) - { - $this->content = null; - $this->parsedDescription = null; - $this->description = trim($description); - - return $this; - } - - /** - * Gets the parsed text of this description. - * - * @return array An array of strings and tag objects, in the order they - * occur within the description. - */ - public function getParsedDescription() - { - if (null === $this->parsedDescription) { - $description = new Description($this->description, $this->docblock); - $this->parsedDescription = $description->getParsedContents(); - } - return $this->parsedDescription; - } - - /** - * Gets the docblock this tag belongs to. - * - * @return DocBlock The docblock this tag belongs to. - */ - public function getDocBlock() - { - return $this->docblock; - } - - /** - * Sets the docblock this tag belongs to. - * - * @param DocBlock $docblock The new docblock this tag belongs to. Setting - * NULL removes any association. - * - * @return $this - */ - public function setDocBlock(DocBlock $docblock = null) - { - $this->docblock = $docblock; - - return $this; - } - - /** - * Gets the location of the tag. - * - * @return Location The tag's location. - */ - public function getLocation() - { - return $this->location; - } - - /** - * Sets the location of the tag. - * - * @param Location $location The new location of the tag. - * - * @return $this - */ - public function setLocation(Location $location = null) - { - $this->location = $location; - - return $this; - } - - /** - * Builds a string representation of this object. - * - * @todo determine the exact format as used by PHP Reflection and implement it. - * - * @return void - * @codeCoverageIgnore Not yet implemented - */ - public static function export() - { - throw new \Exception('Not yet implemented'); - } - - /** - * Returns the tag as a serialized string - * - * @return string - */ - public function __toString() - { - return "@{$this->getName()} {$this->getContent()}"; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php deleted file mode 100644 index bacf52eb..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/AuthorTag.php +++ /dev/null @@ -1,131 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for an @author tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class AuthorTag extends Tag -{ - /** - * PCRE regular expression matching any valid value for the name component. - */ - const REGEX_AUTHOR_NAME = '[^\<]*'; - - /** - * PCRE regular expression matching any valid value for the email component. - */ - const REGEX_AUTHOR_EMAIL = '[^\>]*'; - - /** @var string The name of the author */ - protected $authorName = ''; - - /** @var string The email of the author */ - protected $authorEmail = ''; - - public function getContent() - { - if (null === $this->content) { - $this->content = $this->authorName; - if ('' != $this->authorEmail) { - $this->content .= "<{$this->authorEmail}>"; - } - } - - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - if (preg_match( - '/^(' . self::REGEX_AUTHOR_NAME . - ')(\<(' . self::REGEX_AUTHOR_EMAIL . - ')\>)?$/u', - $this->description, - $matches - )) { - $this->authorName = trim($matches[1]); - if (isset($matches[3])) { - $this->authorEmail = trim($matches[3]); - } - } - - return $this; - } - - /** - * Gets the author's name. - * - * @return string The author's name. - */ - public function getAuthorName() - { - return $this->authorName; - } - - /** - * Sets the author's name. - * - * @param string $authorName The new author name. - * An invalid value will set an empty string. - * - * @return $this - */ - public function setAuthorName($authorName) - { - $this->content = null; - $this->authorName - = preg_match('/^' . self::REGEX_AUTHOR_NAME . '$/u', $authorName) - ? $authorName : ''; - - return $this; - } - - /** - * Gets the author's email. - * - * @return string The author's email. - */ - public function getAuthorEmail() - { - return $this->authorEmail; - } - - /** - * Sets the author's email. - * - * @param string $authorEmail The new author email. - * An invalid value will set an empty string. - * - * @return $this - */ - public function setAuthorEmail($authorEmail) - { - $this->authorEmail - = preg_match('/^' . self::REGEX_AUTHOR_EMAIL . '$/u', $authorEmail) - ? $authorEmail : ''; - - $this->content = null; - return $this; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php deleted file mode 100644 index bd31b56b..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/CoversTag.php +++ /dev/null @@ -1,24 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @covers tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class CoversTag extends SeeTag -{ -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php deleted file mode 100644 index 7226316b..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/DeprecatedTag.php +++ /dev/null @@ -1,26 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag\VersionTag; - -/** - * Reflection class for a @deprecated tag in a Docblock. - * - * @author Vasil Rangelov - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class DeprecatedTag extends VersionTag -{ -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php deleted file mode 100644 index 0e163ea0..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ExampleTag.php +++ /dev/null @@ -1,156 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @example tag in a Docblock. - * - * @author Vasil Rangelov - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ExampleTag extends SourceTag -{ - /** - * @var string Path to a file to use as an example. - * May also be an absolute URI. - */ - protected $filePath = ''; - - /** - * @var bool Whether the file path component represents an URI. - * This determines how the file portion appears at {@link getContent()}. - */ - protected $isURI = false; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $filePath = ''; - if ($this->isURI) { - if (false === strpos($this->filePath, ':')) { - $filePath = str_replace( - '%2F', - '/', - rawurlencode($this->filePath) - ); - } else { - $filePath = $this->filePath; - } - } else { - $filePath = '"' . $this->filePath . '"'; - } - - $this->content = $filePath . ' ' . parent::getContent(); - } - - return $this->content; - } - /** - * {@inheritdoc} - */ - public function setContent($content) - { - Tag::setContent($content); - if (preg_match( - '/^ - # File component - (?: - # File path in quotes - \"([^\"]+)\" - | - # File URI - (\S+) - ) - # Remaining content (parsed by SourceTag) - (?:\s+(.*))? - $/sux', - $this->description, - $matches - )) { - if ('' !== $matches[1]) { - $this->setFilePath($matches[1]); - } else { - $this->setFileURI($matches[2]); - } - - if (isset($matches[3])) { - parent::setContent($matches[3]); - } else { - $this->setDescription(''); - } - $this->content = $content; - } - - return $this; - } - - /** - * Returns the file path. - * - * @return string Path to a file to use as an example. - * May also be an absolute URI. - */ - public function getFilePath() - { - return $this->filePath; - } - - /** - * Sets the file path. - * - * @param string $filePath The new file path to use for the example. - * - * @return $this - */ - public function setFilePath($filePath) - { - $this->isURI = false; - $this->filePath = trim($filePath); - - $this->content = null; - return $this; - } - - /** - * Sets the file path as an URI. - * - * This function is equivalent to {@link setFilePath()}, except that it - * convers an URI to a file path before that. - * - * There is no getFileURI(), as {@link getFilePath()} is compatible. - * - * @param type $uri The new file URI to use as an example. - */ - public function setFileURI($uri) - { - $this->isURI = true; - if (false === strpos($uri, ':')) { - //Relative URL - $this->filePath = rawurldecode( - str_replace(array('/', '\\'), '%2F', $uri) - ); - } else { - //Absolute URL or URI. - $this->filePath = $uri; - } - - $this->content = null; - return $this; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php deleted file mode 100644 index f79f25dd..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/LinkTag.php +++ /dev/null @@ -1,81 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @link tag in a Docblock. - * - * @author Ben Selby - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class LinkTag extends Tag -{ - /** @var string */ - protected $link = ''; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content = "{$this->link} {$this->description}"; - } - - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - $parts = preg_split('/\s+/Su', $this->description, 2); - - $this->link = $parts[0]; - - $this->setDescription(isset($parts[1]) ? $parts[1] : $parts[0]); - - $this->content = $content; - return $this; - } - - /** - * Gets the link - * - * @return string - */ - public function getLink() - { - return $this->link; - } - - /** - * Sets the link - * - * @param string $link The link - * - * @return $this - */ - public function setLink($link) - { - $this->link = $link; - - $this->content = null; - return $this; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php deleted file mode 100644 index 7a5ce790..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php +++ /dev/null @@ -1,209 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @method in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class MethodTag extends ReturnTag -{ - - /** @var string */ - protected $method_name = ''; - - /** @var string */ - protected $arguments = ''; - - /** @var bool */ - protected $isStatic = false; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content = ''; - if ($this->isStatic) { - $this->content .= 'static '; - } - $this->content .= $this->type . - " {$this->method_name}({$this->arguments}) " . - $this->description; - } - - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - Tag::setContent($content); - // 1. none or more whitespace - // 2. optionally the keyword "static" followed by whitespace - // 3. optionally a word with underscores followed by whitespace : as - // type for the return value - // 4. then optionally a word with underscores followed by () and - // whitespace : as method name as used by phpDocumentor - // 5. then a word with underscores, followed by ( and any character - // until a ) and whitespace : as method name with signature - // 6. any remaining text : as description - if (preg_match( - '/^ - # Static keyword - # Declates a static method ONLY if type is also present - (?: - (static) - \s+ - )? - # Return type - (?: - ([\w\|_\\\\]+) - \s+ - )? - # Legacy method name (not captured) - (?: - [\w_]+\(\)\s+ - )? - # Method name - ([\w\|_\\\\]+) - # Arguments - \(([^\)]*)\) - \s* - # Description - (.*) - $/sux', - $this->description, - $matches - )) { - list( - , - $static, - $this->type, - $this->method_name, - $this->arguments, - $this->description - ) = $matches; - if ($static) { - if (!$this->type) { - $this->type = 'static'; - } else { - $this->isStatic = true; - } - } else { - if (!$this->type) { - $this->type = 'void'; - } - } - $this->parsedDescription = null; - } - - return $this; - } - - /** - * Sets the name of this method. - * - * @param string $method_name The name of the method. - * - * @return $this - */ - public function setMethodName($method_name) - { - $this->method_name = $method_name; - - $this->content = null; - return $this; - } - - /** - * Retrieves the method name. - * - * @return string - */ - public function getMethodName() - { - return $this->method_name; - } - - /** - * Sets the arguments for this method. - * - * @param string $arguments A comma-separated arguments line. - * - * @return void - */ - public function setArguments($arguments) - { - $this->arguments = $arguments; - - $this->content = null; - return $this; - } - - /** - * Returns an array containing each argument as array of type and name. - * - * Please note that the argument sub-array may only contain 1 element if no - * type was specified. - * - * @return string[] - */ - public function getArguments() - { - if (empty($this->arguments)) { - return array(); - } - - $arguments = explode(',', $this->arguments); - foreach ($arguments as $key => $value) { - $arguments[$key] = explode(' ', trim($value)); - } - - return $arguments; - } - - /** - * Checks whether the method tag describes a static method or not. - * - * @return bool TRUE if the method declaration is for a static method, FALSE - * otherwise. - */ - public function isStatic() - { - return $this->isStatic; - } - - /** - * Sets a new value for whether the method is static or not. - * - * @param bool $isStatic The new value to set. - * - * @return $this - */ - public function setIsStatic($isStatic) - { - $this->isStatic = $isStatic; - - $this->content = null; - return $this; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php deleted file mode 100644 index 9bc0270d..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ParamTag.php +++ /dev/null @@ -1,119 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @param tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ParamTag extends ReturnTag -{ - /** @var string */ - protected $variableName = ''; - - /** @var bool determines whether this is a variadic argument */ - protected $isVariadic = false; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content - = "{$this->type} {$this->variableName} {$this->description}"; - } - return $this->content; - } - /** - * {@inheritdoc} - */ - public function setContent($content) - { - Tag::setContent($content); - $parts = preg_split( - '/(\s+)/Su', - $this->description, - 3, - PREG_SPLIT_DELIM_CAPTURE - ); - - // if the first item that is encountered is not a variable; it is a type - if (isset($parts[0]) - && (strlen($parts[0]) > 0) - && ($parts[0][0] !== '$') - ) { - $this->type = array_shift($parts); - array_shift($parts); - } - - // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) - && (strlen($parts[0]) > 0) - && ($parts[0][0] == '$' || substr($parts[0], 0, 4) === '...$') - ) { - $this->variableName = array_shift($parts); - array_shift($parts); - - if (substr($this->variableName, 0, 3) === '...') { - $this->isVariadic = true; - $this->variableName = substr($this->variableName, 3); - } - } - - $this->setDescription(implode('', $parts)); - - $this->content = $content; - return $this; - } - - /** - * Returns the variable's name. - * - * @return string - */ - public function getVariableName() - { - return $this->variableName; - } - - /** - * Sets the variable's name. - * - * @param string $name The new name for this variable. - * - * @return $this - */ - public function setVariableName($name) - { - $this->variableName = $name; - - $this->content = null; - return $this; - } - - /** - * Returns whether this tag is variadic. - * - * @return boolean - */ - public function isVariadic() - { - return $this->isVariadic; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php deleted file mode 100644 index 33406026..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyReadTag.php +++ /dev/null @@ -1,24 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @property-read tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class PropertyReadTag extends PropertyTag -{ -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php deleted file mode 100644 index 288ecff8..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyTag.php +++ /dev/null @@ -1,24 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @property tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class PropertyTag extends ParamTag -{ -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php deleted file mode 100644 index ec4e866d..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/PropertyWriteTag.php +++ /dev/null @@ -1,24 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @property-write tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class PropertyWriteTag extends PropertyTag -{ -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php deleted file mode 100644 index 9293db92..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ReturnTag.php +++ /dev/null @@ -1,99 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\Type\Collection; - -/** - * Reflection class for a @return tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ReturnTag extends Tag -{ - /** @var string The raw type component. */ - protected $type = ''; - - /** @var Collection The parsed type component. */ - protected $types = null; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content = "{$this->type} {$this->description}"; - } - - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - - $parts = preg_split('/\s+/Su', $this->description, 2); - - // any output is considered a type - $this->type = $parts[0]; - $this->types = null; - - $this->setDescription(isset($parts[1]) ? $parts[1] : ''); - - $this->content = $content; - return $this; - } - - /** - * Returns the unique types of the variable. - * - * @return string[] - */ - public function getTypes() - { - return $this->getTypesCollection()->getArrayCopy(); - } - - /** - * Returns the type section of the variable. - * - * @return string - */ - public function getType() - { - return (string) $this->getTypesCollection(); - } - - /** - * Returns the type collection. - * - * @return void - */ - protected function getTypesCollection() - { - if (null === $this->types) { - $this->types = new Collection( - array($this->type), - $this->docblock ? $this->docblock->getContext() : null - ); - } - return $this->types; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php deleted file mode 100644 index 4f5f22ce..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SeeTag.php +++ /dev/null @@ -1,81 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @see tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class SeeTag extends Tag -{ - /** @var string */ - protected $refers = null; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content = "{$this->refers} {$this->description}"; - } - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - $parts = preg_split('/\s+/Su', $this->description, 2); - - // any output is considered a type - $this->refers = $parts[0]; - - $this->setDescription(isset($parts[1]) ? $parts[1] : ''); - - $this->content = $content; - return $this; - } - - /** - * Gets the structural element this tag refers to. - * - * @return string - */ - public function getReference() - { - return $this->refers; - } - - /** - * Sets the structural element this tag refers to. - * - * @param string $refers The new type this tag refers to. - * - * @return $this - */ - public function setReference($refers) - { - $this->refers = $refers; - - $this->content = null; - return $this; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php deleted file mode 100644 index ba009c44..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SinceTag.php +++ /dev/null @@ -1,26 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag\VersionTag; - -/** - * Reflection class for a @since tag in a Docblock. - * - * @author Vasil Rangelov - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class SinceTag extends VersionTag -{ -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php deleted file mode 100644 index 3400220e..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/SourceTag.php +++ /dev/null @@ -1,137 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @source tag in a Docblock. - * - * @author Vasil Rangelov - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class SourceTag extends Tag -{ - /** - * @var int The starting line, relative to the structural element's - * location. - */ - protected $startingLine = 1; - - /** - * @var int|null The number of lines, relative to the starting line. NULL - * means "to the end". - */ - protected $lineCount = null; - - /** - * {@inheritdoc} - */ - public function getContent() - { - if (null === $this->content) { - $this->content - = "{$this->startingLine} {$this->lineCount} {$this->description}"; - } - - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - if (preg_match( - '/^ - # Starting line - ([1-9]\d*) - \s* - # Number of lines - (?: - ((?1)) - \s+ - )? - # Description - (.*) - $/sux', - $this->description, - $matches - )) { - $this->startingLine = (int)$matches[1]; - if (isset($matches[2]) && '' !== $matches[2]) { - $this->lineCount = (int)$matches[2]; - } - $this->setDescription($matches[3]); - $this->content = $content; - } - - return $this; - } - - /** - * Gets the starting line. - * - * @return int The starting line, relative to the structural element's - * location. - */ - public function getStartingLine() - { - return $this->startingLine; - } - - /** - * Sets the starting line. - * - * @param int $startingLine The new starting line, relative to the - * structural element's location. - * - * @return $this - */ - public function setStartingLine($startingLine) - { - $this->startingLine = $startingLine; - - $this->content = null; - return $this; - } - - /** - * Returns the number of lines. - * - * @return int|null The number of lines, relative to the starting line. NULL - * means "to the end". - */ - public function getLineCount() - { - return $this->lineCount; - } - - /** - * Sets the number of lines. - * - * @param int|null $lineCount The new number of lines, relative to the - * starting line. NULL means "to the end". - * - * @return $this - */ - public function setLineCount($lineCount) - { - $this->lineCount = $lineCount; - - $this->content = null; - return $this; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php deleted file mode 100644 index 58ee44a4..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/ThrowsTag.php +++ /dev/null @@ -1,24 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @throws tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class ThrowsTag extends ReturnTag -{ -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php deleted file mode 100644 index da0d6638..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/UsesTag.php +++ /dev/null @@ -1,24 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @uses tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class UsesTag extends SeeTag -{ -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php deleted file mode 100644 index 236b2c8b..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VarTag.php +++ /dev/null @@ -1,24 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @var tag in a Docblock. - * - * @author Mike van Riel - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class VarTag extends ParamTag -{ -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php deleted file mode 100644 index 260f6984..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/VersionTag.php +++ /dev/null @@ -1,108 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tag; - -use phpDocumentor\Reflection\DocBlock\Tag; - -/** - * Reflection class for a @version tag in a Docblock. - * - * @author Vasil Rangelov - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class VersionTag extends Tag -{ - /** - * PCRE regular expression matching a version vector. - * Assumes the "x" modifier. - */ - const REGEX_VECTOR = '(?: - # Normal release vectors. - \d\S* - | - # VCS version vectors. Per PHPCS, they are expected to - # follow the form of the VCS name, followed by ":", followed - # by the version vector itself. - # By convention, popular VCSes like CVS, SVN and GIT use "$" - # around the actual version vector. - [^\s\:]+\:\s*\$[^\$]+\$ - )'; - - /** @var string The version vector. */ - protected $version = ''; - - public function getContent() - { - if (null === $this->content) { - $this->content = "{$this->version} {$this->description}"; - } - - return $this->content; - } - - /** - * {@inheritdoc} - */ - public function setContent($content) - { - parent::setContent($content); - - if (preg_match( - '/^ - # The version vector - (' . self::REGEX_VECTOR . ') - \s* - # The description - (.+)? - $/sux', - $this->description, - $matches - )) { - $this->version = $matches[1]; - $this->setDescription(isset($matches[2]) ? $matches[2] : ''); - $this->content = $content; - } - - return $this; - } - - /** - * Gets the version section of the tag. - * - * @return string The version section of the tag. - */ - public function getVersion() - { - return $this->version; - } - - /** - * Sets the version section of the tag. - * - * @param string $version The new version section of the tag. - * An invalid value will set an empty string. - * - * @return $this - */ - public function setVersion($version) - { - $this->version - = preg_match('/^' . self::REGEX_VECTOR . '$/ux', $version) - ? $version - : ''; - - $this->content = null; - return $this; - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php deleted file mode 100644 index 90ead3ff..00000000 --- a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Type/Collection.php +++ /dev/null @@ -1,221 +0,0 @@ - - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Type; - -use phpDocumentor\Reflection\DocBlock\Context; - -/** - * Collection - * - * @author Mike van Riel - * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com) - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ -class Collection extends \ArrayObject -{ - /** @var string Definition of the OR operator for types */ - const OPERATOR_OR = '|'; - - /** @var string Definition of the ARRAY operator for types */ - const OPERATOR_ARRAY = '[]'; - - /** @var string Definition of the NAMESPACE operator in PHP */ - const OPERATOR_NAMESPACE = '\\'; - - /** @var string[] List of recognized keywords */ - protected static $keywords = array( - 'string', 'int', 'integer', 'bool', 'boolean', 'float', 'double', - 'object', 'mixed', 'array', 'resource', 'void', 'null', 'scalar', - 'callback', 'callable', 'false', 'true', 'self', '$this', 'static' - ); - - /** - * Current invoking location. - * - * This is used to prepend to type with a relative location. - * May also be 'default' or 'global', in which case they are ignored. - * - * @var Context - */ - protected $context = null; - - /** - * Registers the namespace and aliases; uses that to add and expand the - * given types. - * - * @param string[] $types Array containing a list of types to add to this - * container. - * @param Context $location The current invoking location. - */ - public function __construct( - array $types = array(), - Context $context = null - ) { - $this->context = null === $context ? new Context() : $context; - - foreach ($types as $type) { - $this->add($type); - } - } - - /** - * Returns the current invoking location. - * - * @return Context - */ - public function getContext() - { - return $this->context; - } - - /** - * Adds a new type to the collection and expands it if it contains a - * relative namespace. - * - * If a class in the type contains a relative namespace than this collection - * will try to expand that into a FQCN. - * - * @param string $type A 'Type' as defined in the phpDocumentor - * documentation. - * - * @throws \InvalidArgumentException if a non-string argument is passed. - * - * @see http://phpdoc.org/docs/latest/for-users/types.html for the - * definition of a type. - * - * @return void - */ - public function add($type) - { - if (!is_string($type)) { - throw new \InvalidArgumentException( - 'A type should be represented by a string, received: ' - .var_export($type, true) - ); - } - - // separate the type by the OR operator - $type_parts = explode(self::OPERATOR_OR, $type); - foreach ($type_parts as $part) { - $expanded_type = $this->expand($part); - if ($expanded_type) { - $this[] = $expanded_type; - } - } - } - - /** - * Returns a string representation of the collection. - * - * @return string The resolved types across the collection, separated with - * {@link self::OPERATOR_OR}. - */ - public function __toString() - { - return implode(self::OPERATOR_OR, $this->getArrayCopy()); - } - - /** - * Analyzes the given type and returns the FQCN variant. - * - * When a type is provided this method checks whether it is not a keyword or - * Fully Qualified Class Name. If so it will use the given namespace and - * aliases to expand the type to a FQCN representation. - * - * This method only works as expected if the namespace and aliases are set; - * no dynamic reflection is being performed here. - * - * @param string $type The relative or absolute type. - * - * @uses getNamespace to determine with what to prefix the type name. - * @uses getNamespaceAliases to check whether the first part of the relative - * type name should not be replaced with another namespace. - * - * @return string - */ - protected function expand($type) - { - $type = trim($type); - if (!$type) { - return ''; - } - - if ($this->isTypeAnArray($type)) { - return $this->expand(substr($type, 0, -2)) . self::OPERATOR_ARRAY; - } - - if ($this->isRelativeType($type) && !$this->isTypeAKeyword($type)) { - $type_parts = explode(self::OPERATOR_NAMESPACE, $type, 2); - - $namespace_aliases = $this->context->getNamespaceAliases(); - // if the first segment is not an alias; prepend namespace name and - // return - if (!isset($namespace_aliases[$type_parts[0]])) { - $namespace = $this->context->getNamespace(); - if ('' !== $namespace) { - $namespace .= self::OPERATOR_NAMESPACE; - } - return self::OPERATOR_NAMESPACE . $namespace . $type; - } - - $type_parts[0] = $namespace_aliases[$type_parts[0]]; - $type = implode(self::OPERATOR_NAMESPACE, $type_parts); - } - - return $type; - } - - /** - * Detects whether the given type represents an array. - * - * @param string $type A relative or absolute type as defined in the - * phpDocumentor documentation. - * - * @return bool - */ - protected function isTypeAnArray($type) - { - return substr($type, -2) === self::OPERATOR_ARRAY; - } - - /** - * Detects whether the given type represents a PHPDoc keyword. - * - * @param string $type A relative or absolute type as defined in the - * phpDocumentor documentation. - * - * @return bool - */ - protected function isTypeAKeyword($type) - { - return in_array(strtolower($type), static::$keywords, true); - } - - /** - * Detects whether the given type represents a relative or absolute path. - * - * This method will detect keywords as being absolute; even though they are - * not preceeded by a namespace separator. - * - * @param string $type A relative or absolute type as defined in the - * phpDocumentor documentation. - * - * @return bool - */ - protected function isRelativeType($type) - { - return ($type[0] !== self::OPERATOR_NAMESPACE) - || $this->isTypeAKeyword($type); - } -} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.gitignore b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.gitignore new file mode 100644 index 00000000..82cfc4e9 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.gitignore @@ -0,0 +1,3 @@ +.idea +composer.lock +vendor diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.scrutinizer.yml b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.scrutinizer.yml new file mode 100644 index 00000000..7d7372a8 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.scrutinizer.yml @@ -0,0 +1,31 @@ +before_commands: + - "composer install --no-dev --prefer-source" + +tools: + external_code_coverage: true + php_code_sniffer: + config: + standard: PSR2 + filter: + paths: ["src/*", "tests/*"] + php_cpd: + enabled: true + excluded_dirs: ["tests", "vendor"] + php_loc: + enabled: true + excluded_dirs: ["tests", "vendor"] + php_mess_detector: + enabled: true + config: + ruleset: phpmd.xml.dist + design_rules: { eval_expression: false } + filter: + paths: ["src/*"] + php_pdepend: + enabled: true + excluded_dirs: ["tests", "vendor"] + php_analyzer: + enabled: true + filter: + paths: ["src/*", "tests/*"] + sensiolabs_security_checker: true diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.travis.yml b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.travis.yml new file mode 100644 index 00000000..c882b141 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/.travis.yml @@ -0,0 +1,34 @@ +language: php +php: + - 5.5 + - 5.6 + - 7.0 + - hhvm + - nightly + +matrix: + allow_failures: + - php: + - hhvm + - nightly + +cache: + directories: + - $HOME/.composer/cache + +script: + - vendor/bin/phpunit --coverage-clover=coverage.clover -v + - composer update --no-interaction --prefer-source + - vendor/bin/phpunit -v + +before_script: + - composer install --no-interaction + +after_script: + - if [ $TRAVIS_PHP_VERSION = '5.6' ]; then wget https://scrutinizer-ci.com/ocular.phar; php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi + +notifications: + irc: "irc.freenode.org#phpdocumentor" + email: + - me@mikevanriel.com + - ashnazg@php.net diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/LICENSE b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/LICENSE new file mode 100644 index 00000000..792e4040 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2010 Mike van Riel + +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. diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/README.md b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/README.md new file mode 100644 index 00000000..ca8147bc --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/README.md @@ -0,0 +1,169 @@ +TypeResolver and FqsenResolver +============================== + +The specification on types in DocBlocks (PSR-5) describes various keywords and special constructs +but also how to statically resolve the partial name of a Class into a Fully Qualified Class Name (FQCN). + +PSR-5 also introduces an additional way to describe deeper elements than Classes, Interfaces and Traits +called the Fully Qualified Structural Element Name (FQSEN). Using this it is possible to refer to methods, +properties and class constants but also functions and global constants. + +This package provides two Resolvers that are capable of + +1. Returning a series of Value Object for given expression while resolving any partial class names, and +2. Returning an FQSEN object after resolving any partial Structural Element Names into Fully Qualified Structural + Element names. + +## Installing + +The easiest way to install this library is with [Composer](https://getcomposer.org) using the following command: + + $ composer require phpdocumentor/type-resolver + +## Examples + +Ready to dive in and don't want to read through all that text below? Just consult the [examples](examples) folder and +check which type of action that your want to accomplish. + +## On Types and Element Names + +This component can be used in one of two ways + +1. To resolve a Type or +2. To resolve a Fully Qualified Structural Element Name + +The big difference between these two is in the number of things it can resolve. + +The TypeResolver can resolve: + +- a php primitive or pseudo-primitive such as a string or void (`@var string` or `@return void`). +- a composite such as an array of string (`@var string[]`). +- a compound such as a string or integer (`@var string|integer`). +- an object or interface such as the TypeResolver class (`@var TypeResolver` + or `@var \phpDocumentor\Reflection\TypeResolver`) + + > please note that if you want to pass partial class names that additional steps are necessary, see the + > chapter `Resolving partial classes and FQSENs` for more information. + +Where the FqsenResolver can resolve: + +- Constant expressions (i.e. `@see \MyNamespace\MY_CONSTANT`) +- Function expressions (i.e. `@see \MyNamespace\myFunction()`) +- Class expressions (i.e. `@see \MyNamespace\MyClass`) +- Interface expressions (i.e. `@see \MyNamespace\MyInterface`) +- Trait expressions (i.e. `@see \MyNamespace\MyTrait`) +- Class constant expressions (i.e. `@see \MyNamespace\MyClass::MY_CONSTANT`) +- Property expressions (i.e. `@see \MyNamespace\MyClass::$myProperty`) +- Method expressions (i.e. `@see \MyNamespace\MyClass::myMethod()`) + +## Resolving a type + +In order to resolve a type you will have to instantiate the class `\phpDocumentor\Reflection\TypeResolver` +and call its `resolve` method like this: + + $typeResolver = new \phpDocumentor\Reflection\TypeResolver(); + $type = $typeResolver->resolve('string|integer'); + +In this example you will receive a Value Object of class `\phpDocumentor\Reflection\Types\Compound` that has two +elements, one of type `\phpDocumentor\Reflection\Types\String_` and one of type +`\phpDocumentor\Reflection\Types\Integer`. + +The real power of this resolver is in its capability to expand partial class names into fully qualified class names; but +in order to do that we need an additional `\phpDocumentor\Reflection\Types\Context` class that will inform the resolver +in which namespace the given expression occurs and which namespace aliases (or imports) apply. + +## Resolving an FQSEN + +A Fully Qualified Structural Element Name is a reference to another element in your code bases and can be resolved using +the `\phpDocumentor\Reflection\FqsenResolver` class' `resolve` method, like this: + + $fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); + $fqsen = $fqsenResolver->resolve('\phpDocumentor\Reflection\FqsenResolver::resolve()'); + +In this example we resolve a Fully Qualified Structural Element Name (meaning that it includes the full namespace, class +name and element name) and receive a Value Object of type `\phpDocumentor\Reflection\Fqsen`. + +The real power of this resolver is in its capability to expand partial element names into Fully Qualified Structural +Element Names; but in order to do that we need an additional `\phpDocumentor\Reflection\Types\Context` class that will +inform the resolver in which namespace the given expression occurs and which namespace aliases (or imports) apply. + +## Resolving partial Classes and Structural Element Names + +Perhaps the best feature of this library is that it knows how to resolve partial class names into fully qualified class +names. + +For example, you have this file: + +```php + '\phpDocumentor\Reflection\Types'] + ); + +Or by using the `\phpDocumentor\Reflection\Types\ContextFactory` to instantiate a new context based on a Reflector +object or by providing the namespace that you'd like to extract and the source code of the file in which the given +type expression occurs. + + $contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); + $context = $contextFactory->createFromReflector(new ReflectionMethod('\My\Example\Classy', '__construct')); + +or + + $contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); + $context = $contextFactory->createForNamespace('\My\Example', file_get_contents('My/Example/Classy.php')); + +### Using the Context + +After you have obtained a Context it is just a matter of passing it along with the `resolve` method of either Resolver +class as second argument and the Resolvers will take this into account when resolving partial names. + +To obtain the resolved class name for the `@var` tag in the example above you can do: + + $typeResolver = new \phpDocumentor\Reflection\TypeResolver(); + $type = $typeResolver->resolve('Types\Context', $context); + +When you do this you will receive an object of class `\phpDocumentor\Reflection\Types\Object_` for which you can call +the `getFqsen` method to receive a Value Object that represents the complete FQSEN. So that would be +`phpDocumentor\Reflection\Types\Context`. + +> Why is the FQSEN wrapped in another object `Object_`? +> +> The resolve method of the TypeResolver only returns object with the interface `Type` and the FQSEN is a common +> type that does not represent a Type. Also: in some cases a type can represent an "Untyped Object", meaning that it +> is an object (signified by the `object` keyword) but does not refer to a specific element using an FQSEN. + +Another example is on how to resolve the FQSEN of a method as can be seen with the `@see` tag in the example above. To +resolve that you can do the following: + + $fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); + $type = $fqsenResolver->resolve('Classy::otherFunction()', $context); + +Because Classy is a Class in the current namespace its FQSEN will have the `My\Example` namespace and by calling the +`resolve` method of the FQSEN Resolver you will receive an `Fqsen` object that refers to +`\My\Example\Classy::otherFunction()`. diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php new file mode 100644 index 00000000..682b1d3d --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php @@ -0,0 +1,13 @@ +resolve('string|integer')); + +// Will return the string "string|int" +var_dump((string)$typeResolver->resolve('string|integer')); diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php new file mode 100644 index 00000000..70aa5e42 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php @@ -0,0 +1,12 @@ + 'Mockery' ]); +var_dump((string)$typeResolver->resolve('Types\Resolver|m\MockInterface', $context)); diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php new file mode 100644 index 00000000..4f4282eb --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php @@ -0,0 +1,17 @@ +resolve('Types\Resolver::resolveFqsen()', $context)); + +// Property named: \phpDocumentor\Types\Types\Resolver::$keyWords +var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php new file mode 100644 index 00000000..957c97dd --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php @@ -0,0 +1,30 @@ +createFromReflector(new ReflectionClass('My\\Example\\Classy')); + +// Class named: \phpDocumentor\Reflection\Types\Resolver +var_dump((string)$typeResolver->resolve('Types\Resolver', $context)); + +// String +var_dump((string)$typeResolver->resolve('string', $context)); + +// Property named: \phpDocumentor\Reflection\Types\Resolver::$keyWords +var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); + +// Class named: \My\Example\string +// - Shows the difference between the FqsenResolver and TypeResolver; the FqsenResolver will assume +// that the given value is not a type but most definitely a reference to another element. This is +// because conflicts between type keywords and class names can exist and if you know a reference +// is not a type but an element you can force that keywords are resolved. +var_dump((string)$fqsenResolver->resolve('string', $context)); diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php new file mode 100644 index 00000000..10c0c883 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php @@ -0,0 +1,30 @@ +createFromReflector(new ReflectionMethod('My\\Example\\Classy', '__construct')); + +// Class named: \phpDocumentor\Reflection\Types\Resolver +var_dump((string)$typeResolver->resolve('Types\Resolver', $context)); + +// String +var_dump((string)$typeResolver->resolve('string', $context)); + +// Property named: \phpDocumentor\Reflection\Types\Resolver::$keyWords +var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); + +// Class named: \My\Example\string +// - Shows the difference between the FqsenResolver and TypeResolver; the FqsenResolver will assume +// that the given value is not a type but most definitely a reference to another element. This is +// because conflicts between type keywords and class names can exist and if you know a reference +// is not a type but an element you can force that keywords are resolved. +var_dump((string)$fqsenResolver->resolve('string', $context)); diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php new file mode 100644 index 00000000..a93728c8 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php @@ -0,0 +1,22 @@ +createForNamespace('My\Example', file_get_contents('Classy.php')); + +// Class named: \phpDocumentor\Reflection\Types\Resolver +var_dump((string)$typeResolver->resolve('Types\Resolver', $context)); + +// String +var_dump((string)$typeResolver->resolve('string', $context)); + +// Property named: \phpDocumentor\Reflection\Types\Resolver::$keyWords +var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/Classy.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/Classy.php new file mode 100644 index 00000000..0705266f --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/examples/Classy.php @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + 40 + + + diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/phpunit.xml.dist b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/phpunit.xml.dist new file mode 100644 index 00000000..3246bef4 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/phpunit.xml.dist @@ -0,0 +1,31 @@ + + + + + + ./tests/unit + + + + + ./src/ + + + ./examples/ + ./vendor/ + + + + + + diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php new file mode 100644 index 00000000..a0e0041c --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php @@ -0,0 +1,76 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection; + +use phpDocumentor\Reflection\Types\Context; + +class FqsenResolver +{ + /** @var string Definition of the NAMESPACE operator in PHP */ + const OPERATOR_NAMESPACE = '\\'; + + public function resolve($fqsen, Context $context = null) + { + if ($context === null) { + $context = new Context(''); + } + + if ($this->isFqsen($fqsen)) { + return new Fqsen($fqsen); + } + + return $this->resolvePartialStructuralElementName($fqsen, $context); + } + + /** + * Tests whether the given type is a Fully Qualified Structural Element Name. + * + * @param string $type + * + * @return bool + */ + private function isFqsen($type) + { + return strpos($type, self::OPERATOR_NAMESPACE) === 0; + } + + /** + * Resolves a partial Structural Element Name (i.e. `Reflection\DocBlock`) to its FQSEN representation + * (i.e. `\phpDocumentor\Reflection\DocBlock`) based on the Namespace and aliases mentioned in the Context. + * + * @param string $type + * @param Context $context + * + * @return Fqsen + */ + private function resolvePartialStructuralElementName($type, Context $context) + { + $typeParts = explode(self::OPERATOR_NAMESPACE, $type, 2); + + $namespaceAliases = $context->getNamespaceAliases(); + + // if the first segment is not an alias; prepend namespace name and return + if (!isset($namespaceAliases[$typeParts[0]])) { + $namespace = $context->getNamespace(); + if ('' !== $namespace) { + $namespace .= self::OPERATOR_NAMESPACE; + } + + return new Fqsen(self::OPERATOR_NAMESPACE . $namespace . $type); + } + + $typeParts[0] = $namespaceAliases[$typeParts[0]]; + + return new Fqsen(self::OPERATOR_NAMESPACE . implode(self::OPERATOR_NAMESPACE, $typeParts)); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Type.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Type.php new file mode 100644 index 00000000..33ca5595 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Type.php @@ -0,0 +1,18 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection; + +interface Type +{ + public function __toString(); +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/TypeResolver.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/TypeResolver.php new file mode 100644 index 00000000..3a68a4d3 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/TypeResolver.php @@ -0,0 +1,266 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection; + +use phpDocumentor\Reflection\Types\Array_; +use phpDocumentor\Reflection\Types\Compound; +use phpDocumentor\Reflection\Types\Context; +use phpDocumentor\Reflection\Types\Object_; + +final class TypeResolver +{ + /** @var string Definition of the ARRAY operator for types */ + const OPERATOR_ARRAY = '[]'; + + /** @var string Definition of the NAMESPACE operator in PHP */ + const OPERATOR_NAMESPACE = '\\'; + + /** @var string[] List of recognized keywords and unto which Value Object they map */ + private $keywords = array( + 'string' => 'phpDocumentor\Reflection\Types\String_', + 'int' => 'phpDocumentor\Reflection\Types\Integer', + 'integer' => 'phpDocumentor\Reflection\Types\Integer', + 'bool' => 'phpDocumentor\Reflection\Types\Boolean', + 'boolean' => 'phpDocumentor\Reflection\Types\Boolean', + 'float' => 'phpDocumentor\Reflection\Types\Float_', + 'double' => 'phpDocumentor\Reflection\Types\Float_', + 'object' => 'phpDocumentor\Reflection\Types\Object_', + 'mixed' => 'phpDocumentor\Reflection\Types\Mixed', + 'array' => 'phpDocumentor\Reflection\Types\Array_', + 'resource' => 'phpDocumentor\Reflection\Types\Resource', + 'void' => 'phpDocumentor\Reflection\Types\Void_', + 'null' => 'phpDocumentor\Reflection\Types\Null_', + 'scalar' => 'phpDocumentor\Reflection\Types\Scalar', + 'callback' => 'phpDocumentor\Reflection\Types\Callable_', + 'callable' => 'phpDocumentor\Reflection\Types\Callable_', + 'false' => 'phpDocumentor\Reflection\Types\Boolean', + 'true' => 'phpDocumentor\Reflection\Types\Boolean', + 'self' => 'phpDocumentor\Reflection\Types\Self_', + '$this' => 'phpDocumentor\Reflection\Types\This', + 'static' => 'phpDocumentor\Reflection\Types\Static_' + ); + + /** @var FqsenResolver */ + private $fqsenResolver; + + /** + * Initializes this TypeResolver with the means to create and resolve Fqsen objects. + * + * @param FqsenResolver $fqsenResolver + */ + public function __construct(FqsenResolver $fqsenResolver = null) + { + $this->fqsenResolver = $fqsenResolver ?: new FqsenResolver(); + } + + /** + * Analyzes the given type and returns the FQCN variant. + * + * When a type is provided this method checks whether it is not a keyword or + * Fully Qualified Class Name. If so it will use the given namespace and + * aliases to expand the type to a FQCN representation. + * + * This method only works as expected if the namespace and aliases are set; + * no dynamic reflection is being performed here. + * + * @param string $type The relative or absolute type. + * @param Context $context + * + * @uses Context::getNamespace() to determine with what to prefix the type name. + * @uses Context::getNamespaceAliases() to check whether the first part of the relative type name should not be + * replaced with another namespace. + * + * @return Type|null + */ + public function resolve($type, Context $context = null) + { + if (!is_string($type)) { + throw new \InvalidArgumentException( + 'Attempted to resolve type but it appeared not to be a string, received: ' . var_export($type, true) + ); + } + + $type = trim($type); + if (!$type) { + throw new \InvalidArgumentException('Attempted to resolve "' . $type . '" but it appears to be empty'); + } + + if ($context === null) { + $context = new Context(''); + } + + switch (true) { + case $this->isKeyword($type): + return $this->resolveKeyword($type); + case ($this->isCompoundType($type)): + return $this->resolveCompoundType($type, $context); + case $this->isTypedArray($type): + return $this->resolveTypedArray($type, $context); + case $this->isFqsen($type): + return $this->resolveTypedObject($type); + case $this->isPartialStructuralElementName($type): + return $this->resolveTypedObject($type, $context); + // @codeCoverageIgnoreStart + default: + // I haven't got the foggiest how the logic would come here but added this as a defense. + throw new \RuntimeException( + 'Unable to resolve type "' . $type . '", there is no known method to resolve it' + ); + } + // @codeCoverageIgnoreEnd + } + + /** + * Adds a keyword to the list of Keywords and associates it with a specific Value Object. + * + * @param string $keyword + * @param string $typeClassName + * + * @return void + */ + public function addKeyword($keyword, $typeClassName) + { + if (!class_exists($typeClassName)) { + throw new \InvalidArgumentException( + 'The Value Object that needs to be created with a keyword "' . $keyword . '" must be an existing class' + . ' but we could not find the class ' . $typeClassName + ); + } + + if (!in_array(Type::class, class_implements($typeClassName))) { + throw new \InvalidArgumentException( + 'The class "' . $typeClassName . '" must implement the interface "phpDocumentor\Reflection\Type"' + ); + } + + $this->keywords[$keyword] = $typeClassName; + } + + /** + * Detects whether the given type represents an array. + * + * @param string $type A relative or absolute type as defined in the phpDocumentor documentation. + * + * @return bool + */ + private function isTypedArray($type) + { + return substr($type, -2) === self::OPERATOR_ARRAY; + } + + /** + * Detects whether the given type represents a PHPDoc keyword. + * + * @param string $type A relative or absolute type as defined in the phpDocumentor documentation. + * + * @return bool + */ + private function isKeyword($type) + { + return in_array(strtolower($type), array_keys($this->keywords), true); + } + + /** + * Detects whether the given type represents a relative structural element name. + * + * @param string $type A relative or absolute type as defined in the phpDocumentor documentation. + * + * @return bool + */ + private function isPartialStructuralElementName($type) + { + return ($type[0] !== self::OPERATOR_NAMESPACE) && !$this->isKeyword($type); + } + + /** + * Tests whether the given type is a Fully Qualified Structural Element Name. + * + * @param string $type + * + * @return bool + */ + private function isFqsen($type) + { + return strpos($type, self::OPERATOR_NAMESPACE) === 0; + } + + /** + * Tests whether the given type is a compound type (i.e. `string|int`). + * + * @param string $type + * + * @return bool + */ + private function isCompoundType($type) + { + return strpos($type, '|') !== false; + } + + /** + * Resolves the given typed array string (i.e. `string[]`) into an Array object with the right types set. + * + * @param string $type + * @param Context $context + * + * @return Array_ + */ + private function resolveTypedArray($type, Context $context) + { + return new Array_($this->resolve(substr($type, 0, -2), $context)); + } + + /** + * Resolves the given keyword (such as `string`) into a Type object representing that keyword. + * + * @param string $type + * + * @return Type + */ + private function resolveKeyword($type) + { + $className = $this->keywords[strtolower($type)]; + + return new $className(); + } + + /** + * Resolves the given FQSEN string into an FQSEN object. + * + * @param string $type + * + * @return Object_ + */ + private function resolveTypedObject($type, Context $context = null) + { + return new Object_($this->fqsenResolver->resolve($type, $context)); + } + + /** + * Resolves a compound type (i.e. `string|int`) into the appropriate Type objects or FQSEN. + * + * @param string $type + * @param Context $context + * + * @return Compound + */ + private function resolveCompoundType($type, Context $context) + { + $types = []; + + foreach (explode('|', $type) as $part) { + $types[] = $this->resolve($part, $context); + } + + return new Compound($types); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Array_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Array_.php new file mode 100644 index 00000000..45276c6b --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Array_.php @@ -0,0 +1,87 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Fqsen; +use phpDocumentor\Reflection\Type; + +/** + * Represents an array type as described in the PSR-5, the PHPDoc Standard. + * + * An array can be represented in two forms: + * + * 1. Untyped (`array`), where the key and value type is unknown and hence classified as 'Mixed'. + * 2. Types (`string[]`), where the value type is provided by preceding an opening and closing square bracket with a + * type name. + */ +final class Array_ implements Type +{ + /** @var Type */ + private $valueType; + + /** @var Type */ + private $keyType; + + /** + * Initializes this representation of an array with the given Type or Fqsen. + * + * @param Type $valueType + * @param Type $keyType + */ + public function __construct(Type $valueType = null, Type $keyType = null) + { + if ($keyType === null) { + $keyType = new Compound([ new String_(), new Integer() ]); + } + if ($valueType === null) { + $valueType = new Mixed(); + } + + $this->valueType = $valueType; + $this->keyType = $keyType; + } + + /** + * Returns the type for the keys of this array. + * + * @return Type + */ + public function getKeyType() + { + return $this->keyType; + } + + /** + * Returns the value for the keys of this array. + * + * @return Type + */ + public function getValueType() + { + return $this->valueType; + } + + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + if ($this->valueType instanceof Mixed) { + return 'array'; + } + + return $this->valueType . '[]'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Boolean.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Boolean.php new file mode 100644 index 00000000..f82b19e5 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Boolean.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing a Boolean type. + */ +final class Boolean implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'bool'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Callable_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Callable_.php new file mode 100644 index 00000000..68ebfbd0 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Callable_.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing a Callable type. + */ +final class Callable_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'callable'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Compound.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Compound.php new file mode 100644 index 00000000..3e5ebb5c --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Compound.php @@ -0,0 +1,82 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing a Compound Type. + * + * A Compound Type is not so much a special keyword or object reference but is a series of Types that are separated + * using an OR operator (`|`). This combination of types signifies that whatever is associated with this compound type + * may contain a value with any of the given types. + */ +final class Compound implements Type +{ + /** @var Type[] */ + private $types = []; + + /** + * Initializes a compound type (i.e. `string|int`) and tests if the provided types all implement the Type interface. + * + * @param Type[] $types + */ + public function __construct(array $types) + { + foreach ($types as $type) { + if (!$type instanceof Type) { + throw new \InvalidArgumentException('A compound type can only have other types as elements'); + } + } + + $this->types = $types; + } + + /** + * Returns the type at the given index. + * + * @param integer $index + * + * @return Type|null + */ + public function get($index) + { + if (!$this->has($index)) { + return null; + } + + return $this->types[$index]; + } + + /** + * Tests if this compound type has a type with the given index. + * + * @param integer $index + * + * @return bool + */ + public function has($index) + { + return isset($this->types[$index]); + } + + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return implode('|', $this->types); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Context.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Context.php new file mode 100644 index 00000000..b4aa8f21 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Context.php @@ -0,0 +1,84 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +/** + * Provides information about the Context in which the DocBlock occurs that receives this context. + * + * A DocBlock does not know of its own accord in which namespace it occurs and which namespace aliases are applicable + * for the block of code in which it is in. This information is however necessary to resolve Class names in tags since + * you can provide a short form or make use of namespace aliases. + * + * The phpDocumentor Reflection component knows how to create this class but if you use the DocBlock parser from your + * own application it is possible to generate a Context class using the ContextFactory; this will analyze the file in + * which an associated class resides for its namespace and imports. + * + * @see ContextFactory::createFromClassReflector() + * @see ContextFactory::createForNamespace() + */ +final class Context +{ + /** @var string The current namespace. */ + private $namespace = ''; + + /** @var array List of namespace aliases => Fully Qualified Namespace. */ + private $namespaceAliases = []; + + /** + * Initializes the new context and normalizes all passed namespaces to be in Qualified Namespace Name (QNN) + * format (without a preceding `\`). + * + * @param string $namespace The namespace where this DocBlock resides in. + * @param array $namespaceAliases List of namespace aliases => Fully Qualified Namespace. + */ + public function __construct($namespace, array $namespaceAliases = []) + { + $this->namespace = ('global' !== $namespace && 'default' !== $namespace) + ? trim((string)$namespace, '\\') + : ''; + + foreach ($namespaceAliases as $alias => $fqnn) { + if ($fqnn[0] === '\\') { + $fqnn = substr($fqnn, 1); + } + if ($fqnn[count($fqnn)-1] === '\\') { + $fqnn = substr($fqnn, 0, -1); + } + + $namespaceAliases[$alias] = $fqnn; + } + + $this->namespaceAliases = $namespaceAliases; + } + + /** + * Returns the Qualified Namespace Name (thus without `\` in front) where the associated element is in. + * + * @return string + */ + public function getNamespace() + { + return $this->namespace; + } + + /** + * Returns a list of Qualified Namespace Names (thus without `\` in front) that are imported, the keys represent + * the alias for the imported Namespace. + * + * @return string[] + */ + public function getNamespaceAliases() + { + return $this->namespaceAliases; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php new file mode 100644 index 00000000..147df694 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php @@ -0,0 +1,210 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +/** + * Convenience class to create a Context for DocBlocks when not using the Reflection Component of phpDocumentor. + * + * For a DocBlock to be able to resolve types that use partial namespace names or rely on namespace imports we need to + * provide a bit of context so that the DocBlock can read that and based on it decide how to resolve the types to + * Fully Qualified names. + * + * @see Context for more information. + */ +final class ContextFactory +{ + /** The literal used at the end of a use statement. */ + const T_LITERAL_END_OF_USE = ';'; + + /** The literal used between sets of use statements */ + const T_LITERAL_USE_SEPARATOR = ','; + + /** + * Build a Context given a Class Reflection. + * + * @param \ReflectionClass $reflector + * + * @see Context for more information on Contexts. + * + * @return Context + */ + public function createFromReflector(\Reflector $reflector) + { + if (method_exists($reflector, 'getDeclaringClass')) { + $reflector = $reflector->getDeclaringClass(); + } + + $fileName = $reflector->getFileName(); + $namespace = $reflector->getNamespaceName(); + + if (file_exists($fileName)) { + return $this->createForNamespace($namespace, file_get_contents($fileName)); + } + + return new Context($namespace, []); + } + + /** + * Build a Context for a namespace in the provided file contents. + * + * @param string $namespace It does not matter if a `\` precedes the namespace name, this method first normalizes. + * @param string $fileContents the file's contents to retrieve the aliases from with the given namespace. + * + * @see Context for more information on Contexts. + * + * @return Context + */ + public function createForNamespace($namespace, $fileContents) + { + $namespace = trim($namespace, '\\'); + $useStatements = []; + $currentNamespace = ''; + $tokens = new \ArrayIterator(token_get_all($fileContents)); + + while ($tokens->valid()) { + switch ($tokens->current()[0]) { + case T_NAMESPACE: + $currentNamespace = $this->parseNamespace($tokens); + break; + case T_CLASS: + // Fast-forward the iterator through the class so that any + // T_USE tokens found within are skipped - these are not + // valid namespace use statements so should be ignored. + $braceLevel = 0; + $firstBraceFound = false; + while ($tokens->valid() && ($braceLevel > 0 || !$firstBraceFound)) { + if ($tokens->current() === '{' + || $tokens->current()[0] === T_CURLY_OPEN + || $tokens->current()[0] === T_DOLLAR_OPEN_CURLY_BRACES) { + if (!$firstBraceFound) { + $firstBraceFound = true; + } + $braceLevel++; + } + + if ($tokens->current() === '}') { + $braceLevel--; + } + $tokens->next(); + } + break; + case T_USE: + if ($currentNamespace === $namespace) { + $useStatements = array_merge($useStatements, $this->parseUseStatement($tokens)); + } + break; + } + $tokens->next(); + } + + return new Context($namespace, $useStatements); + } + + /** + * Deduce the name from tokens when we are at the T_NAMESPACE token. + * + * @param \ArrayIterator $tokens + * + * @return string + */ + private function parseNamespace(\ArrayIterator $tokens) + { + // skip to the first string or namespace separator + $this->skipToNextStringOrNamespaceSeparator($tokens); + + $name = ''; + while ($tokens->valid() && ($tokens->current()[0] === T_STRING || $tokens->current()[0] === T_NS_SEPARATOR) + ) { + $name .= $tokens->current()[1]; + $tokens->next(); + } + + return $name; + } + + /** + * Deduce the names of all imports when we are at the T_USE token. + * + * @param \ArrayIterator $tokens + * + * @return string[] + */ + private function parseUseStatement(\ArrayIterator $tokens) + { + $uses = []; + $continue = true; + + while ($continue) { + $this->skipToNextStringOrNamespaceSeparator($tokens); + + list($alias, $fqnn) = $this->extractUseStatement($tokens); + $uses[$alias] = $fqnn; + if ($tokens->current()[0] === self::T_LITERAL_END_OF_USE) { + $continue = false; + } + } + + return $uses; + } + + /** + * Fast-forwards the iterator as longs as we don't encounter a T_STRING or T_NS_SEPARATOR token. + * + * @param \ArrayIterator $tokens + * + * @return void + */ + private function skipToNextStringOrNamespaceSeparator(\ArrayIterator $tokens) + { + while ($tokens->valid() && ($tokens->current()[0] !== T_STRING) && ($tokens->current()[0] !== T_NS_SEPARATOR)) { + $tokens->next(); + } + } + + /** + * Deduce the namespace name and alias of an import when we are at the T_USE token or have not reached the end of + * a USE statement yet. + * + * @param \ArrayIterator $tokens + * + * @return string + */ + private function extractUseStatement(\ArrayIterator $tokens) + { + $result = ['']; + while ($tokens->valid() + && ($tokens->current()[0] !== self::T_LITERAL_USE_SEPARATOR) + && ($tokens->current()[0] !== self::T_LITERAL_END_OF_USE) + ) { + if ($tokens->current()[0] === T_AS) { + $result[] = ''; + } + if ($tokens->current()[0] === T_STRING || $tokens->current()[0] === T_NS_SEPARATOR) { + $result[count($result) - 1] .= $tokens->current()[1]; + } + $tokens->next(); + } + + if (count($result) == 1) { + $backslashPos = strrpos($result[0], '\\'); + + if (false !== $backslashPos) { + $result[] = substr($result[0], $backslashPos + 1); + } else { + $result[] = $result[0]; + } + } + + return array_reverse($result); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Float_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Float_.php new file mode 100644 index 00000000..e58d8966 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Float_.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing a Float. + */ +final class Float_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'float'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Integer.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Integer.php new file mode 100644 index 00000000..be4555ef --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Integer.php @@ -0,0 +1,28 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +final class Integer implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'int'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php new file mode 100644 index 00000000..79695f45 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing an unknown, or mixed, type. + */ +final class Mixed implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'mixed'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Null_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Null_.php new file mode 100644 index 00000000..203b4227 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Null_.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing a null value or type. + */ +final class Null_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'null'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Object_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Object_.php new file mode 100644 index 00000000..b337c715 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Object_.php @@ -0,0 +1,70 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Fqsen; +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing an object. + * + * An object can be either typed or untyped. When an object is typed it means that it has an identifier, the FQSEN, + * pointing to an element in PHP. Object types that are untyped do not refer to a specific class but represent objects + * in general. + */ +final class Object_ implements Type +{ + /** @var Fqsen|null */ + private $fqsen; + + /** + * Initializes this object with an optional FQSEN, if not provided this object is considered 'untyped'. + * + * @param Fqsen $fqsen + */ + public function __construct(Fqsen $fqsen = null) + { + if (strpos((string)$fqsen, '::') !== false || strpos((string)$fqsen, '()') !== false) { + throw new \InvalidArgumentException( + 'Object types can only refer to a class, interface or trait but a method, function, constant or ' + . 'property was received: ' . (string)$fqsen + ); + } + + $this->fqsen = $fqsen; + } + + /** + * Returns the FQSEN associated with this object. + * + * @return Fqsen|null + */ + public function getFqsen() + { + return $this->fqsen; + } + + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + if ($this->fqsen) { + return (string)$this->fqsen; + } + + return 'object'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Resource.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Resource.php new file mode 100644 index 00000000..2c2526b7 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Resource.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing the 'resource' Type. + */ +final class Resource implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'resource'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Scalar.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Scalar.php new file mode 100644 index 00000000..1e2a6602 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Scalar.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing the 'scalar' pseudo-type, which is either a string, integer, float or boolean. + */ +final class Scalar implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'scalar'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Self_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Self_.php new file mode 100644 index 00000000..1ba3fc5a --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Self_.php @@ -0,0 +1,33 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing the 'self' type. + * + * Self, as a Type, represents the class in which the associated element was defined. + */ +final class Self_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'self'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Static_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Static_.php new file mode 100644 index 00000000..9eb67299 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Static_.php @@ -0,0 +1,38 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing the 'static' type. + * + * Self, as a Type, represents the class in which the associated element was called. This differs from self as self does + * not take inheritance into account but static means that the return type is always that of the class of the called + * element. + * + * See the documentation on late static binding in the PHP Documentation for more information on the difference between + * static and self. + */ +final class Static_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'static'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/String_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/String_.php new file mode 100644 index 00000000..8db59685 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/String_.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing the type 'string'. + */ +final class String_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'string'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/This.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/This.php new file mode 100644 index 00000000..c098a939 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/This.php @@ -0,0 +1,34 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing the '$this' pseudo-type. + * + * $this, as a Type, represents the instance of the class associated with the element as it was called. $this is + * commonly used when documenting fluent interfaces since it represents that the same object is returned. + */ +final class This implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return '$this'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Void_.php b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Void_.php new file mode 100644 index 00000000..3d1be272 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpdocumentor/type-resolver/src/Types/Void_.php @@ -0,0 +1,34 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing the pseudo-type 'void'. + * + * Void is generally only used when working with return types as it signifies that the method intentionally does not + * return any value. + */ +final class Void_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'void'; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/.gitignore b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/.gitignore index c50c8c4a..0c93fcf3 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/.gitignore +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/.gitignore @@ -1,4 +1,4 @@ *.tgz *.phar -bin -vendor +/composer.lock +/vendor diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/.travis.yml b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/.travis.yml index 004e612a..e75c39ef 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/.travis.yml +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/.travis.yml @@ -1,6 +1,6 @@ language: php -php: [5.3, 5.4, 5.5, 5.6, 7, hhvm] +php: [5.3, 5.4, 5.5, 5.6, 7.0, hhvm] sudo: false @@ -14,6 +14,16 @@ branches: - /^feature\/.*$/ - /^optimization\/.*$/ -before_script: travis_retry composer install --no-interaction +matrix: + fast_finish: true + include: + - php: '7.0' + env: PHPDOCUMENTOR_REFLECTION_DOCBLOCK="^2.0" + +before_script: + - if [ -n "$PHPDOCUMENTOR_REFLECTION_DOCBLOCK" ]; then + composer require "phpdocumentor/reflection-docblock:${PHPDOCUMENTOR_REFLECTION_DOCBLOCK}" --no-update; + fi; + - travis_retry composer update --no-interaction script: vendor/bin/phpspec run -fpretty -v diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/CHANGES.md b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/CHANGES.md index c293f0d4..444c1fa6 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/CHANGES.md +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/CHANGES.md @@ -1,3 +1,28 @@ +1.6.1 / 2016-06-07 +================== + + * Ignored empty method names in invalid `@method` phpdoc + * Fixed the mocking of SplFileObject + * Added compatibility with phpdocumentor/reflection-docblock 3 + +1.6.0 / 2016-02-15 +================== + + * Add Variadics support (thanks @pamil) + * Add ProphecyComparator for comparing objects that need revealing (thanks @jon-acker) + * Add ApproximateValueToken (thanks @dantleech) + * Add support for 'self' and 'parent' return type (thanks @bendavies) + * Add __invoke to allowed reflectable methods list (thanks @ftrrtf) + * Updated ExportUtil to reflect the latest changes by Sebastian (thanks @jakari) + * Specify the required php version for composer (thanks @jakzal) + * Exclude 'args' in the generated backtrace (thanks @oradwell) + * Fix code generation for scalar parameters (thanks @trowski) + * Fix missing sprintf in InvalidArgumentException __construct call (thanks @emmanuelballery) + * Fix phpdoc for magic methods (thanks @Tobion) + * Fix PhpDoc for interfaces usage (thanks @ImmRanneft) + * Prevent final methods from being manually extended (thanks @kamioftea) + * Enhance exception for invalid argument to ThrowPromise (thanks @Tobion) + 1.5.0 / 2015-04-27 ================== diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/CONTRIBUTING.md b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/CONTRIBUTING.md index 3674aac4..72d8e933 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/CONTRIBUTING.md +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/CONTRIBUTING.md @@ -2,7 +2,7 @@ Contributing ------------ Prophecy is an open source, community-driven project. If you'd like to contribute, -feel free to do this, but remember to follow this few simple rules: +feel free to do this, but remember to follow these few simple rules: - Make your feature addition or bug fix, - Add either specs or examples for any changes you're making (bugfixes or additions) @@ -16,6 +16,6 @@ Running tests Make sure that you don't break anything with your changes by running: ```bash -$> composer install --dev --prefer-dist +$> composer install --prefer-dist $> vendor/bin/phpspec run ``` diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/README.md b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/README.md index 17e57c31..65ec16c4 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/README.md +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/README.md @@ -1,5 +1,6 @@ # Prophecy +[![Stable release](https://poser.pugx.org/phpspec/prophecy/version.svg)](https://packagist.org/packages/phpspec/prophecy) [![Build Status](https://travis-ci.org/phpspec/prophecy.svg?branch=master)](https://travis-ci.org/phpspec/prophecy) Prophecy is a highly opinionated yet very powerful and flexible PHP object mocking diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php new file mode 100644 index 00000000..8799d6d5 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php @@ -0,0 +1,55 @@ +beConstructedWith(10.12345678, 4); + } + + function it_is_initializable() + { + $this->shouldHaveType('Prophecy\Argument\Token\ApproximateValueToken'); + } + + function it_implements_TokenInterface() + { + $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); + } + + function it_is_not_last() + { + $this->shouldNotBeLast(); + } + + function it_scores_10_if_rounded_argument_matches_rounded_value() + { + $this->scoreArgument(10.12345)->shouldReturn(10); + } + + function it_does_not_score_if_rounded_argument_does_not_match_rounded_value() + { + $this->scoreArgument(10.1234)->shouldReturn(false); + } + + function it_uses_a_default_precision_of_zero() + { + $this->beConstructedWith(10.7); + $this->scoreArgument(11.4)->shouldReturn(10); + } + + function it_does_not_score_if_rounded_argument_is_not_numeric() + { + $this->scoreArgument('hello')->shouldReturn(false); + } + + function it_has_simple_string_representation() + { + $this->__toString()->shouldBe('≅10.1235'); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php index 990aa80a..64232a4d 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php @@ -98,4 +98,10 @@ function it_has_a_shortcut_for_string_contains_token() $token = $this->containingString('string'); $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\StringContainsToken'); } + + function it_has_a_shortcut_for_approximate_token() + { + $token = $this->approximate(10); + $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ApproximateValueToken'); + } } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php new file mode 100644 index 00000000..06bf6f17 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php @@ -0,0 +1,39 @@ +shouldHaveType('SebastianBergmann\Comparator\ObjectComparator'); + } + + function it_accepts_only_prophecy_objects() + { + $this->accepts(123, 321)->shouldReturn(false); + $this->accepts('string', 'string')->shouldReturn(false); + $this->accepts(false, true)->shouldReturn(false); + $this->accepts(true, false)->shouldReturn(false); + $this->accepts((object)array(), (object)array())->shouldReturn(false); + $this->accepts(function(){}, (object)array())->shouldReturn(false); + $this->accepts(function(){}, function(){})->shouldReturn(false); + + $prophet = new Prophet(); + $prophecy = $prophet->prophesize('Prophecy\Prophecy\ObjectProphecy'); + + $this->accepts($prophecy, $prophecy)->shouldReturn(true); + } + + function it_asserts_that_an_object_is_equal_to_its_revealed_prophecy() + { + $prophet = new Prophet(); + $prophecy = $prophet->prophesize('Prophecy\Prophecy\ObjectProphecy'); + + $this->shouldNotThrow()->duringAssertEquals($prophecy->reveal(), $prophecy); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php index cb1d0f01..edd8b80d 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php @@ -46,6 +46,31 @@ function it_ignores_existing_methods($node) $this->apply($node); } + /** + * @param \Prophecy\Doubler\Generator\Node\ClassNode $node + */ + function it_ignores_empty_methods_from_phpdoc($node) + { + $node->getParentClass()->willReturn('spec\Prophecy\Doubler\ClassPatch\MagicalApiInvalidMethodDefinition'); + + $node->addMethod(new MethodNode(''))->shouldNotBeCalled(); + + $this->apply($node); + } + + /** + * @param \Prophecy\Doubler\Generator\Node\ClassNode $node + */ + function it_discovers_api_using_phpdoc_from_interface($node) + { + $node->getParentClass()->willReturn('spec\Prophecy\Doubler\ClassPatch\MagicalApiImplemented'); + + $node->addMethod(new MethodNode('implementedMethod'))->shouldBeCalled(); + + $this->apply($node); + } + + function it_has_50_priority() { $this->getPriority()->shouldReturn(50); @@ -66,6 +91,15 @@ public function definedMethod() } } +/** + * @method void invalidMethodDefinition + * @method void + * @method + */ +class MagicalApiInvalidMethodDefinition +{ +} + /** * @method void undefinedMethod() * @method void definedMethod() @@ -73,4 +107,19 @@ public function definedMethod() class MagicalApiExtended extends MagicalApi { -} \ No newline at end of file +} + +/** + */ +class MagicalApiImplemented implements MagicalApiInterface +{ + +} + +/** + * @method void implementedMethod() + */ +interface MagicalApiInterface +{ + +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php index 37fe82f6..42e854ac 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php @@ -88,4 +88,20 @@ function it_should_not_supply_a_file_for_a_directory_iterator($node, $method) $this->apply($node); } + /** + * @param \Prophecy\Doubler\Generator\Node\ClassNode $node + * @param \Prophecy\Doubler\Generator\Node\MethodNode $method + */ + function it_should_supply_a_file_for_a_spl_file_object($node, $method) + { + $node->hasMethod('__construct')->willReturn(true); + $node->getMethod('__construct')->willReturn($method); + $node->getParentClass()->willReturn('SplFileObject'); + + $method->setCode(Argument::that(function($value) { + return strpos($value, '.php') !== false; + }))->shouldBeCalled(); + + $this->apply($node); + } } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php index fa65bc15..b0830482 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php @@ -57,26 +57,32 @@ function it_generates_proper_php_code_for_specific_ClassNode( $argument11->isOptional()->willReturn(true); $argument11->getDefault()->willReturn(null); $argument11->isPassedByReference()->willReturn(false); + $argument11->isVariadic()->willReturn(false); $argument12->getName()->willReturn('class'); $argument12->getTypeHint()->willReturn('ReflectionClass'); $argument12->isOptional()->willReturn(false); $argument12->isPassedByReference()->willReturn(false); + $argument12->isVariadic()->willReturn(false); $argument21->getName()->willReturn('default'); - $argument21->getTypeHint()->willReturn(null); + $argument21->getTypeHint()->willReturn('string'); $argument21->isOptional()->willReturn(true); $argument21->getDefault()->willReturn('ever.zet@gmail.com'); $argument21->isPassedByReference()->willReturn(false); + $argument21->isVariadic()->willReturn(false); $argument31->getName()->willReturn('refValue'); $argument31->getTypeHint()->willReturn(null); $argument31->isOptional()->willReturn(false); $argument31->getDefault()->willReturn(); $argument31->isPassedByReference()->willReturn(false); + $argument31->isVariadic()->willReturn(false); $code = $this->generate('CustomClass', $class); - $expected = <<<'PHP' + + if (version_compare(PHP_VERSION, '7.0', '>=')) { + $expected = <<<'PHP' namespace { class CustomClass extends \RuntimeException implements \Prophecy\Doubler\Generator\MirroredInterface, \ArrayAccess, \ArrayIterator { public $name; @@ -85,13 +91,138 @@ class CustomClass extends \RuntimeException implements \Prophecy\Doubler\Generat public static function getName(array $fullname = NULL, \ReflectionClass $class): string { return $this->name; } -protected function getEmail( $default = 'ever.zet@gmail.com') { +protected function getEmail(string $default = 'ever.zet@gmail.com') { +return $this->email; +} +public function &getRefValue( $refValue) { +return $this->refValue; +} + +} +} +PHP; + } else { + $expected = <<<'PHP' +namespace { +class CustomClass extends \RuntimeException implements \Prophecy\Doubler\Generator\MirroredInterface, \ArrayAccess, \ArrayIterator { +public $name; +private $email; + +public static function getName(array $fullname = NULL, \ReflectionClass $class) { +return $this->name; +} +protected function getEmail(\string $default = 'ever.zet@gmail.com') { return $this->email; } public function &getRefValue( $refValue) { return $this->refValue; } +} +} +PHP; + } + $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); + $code->shouldBe($expected); + } + + /** + * @param \Prophecy\Doubler\Generator\Node\ClassNode $class + * @param \Prophecy\Doubler\Generator\Node\MethodNode $method1 + * @param \Prophecy\Doubler\Generator\Node\MethodNode $method2 + * @param \Prophecy\Doubler\Generator\Node\MethodNode $method3 + * @param \Prophecy\Doubler\Generator\Node\MethodNode $method4 + * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument1 + * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument2 + * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument3 + * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument4 + */ + function it_generates_proper_php_code_for_variadics( + $class, $method1, $method2, $method3, $method4, $argument1, $argument2, + $argument3, $argument4 + ) + { + $class->getParentClass()->willReturn('stdClass'); + $class->getInterfaces()->willReturn(array('Prophecy\Doubler\Generator\MirroredInterface')); + $class->getProperties()->willReturn(array()); + $class->getMethods()->willReturn(array( + $method1, $method2, $method3, $method4 + )); + + $method1->getName()->willReturn('variadic'); + $method1->getVisibility()->willReturn('public'); + $method1->returnsReference()->willReturn(false); + $method1->isStatic()->willReturn(false); + $method1->getArguments()->willReturn(array($argument1)); + $method1->hasReturnType()->willReturn(false); + $method1->getCode()->willReturn(''); + + $method2->getName()->willReturn('variadicByRef'); + $method2->getVisibility()->willReturn('public'); + $method2->returnsReference()->willReturn(false); + $method2->isStatic()->willReturn(false); + $method2->getArguments()->willReturn(array($argument2)); + $method2->hasReturnType()->willReturn(false); + $method2->getCode()->willReturn(''); + + $method3->getName()->willReturn('variadicWithType'); + $method3->getVisibility()->willReturn('public'); + $method3->returnsReference()->willReturn(false); + $method3->isStatic()->willReturn(false); + $method3->getArguments()->willReturn(array($argument3)); + $method3->hasReturnType()->willReturn(false); + $method3->getCode()->willReturn(''); + + $method4->getName()->willReturn('variadicWithTypeByRef'); + $method4->getVisibility()->willReturn('public'); + $method4->returnsReference()->willReturn(false); + $method4->isStatic()->willReturn(false); + $method4->getArguments()->willReturn(array($argument4)); + $method4->hasReturnType()->willReturn(false); + $method4->getCode()->willReturn(''); + + $argument1->getName()->willReturn('args'); + $argument1->getTypeHint()->willReturn(null); + $argument1->isOptional()->willReturn(false); + $argument1->isPassedByReference()->willReturn(false); + $argument1->isVariadic()->willReturn(true); + + $argument2->getName()->willReturn('args'); + $argument2->getTypeHint()->willReturn(null); + $argument2->isOptional()->willReturn(false); + $argument2->isPassedByReference()->willReturn(true); + $argument2->isVariadic()->willReturn(true); + + $argument3->getName()->willReturn('args'); + $argument3->getTypeHint()->willReturn('\ReflectionClass'); + $argument3->isOptional()->willReturn(false); + $argument3->isPassedByReference()->willReturn(false); + $argument3->isVariadic()->willReturn(true); + + $argument4->getName()->willReturn('args'); + $argument4->getTypeHint()->willReturn('\ReflectionClass'); + $argument4->isOptional()->willReturn(false); + $argument4->isPassedByReference()->willReturn(true); + $argument4->isVariadic()->willReturn(true); + + $code = $this->generate('CustomClass', $class); + $expected = <<<'PHP' +namespace { +class CustomClass extends \stdClass implements \Prophecy\Doubler\Generator\MirroredInterface { + +public function variadic( ...$args) { + +} +public function variadicByRef( &...$args) { + +} +public function variadicWithType(\\ReflectionClass ...$args) { + +} +public function variadicWithTypeByRef(\\ReflectionClass &...$args) { + +} + } } PHP; @@ -126,6 +257,7 @@ function it_overrides_properly_methods_with_args_passed_by_reference( $argument->isOptional()->willReturn(true); $argument->getDefault()->willReturn(null); $argument->isPassedByReference()->willReturn(true); + $argument->isVariadic()->willReturn(false); $code = $this->generate('CustomClass', $class); $expected =<<<'PHP' diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php index 161f8509..de804480 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php @@ -2,9 +2,8 @@ namespace spec\Prophecy\Doubler\Generator; -use PhpSpec\ObjectBehavior; use I\Simply; - +use PhpSpec\ObjectBehavior; use ReflectionClass; use ReflectionMethod; use ReflectionParameter; @@ -13,15 +12,17 @@ class ClassMirrorSpec extends ObjectBehavior { /** * @param ReflectionClass $class + * @param ReflectionClass $parent * @param ReflectionMethod $method1 * @param ReflectionMethod $method2 * @param ReflectionMethod $method3 */ function it_reflects_a_class_by_mirroring_all_its_public_methods( - $class, $method1, $method2, $method3 + $class, $parent, $method1, $method2, $method3 ) { $class->getName()->willReturn('Custom\ClassName'); + $class->getParentClass()->willReturn($parent); $class->isInterface()->willReturn(false); $class->isFinal()->willReturn(false); $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); @@ -29,9 +30,15 @@ function it_reflects_a_class_by_mirroring_all_its_public_methods( $method1, $method2, $method3 )); + $parent->getName()->willReturn('Custom\ParentClassName'); + + $method1->getDeclaringClass()->willReturn($class); + $method2->getDeclaringClass()->willReturn($class); + $method3->getDeclaringClass()->willReturn($class); + $method1->getName()->willReturn('getName'); - $method2->getName()->willReturn('isPublic'); - $method3->getName()->willReturn('isAbstract'); + $method2->getName()->willReturn('getSelf'); + $method3->getName()->willReturn('getParent'); $method1->isFinal()->willReturn(false); $method2->isFinal()->willReturn(false); @@ -54,9 +61,12 @@ function it_reflects_a_class_by_mirroring_all_its_public_methods( $method3->getParameters()->willReturn(array()); if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method1->hasReturnType()->willReturn(false); - $method2->hasReturnType()->willReturn(false); - $method3->hasReturnType()->willReturn(false); + $method1->hasReturnType()->willReturn(true); + $method1->getReturnType()->willReturn('string'); + $method2->hasReturnType()->willReturn(true); + $method2->getReturnType()->willReturn('self'); + $method3->hasReturnType()->willReturn(true); + $method3->getReturnType()->willReturn('parent'); } $classNode = $this->reflect($class, array()); @@ -67,8 +77,14 @@ function it_reflects_a_class_by_mirroring_all_its_public_methods( $methodNodes->shouldHaveCount(3); $classNode->hasMethod('getName')->shouldReturn(true); - $classNode->hasMethod('isPublic')->shouldReturn(true); - $classNode->hasMethod('isAbstract')->shouldReturn(true); + $classNode->hasMethod('getSelf')->shouldReturn(true); + $classNode->hasMethod('getParent')->shouldReturn(true); + + if (version_compare(PHP_VERSION, '7.0', '>=')) { + $classNode->getMethod('getName')->getReturnType()->shouldReturn('string'); + $classNode->getMethod('getSelf')->getReturnType()->shouldReturn('\Custom\ClassName'); + $classNode->getMethod('getParent')->getReturnType()->shouldReturn('\Custom\ParentClassName'); + } } /** @@ -101,6 +117,9 @@ function it_changes_argument_names_if_they_are_varying($class, $method, $paramet $parameter->getDefaultValue()->willReturn(null); $parameter->isPassedByReference()->willReturn(false); $parameter->getClass()->willReturn($class); + if (version_compare(PHP_VERSION, '5.6', '>=')) { + $parameter->isVariadic()->willReturn(false); + } $classNode = $this->reflect($class, array()); @@ -177,6 +196,92 @@ function it_reflects_public_static_methods($class, $method) $methodNodes['innerDetail']->isStatic()->shouldReturn(true); } + /** + * @param ReflectionClass $class + * @param ReflectionMethod $constructMethod + * @param ReflectionMethod $destructMethod + * @param ReflectionMethod $sleepMethod + * @param ReflectionMethod $wakeupMethod + * @param ReflectionMethod $toStringMethod + * @param ReflectionMethod $callMethod + * @param ReflectionMethod $invokeMethod + */ + function it_reflects_allowed_magic_methods($class, $constructMethod, $destructMethod, $sleepMethod, $wakeupMethod, $toStringMethod, $callMethod, $invokeMethod) + { + $class->getName()->willReturn('Custom\ClassName'); + $class->isInterface()->willReturn(false); + $class->isFinal()->willReturn(false); + $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); + $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array( + $constructMethod, $destructMethod, $sleepMethod, $wakeupMethod, $toStringMethod, $callMethod, $invokeMethod + )); + + $constructMethod->getName()->willReturn('__construct'); + $destructMethod->getName()->willReturn('__destruct'); + $sleepMethod->getName()->willReturn('__sleep'); + $wakeupMethod->getName()->willReturn('__wakeup'); + $toStringMethod->getName()->willReturn('__toString'); + $callMethod->getName()->willReturn('__call'); + $invokeMethod->getName()->willReturn('__invoke'); + + $constructMethod->isFinal()->willReturn(false); + $destructMethod->isFinal()->willReturn(false); + $sleepMethod->isFinal()->willReturn(false); + $wakeupMethod->isFinal()->willReturn(false); + $toStringMethod->isFinal()->willReturn(false); + $callMethod->isFinal()->willReturn(false); + $invokeMethod->isFinal()->willReturn(false); + + $constructMethod->isProtected()->willReturn(false); + $destructMethod->isProtected()->willReturn(false); + $sleepMethod->isProtected()->willReturn(false); + $wakeupMethod->isProtected()->willReturn(false); + $toStringMethod->isProtected()->willReturn(false); + $callMethod->isProtected()->willReturn(false); + $invokeMethod->isProtected()->willReturn(false); + + $constructMethod->isStatic()->willReturn(false); + $destructMethod->isStatic()->willReturn(false); + $sleepMethod->isStatic()->willReturn(false); + $wakeupMethod->isStatic()->willReturn(false); + $toStringMethod->isStatic()->willReturn(false); + $callMethod->isStatic()->willReturn(false); + $invokeMethod->isStatic()->willReturn(false); + + $constructMethod->returnsReference()->willReturn(false); + $destructMethod->returnsReference()->willReturn(false); + $sleepMethod->returnsReference()->willReturn(false); + $wakeupMethod->returnsReference()->willReturn(false); + $toStringMethod->returnsReference()->willReturn(false); + $callMethod->returnsReference()->willReturn(false); + $invokeMethod->returnsReference()->willReturn(false); + + $constructMethod->getParameters()->willReturn(array()); + $destructMethod->getParameters()->willReturn(array()); + $sleepMethod->getParameters()->willReturn(array()); + $wakeupMethod->getParameters()->willReturn(array()); + $toStringMethod->getParameters()->willReturn(array()); + $callMethod->getParameters()->willReturn(array()); + $invokeMethod->getParameters()->willReturn(array()); + + if (version_compare(PHP_VERSION, '7.0', '>=')) { + $constructMethod->hasReturnType()->willReturn(false); + $destructMethod->hasReturnType()->willReturn(false); + $sleepMethod->hasReturnType()->willReturn(false); + $wakeupMethod->hasReturnType()->willReturn(false); + $toStringMethod->hasReturnType()->willReturn(false); + $callMethod->hasReturnType()->willReturn(false); + $invokeMethod->hasReturnType()->willReturn(false); + } + + $classNode = $this->reflect($class, array()); + $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); + $classNode->getParentClass()->shouldReturn('Custom\ClassName'); + + $methodNodes = $classNode->getMethods(); + $methodNodes->shouldHaveCount(7); + } + /** * @param ReflectionClass $class * @param ReflectionMethod $method @@ -184,9 +289,10 @@ function it_reflects_public_static_methods($class, $method) * @param ReflectionParameter $param2 * @param ReflectionClass $typeHint * @param ReflectionParameter $param3 + * @param ReflectionParameter $param4 */ function it_properly_reads_methods_arguments_with_types( - $class, $method, $param1, $param2, $typeHint, $param3 + $class, $method, $param1, $param2, $typeHint, $param3, $param4 ) { $class->getName()->willReturn('Custom\ClassName'); @@ -200,7 +306,7 @@ function it_properly_reads_methods_arguments_with_types( $method->isProtected()->willReturn(true); $method->isStatic()->willReturn(false); $method->returnsReference()->willReturn(false); - $method->getParameters()->willReturn(array($param1, $param2, $param3)); + $method->getParameters()->willReturn(array($param1, $param2, $param3, $param4)); if (version_compare(PHP_VERSION, '7.0', '>=')) { $method->hasReturnType()->willReturn(false); @@ -234,6 +340,22 @@ function it_properly_reads_methods_arguments_with_types( $param3->isPassedByReference()->willReturn(false); $param3->allowsNull()->willReturn(true); + $param4->getName()->willReturn('arg_4'); + $param4->isArray()->willReturn(false); + $param4->getClass()->willReturn($typeHint); + $param4->isPassedByReference()->willReturn(false); + $param4->allowsNull()->willReturn(true); + + if (version_compare(PHP_VERSION, '5.6', '>=')) { + $param1->isVariadic()->willReturn(false); + $param2->isVariadic()->willReturn(false); + $param3->isVariadic()->willReturn(false); + $param4->isVariadic()->willReturn(true); + } else { + $param4->isOptional()->willReturn(true); + $param4->isDefaultValueAvailable()->willReturn(false); + } + $classNode = $this->reflect($class, array()); $methodNodes = $classNode->getMethods(); $argNodes = $methodNodes['methodWithArgs']->getArguments(); @@ -255,6 +377,15 @@ function it_properly_reads_methods_arguments_with_types( } else { $argNodes[2]->isOptional()->shouldReturn(false); } + + $argNodes[3]->getName()->shouldReturn('arg_4'); + $argNodes[3]->getTypeHint()->shouldReturn('ArrayAccess'); + if (version_compare(PHP_VERSION, '5.6', '>=')) { + $argNodes[3]->isVariadic()->shouldReturn(true); + } else { + $argNodes[3]->isOptional()->shouldReturn(true); + $argNodes[3]->getDefault()->shouldReturn(null); + } } /** @@ -294,6 +425,9 @@ function it_marks_required_args_without_types_as_not_optional( $param1->hasType()->willReturn(false); } + if (version_compare(PHP_VERSION, '5.6', '>=')) { + $param1->isVariadic()->willReturn(false); + } $param1->isDefaultValueAvailable()->willReturn(false); $param1->isOptional()->willReturn(false); $param1->isPassedByReference()->willReturn(false); @@ -314,10 +448,11 @@ function it_marks_required_args_without_types_as_not_optional( * @param ReflectionMethod $method * @param ReflectionParameter $param1 * @param ReflectionParameter $param2 + * @param ReflectionParameter $param3 * @param ReflectionClass $typeHint */ function it_marks_passed_by_reference_args_as_passed_by_reference( - $class, $method, $param1, $param2, $typeHint + $class, $method, $param1, $param2, $param3, $typeHint ) { $class->getName()->willReturn('Custom\ClassName'); @@ -331,7 +466,7 @@ function it_marks_passed_by_reference_args_as_passed_by_reference( $method->isProtected()->willReturn(false); $method->isStatic()->willReturn(false); $method->returnsReference()->willReturn(false); - $method->getParameters()->willReturn(array($param1, $param2)); + $method->getParameters()->willReturn(array($param1, $param2, $param3)); if (version_compare(PHP_VERSION, '7.0', '>=')) { $method->hasReturnType()->willReturn(false); @@ -343,6 +478,9 @@ function it_marks_passed_by_reference_args_as_passed_by_reference( $param1->isCallable()->willReturn(false); } $param1->getClass()->willReturn(null); + if (version_compare(PHP_VERSION, '5.6', '>=')) { + $param1->isVariadic()->willReturn(false); + } $param1->isDefaultValueAvailable()->willReturn(false); $param1->isOptional()->willReturn(true); $param1->isPassedByReference()->willReturn(true); @@ -359,6 +497,9 @@ function it_marks_passed_by_reference_args_as_passed_by_reference( $param2->getName()->willReturn('arg2'); $param2->isArray()->willReturn(false); $param2->getClass()->willReturn($typeHint); + if (version_compare(PHP_VERSION, '5.6', '>=')) { + $param2->isVariadic()->willReturn(false); + } $param2->isDefaultValueAvailable()->willReturn(false); $param2->isOptional()->willReturn(false); $param2->isPassedByReference()->willReturn(false); @@ -370,12 +511,25 @@ function it_marks_passed_by_reference_args_as_passed_by_reference( $param2->allowsNull()->willReturn(false); $typeHint->getName()->willReturn('ArrayAccess'); + $param3->getName()->willReturn('arg2'); + $param3->isArray()->willReturn(false); + $param3->getClass()->willReturn($typeHint); + if (version_compare(PHP_VERSION, '5.6', '>=')) { + $param3->isVariadic()->willReturn(true); + } else { + $param3->isOptional()->willReturn(true); + $param3->isDefaultValueAvailable()->willReturn(false); + } + $param3->isPassedByReference()->willReturn(true); + $param3->allowsNull()->willReturn(true); + $classNode = $this->reflect($class, array()); $methodNodes = $classNode->getMethods(); $argNodes = $methodNodes['methodWithArgs']->getArguments(); $argNodes[0]->isPassedByReference()->shouldReturn(true); $argNodes[1]->isPassedByReference()->shouldReturn(false); + $argNodes[2]->isPassedByReference()->shouldReturn(true); } /** @@ -410,6 +564,26 @@ function it_ignores_final_methods($class, $method) $classNode->getMethods()->shouldHaveCount(0); } + /** + * @param ReflectionClass $class + * @param ReflectionMethod $method + */ + function it_marks_final_methods_as_unextendable($class, $method) + { + $class->getName()->willReturn('Custom\ClassName'); + $class->isInterface()->willReturn(false); + $class->isFinal()->willReturn(false); + $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); + $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); + + $method->isFinal()->willReturn(true); + $method->getName()->willReturn('finalImplementation'); + + $classNode = $this->reflect($class, array()); + $classNode->getUnextendableMethods()->shouldHaveCount(1); + $classNode->isExtendable('finalImplementation')->shouldReturn(false); + } + /** * @param ReflectionClass $interface */ diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php index cea578fa..2c8d1886 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php @@ -22,6 +22,36 @@ function it_is_passed_by_reference_if_marked() $this->shouldBePassedByReference(); } + function it_is_not_variadic_by_default() + { + $this->shouldNotBeVariadic(); + } + + function it_is_variadic_if_marked() + { + $this->setAsVariadic(); + $this->shouldBeVariadic(); + } + + function it_does_not_have_default_by_default() + { + $this->shouldNotHaveDefault(); + } + + function it_does_not_have_default_if_variadic() + { + $this->setDefault(null); + $this->setAsVariadic(); + $this->shouldNotHaveDefault(); + } + + function it_does_have_default_if_not_variadic() + { + $this->setDefault(null); + $this->setAsVariadic(false); + $this->hasDefault()->shouldReturn(true); + } + function it_has_name_with_which_it_was_been_constructed() { $this->getName()->shouldReturn('name'); diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php index 18f0e1cc..be7e1026 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php @@ -3,6 +3,7 @@ namespace spec\Prophecy\Doubler\Generator\Node; use PhpSpec\ObjectBehavior; +use Prophecy\Exception\Doubler\MethodNotExtendableException; class ClassNodeSpec extends ObjectBehavior { @@ -151,4 +152,49 @@ function its_addProperty_lowercases_visibility_before_setting() $this->addProperty('text', 'PRIVATE'); $this->getProperties()->shouldReturn(array('text' => 'private')); } + + function its_has_no_unextendable_methods_by_default() + { + $this->getUnextendableMethods()->shouldHaveCount(0); + } + + function its_addUnextendableMethods_adds_an_unextendable_method() + { + $this->addUnextendableMethod('testMethod'); + $this->getUnextendableMethods()->shouldHaveCount(1); + } + + function its_methods_are_extendable_by_default() + { + $this->isExtendable('testMethod')->shouldReturn(true); + } + + function its_unextendable_methods_are_not_extendable() + { + $this->addUnextendableMethod('testMethod'); + $this->isExtendable('testMethod')->shouldReturn(false); + } + + function its_addUnextendableMethods_doesnt_create_duplicates() + { + $this->addUnextendableMethod('testMethod'); + $this->addUnextendableMethod('testMethod'); + $this->getUnextendableMethods()->shouldHaveCount(1); + } + + /** + * @param \Prophecy\Doubler\Generator\Node\MethodNode $method + */ + function it_throws_an_exception_when_adding_a_method_that_isnt_extendable($method) + { + $this->addUnextendableMethod('testMethod'); + $method->getName()->willReturn('testMethod'); + + $expectedException = new MethodNotExtendableException( + "Method `testMethod` is not extendable, so can not be added.", + "stdClass", + "testMethod" + ); + $this->shouldThrow($expectedException)->duringAddMethod($method); + } } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php index d67646da..49bd9f59 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php @@ -69,13 +69,16 @@ function its_useParentCode_causes_method_to_call_parent($argument1, $argument2) $argument1->getName()->willReturn('objectName'); $argument2->getName()->willReturn('default'); + $argument1->isVariadic()->willReturn(false); + $argument2->isVariadic()->willReturn(true); + $this->addArgument($argument1); $this->addArgument($argument2); $this->useParentCode(); $this->getCode()->shouldReturn( - 'return parent::getTitle($objectName, $default);' + 'return parent::getTitle($objectName, ...$default);' ); } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php new file mode 100644 index 00000000..5028b026 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php @@ -0,0 +1,29 @@ +beConstructedWith('', 'User', 'getName'); + } + + function it_is_DoubleException() + { + $this->shouldHaveType('Prophecy\Exception\Doubler\DoubleException'); + } + + function it_has_MethodName() + { + $this->getMethodName()->shouldReturn('getName'); + } + + function it_has_classname() + { + $this->getClassName()->shouldReturn('User'); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Argument.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Argument.php index f2b33648..fde6aa90 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Argument.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Argument.php @@ -195,4 +195,18 @@ public static function is($value) { return new Token\IdenticalValueToken($value); } + + /** + * Check that argument is same value when rounding to the + * given precision. + * + * @param float $value + * @param float $precision + * + * @return Token\ApproximateValueToken + */ + public static function approximate($value, $precision = 0) + { + return new Token\ApproximateValueToken($value, $precision); + } } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ApproximateValueToken.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ApproximateValueToken.php new file mode 100644 index 00000000..d4918b1a --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ApproximateValueToken.php @@ -0,0 +1,55 @@ + + * Marcello Duarte + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Prophecy\Argument\Token; + +/** + * Approximate value token + * + * @author Daniel Leech + */ +class ApproximateValueToken implements TokenInterface +{ + private $value; + private $precision; + + public function __construct($value, $precision = 0) + { + $this->value = $value; + $this->precision = $precision; + } + + /** + * {@inheritdoc} + */ + public function scoreArgument($argument) + { + return round($argument, $this->precision) === round($this->value, $this->precision) ? 10 : false; + } + + /** + * {@inheritdoc} + */ + public function isLast() + { + return false; + } + + /** + * Returns string representation for token. + * + * @return string + */ + public function __toString() + { + return sprintf('≅%s', round($this->value, $this->precision)); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php index 74958551..a1f8c618 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php @@ -54,7 +54,17 @@ public function __construct(StringUtil $util = null) */ public function makeCall(ObjectProphecy $prophecy, $methodName, array $arguments) { - $backtrace = debug_backtrace(); + // For efficiency exclude 'args' from the generated backtrace + if (PHP_VERSION_ID >= 50400) { + // Limit backtrace to last 3 calls as we don't use the rest + // Limit argument was introduced in PHP 5.4.0 + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 3); + } elseif (defined('DEBUG_BACKTRACE_IGNORE_ARGS')) { + // DEBUG_BACKTRACE_IGNORE_ARGS was introduced in PHP 5.3.6 + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + } else { + $backtrace = debug_backtrace(); + } $file = $line = null; if (isset($backtrace[2]) && isset($backtrace[2]['file'])) { diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Comparator/Factory.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Comparator/Factory.php index a7a12001..2070db14 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Comparator/Factory.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Comparator/Factory.php @@ -30,6 +30,7 @@ public function __construct() parent::__construct(); $this->register(new ClosureComparator()); + $this->register(new ProphecyComparator()); } /** diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Comparator/ProphecyComparator.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Comparator/ProphecyComparator.php new file mode 100644 index 00000000..298a8e35 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Comparator/ProphecyComparator.php @@ -0,0 +1,28 @@ + + * Marcello Duarte + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Prophecy\Comparator; + +use Prophecy\Prophecy\ProphecyInterface; +use SebastianBergmann\Comparator\ObjectComparator; + +class ProphecyComparator extends ObjectComparator +{ + public function accepts($expected, $actual) + { + return is_object($expected) && is_object($actual) && $actual instanceof ProphecyInterface; + } + + public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false, array &$processed = array()) + { + parent::assertEquals($expected, $actual->reveal(), $delta, $canonicalize, $ignoreCase, $processed); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php index da454501..23891c09 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php @@ -11,17 +11,27 @@ namespace Prophecy\Doubler\ClassPatch; -use phpDocumentor\Reflection\DocBlock; use Prophecy\Doubler\Generator\Node\ClassNode; use Prophecy\Doubler\Generator\Node\MethodNode; +use Prophecy\PhpDocumentor\ClassAndInterfaceTagRetriever; +use Prophecy\PhpDocumentor\MethodTagRetrieverInterface; /** * Discover Magical API using "@method" PHPDoc format. * * @author Thomas Tourlourat + * @author Kévin Dunglas + * @author Théo FIDRY */ class MagicCallPatch implements ClassPatchInterface { + private $tagRetriever; + + public function __construct(MethodTagRetrieverInterface $tagRetriever = null) + { + $this->tagRetriever = null === $tagRetriever ? new ClassAndInterfaceTagRetriever() : $tagRetriever; + } + /** * Support any class * @@ -44,15 +54,17 @@ public function apply(ClassNode $node) $parentClass = $node->getParentClass(); $reflectionClass = new \ReflectionClass($parentClass); - $phpdoc = new DocBlock($reflectionClass->getDocComment()); - - $tagList = $phpdoc->getTagsByName('method'); + $tagList = $this->tagRetriever->getTagList($reflectionClass); foreach($tagList as $tag) { $methodName = $tag->getMethodName(); + if (empty($methodName)) { + continue; + } + if (!$reflectionClass->hasMethod($methodName)) { - $methodNode = new MethodNode($tag->getMethodName()); + $methodNode = new MethodNode($methodName); $methodNode->setStatic($tag->isStatic()); $node->addMethod($methodNode); diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php index 84011598..eba82980 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php @@ -56,6 +56,13 @@ public function apply(ClassNode $node) if ($this->nodeIsDirectoryIterator($node)) { $constructor->setCode('return parent::__construct("' . __DIR__ . '");'); + + return; + } + + if ($this->nodeIsSplFileObject($node)) { + $constructor->setCode('return parent::__construct("' . __FILE__ .'");'); + return; } @@ -79,7 +86,20 @@ public function getPriority() private function nodeIsDirectoryIterator(ClassNode $node) { $parent = $node->getParentClass(); + return 'DirectoryIterator' === $parent || is_subclass_of($parent, 'DirectoryIterator'); } + + /** + * @param ClassNode $node + * @return boolean + */ + private function nodeIsSplFileObject(ClassNode $node) + { + $parent = $node->getParentClass(); + + return 'SplFileObject' === $parent + || is_subclass_of($parent, 'SplFileObject'); + } } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php index 4d474e5b..dc03f429 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php @@ -60,7 +60,9 @@ private function generateMethod(Node\MethodNode $method) $method->returnsReference() ? '&':'', $method->getName(), implode(', ', $this->generateArguments($method->getArguments())), - $method->hasReturnType() ? sprintf(': %s', $method->getReturnType()) : '' + version_compare(PHP_VERSION, '7.0', '>=') && $method->hasReturnType() + ? sprintf(': %s', $method->getReturnType()) + : '' ); $php .= $method->getCode()."\n"; @@ -73,16 +75,34 @@ private function generateArguments(array $arguments) $php = ''; if ($hint = $argument->getTypeHint()) { - if ('array' === $hint || 'callable' === $hint) { - $php .= $hint; - } else { - $php .= '\\'.$hint; + switch ($hint) { + case 'array': + case 'callable': + $php .= $hint; + break; + + case 'string': + case 'int': + case 'float': + case 'bool': + if (version_compare(PHP_VERSION, '7.0', '>=')) { + $php .= $hint; + break; + } + // Fall-through to default case for PHP 5.x + + default: + $php .= '\\'.$hint; } } - $php .= ' '.($argument->isPassedByReference() ? '&' : '').'$'.$argument->getName(); + $php .= ' '.($argument->isPassedByReference() ? '&' : ''); + + $php .= $argument->isVariadic() ? '...' : ''; + + $php .= '$'.$argument->getName(); - if ($argument->isOptional()) { + if ($argument->isOptional() && !$argument->isVariadic()) { $php .= ' = '.var_export($argument->getDefault(), true); } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php index 6a4ebde5..acdb2c15 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php @@ -32,6 +32,7 @@ class ClassMirror '__wakeup', '__toString', '__call', + '__invoke' ); /** @@ -109,6 +110,7 @@ private function reflectClassToNode(ReflectionClass $class, Node\ClassNode $node } if (true === $method->isFinal()) { + $node->addUnextendableMethod($method->getName()); continue; } @@ -142,7 +144,17 @@ private function reflectMethodToNode(ReflectionMethod $method, Node\ClassNode $c } if (version_compare(PHP_VERSION, '7.0', '>=') && true === $method->hasReturnType()) { - $node->setReturnType((string) $method->getReturnType()); + $returnType = (string) $method->getReturnType(); + $returnTypeLower = strtolower($returnType); + + if ('self' === $returnTypeLower) { + $returnType = $method->getDeclaringClass()->getName(); + } + if ('parent' === $returnTypeLower) { + $returnType = $method->getDeclaringClass()->getParentClass()->getName(); + } + + $node->setReturnType($returnType); } if (is_array($params = $method->getParameters()) && count($params)) { @@ -159,23 +171,45 @@ private function reflectArgumentToNode(ReflectionParameter $parameter, Node\Meth $name = $parameter->getName() == '...' ? '__dot_dot_dot__' : $parameter->getName(); $node = new Node\ArgumentNode($name); - $typeHint = $this->getTypeHint($parameter); - $node->setTypeHint($typeHint); + $node->setTypeHint($this->getTypeHint($parameter)); + + if ($this->isVariadic($parameter)) { + $node->setAsVariadic(); + } - if (true === $parameter->isDefaultValueAvailable()) { - $node->setDefault($parameter->getDefaultValue()); - } elseif (true === $parameter->isOptional() - || (true === $parameter->allowsNull() && $typeHint)) { - $node->setDefault(null); + if ($this->hasDefaultValue($parameter)) { + $node->setDefault($this->getDefaultValue($parameter)); } - if (true === $parameter->isPassedByReference()) { + if ($parameter->isPassedByReference()) { $node->setAsPassedByReference(); } $methodNode->addArgument($node); } + private function hasDefaultValue(ReflectionParameter $parameter) + { + if ($this->isVariadic($parameter)) { + return false; + } + + if ($parameter->isDefaultValueAvailable()) { + return true; + } + + return $parameter->isOptional() || $this->isNullable($parameter); + } + + private function getDefaultValue(ReflectionParameter $parameter) + { + if (!$parameter->isDefaultValueAvailable()) { + return null; + } + + return $parameter->getDefaultValue(); + } + private function getTypeHint(ReflectionParameter $parameter) { if (null !== $className = $this->getParameterClassName($parameter)) { @@ -197,6 +231,16 @@ private function getTypeHint(ReflectionParameter $parameter) return null; } + private function isVariadic(ReflectionParameter $parameter) + { + return PHP_VERSION_ID >= 50600 && $parameter->isVariadic(); + } + + private function isNullable(ReflectionParameter $parameter) + { + return $parameter->allowsNull() && null !== $this->getTypeHint($parameter); + } + private function getParameterClassName(ReflectionParameter $parameter) { try { diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php index a6c42a38..cf6fd735 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php @@ -23,6 +23,7 @@ class ArgumentNode private $default; private $optional = false; private $byReference = false; + private $isVariadic = false; /** * @param string $name @@ -47,6 +48,11 @@ public function setTypeHint($typeHint = null) $this->typeHint = $typeHint; } + public function hasDefault() + { + return $this->isOptional() && !$this->isVariadic(); + } + public function getDefault() { return $this->default; @@ -72,4 +78,14 @@ public function isPassedByReference() { return $this->byReference; } + + public function setAsVariadic($isVariadic = true) + { + $this->isVariadic = $isVariadic; + } + + public function isVariadic() + { + return $this->isVariadic; + } } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ClassNode.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ClassNode.php index b38cb4ea..1499a1d3 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ClassNode.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ClassNode.php @@ -11,6 +11,7 @@ namespace Prophecy\Doubler\Generator\Node; +use Prophecy\Exception\Doubler\MethodNotExtendableException; use Prophecy\Exception\InvalidArgumentException; /** @@ -23,6 +24,7 @@ class ClassNode private $parentClass = 'stdClass'; private $interfaces = array(); private $properties = array(); + private $unextendableMethods = array(); /** * @var MethodNode[] @@ -100,6 +102,12 @@ public function getMethods() public function addMethod(MethodNode $method) { + if (!$this->isExtendable($method->getName())){ + $message = sprintf( + 'Method `%s` is not extendable, so can not be added.', $method->getName() + ); + throw new MethodNotExtendableException($message, $this->getParentClass(), $method->getName()); + } $this->methods[$method->getName()] = $method; } @@ -127,4 +135,32 @@ public function hasMethod($name) { return isset($this->methods[$name]); } + + /** + * @return string[] + */ + public function getUnextendableMethods() + { + return $this->unextendableMethods; + } + + /** + * @param string $unextendableMethod + */ + public function addUnextendableMethod($unextendableMethod) + { + if (!$this->isExtendable($unextendableMethod)){ + return; + } + $this->unextendableMethods[] = $unextendableMethod; + } + + /** + * @param string $method + * @return bool + */ + public function isExtendable($method) + { + return !in_array($method, $this->unextendableMethods); + } } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php index eb953524..8402ab8f 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php @@ -170,8 +170,19 @@ public function useParentCode() { $this->code = sprintf( 'return parent::%s(%s);', $this->getName(), implode(', ', - array_map(function (ArgumentNode $arg) { return '$'.$arg->getName(); }, $this->arguments) + array_map(array($this, 'generateArgument'), $this->arguments) ) ); } + + private function generateArgument(ArgumentNode $arg) + { + $argument = '$'.$arg->getName(); + + if ($arg->isVariadic()) { + $argument = '...'.$argument; + } + + return $argument; + } } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotExtendableException.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotExtendableException.php new file mode 100644 index 00000000..56f47b11 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotExtendableException.php @@ -0,0 +1,41 @@ +methodName = $methodName; + $this->className = $className; + } + + + /** + * @return string + */ + public function getMethodName() + { + return $this->methodName; + } + + /** + * @return string + */ + public function getClassName() + { + return $this->className; + } + + } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassAndInterfaceTagRetriever.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassAndInterfaceTagRetriever.php new file mode 100644 index 00000000..209821ce --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassAndInterfaceTagRetriever.php @@ -0,0 +1,69 @@ + + * Marcello Duarte + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Prophecy\PhpDocumentor; + +use phpDocumentor\Reflection\DocBlock\Tag\MethodTag as LegacyMethodTag; +use phpDocumentor\Reflection\DocBlock\Tags\Method; + +/** + * @author Théo FIDRY + * + * @internal + */ +final class ClassAndInterfaceTagRetriever implements MethodTagRetrieverInterface +{ + private $classRetriever; + + public function __construct(MethodTagRetrieverInterface $classRetriever = null) + { + if (null !== $classRetriever) { + $this->classRetriever = $classRetriever; + + return; + } + + $this->classRetriever = class_exists('phpDocumentor\Reflection\DocBlockFactory') && class_exists('phpDocumentor\Reflection\Types\ContextFactory') + ? new ClassTagRetriever() + : new LegacyClassTagRetriever() + ; + } + + /** + * @param \ReflectionClass $reflectionClass + * + * @return LegacyMethodTag[]|Method[] + */ + public function getTagList(\ReflectionClass $reflectionClass) + { + return array_merge( + $this->classRetriever->getTagList($reflectionClass), + $this->getInterfacesTagList($reflectionClass) + ); + } + + /** + * @param \ReflectionClass $reflectionClass + * + * @return LegacyMethodTag[]|Method[] + */ + private function getInterfacesTagList(\ReflectionClass $reflectionClass) + { + $interfaces = $reflectionClass->getInterfaces(); + $tagList = array(); + + foreach($interfaces as $interface) { + $tagList = array_merge($tagList, $this->classRetriever->getTagList($interface)); + } + + return $tagList; + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassTagRetriever.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassTagRetriever.php new file mode 100644 index 00000000..1d2da8f0 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassTagRetriever.php @@ -0,0 +1,52 @@ + + * Marcello Duarte + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Prophecy\PhpDocumentor; + +use phpDocumentor\Reflection\DocBlock\Tags\Method; +use phpDocumentor\Reflection\DocBlockFactory; +use phpDocumentor\Reflection\Types\ContextFactory; + +/** + * @author Théo FIDRY + * + * @internal + */ +final class ClassTagRetriever implements MethodTagRetrieverInterface +{ + private $docBlockFactory; + private $contextFactory; + + public function __construct() + { + $this->docBlockFactory = DocBlockFactory::createInstance(); + $this->contextFactory = new ContextFactory(); + } + + /** + * @param \ReflectionClass $reflectionClass + * + * @return Method[] + */ + public function getTagList(\ReflectionClass $reflectionClass) + { + try { + $phpdoc = $this->docBlockFactory->create( + $reflectionClass, + $this->contextFactory->createFromReflector($reflectionClass) + ); + + return $phpdoc->getTagsByName('method'); + } catch (\InvalidArgumentException $e) { + return array(); + } + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/LegacyClassTagRetriever.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/LegacyClassTagRetriever.php new file mode 100644 index 00000000..c0dec3de --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/LegacyClassTagRetriever.php @@ -0,0 +1,35 @@ + + * Marcello Duarte + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Prophecy\PhpDocumentor; + +use phpDocumentor\Reflection\DocBlock; +use phpDocumentor\Reflection\DocBlock\Tag\MethodTag as LegacyMethodTag; + +/** + * @author Théo FIDRY + * + * @internal + */ +final class LegacyClassTagRetriever implements MethodTagRetrieverInterface +{ + /** + * @param \ReflectionClass $reflectionClass + * + * @return LegacyMethodTag[] + */ + public function getTagList(\ReflectionClass $reflectionClass) + { + $phpdoc = new DocBlock($reflectionClass->getDocComment()); + + return $phpdoc->getTagsByName('method'); + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/MethodTagRetrieverInterface.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/MethodTagRetrieverInterface.php new file mode 100644 index 00000000..d3989dad --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/MethodTagRetrieverInterface.php @@ -0,0 +1,30 @@ + + * Marcello Duarte + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Prophecy\PhpDocumentor; + +use phpDocumentor\Reflection\DocBlock\Tag\MethodTag as LegacyMethodTag; +use phpDocumentor\Reflection\DocBlock\Tags\Method; + +/** + * @author Théo FIDRY + * + * @internal + */ +interface MethodTagRetrieverInterface +{ + /** + * @param \ReflectionClass $reflectionClass + * + * @return LegacyMethodTag[]|Method[] + */ + public function getTagList(\ReflectionClass $reflectionClass); +} diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php index a06724bc..39bfeea0 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php @@ -37,10 +37,10 @@ class ReturnArgumentPromise implements PromiseInterface public function __construct($index = 0) { if (!is_int($index) || $index < 0) { - throw new InvalidArgumentException( + throw new InvalidArgumentException(sprintf( 'Zero-based index expected as argument to ReturnArgumentPromise, but got %s.', $index - ); + )); } $this->index = $index; } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php index 8007330a..68a8b471 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php @@ -46,13 +46,13 @@ public function __construct($exception) && !is_subclass_of($exception, 'Exception')) { throw new InvalidArgumentException(sprintf( 'Exception class or instance expected as argument to ThrowPromise, but got %s.', - gettype($exception) + $exception )); } } elseif (!$exception instanceof \Exception) { throw new InvalidArgumentException(sprintf( 'Exception class or instance expected as argument to ThrowPromise, but got %s.', - gettype($exception) + is_object($exception) ? get_class($exception) : gettype($exception) )); } diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php index 426df322..27e80f5b 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php @@ -86,6 +86,7 @@ public function __construct(ObjectProphecy $objectProphecy, $methodName, $argume case 'Traversable': case 'Generator': // Remove eval() when minimum version >=5.5 + /** @var callable $generator */ $generator = eval('return function () { yield; };'); return $generator(); diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php index 43dba46d..8d8f8a1b 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php @@ -260,6 +260,8 @@ public function __call($methodName, array $arguments) * Tries to get property value from double. * * @param string $name + * + * @return mixed */ public function __get($name) { @@ -270,7 +272,7 @@ public function __get($name) * Tries to set property value to double. * * @param string $name - * @param string $value + * @param mixed $value */ public function __set($name, $value) { diff --git a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php index 54d38321..49ed6a3f 100644 --- a/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php +++ b/app/src/vendor/CoreUpdate/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php @@ -3,7 +3,7 @@ namespace Prophecy\Util; use Prophecy\Prophecy\ProphecyInterface; -use SplObjectStorage; +use SebastianBergmann\RecursionContext\Context; /* * This file is part of the Prophecy. @@ -15,73 +15,85 @@ */ /** - * Exporting utility. - * - * This class is derived from the PHPUnit testing framework. - * - * @author Sebastiaan Stok - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License> + * This class is a modification from sebastianbergmann/exporter + * @see https://github.com/sebastianbergmann/exporter */ class ExportUtil { /** - * Exports a value into a string. + * Exports a value as a string * * The output of this method is similar to the output of print_r(), but * improved in various aspects: * * - NULL is rendered as "null" (instead of "") - * - true is rendered as "true" (instead of "1") + * - TRUE is rendered as "true" (instead of "1") * - FALSE is rendered as "false" (instead of "") * - Strings are always quoted with single quotes * - Carriage returns and newlines are normalized to \n * - Recursion and repeated rendering is treated properly * - * @param mixed $value The value to export - * @param integer $indentation The indentation level of the 2nd+ line - * + * @param mixed $value + * @param int $indentation The indentation level of the 2nd+ line * @return string */ public static function export($value, $indentation = 0) { - return static::recursiveExport($value, $indentation); + return self::recursiveExport($value, $indentation); } /** * Converts an object to an array containing all of its private, protected * and public properties. * - * @param object $object - * + * @param mixed $value * @return array */ - public static function toArray($object) + public static function toArray($value) { + if (!is_object($value)) { + return (array) $value; + } + $array = array(); - foreach ((array) $object as $key => $value) { + foreach ((array) $value as $key => $val) { // properties are transformed to keys in the following way: - // private $property => "\0Classname\0property" // protected $property => "\0*\0property" // public $property => "property" - if (preg_match('/^\0.+\0(.+)$/', $key, $matches)) { $key = $matches[1]; } - $array[$key] = $value; + // See https://github.com/php/php-src/commit/5721132 + if ($key === "\0gcdata") { + continue; + } + + $array[$key] = $val; } // Some internal classes like SplObjectStorage don't work with the - // above (fast) mechanism nor with reflection + // above (fast) mechanism nor with reflection in Zend. // Format the output similarly to print_r() in this case - if ($object instanceof SplObjectStorage) { - foreach ($object as $key => $value) { - $array[spl_object_hash($value)] = array( - 'obj' => $value, - 'inf' => $object->getInfo(), + if ($value instanceof \SplObjectStorage) { + // However, the fast method does work in HHVM, and exposes the + // internal implementation. Hide it again. + if (property_exists('\SplObjectStorage', '__storage')) { + unset($array['__storage']); + } elseif (property_exists('\SplObjectStorage', 'storage')) { + unset($array['storage']); + } + + if (property_exists('\SplObjectStorage', '__key')) { + unset($array['__key']); + } + + foreach ($value as $key => $val) { + $array[spl_object_hash($val)] = array( + 'obj' => $val, + 'inf' => $value->getInfo(), ); } } @@ -90,16 +102,15 @@ public static function toArray($object) } /** - * Recursive implementation of export. - * - * @param mixed $value The value to export - * @param integer $indentation The indentation level of the 2nd+ line - * @param array $processedObjects Contains all objects that were already - * rendered + * Recursive implementation of export * + * @param mixed $value The value to export + * @param int $indentation The indentation level of the 2nd+ line + * @param \SebastianBergmann\RecursionContext\Context $processed Previously processed objects * @return string + * @see SebastianBergmann\Exporter\Exporter::export */ - protected static function recursiveExport($value, $indentation, &$processedObjects = array()) + protected static function recursiveExport(&$value, $indentation, $processed = null) { if ($value === null) { return 'null'; @@ -113,73 +124,88 @@ protected static function recursiveExport($value, $indentation, &$processedObjec return 'false'; } + if (is_float($value) && floatval(intval($value)) === $value) { + return "$value.0"; + } + + if (is_resource($value)) { + return sprintf( + 'resource(%d) of type (%s)', + $value, + get_resource_type($value) + ); + } + if (is_string($value)) { // Match for most non printable chars somewhat taking multibyte chars into account if (preg_match('/[^\x09-\x0d\x20-\xff]/', $value)) { return 'Binary String: 0x' . bin2hex($value); } - return "'" . str_replace(array("\r\n", "\n\r", "\r"), array("\n", "\n", "\n"), $value) . "'"; + return "'" . + str_replace(array("\r\n", "\n\r", "\r"), array("\n", "\n", "\n"), $value) . + "'"; } - $origValue = $value; - - if (is_object($value)) { - if ($value instanceof ProphecyInterface) { - return sprintf('%s Object (*Prophecy*)', get_class($value)); - } elseif (in_array($value, $processedObjects, true)) { - return sprintf('%s Object (*RECURSION*)', get_class($value)); - } - - $processedObjects[] = $value; + $whitespace = str_repeat(' ', 4 * $indentation); - // Convert object to array - $value = self::toArray($value); + if (!$processed) { + $processed = new Context; } if (is_array($value)) { - $whitespace = str_repeat(' ', $indentation); - - // There seems to be no other way to check arrays for recursion - // http://www.php.net/manual/en/language.types.array.php#73936 - preg_match_all('/\n \[(\w+)\] => Array\s+\*RECURSION\*/', print_r($value, true), $matches); - $recursiveKeys = array_unique($matches[1]); - - // Convert to valid array keys - // Numeric integer strings are automatically converted to integers - // by PHP - foreach ($recursiveKeys as $key => $recursiveKey) { - if ((string) (integer) $recursiveKey === $recursiveKey) { - $recursiveKeys[$key] = (integer) $recursiveKey; - } + if (($key = $processed->contains($value)) !== false) { + return 'Array &' . $key; } - $content = ''; - - foreach ($value as $key => $val) { - if (in_array($key, $recursiveKeys, true)) { - $val = 'Array (*RECURSION*)'; - } else { - $val = self::recursiveExport($val, $indentation + 1, $processedObjects); + $key = $processed->add($value); + $values = ''; + + if (count($value) > 0) { + foreach ($value as $k => $v) { + $values .= sprintf( + '%s %s => %s' . "\n", + $whitespace, + self::recursiveExport($k, $indentation), + self::recursiveExport($value[$k], $indentation + 1, $processed) + ); } - $content .= $whitespace . ' ' . self::export($key) . ' => ' . $val . "\n"; + $values = "\n" . $values . $whitespace; } - if (strlen($content) > 0) { - $content = "\n" . $content . $whitespace; + return sprintf('Array &%s (%s)', $key, $values); + } + + if (is_object($value)) { + $class = get_class($value); + + if ($value instanceof ProphecyInterface) { + return sprintf('%s Object (*Prophecy*)', $class); + } elseif ($hash = $processed->contains($value)) { + return sprintf('%s:%s Object', $class, $hash); } - return sprintf( - "%s (%s)", - is_object($origValue) ? sprintf('%s:%s', get_class($origValue), spl_object_hash($origValue)) . ' Object' : 'Array', $content - ); - } + $hash = $processed->add($value); + $values = ''; + $array = self::toArray($value); + + if (count($array) > 0) { + foreach ($array as $k => $v) { + $values .= sprintf( + '%s %s => %s' . "\n", + $whitespace, + self::recursiveExport($k, $indentation), + self::recursiveExport($v, $indentation + 1, $processed) + ); + } + + $values = "\n" . $values . $whitespace; + } - if (is_double($value) && (double)(integer) $value === $value) { - return $value . '.0'; + return sprintf('%s:%s Object (%s)', $class, $hash, $values); } - return (string) $value; + return var_export($value, true); } } diff --git a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/AbstractLogger.php b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/AbstractLogger.php index 00f90345..5a68a234 100644 --- a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/AbstractLogger.php +++ b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/AbstractLogger.php @@ -15,7 +15,8 @@ abstract class AbstractLogger implements LoggerInterface * System is unusable. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function emergency($message, array $context = array()) @@ -30,7 +31,8 @@ public function emergency($message, array $context = array()) * trigger the SMS alerts and wake you up. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function alert($message, array $context = array()) @@ -44,7 +46,8 @@ public function alert($message, array $context = array()) * Example: Application component unavailable, unexpected exception. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function critical($message, array $context = array()) @@ -57,7 +60,8 @@ public function critical($message, array $context = array()) * be logged and monitored. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function error($message, array $context = array()) @@ -72,7 +76,8 @@ public function error($message, array $context = array()) * that are not necessarily wrong. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function warning($message, array $context = array()) @@ -84,7 +89,8 @@ public function warning($message, array $context = array()) * Normal but significant events. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function notice($message, array $context = array()) @@ -98,7 +104,8 @@ public function notice($message, array $context = array()) * Example: User logs in, SQL logs. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function info($message, array $context = array()) @@ -110,7 +117,8 @@ public function info($message, array $context = array()) * Detailed debug information. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function debug($message, array $context = array()) diff --git a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LogLevel.php b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LogLevel.php index e32c151c..9cebcace 100644 --- a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LogLevel.php +++ b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LogLevel.php @@ -3,16 +3,16 @@ namespace Psr\Log; /** - * Describes log levels + * Describes log levels. */ class LogLevel { const EMERGENCY = 'emergency'; - const ALERT = 'alert'; - const CRITICAL = 'critical'; - const ERROR = 'error'; - const WARNING = 'warning'; - const NOTICE = 'notice'; - const INFO = 'info'; - const DEBUG = 'debug'; + const ALERT = 'alert'; + const CRITICAL = 'critical'; + const ERROR = 'error'; + const WARNING = 'warning'; + const NOTICE = 'notice'; + const INFO = 'info'; + const DEBUG = 'debug'; } diff --git a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerAwareInterface.php b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerAwareInterface.php index 2eebc4eb..e84191ba 100644 --- a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerAwareInterface.php +++ b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerAwareInterface.php @@ -3,14 +3,15 @@ namespace Psr\Log; /** - * Describes a logger-aware instance + * Describes a logger-aware instance. */ interface LoggerAwareInterface { /** - * Sets a logger instance on the object + * Sets a logger instance on the object. * * @param LoggerInterface $logger + * * @return null */ public function setLogger(LoggerInterface $logger); diff --git a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerAwareTrait.php b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerAwareTrait.php index f087a3da..639f79bd 100644 --- a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerAwareTrait.php +++ b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerAwareTrait.php @@ -7,12 +7,16 @@ */ trait LoggerAwareTrait { - /** @var LoggerInterface */ + /** + * The logger instance. + * + * @var LoggerInterface + */ protected $logger; /** * Sets a logger. - * + * * @param LoggerInterface $logger */ public function setLogger(LoggerInterface $logger) diff --git a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerInterface.php b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerInterface.php index 476bb962..16c04ade 100644 --- a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerInterface.php +++ b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerInterface.php @@ -3,14 +3,14 @@ namespace Psr\Log; /** - * Describes a logger instance + * Describes a logger instance. * * The message MUST be a string or object implementing __toString(). * * The message MAY contain placeholders in the form: {foo} where foo * will be replaced by the context data in key "foo". * - * The context array can contain arbitrary data, the only assumption that + * The context array can contain arbitrary data. The only assumption that * can be made by implementors is that if an Exception instance is given * to produce a stack trace, it MUST be in a key named "exception". * @@ -23,7 +23,8 @@ interface LoggerInterface * System is unusable. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function emergency($message, array $context = array()); @@ -35,7 +36,8 @@ public function emergency($message, array $context = array()); * trigger the SMS alerts and wake you up. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function alert($message, array $context = array()); @@ -46,7 +48,8 @@ public function alert($message, array $context = array()); * Example: Application component unavailable, unexpected exception. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function critical($message, array $context = array()); @@ -56,7 +59,8 @@ public function critical($message, array $context = array()); * be logged and monitored. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function error($message, array $context = array()); @@ -68,7 +72,8 @@ public function error($message, array $context = array()); * that are not necessarily wrong. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function warning($message, array $context = array()); @@ -77,7 +82,8 @@ public function warning($message, array $context = array()); * Normal but significant events. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function notice($message, array $context = array()); @@ -88,7 +94,8 @@ public function notice($message, array $context = array()); * Example: User logs in, SQL logs. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function info($message, array $context = array()); @@ -97,7 +104,8 @@ public function info($message, array $context = array()); * Detailed debug information. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function debug($message, array $context = array()); @@ -105,9 +113,10 @@ public function debug($message, array $context = array()); /** * Logs with an arbitrary level. * - * @param mixed $level + * @param mixed $level * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function log($level, $message, array $context = array()); diff --git a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerTrait.php b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerTrait.php index 59124960..d8c611b9 100644 --- a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerTrait.php +++ b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/LoggerTrait.php @@ -6,8 +6,8 @@ * This is a simple Logger trait that classes unable to extend AbstractLogger * (because they extend another class, etc) can include. * - * It simply delegates all log-level-specific methods to the `log` method to - * reduce boilerplate code that a simple Logger that does the same thing with + * It simply delegates all log-level-specific methods to the `log` method to + * reduce boilerplate code that a simple Logger that does the same thing with * messages regardless of the error level has to implement. */ trait LoggerTrait @@ -16,7 +16,8 @@ trait LoggerTrait * System is unusable. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function emergency($message, array $context = array()) @@ -31,7 +32,8 @@ public function emergency($message, array $context = array()) * trigger the SMS alerts and wake you up. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function alert($message, array $context = array()) @@ -45,7 +47,8 @@ public function alert($message, array $context = array()) * Example: Application component unavailable, unexpected exception. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function critical($message, array $context = array()) @@ -58,7 +61,8 @@ public function critical($message, array $context = array()) * be logged and monitored. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function error($message, array $context = array()) @@ -73,7 +77,8 @@ public function error($message, array $context = array()) * that are not necessarily wrong. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function warning($message, array $context = array()) @@ -85,7 +90,8 @@ public function warning($message, array $context = array()) * Normal but significant events. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function notice($message, array $context = array()) @@ -99,7 +105,8 @@ public function notice($message, array $context = array()) * Example: User logs in, SQL logs. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function info($message, array $context = array()) @@ -111,7 +118,8 @@ public function info($message, array $context = array()) * Detailed debug information. * * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function debug($message, array $context = array()) @@ -122,9 +130,10 @@ public function debug($message, array $context = array()) /** * Logs with an arbitrary level. * - * @param mixed $level + * @param mixed $level * @param string $message - * @param array $context + * @param array $context + * * @return null */ abstract public function log($level, $message, array $context = array()); diff --git a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/NullLogger.php b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/NullLogger.php index 553a3c59..3fc5100f 100644 --- a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/NullLogger.php +++ b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/NullLogger.php @@ -3,7 +3,7 @@ namespace Psr\Log; /** - * This Logger can be used to avoid conditional log calls + * This Logger can be used to avoid conditional log calls. * * Logging should always be optional, and if no logger is provided to your * library creating a NullLogger instance to have something to throw logs at @@ -15,9 +15,10 @@ class NullLogger extends AbstractLogger /** * Logs with an arbitrary level. * - * @param mixed $level + * @param mixed $level * @param string $message - * @param array $context + * @param array $context + * * @return null */ public function log($level, $message, array $context = array()) diff --git a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php index a9328151..f66a2b02 100644 --- a/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php +++ b/app/src/vendor/CoreUpdate/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php @@ -2,28 +2,32 @@ namespace Psr\Log\Test; +use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; /** - * Provides a base test class for ensuring compliance with the LoggerInterface + * Provides a base test class for ensuring compliance with the LoggerInterface. * - * Implementors can extend the class and implement abstract methods to run this as part of their test suite + * Implementors can extend the class and implement abstract methods to run this + * as part of their test suite. */ abstract class LoggerInterfaceTest extends \PHPUnit_Framework_TestCase { /** * @return LoggerInterface */ - abstract function getLogger(); + abstract public function getLogger(); /** - * This must return the log messages in order with a simple formatting: " " + * This must return the log messages in order. * - * Example ->error('Foo') would yield "error Foo" + * The simple formatting of the messages is: " ". + * + * Example ->error('Foo') would yield "error Foo". * * @return string[] */ - abstract function getLogs(); + abstract public function getLogs(); public function testImplements() { @@ -61,7 +65,7 @@ public function provideLevelsAndMessages() } /** - * @expectedException Psr\Log\InvalidArgumentException + * @expectedException \Psr\Log\InvalidArgumentException */ public function testThrowsOnInvalidLevel() { @@ -80,12 +84,19 @@ public function testContextReplacement() public function testObjectCastToString() { - $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString')); + if (method_exists($this, 'createMock')) { + $dummy = $this->createMock('Psr\Log\Test\DummyTest', array('__toString')); + } else { + $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString')); + } $dummy->expects($this->once()) ->method('__toString') ->will($this->returnValue('DUMMY')); $this->getLogger()->warning($dummy); + + $expected = array('warning DUMMY'); + $this->assertEquals($expected, $this->getLogs()); } public function testContextCanContainAnything() @@ -102,15 +113,28 @@ public function testContextCanContainAnything() ); $this->getLogger()->warning('Crazy context data', $context); + + $expected = array('warning Crazy context data'); + $this->assertEquals($expected, $this->getLogs()); } public function testContextExceptionKeyCanBeExceptionOrOtherValues() { - $this->getLogger()->warning('Random message', array('exception' => 'oops')); - $this->getLogger()->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail'))); + $logger = $this->getLogger(); + $logger->warning('Random message', array('exception' => 'oops')); + $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail'))); + + $expected = array( + 'warning Random message', + 'critical Uncaught Exception!' + ); + $this->assertEquals($expected, $this->getLogs()); } } class DummyTest { -} \ No newline at end of file + public function __toString() + { + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/.gitignore b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/.gitignore index 2c20551f..d571f240 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/.gitignore +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/.gitignore @@ -2,6 +2,7 @@ phpunit.xml composer.lock composer.phar +vendor/ cache.properties build/SebastianBergmann build/LICENSE diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/.php_cs b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/.php_cs new file mode 100644 index 00000000..286a5d68 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/.php_cs @@ -0,0 +1,66 @@ +files() + ->in('src') + ->in('tests') + ->name('*.php'); + +return Symfony\CS\Config\Config::create() + ->level(\Symfony\CS\FixerInterface::NONE_LEVEL) + ->fixers( + array( + 'align_double_arrow', + 'align_equals', + 'braces', + 'concat_with_spaces', + 'duplicate_semicolon', + 'elseif', + 'empty_return', + 'encoding', + 'eof_ending', + 'extra_empty_lines', + 'function_call_space', + 'function_declaration', + 'indentation', + 'join_function', + 'line_after_namespace', + 'linefeed', + 'list_commas', + 'lowercase_constants', + 'lowercase_keywords', + 'method_argument_space', + 'multiple_use', + 'namespace_no_leading_whitespace', + 'no_blank_lines_after_class_opening', + 'no_empty_lines_after_phpdocs', + 'parenthesis', + 'php_closing_tag', + 'phpdoc_indent', + 'phpdoc_no_access', + 'phpdoc_no_empty_return', + 'phpdoc_no_package', + 'phpdoc_params', + 'phpdoc_scalar', + 'phpdoc_separation', + 'phpdoc_to_comment', + 'phpdoc_trim', + 'phpdoc_types', + 'phpdoc_var_without_name', + 'remove_lines_between_uses', + 'return', + 'self_accessor', + 'short_tag', + 'single_line_after_imports', + 'single_quote', + 'spaces_before_semicolon', + 'spaces_cast', + 'ternary_spaces', + 'trailing_spaces', + 'trim_array_spaces', + 'unused_use', + 'visibility', + 'whitespacy_lines' + ) + ) + ->finder($finder); + diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Chunk.php b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Chunk.php index 79d13fc8..eb081038 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Chunk.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Chunk.php @@ -11,12 +11,6 @@ namespace SebastianBergmann\Diff; /** - * @package Diff - * @author Sebastian Bergmann - * @author Kore Nordmann - * @copyright Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://www.github.com/sebastianbergmann/diff */ class Chunk { diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Diff.php b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Diff.php index 45aaae6f..c4a08924 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Diff.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Diff.php @@ -11,12 +11,6 @@ namespace SebastianBergmann\Diff; /** - * @package Diff - * @author Sebastian Bergmann - * @author Kore Nordmann - * @copyright Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://www.github.com/sebastianbergmann/diff */ class Diff { diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Differ.php b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Differ.php index 76630ed2..4960111e 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Differ.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Differ.php @@ -16,13 +16,6 @@ /** * Diff implementation. - * - * @package Diff - * @author Sebastian Bergmann - * @author Kore Nordmann - * @copyright Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://www.github.com/sebastianbergmann/diff */ class Differ { @@ -31,20 +24,27 @@ class Differ */ private $header; + /** + * @var bool + */ + private $showNonDiffLines; + /** * @param string $header */ - public function __construct($header = "--- Original\n+++ New\n") + public function __construct($header = "--- Original\n+++ New\n", $showNonDiffLines = true) { - $this->header = $header; + $this->header = $header; + $this->showNonDiffLines = $showNonDiffLines; } /** * Returns the diff between two arrays or strings as string. * - * @param array|string $from - * @param array|string $to - * @param LongestCommonSubsequence $lcs + * @param array|string $from + * @param array|string $to + * @param LongestCommonSubsequence $lcs + * * @return string */ public function diff($from, $to, LongestCommonSubsequence $lcs = null) @@ -97,7 +97,9 @@ public function diff($from, $to, LongestCommonSubsequence $lcs = null) } if ($newChunk) { - $buffer .= "@@ @@\n"; + if ($this->showNonDiffLines === true) { + $buffer .= "@@ @@\n"; + } $newChunk = false; } @@ -105,7 +107,7 @@ public function diff($from, $to, LongestCommonSubsequence $lcs = null) $buffer .= '+' . $diff[$i][0] . "\n"; } elseif ($diff[$i][1] === 2 /* REMOVED */) { $buffer .= '-' . $diff[$i][0] . "\n"; - } else { + } elseif ($this->showNonDiffLines === true) { $buffer .= ' ' . $diff[$i][0] . "\n"; } } @@ -124,9 +126,10 @@ public function diff($from, $to, LongestCommonSubsequence $lcs = null) * - 1: ADDED: $token was added to $from * - 0: OLD: $token is not changed in $to * - * @param array|string $from - * @param array|string $to - * @param LongestCommonSubsequence $lcs + * @param array|string $from + * @param array|string $to + * @param LongestCommonSubsequence $lcs + * * @return array */ public function diffToArray($from, $to, LongestCommonSubsequence $lcs = null) @@ -221,8 +224,9 @@ public function diffToArray($from, $to, LongestCommonSubsequence $lcs = null) } /** - * @param array $from - * @param array $to + * @param array $from + * @param array $to + * * @return LongestCommonSubsequence */ private function selectLcsImplementation(array $from, array $to) @@ -243,9 +247,10 @@ private function selectLcsImplementation(array $from, array $to) /** * Calculates the estimated memory footprint for the DP-based method. * - * @param array $from - * @param array $to - * @return integer + * @param array $from + * @param array $to + * + * @return int */ private function calculateEstimatedFootprint(array $from, array $to) { diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/LongestCommonSubsequence.php b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/LongestCommonSubsequence.php index 80364745..5ea9cf96 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/LongestCommonSubsequence.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/LongestCommonSubsequence.php @@ -12,21 +12,15 @@ /** * Interface for implementations of longest common subsequence calculation. - * - * @package Diff - * @author Sebastian Bergmann - * @author Kore Nordmann - * @copyright Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://www.github.com/sebastianbergmann/diff */ interface LongestCommonSubsequence { /** * Calculates the longest common subsequence of two arrays. * - * @param array $from - * @param array $to + * @param array $from + * @param array $to + * * @return array */ public function calculate(array $from, array $to); diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php index 6213607a..b990dc03 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php @@ -12,21 +12,15 @@ /** * Memory-efficient implementation of longest common subsequence calculation. - * - * @package Diff - * @author Sebastian Bergmann - * @author Denes Lados - * @copyright Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://www.github.com/sebastianbergmann/diff */ class MemoryEfficientImplementation implements LongestCommonSubsequence { /** * Calculates the longest common subsequence of two arrays. * - * @param array $from - * @param array $to + * @param array $from + * @param array $to + * * @return array */ public function calculate(array $from, array $to) @@ -73,6 +67,7 @@ public function calculate(array $from, array $to) /** * @param array $from * @param array $to + * * @return array */ private function length(array $from, array $to) diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php index b569586d..4fc9d3ec 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php @@ -12,21 +12,15 @@ /** * Time-efficient implementation of longest common subsequence calculation. - * - * @package Diff - * @author Sebastian Bergmann - * @author Kore Nordmann - * @copyright Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://www.github.com/sebastianbergmann/diff */ class TimeEfficientImplementation implements LongestCommonSubsequence { /** * Calculates the longest common subsequence of two arrays. * - * @param array $from - * @param array $to + * @param array $from + * @param array $to + * * @return array */ public function calculate(array $from, array $to) @@ -47,7 +41,7 @@ public function calculate(array $from, array $to) for ($i = 1; $i <= $fromLength; ++$i) { for ($j = 1; $j <= $toLength; ++$j) { - $o = ($j * $width) + $i; + $o = ($j * $width) + $i; $matrix[$o] = max( $matrix[$o - 1], $matrix[$o - $width], diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Line.php b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Line.php index 28c66aa2..e0a96b90 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Line.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Line.php @@ -11,17 +11,11 @@ namespace SebastianBergmann\Diff; /** - * @package Diff - * @author Sebastian Bergmann - * @author Kore Nordmann - * @copyright Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://www.github.com/sebastianbergmann/diff */ class Line { - const ADDED = 1; - const REMOVED = 2; + const ADDED = 1; + const REMOVED = 2; const UNCHANGED = 3; /** diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Parser.php b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Parser.php index 79e2413e..b01511b4 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Parser.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/diff/src/Parser.php @@ -12,18 +12,12 @@ /** * Unified diff parser. - * - * @package Diff - * @author Sebastian Bergmann - * @author Kore Nordmann - * @copyright Sebastian Bergmann - * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License - * @link http://www.github.com/sebastianbergmann/diff */ class Parser { /** - * @param string $string + * @param string $string + * * @return Diff[] */ public function parse($string) @@ -78,7 +72,7 @@ private function parseFileDiff(Diff $diff, array $lines) isset($match['endrange']) ? max(1, $match['endrange']) : 1 ); - $chunks[] = $chunk; + $chunks[] = $chunk; $diffLines = array(); continue; } diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/environment/.gitignore b/app/src/vendor/CoreUpdate/vendor/sebastian/environment/.gitignore index 57948548..441848b7 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/environment/.gitignore +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/environment/.gitignore @@ -2,4 +2,3 @@ /vendor /composer.lock /composer.phar -/phpunit.xml diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/environment/phpunit.xml b/app/src/vendor/CoreUpdate/vendor/sebastian/environment/phpunit.xml new file mode 100644 index 00000000..f3b710c3 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/environment/phpunit.xml @@ -0,0 +1,20 @@ + + + + tests + + + + + src + + + diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/environment/phpunit.xml.dist b/app/src/vendor/CoreUpdate/vendor/sebastian/environment/phpunit.xml.dist deleted file mode 100644 index 75148fde..00000000 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/environment/phpunit.xml.dist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - tests - - - - - src - - - diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/environment/src/Console.php b/app/src/vendor/CoreUpdate/vendor/sebastian/environment/src/Console.php index 9f15d547..2aff1d65 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/environment/src/Console.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/environment/src/Console.php @@ -29,7 +29,7 @@ class Console public function hasColorSupport() { if (DIRECTORY_SEPARATOR == '\\') { - return false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI'); + return false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM'); } if (!defined('STDOUT')) { @@ -46,22 +46,54 @@ public function hasColorSupport() */ public function getNumberOfColumns() { - // Windows terminals have a fixed size of 80 - // but one column is used for the cursor. if (DIRECTORY_SEPARATOR == '\\') { - return 79; + $columns = 80; + + if (preg_match('/^(\d+)x\d+ \(\d+x(\d+)\)$/', trim(getenv('ANSICON')), $matches)) { + $columns = $matches[1]; + } elseif (function_exists('proc_open')) { + $process = proc_open( + 'mode CON', + array( + 1 => array('pipe', 'w'), + 2 => array('pipe', 'w') + ), + $pipes, + null, + null, + array('suppress_errors' => true) + ); + + if (is_resource($process)) { + $info = stream_get_contents($pipes[1]); + + fclose($pipes[1]); + fclose($pipes[2]); + proc_close($process); + + if (preg_match('/--------+\r?\n.+?(\d+)\r?\n.+?(\d+)\r?\n/', $info, $matches)) { + $columns = $matches[2]; + } + } + } + + return $columns - 1; } if (!$this->isInteractive(self::STDIN)) { return 80; } - if (preg_match('#\d+ (\d+)#', shell_exec('stty size'), $match) === 1) { - return (int) $match[1]; + if (function_exists('shell_exec') && preg_match('#\d+ (\d+)#', shell_exec('stty size'), $match) === 1) { + if ((int) $match[1] > 0) { + return (int) $match[1]; + } } - if (preg_match('#columns = (\d+);#', shell_exec('stty'), $match) === 1) { - return (int) $match[1]; + if (function_exists('shell_exec') && preg_match('#columns = (\d+);#', shell_exec('stty'), $match) === 1) { + if ((int) $match[1] > 0) { + return (int) $match[1]; + } } return 80; diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/environment/src/Runtime.php b/app/src/vendor/CoreUpdate/vendor/sebastian/environment/src/Runtime.php index f12071a6..179473bf 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/environment/src/Runtime.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/environment/src/Runtime.php @@ -50,7 +50,9 @@ public function getBinary() // PHP >= 5.4.0 if (self::$binary === null && defined('PHP_BINARY')) { - self::$binary = escapeshellarg(PHP_BINARY); + if (PHP_BINARY !== '') { + self::$binary = escapeshellarg(PHP_BINARY); + } } // PHP < 5.4.0 @@ -123,7 +125,7 @@ public function getVendorUrl() if ($this->isHHVM()) { return 'http://hhvm.com/'; } else { - return 'http://php.net/'; + return 'https://secure.php.net/'; } } diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/exporter/src/Exporter.php b/app/src/vendor/CoreUpdate/vendor/sebastian/exporter/src/Exporter.php index a9f5157c..5578aa8d 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/exporter/src/Exporter.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/exporter/src/Exporter.php @@ -89,11 +89,10 @@ public function shortenedRecursiveExport(&$data, Context $context = null) * Exports a value into a single-line string * * The output of this method is similar to the output of - * SebastianBergmann\Exporter\Exporter::export. This method guarantees - * thought that the result contains now newlines. + * SebastianBergmann\Exporter\Exporter::export(). * - * Newlines are replaced by the visible string '\n'. Contents of arrays - * and objects (if any) are replaced by '...'. + * Newlines are replaced by the visible string '\n'. + * Contents of arrays and objects (if any) are replaced by '...'. * * @param mixed $value * @return string @@ -104,8 +103,14 @@ public function shortenedExport($value) if (is_string($value)) { $string = $this->export($value); - if (strlen($string) > 40) { - $string = substr($string, 0, 30) . '...' . substr($string, -7); + if (function_exists('mb_strlen')) { + if (mb_strlen($string) > 40) { + $string = mb_substr($string, 0, 30) . '...' . mb_substr($string, -7); + } + } else { + if (strlen($string) > 40) { + $string = substr($string, 0, 30) . '...' . substr($string, -7); + } } return str_replace("\n", '\n', $string); @@ -225,7 +230,7 @@ protected function recursiveExport(&$value, $indentation, $processed = null) if (is_string($value)) { // Match for most non printable chars somewhat taking multibyte chars into account - if (preg_match('/[^\x09-\x0d\x20-\xff]/', $value)) { + if (preg_match('/[^\x09-\x0d\x1b\x20-\xff]/', $value)) { return 'Binary String: 0x' . bin2hex($value); } diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/recursion-context/.gitignore b/app/src/vendor/CoreUpdate/vendor/sebastian/recursion-context/.gitignore index db2ceb75..3beb10f9 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/recursion-context/.gitignore +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/recursion-context/.gitignore @@ -2,6 +2,7 @@ phpunit.xml composer.lock composer.phar +vendor/ cache.properties build/LICENSE build/README.md diff --git a/app/src/vendor/CoreUpdate/vendor/sebastian/recursion-context/src/Context.php b/app/src/vendor/CoreUpdate/vendor/sebastian/recursion-context/src/Context.php index 06bf6ce8..b853d104 100644 --- a/app/src/vendor/CoreUpdate/vendor/sebastian/recursion-context/src/Context.php +++ b/app/src/vendor/CoreUpdate/vendor/sebastian/recursion-context/src/Context.php @@ -121,7 +121,7 @@ private function addObject($object) private function containsArray(array &$array) { $keys = array_keys($this->arrays, $array, true); - $hash = '_Key_' . hash('sha512', microtime(true)); + $hash = '_Key_' . microtime(true); foreach ($keys as $key) { $this->arrays[$key][$hash] = $hash; diff --git a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/.gitignore b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/.gitignore index b6b16af6..c49a5d8d 100644 --- a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/.gitignore +++ b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/.gitignore @@ -1,2 +1,3 @@ +vendor/ composer.lock phpunit.xml diff --git a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Dumper.php b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Dumper.php index 39cdcfc5..05817f5d 100644 --- a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Dumper.php +++ b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Dumper.php @@ -28,10 +28,14 @@ class Dumper /** * Sets the indentation. * - * @param int $num The amount of spaces to use for indentation of nested nodes. + * @param int $num The amount of spaces to use for indentation of nested nodes */ public function setIndentation($num) { + if ($num < 1) { + throw new \InvalidArgumentException('The indentation must be greater than zero.'); + } + $this->indentation = (int) $num; } @@ -54,7 +58,7 @@ public function dump($input, $inline = 0, $indent = 0, $exceptionOnInvalidType = if ($inline <= 0 || !is_array($input) || empty($input)) { $output .= $prefix.Inline::dump($input, $exceptionOnInvalidType, $objectSupport); } else { - $isAHash = array_keys($input) !== range(0, count($input) - 1); + $isAHash = Inline::isHash($input); foreach ($input as $key => $value) { $willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value); diff --git a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Escaper.php b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Escaper.php index ac325a2c..a74f14dd 100644 --- a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Escaper.php +++ b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Escaper.php @@ -16,6 +16,8 @@ * YAML strings. * * @author Matthew Lewinski + * + * @internal */ class Escaper { @@ -31,20 +33,20 @@ class Escaper "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", - "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9",); + "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9"); private static $escaped = array('\\\\', '\\"', '\\\\', '\\"', '\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a', '\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f', '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17', '\\x18', '\\x19', '\\x1a', '\\e', '\\x1c', '\\x1d', '\\x1e', '\\x1f', - '\\N', '\\_', '\\L', '\\P',); + '\\N', '\\_', '\\L', '\\P'); /** * Determines if a PHP value would require double quoting in YAML. * * @param string $value A PHP value * - * @return bool True if the value would require double quotes. + * @return bool True if the value would require double quotes */ public static function requiresDoubleQuoting($value) { @@ -68,7 +70,7 @@ public static function escapeWithDoubleQuotes($value) * * @param string $value A PHP value * - * @return bool True if the value would require single quotes. + * @return bool True if the value would require single quotes */ public static function requiresSingleQuoting($value) { diff --git a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Inline.php b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Inline.php index a5b53bd9..717cbfd5 100644 --- a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Inline.php +++ b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Inline.php @@ -52,7 +52,7 @@ public static function parse($value, $exceptionOnInvalidType = false, $objectSup return ''; } - if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { + if (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) { $mbEncoding = mb_internal_encoding(); mb_internal_encoding('ASCII'); } @@ -105,7 +105,7 @@ public static function dump($value, $exceptionOnInvalidType = false, $objectSupp return 'null'; case is_object($value): if ($objectSupport) { - return '!!php/object:'.serialize($value); + return '!php/object:'.serialize($value); } if ($exceptionOnInvalidType) { @@ -157,6 +157,28 @@ public static function dump($value, $exceptionOnInvalidType = false, $objectSupp } } + /** + * Check if given array is hash or just normal indexed array. + * + * @internal + * + * @param array $value The PHP array to check + * + * @return bool true if value is hash array, false otherwise + */ + public static function isHash(array $value) + { + $expectedKey = 0; + + foreach ($value as $key => $val) { + if ($key !== $expectedKey++) { + return true; + } + } + + return false; + } + /** * Dumps a PHP array to a YAML string. * @@ -169,11 +191,7 @@ public static function dump($value, $exceptionOnInvalidType = false, $objectSupp private static function dumpArray($value, $exceptionOnInvalidType, $objectSupport) { // array - $keys = array_keys($value); - $keysCount = count($keys); - if ((1 === $keysCount && '0' == $keys[0]) - || ($keysCount > 1 && array_reduce($keys, function ($v, $w) { return (int) $v + $w; }, 0) === $keysCount * ($keysCount - 1) / 2) - ) { + if ($value && !self::isHash($value)) { $output = array(); foreach ($value as $val) { $output[] = self::dump($val, $exceptionOnInvalidType, $objectSupport); @@ -182,7 +200,7 @@ private static function dumpArray($value, $exceptionOnInvalidType, $objectSuppor return sprintf('[%s]', implode(', ', $output)); } - // mapping + // hash $output = array(); foreach ($value as $key => $val) { $output[] = sprintf('%s: %s', self::dump($key, $exceptionOnInvalidType, $objectSupport), self::dump($val, $exceptionOnInvalidType, $objectSupport)); @@ -204,6 +222,8 @@ private static function dumpArray($value, $exceptionOnInvalidType, $objectSuppor * @return string A YAML string * * @throws ParseException When malformed inline YAML string is parsed + * + * @internal */ public static function parseScalar($scalar, $delimiters = null, $stringDelimiters = array('"', "'"), &$i = 0, $evaluate = true, $references = array()) { @@ -234,6 +254,14 @@ public static function parseScalar($scalar, $delimiters = null, $stringDelimiter throw new ParseException(sprintf('Malformed inline YAML string (%s).', $scalar)); } + // a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >) + if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0])) { + @trigger_error(sprintf('Not quoting the scalar "%s" starting with "%s" is deprecated since Symfony 2.8 and will throw a ParseException in 3.0.', $output, $output[0]), E_USER_DEPRECATED); + + // to be thrown in 3.0 + // throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0])); + } + if ($evaluate) { $output = self::evaluateScalar($output, $references); } @@ -469,6 +497,16 @@ private static function evaluateScalar($scalar, $references = array()) return (string) substr($scalar, 5); case 0 === strpos($scalar, '! '): return (int) self::parseScalar(substr($scalar, 2)); + case 0 === strpos($scalar, '!php/object:'): + if (self::$objectSupport) { + return unserialize(substr($scalar, 12)); + } + + if (self::$exceptionOnInvalidType) { + throw new ParseException('Object support when parsing a YAML file has been disabled.'); + } + + return; case 0 === strpos($scalar, '!!php/object:'): if (self::$objectSupport) { return unserialize(substr($scalar, 13)); @@ -502,7 +540,12 @@ private static function evaluateScalar($scalar, $references = array()) case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar): return (float) str_replace(',', '', $scalar); case preg_match(self::getTimestampRegex(), $scalar): - return strtotime($scalar); + $timeZone = date_default_timezone_get(); + date_default_timezone_set('UTC'); + $time = strtotime($scalar); + date_default_timezone_set($timeZone); + + return $time; } default: return (string) $scalar; diff --git a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/LICENSE b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/LICENSE index 43028bc6..12a74531 100644 --- a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/LICENSE +++ b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2004-2015 Fabien Potencier +Copyright (c) 2004-2016 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 diff --git a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Parser.php b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Parser.php index 04f2237b..66b81c5f 100644 --- a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Parser.php +++ b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Parser.php @@ -25,19 +25,26 @@ class Parser const FOLDED_SCALAR_PATTERN = self::BLOCK_SCALAR_HEADER_PATTERN; private $offset = 0; + private $totalNumberOfLines; private $lines = array(); private $currentLineNb = -1; private $currentLine = ''; private $refs = array(); + private $skippedLineNumbers = array(); + private $locallySkippedLineNumbers = array(); /** * Constructor. * - * @param int $offset The offset of YAML document (used for line numbers in error messages) + * @param int $offset The offset of YAML document (used for line numbers in error messages) + * @param int|null $totalNumberOfLines The overall number of lines being parsed + * @param int[] $skippedLineNumbers Number of comment lines that have been skipped by the parser */ - public function __construct($offset = 0) + public function __construct($offset = 0, $totalNumberOfLines = null, array $skippedLineNumbers = array()) { $this->offset = $offset; + $this->totalNumberOfLines = $totalNumberOfLines; + $this->skippedLineNumbers = $skippedLineNumbers; } /** @@ -62,7 +69,11 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = $value = $this->cleanup($value); $this->lines = explode("\n", $value); - if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { + if (null === $this->totalNumberOfLines) { + $this->totalNumberOfLines = count($this->lines); + } + + if (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) { $mbEncoding = mb_internal_encoding(); mb_internal_encoding('UTF-8'); } @@ -83,7 +94,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = $isRef = $mergeNode = false; if (preg_match('#^\-((?P\s+)(?P.+?))?\s*$#u', $this->currentLine, $values)) { if ($context && 'mapping' == $context) { - throw new ParseException('You cannot define a sequence item when in a mapping'); + throw new ParseException('You cannot define a sequence item when in a mapping', $this->getRealCurrentLineNb() + 1, $this->currentLine); } $context = 'sequence'; @@ -94,27 +105,20 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = // array if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) { - $c = $this->getRealCurrentLineNb() + 1; - $parser = new self($c); - $parser->refs = &$this->refs; - $data[] = $parser->parse($this->getNextEmbedBlock(null, true), $exceptionOnInvalidType, $objectSupport, $objectForMap); + $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $exceptionOnInvalidType, $objectSupport, $objectForMap); } else { if (isset($values['leadspaces']) && preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P.+?))?\s*$#u', $values['value'], $matches) ) { // this is a compact notation element, add to next block and parse - $c = $this->getRealCurrentLineNb(); - $parser = new self($c); - $parser->refs = &$this->refs; - $block = $values['value']; if ($this->isNextLineIndented()) { $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + strlen($values['leadspaces']) + 1); } - $data[] = $parser->parse($block, $exceptionOnInvalidType, $objectSupport, $objectForMap); + $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $exceptionOnInvalidType, $objectSupport, $objectForMap); } else { - $data[] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport, $objectForMap); + $data[] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport, $objectForMap, $context); } } if ($isRef) { @@ -122,7 +126,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = } } elseif (preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\[\{].*?) *\:(\s+(?P.+?))?\s*$#u', $this->currentLine, $values) && (false === strpos($values['key'], ' #') || in_array($values['key'][0], array('"', "'")))) { if ($context && 'sequence' == $context) { - throw new ParseException('You cannot define a mapping item when in a sequence'); + throw new ParseException('You cannot define a mapping item when in a sequence', $this->currentLineNb + 1, $this->currentLine); } $context = 'mapping'; @@ -168,10 +172,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = } else { $value = $this->getNextEmbedBlock(); } - $c = $this->getRealCurrentLineNb() + 1; - $parser = new self($c); - $parser->refs = &$this->refs; - $parsed = $parser->parse($value, $exceptionOnInvalidType, $objectSupport, $objectForMap); + $parsed = $this->parseBlock($this->getRealCurrentLineNb() + 1, $value, $exceptionOnInvalidType, $objectSupport, $objectForMap); if (!is_array($parsed)) { throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine); @@ -219,10 +220,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = $data[$key] = null; } } else { - $c = $this->getRealCurrentLineNb() + 1; - $parser = new self($c); - $parser->refs = &$this->refs; - $value = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport, $objectForMap); + $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport, $objectForMap); // Spec: Keys MUST be unique; first one wins. // But overwriting is allowed when a merge node is used in current block. if ($allowOverwrite || !isset($data[$key])) { @@ -230,7 +228,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = } } } else { - $value = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport, $objectForMap); + $value = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport, $objectForMap, $context); // Spec: Keys MUST be unique; first one wins. // But overwriting is allowed when a merge node is used in current block. if ($allowOverwrite || !isset($data[$key])) { @@ -243,7 +241,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = } else { // multiple documents are not supported if ('---' === $this->currentLine) { - throw new ParseException('Multiple documents are not supported.'); + throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine); } // 1-liner optionally followed by newline(s) @@ -257,17 +255,6 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = throw $e; } - if (is_array($value)) { - $first = reset($value); - if (is_string($first) && 0 === strpos($first, '*')) { - $data = array(); - foreach ($value as $alias) { - $data[] = $this->refs[substr($alias, 1)]; - } - $value = $data; - } - } - if (isset($mbEncoding)) { mb_internal_encoding($mbEncoding); } @@ -303,9 +290,37 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = mb_internal_encoding($mbEncoding); } + if ($objectForMap && !is_object($data) && 'mapping' === $context) { + $object = new \stdClass(); + + foreach ($data as $key => $value) { + $object->$key = $value; + } + + $data = $object; + } + return empty($data) ? null : $data; } + private function parseBlock($offset, $yaml, $exceptionOnInvalidType, $objectSupport, $objectForMap) + { + $skippedLineNumbers = $this->skippedLineNumbers; + + foreach ($this->locallySkippedLineNumbers as $lineNumber) { + if ($lineNumber < $offset) { + continue; + } + + $skippedLineNumbers[] = $lineNumber; + } + + $parser = new self($offset, $this->totalNumberOfLines, $skippedLineNumbers); + $parser->refs = &$this->refs; + + return $parser->parse($yaml, $exceptionOnInvalidType, $objectSupport, $objectForMap); + } + /** * Returns the current line number (takes the offset into account). * @@ -313,7 +328,17 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = */ private function getRealCurrentLineNb() { - return $this->currentLineNb + $this->offset; + $realCurrentLineNumber = $this->currentLineNb + $this->offset; + + foreach ($this->skippedLineNumbers as $skippedLineNumber) { + if ($skippedLineNumber > $realCurrentLineNumber) { + break; + } + + ++$realCurrentLineNumber; + } + + return $realCurrentLineNumber; } /** @@ -339,6 +364,11 @@ private function getCurrentLineIndentation() private function getNextEmbedBlock($indentation = null, $inSequence = false) { $oldLineIndentation = $this->getCurrentLineIndentation(); + $blockScalarIndentations = array(); + + if ($this->isBlockScalarHeader()) { + $blockScalarIndentations[] = $this->getCurrentLineIndentation(); + } if (!$this->moveToNextLine()) { return; @@ -347,7 +377,7 @@ private function getNextEmbedBlock($indentation = null, $inSequence = false) if (null === $indentation) { $newIndent = $this->getCurrentLineIndentation(); - $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem($this->currentLine); + $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem(); if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) { throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine); @@ -373,20 +403,33 @@ private function getNextEmbedBlock($indentation = null, $inSequence = false) return; } - $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem($this->currentLine); + $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); + + if (empty($blockScalarIndentations) && $this->isBlockScalarHeader()) { + $blockScalarIndentations[] = $this->getCurrentLineIndentation(); + } - // Comments must not be removed inside a block scalar - $removeCommentsPattern = '~'.self::BLOCK_SCALAR_HEADER_PATTERN.'$~'; - $removeComments = !preg_match($removeCommentsPattern, $this->currentLine); + $previousLineIndentation = $this->getCurrentLineIndentation(); while ($this->moveToNextLine()) { $indent = $this->getCurrentLineIndentation(); - if ($indent === $newIndent) { - $removeComments = !preg_match($removeCommentsPattern, $this->currentLine); + // terminate all block scalars that are more indented than the current line + if (!empty($blockScalarIndentations) && $indent < $previousLineIndentation && trim($this->currentLine) !== '') { + foreach ($blockScalarIndentations as $key => $blockScalarIndentation) { + if ($blockScalarIndentation >= $this->getCurrentLineIndentation()) { + unset($blockScalarIndentations[$key]); + } + } + } + + if (empty($blockScalarIndentations) && !$this->isCurrentLineComment() && $this->isBlockScalarHeader()) { + $blockScalarIndentations[] = $this->getCurrentLineIndentation(); } - if ($isItUnindentedCollection && !$this->isStringUnIndentedCollectionItem($this->currentLine) && $newIndent === $indent) { + $previousLineIndentation = $indent; + + if ($isItUnindentedCollection && !$this->isStringUnIndentedCollectionItem() && $newIndent === $indent) { $this->moveToPreviousLine(); break; } @@ -396,7 +439,16 @@ private function getNextEmbedBlock($indentation = null, $inSequence = false) continue; } - if ($removeComments && $this->isCurrentLineComment()) { + // we ignore "comment" lines only when we are not inside a scalar block + if (empty($blockScalarIndentations) && $this->isCurrentLineComment()) { + // remember ignored comment lines (they are used later in nested + // parser calls to determine real line numbers) + // + // CAUTION: beware to not populate the global property here as it + // will otherwise influence the getRealCurrentLineNb() call here + // for consecutive comment lines and subsequent embedded blocks + $this->locallySkippedLineNumbers[] = $this->getRealCurrentLineNb(); + continue; } @@ -432,10 +484,18 @@ private function moveToNextLine() /** * Moves the parser to the previous line. + * + * @return bool */ private function moveToPreviousLine() { + if ($this->currentLineNb < 1) { + return false; + } + $this->currentLine = $this->lines[--$this->currentLineNb]; + + return true; } /** @@ -445,12 +505,13 @@ private function moveToPreviousLine() * @param bool $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise * @param bool $objectSupport True if object support is enabled, false otherwise * @param bool $objectForMap true if maps should return a stdClass instead of array() + * @param string $context The parser context (either sequence or mapping) * * @return mixed A PHP value * * @throws ParseException When reference does not exist */ - private function parseValue($value, $exceptionOnInvalidType, $objectSupport, $objectForMap) + private function parseValue($value, $exceptionOnInvalidType, $objectSupport, $objectForMap, $context) { if (0 === strpos($value, '*')) { if (false !== $pos = strpos($value, '#')) { @@ -460,7 +521,7 @@ private function parseValue($value, $exceptionOnInvalidType, $objectSupport, $ob } if (!array_key_exists($value, $this->refs)) { - throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLine); + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine); } return $this->refs[$value]; @@ -473,7 +534,16 @@ private function parseValue($value, $exceptionOnInvalidType, $objectSupport, $ob } try { - return Inline::parse($value, $exceptionOnInvalidType, $objectSupport, $objectForMap, $this->refs); + $parsedValue = Inline::parse($value, $exceptionOnInvalidType, $objectSupport, $objectForMap, $this->refs); + + if ('mapping' === $context && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && false !== strpos($parsedValue, ': ')) { + @trigger_error(sprintf('Using a colon in the unquoted mapping value "%s" in line %d is deprecated since Symfony 2.8 and will throw a ParseException in 3.0.', $value, $this->getRealCurrentLineNb() + 1), E_USER_DEPRECATED); + + // to be thrown in 3.0 + // throw new ParseException('A colon cannot be used in an unquoted mapping value.'); + } + + return $parsedValue; } catch (ParseException $e) { $e->setParsedLine($this->getRealCurrentLineNb() + 1); $e->setSnippet($this->currentLine); @@ -499,13 +569,13 @@ private function parseBlockScalar($style, $chomping = '', $indentation = 0) } $isCurrentLineBlank = $this->isCurrentLineBlank(); - $text = ''; + $blockLines = array(); // leading blank lines are consumed before determining indentation while ($notEOF && $isCurrentLineBlank) { // newline only if not EOF if ($notEOF = $this->moveToNextLine()) { - $text .= "\n"; + $blockLines[] = ''; $isCurrentLineBlank = $this->isCurrentLineBlank(); } } @@ -526,37 +596,61 @@ private function parseBlockScalar($style, $chomping = '', $indentation = 0) preg_match($pattern, $this->currentLine, $matches) ) ) { - if ($isCurrentLineBlank) { - $text .= substr($this->currentLine, $indentation); + if ($isCurrentLineBlank && strlen($this->currentLine) > $indentation) { + $blockLines[] = substr($this->currentLine, $indentation); + } elseif ($isCurrentLineBlank) { + $blockLines[] = ''; } else { - $text .= $matches[1]; + $blockLines[] = $matches[1]; } // newline only if not EOF if ($notEOF = $this->moveToNextLine()) { - $text .= "\n"; $isCurrentLineBlank = $this->isCurrentLineBlank(); } } } elseif ($notEOF) { - $text .= "\n"; + $blockLines[] = ''; } if ($notEOF) { + $blockLines[] = ''; $this->moveToPreviousLine(); + } elseif (!$notEOF && !$this->isCurrentLineLastLineInDocument()) { + $blockLines[] = ''; } // folded style if ('>' === $style) { - // folded lines - // replace all non-leading/non-trailing single newlines with spaces - preg_match('/(\n*)$/', $text, $matches); - $text = preg_replace('/(?currentLine, ' '); - return $ltrimmedLine[0] === '#'; + return '' !== $ltrimmedLine && $ltrimmedLine[0] === '#'; + } + + private function isCurrentLineLastLineInDocument() + { + return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1); } /** @@ -690,7 +789,7 @@ private function isNextLineUnIndentedCollection() if ( $this->getCurrentLineIndentation() == $currentIndentation && - $this->isStringUnIndentedCollectionItem($this->currentLine) + $this->isStringUnIndentedCollectionItem() ) { $ret = true; } @@ -707,6 +806,16 @@ private function isNextLineUnIndentedCollection() */ private function isStringUnIndentedCollectionItem() { - return (0 === strpos($this->currentLine, '- ')); + return '-' === rtrim($this->currentLine) || 0 === strpos($this->currentLine, '- '); + } + + /** + * Tests whether or not the current line is the header of a block scalar. + * + * @return bool + */ + private function isBlockScalarHeader() + { + return (bool) preg_match('~'.self::BLOCK_SCALAR_HEADER_PATTERN.'$~', $this->currentLine); } } diff --git a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/README.md b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/README.md index 85a97867..0d324881 100644 --- a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/README.md +++ b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/README.md @@ -1,21 +1,13 @@ Yaml Component ============== -YAML implements most of the YAML 1.2 specification. - -```php -use Symfony\Component\Yaml\Yaml; - -$array = Yaml::parse(file_get_contents(filename)); - -print Yaml::dump($array); -``` +The Yaml component loads and dumps YAML files. Resources --------- -You can run the unit tests with the following command: - - $ cd path/to/Symfony/Component/Yaml/ - $ composer install - $ phpunit + * [Documentation](https://symfony.com/doc/current/components/yaml/index.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) diff --git a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Unescaper.php b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Unescaper.php index 1b5e5ec2..1e02cc9f 100644 --- a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Unescaper.php +++ b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Unescaper.php @@ -16,6 +16,8 @@ * YAML strings. * * @author Matthew Lewinski + * + * @internal */ class Unescaper { @@ -32,14 +34,14 @@ class Unescaper /** * Regex fragment that matches an escaped character in a double quoted string. */ - const REGEX_ESCAPED_CHARACTER = "\\\\([0abt\tnvfre \\\"\\/\\\\N_LP]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})"; + const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)'; /** * Unescapes a single quoted string. * - * @param string $value A single quoted string. + * @param string $value A single quoted string * - * @return string The unescaped string. + * @return string The unescaped string */ public function unescapeSingleQuotedString($value) { @@ -49,9 +51,9 @@ public function unescapeSingleQuotedString($value) /** * Unescapes a double quoted string. * - * @param string $value A double quoted string. + * @param string $value A double quoted string * - * @return string The unescaped string. + * @return string The unescaped string */ public function unescapeDoubleQuotedString($value) { @@ -70,10 +72,13 @@ public function unescapeDoubleQuotedString($value) * @param string $value An escaped character * * @return string The unescaped character + * + * @internal This method is public to be usable as callback. It should not + * be used in user code. Should be changed in 3.0. */ public function unescapeCharacter($value) { - switch ($value{1}) { + switch ($value[1]) { case '0': return "\x0"; case 'a': @@ -120,6 +125,10 @@ public function unescapeCharacter($value) return self::utf8chr(hexdec(substr($value, 2, 4))); case 'U': return self::utf8chr(hexdec(substr($value, 2, 8))); + default: + @trigger_error('Not escaping a backslash in a double-quoted string is deprecated since Symfony 2.8 and will throw a ParseException in 3.0.', E_USER_DEPRECATED); + + return $value; } } diff --git a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Yaml.php b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Yaml.php index 2d5f62c3..6fc4e927 100644 --- a/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Yaml.php +++ b/app/src/vendor/CoreUpdate/vendor/symfony/yaml/Yaml.php @@ -21,10 +21,7 @@ class Yaml { /** - * Parses YAML into a PHP array. - * - * The parse method, when supplied with a YAML stream (string or file), - * will do its best to convert YAML in a file into a PHP array. + * Parses YAML into a PHP value. * * Usage: * @@ -43,7 +40,7 @@ class Yaml * @param bool $objectSupport True if object support is enabled, false otherwise * @param bool $objectForMap True if maps should return a stdClass instead of array() * - * @return array The YAML converted to a PHP array + * @return mixed The YAML converted to a PHP value * * @throws ParseException If the YAML is not valid */ @@ -76,24 +73,28 @@ public static function parse($input, $exceptionOnInvalidType = false, $objectSup } /** - * Dumps a PHP array to a YAML string. + * Dumps a PHP value to a YAML string. * * The dump method, when supplied with an array, will do its best * to convert the array into friendly YAML. * - * @param array $array PHP array + * @param mixed $input The PHP value * @param int $inline The level where you switch to inline YAML - * @param int $indent The amount of spaces to use for indentation of nested nodes. + * @param int $indent The amount of spaces to use for indentation of nested nodes * @param bool $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise * @param bool $objectSupport true if object support is enabled, false otherwise * - * @return string A YAML string representing the original PHP array + * @return string A YAML string representing the original PHP value */ - public static function dump($array, $inline = 2, $indent = 4, $exceptionOnInvalidType = false, $objectSupport = false) + public static function dump($input, $inline = 2, $indent = 4, $exceptionOnInvalidType = false, $objectSupport = false) { + if ($indent < 1) { + throw new \InvalidArgumentException('The indentation must be greater than zero.'); + } + $yaml = new Dumper(); $yaml->setIndentation($indent); - return $yaml->dump($array, $inline, 0, $exceptionOnInvalidType, $objectSupport); + return $yaml->dump($input, $inline, 0, $exceptionOnInvalidType, $objectSupport); } } diff --git a/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.composer-auth.json b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.composer-auth.json new file mode 100644 index 00000000..eea80018 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.composer-auth.json @@ -0,0 +1,7 @@ +{ + "github-oauth": { + "github.com": "PLEASE DO NOT USE THIS TOKEN IN YOUR OWN PROJECTS/FORKS", + "github.com": "This token is reserved for testing the webmozart/* repositories", + "github.com": "a9debbffdd953ee9b3b82dbc3b807cde2086bb86" + } +} diff --git a/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.gitignore b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.gitignore new file mode 100644 index 00000000..3a9875b4 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.gitignore @@ -0,0 +1,2 @@ +/vendor/ +composer.lock diff --git a/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.styleci.yml b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.styleci.yml new file mode 100644 index 00000000..bb3a52d8 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.styleci.yml @@ -0,0 +1,7 @@ +preset: symfony + +enabled: + - ordered_use + +disabled: + - empty_return diff --git a/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.travis.yml b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.travis.yml new file mode 100644 index 00000000..bb2c1317 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/.travis.yml @@ -0,0 +1,35 @@ +language: php + +sudo: false + +cache: + directories: + - $HOME/.composer/cache/files + +matrix: + include: + - php: 5.3 + - php: 5.4 + - php: 5.5 + - php: 5.6 + - php: hhvm + - php: nightly + - php: 7.0 + env: COVERAGE=yes + - php: 7.0 + env: COMPOSER_FLAGS='--prefer-lowest --prefer-stable' + allow_failures: + - php: hhvm + - php: nightly + fast_finish: true + +before_install: + - if [[ $TRAVIS_PHP_VERSION != hhvm && $COVERAGE != yes ]]; then phpenv config-rm xdebug.ini; fi; + - if [[ $TRAVIS_REPO_SLUG = webmozart/assert ]]; then cp .composer-auth.json ~/.composer/auth.json; fi; + - composer self-update + +install: composer update $COMPOSER_FLAGS --prefer-dist --no-interaction + +script: if [[ $COVERAGE = yes ]]; then vendor/bin/phpunit --verbose --coverage-clover=coverage.clover; else vendor/bin/phpunit --verbose; fi + +after_script: if [[ $COVERAGE = yes ]]; then wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi diff --git a/app/src/vendor/CoreUpdate/vendor/webmozart/assert/LICENSE b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/LICENSE new file mode 100644 index 00000000..9e2e3075 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Bernhard Schussek + +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. diff --git a/app/src/vendor/CoreUpdate/vendor/webmozart/assert/README.md b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/README.md new file mode 100644 index 00000000..f72fdc4c --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/README.md @@ -0,0 +1,235 @@ +Webmozart Assert +================ + +[![Build Status](https://travis-ci.org/webmozart/assert.svg?branch=1.1.0)](https://travis-ci.org/webmozart/assert) +[![Build status](https://ci.appveyor.com/api/projects/status/lyg83bcsisrr94se/branch/master?svg=true)](https://ci.appveyor.com/project/webmozart/assert/branch/master) +[![Latest Stable Version](https://poser.pugx.org/webmozart/assert/v/stable.svg)](https://packagist.org/packages/webmozart/assert) +[![Total Downloads](https://poser.pugx.org/webmozart/assert/downloads.svg)](https://packagist.org/packages/webmozart/assert) +[![Dependency Status](https://www.versioneye.com/php/webmozart:assert/1.1.0/badge.svg)](https://www.versioneye.com/php/webmozart:assert/1.1.0) + +Latest release: [1.1.0](https://packagist.org/packages/webmozart/assert#1.1.0) + +PHP >= 5.3.9 + +This library contains efficient assertions to test the input and output of +your methods. With these assertions, you can greatly reduce the amount of coding +needed to write a safe implementation. + +All assertions in the [`Assert`] class throw an `\InvalidArgumentException` if +they fail. + +FAQ +--- + +**What's the difference to [beberlei/assert]?** + +This library is heavily inspired by Benjamin Eberlei's wonderful [assert package], +but fixes a usability issue with error messages that can't be fixed there without +breaking backwards compatibility. + +This package features usable error messages by default. However, you can also +easily write custom error messages: + +``` +Assert::string($path, 'The path is expected to be a string. Got: %s'); +``` + +In [beberlei/assert], the ordering of the `%s` placeholders is different for +every assertion. This package, on the contrary, provides consistent placeholder +ordering for all assertions: + +* `%s`: The tested value as string, e.g. `"/foo/bar"`. +* `%2$s`, `%3$s`, ...: Additional assertion-specific values, e.g. the + minimum/maximum length, allowed values, etc. + +Check the source code of the assertions to find out details about the additional +available placeholders. + +Installation +------------ + +Use [Composer] to install the package: + +``` +$ composer require webmozart/assert +``` + +Example +------- + +```php +use Webmozart\Assert\Assert; + +class Employee +{ + public function __construct($id) + { + Assert::integer($id, 'The employee ID must be an integer. Got: %s'); + Assert::greaterThan($id, 0, 'The employee ID must be a positive integer. Got: %s'); + } +} +``` + +If you create an employee with an invalid ID, an exception is thrown: + +```php +new Employee('foobar'); +// => InvalidArgumentException: +// The employee ID must be an integer. Got: string + +new Employee(-10); +// => InvalidArgumentException: +// The employee ID must be a positive integer. Got: -10 +``` + +Assertions +---------- + +The [`Assert`] class provides the following assertions: + +### Type Assertions + +Method | Description +----------------------------------------------- | -------------------------------------------------- +`string($value, $message = '')` | Check that a value is a string +`stringNotEmpty($value, $message = '')` | Check that a value is a non-empty string +`integer($value, $message = '')` | Check that a value is an integer +`integerish($value, $message = '')` | Check that a value casts to an integer +`float($value, $message = '')` | Check that a value is a float +`numeric($value, $message = '')` | Check that a value is numeric +`boolean($value, $message = '')` | Check that a value is a boolean +`scalar($value, $message = '')` | Check that a value is a scalar +`object($value, $message = '')` | Check that a value is an object +`resource($value, $type = null, $message = '')` | Check that a value is a resource +`isCallable($value, $message = '')` | Check that a value is a callable +`isArray($value, $message = '')` | Check that a value is an array +`isTraversable($value, $message = '')` | Check that a value is an array or a `\Traversable` +`isInstanceOf($value, $class, $message = '')` | Check that a value is an `instanceof` a class +`notInstanceOf($value, $class, $message = '')` | Check that a value is not an `instanceof` a class + +### Comparison Assertions + +Method | Description +----------------------------------------------- | -------------------------------------------------- +`true($value, $message = '')` | Check that a value is `true` +`false($value, $message = '')` | Check that a value is `false` +`null($value, $message = '')` | Check that a value is `null` +`notNull($value, $message = '')` | Check that a value is not `null` +`isEmpty($value, $message = '')` | Check that a value is `empty()` +`notEmpty($value, $message = '')` | Check that a value is not `empty()` +`eq($value, $value2, $message = '')` | Check that a value equals another (`==`) +`notEq($value, $value2, $message = '')` | Check that a value does not equal another (`!=`) +`same($value, $value2, $message = '')` | Check that a value is identical to another (`===`) +`notSame($value, $value2, $message = '')` | Check that a value is not identical to another (`!==`) +`greaterThan($value, $value2, $message = '')` | Check that a value is greater than another +`greaterThanEq($value, $value2, $message = '')` | Check that a value is greater than or equal to another +`lessThan($value, $value2, $message = '')` | Check that a value is less than another +`lessThanEq($value, $value2, $message = '')` | Check that a value is less than or equal to another +`range($value, $min, $max, $message = '')` | Check that a value is within a range +`oneOf($value, array $values, $message = '')` | Check that a value is one of a list of values + +### String Assertions + +You should check that a value is a string with `Assert::string()` before making +any of the following assertions. + +Method | Description +--------------------------------------------------- | -------------------------------------------------- +`contains($value, $subString, $message = '')` | Check that a string contains a substring +`startsWith($value, $prefix, $message = '')` | Check that a string has a prefix +`startsWithLetter($value, $message = '')` | Check that a string starts with a letter +`endsWith($value, $suffix, $message = '')` | Check that a string has a suffix +`regex($value, $pattern, $message = '')` | Check that a string matches a regular expression +`alpha($value, $message = '')` | Check that a string contains letters only +`digits($value, $message = '')` | Check that a string contains digits only +`alnum($value, $message = '')` | Check that a string contains letters and digits only +`lower($value, $message = '')` | Check that a string contains lowercase characters only +`upper($value, $message = '')` | Check that a string contains uppercase characters only +`length($value, $length, $message = '')` | Check that a string has a certain number of characters +`minLength($value, $min, $message = '')` | Check that a string has at least a certain number of characters +`maxLength($value, $max, $message = '')` | Check that a string has at most a certain number of characters +`lengthBetween($value, $min, $max, $message = '')` | Check that a string has a length in the given range +`uuid($value, $message = '')` | Check that a string is a valid UUID + +### File Assertions + +Method | Description +----------------------------------- | -------------------------------------------------- +`fileExists($value, $message = '')` | Check that a value is an existing path +`file($value, $message = '')` | Check that a value is an existing file +`directory($value, $message = '')` | Check that a value is an existing directory +`readable($value, $message = '')` | Check that a value is a readable path +`writable($value, $message = '')` | Check that a value is a writable path + +### Object Assertions + +Method | Description +----------------------------------------------------- | -------------------------------------------------- +`classExists($value, $message = '')` | Check that a value is an existing class name +`subclassOf($value, $class, $message = '')` | Check that a class is a subclass of another +`implementsInterface($value, $class, $message = '')` | Check that a class implements an interface +`propertyExists($value, $property, $message = '')` | Check that a property exists in a class/object +`propertyNotExists($value, $property, $message = '')` | Check that a property does not exist in a class/object +`methodExists($value, $method, $message = '')` | Check that a method exists in a class/object +`methodNotExists($value, $method, $message = '')` | Check that a method does not exist in a class/object + +### Array Assertions + +Method | Description +------------------------------------------- | -------------------------------------------------- +`keyExists($array, $key, $message = '')` | Check that a key exists in an array +`keyNotExists($array, $key, $message = '')` | Check that a key does not exist in an array + +### Collection Assertions + +All of the above assertions can be prefixed with `all*()` to test the contents +of an array or a `\Traversable`: + +```php +Assert::allIsInstanceOf('Acme\Employee', $employees); +``` + +### Nullable Assertions + +All of the above assertions can be prefixed with `nullOr*()` to run the +assertion only if it the value is not `null`: + +```php +Assert::nullOrString($middleName, 'The middle name must be a string or null. Got: %s'); +``` + +Authors +------- + +* [Bernhard Schussek] a.k.a. [@webmozart] +* [The Community Contributors] + +Contribute +---------- + +Contributions to the package are always welcome! + +* Report any bugs or issues you find on the [issue tracker]. +* You can grab the source code at the package's [Git repository]. + +Support +------- + +If you are having problems, send a mail to bschussek@gmail.com or shout out to +[@webmozart] on Twitter. + +License +------- + +All contents of this package are licensed under the [MIT license]. + +[beberlei/assert]: https://github.com/beberlei/assert +[assert package]: https://github.com/beberlei/assert +[Composer]: https://getcomposer.org +[Bernhard Schussek]: http://webmozarts.com +[The Community Contributors]: https://github.com/webmozart/assert/graphs/contributors +[issue tracker]: https://github.com/webmozart/assert +[Git repository]: https://github.com/webmozart/assert +[@webmozart]: https://twitter.com/webmozart +[MIT license]: LICENSE +[`Assert`]: src/Assert.php diff --git a/app/src/vendor/CoreUpdate/vendor/webmozart/assert/appveyor.yml b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/appveyor.yml new file mode 100644 index 00000000..72e614de --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/appveyor.yml @@ -0,0 +1,36 @@ +build: false +platform: x86 +clone_folder: c:\projects\webmozart\assert + +cache: + - c:\php -> appveyor.yml + +init: + - SET PATH=c:\php;%PATH% + - SET COMPOSER_NO_INTERACTION=1 + - SET PHP=1 + +install: + - IF EXIST c:\php (SET PHP=0) ELSE (mkdir c:\php) + - cd c:\php + - IF %PHP%==1 appveyor DownloadFile http://windows.php.net/downloads/releases/archives/php-7.0.0-nts-Win32-VC14-x86.zip + - IF %PHP%==1 7z x php-7.0.0-nts-Win32-VC14-x86.zip -y >nul + - IF %PHP%==1 del /Q *.zip + - IF %PHP%==1 echo @php %%~dp0composer.phar %%* > composer.bat + - IF %PHP%==1 copy /Y php.ini-development php.ini + - IF %PHP%==1 echo max_execution_time=1200 >> php.ini + - IF %PHP%==1 echo date.timezone="UTC" >> php.ini + - IF %PHP%==1 echo extension_dir=ext >> php.ini + - IF %PHP%==1 echo extension=php_curl.dll >> php.ini + - IF %PHP%==1 echo extension=php_openssl.dll >> php.ini + - IF %PHP%==1 echo extension=php_mbstring.dll >> php.ini + - IF %PHP%==1 echo extension=php_fileinfo.dll >> php.ini + - appveyor DownloadFile https://getcomposer.org/composer.phar + - cd c:\projects\webmozart\assert + - mkdir %APPDATA%\Composer + - IF %APPVEYOR_REPO_NAME%==webmozart/assert copy /Y .composer-auth.json %APPDATA%\Composer\auth.json + - composer update --prefer-dist --no-progress --ansi + +test_script: + - cd c:\projects\webmozart\assert + - vendor\bin\phpunit.bat --verbose diff --git a/app/src/vendor/CoreUpdate/vendor/webmozart/assert/phpunit.xml.dist b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/phpunit.xml.dist new file mode 100644 index 00000000..db20e9b4 --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/phpunit.xml.dist @@ -0,0 +1,16 @@ + + + + + + ./tests/ + + + + + + + ./src/ + + + diff --git a/app/src/vendor/CoreUpdate/vendor/webmozart/assert/src/Assert.php b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/src/Assert.php new file mode 100644 index 00000000..a5f09bba --- /dev/null +++ b/app/src/vendor/CoreUpdate/vendor/webmozart/assert/src/Assert.php @@ -0,0 +1,903 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Webmozart\Assert; + +use BadMethodCallException; +use InvalidArgumentException; +use Traversable; + +/** + * Efficient assertions to validate the input/output of your methods. + * + * @method static void nullOrString($value, $message = '') + * @method static void nullOrStringNotEmpty($value, $message = '') + * @method static void nullOrInteger($value, $message = '') + * @method static void nullOrIntegerish($value, $message = '') + * @method static void nullOrFloat($value, $message = '') + * @method static void nullOrNumeric($value, $message = '') + * @method static void nullOrBoolean($value, $message = '') + * @method static void nullOrScalar($value, $message = '') + * @method static void nullOrObject($value, $message = '') + * @method static void nullOrResource($value, $type = null, $message = '') + * @method static void nullOrIsCallable($value, $message = '') + * @method static void nullOrIsArray($value, $message = '') + * @method static void nullOrIsTraversable($value, $message = '') + * @method static void nullOrIsInstanceOf($value, $class, $message = '') + * @method static void nullOrNotInstanceOf($value, $class, $message = '') + * @method static void nullOrIsEmpty($value, $message = '') + * @method static void nullOrNotEmpty($value, $message = '') + * @method static void nullOrTrue($value, $message = '') + * @method static void nullOrFalse($value, $message = '') + * @method static void nullOrEq($value, $value2, $message = '') + * @method static void nullOrNotEq($value,$value2, $message = '') + * @method static void nullOrSame($value, $value2, $message = '') + * @method static void nullOrNotSame($value, $value2, $message = '') + * @method static void nullOrGreaterThan($value, $value2, $message = '') + * @method static void nullOrGreaterThanEq($value, $value2, $message = '') + * @method static void nullOrLessThan($value, $value2, $message = '') + * @method static void nullOrLessThanEq($value, $value2, $message = '') + * @method static void nullOrRange($value, $min, $max, $message = '') + * @method static void nullOrOneOf($value, $values, $message = '') + * @method static void nullOrContains($value, $subString, $message = '') + * @method static void nullOrStartsWith($value, $prefix, $message = '') + * @method static void nullOrStartsWithLetter($value, $message = '') + * @method static void nullOrEndsWith($value, $suffix, $message = '') + * @method static void nullOrRegex($value, $pattern, $message = '') + * @method static void nullOrAlpha($value, $message = '') + * @method static void nullOrDigits($value, $message = '') + * @method static void nullOrAlnum($value, $message = '') + * @method static void nullOrLower($value, $message = '') + * @method static void nullOrUpper($value, $message = '') + * @method static void nullOrLength($value, $length, $message = '') + * @method static void nullOrMinLength($value, $min, $message = '') + * @method static void nullOrMaxLength($value, $max, $message = '') + * @method static void nullOrLengthBetween($value, $min, $max, $message = '') + * @method static void nullOrFileExists($value, $message = '') + * @method static void nullOrFile($value, $message = '') + * @method static void nullOrDirectory($value, $message = '') + * @method static void nullOrReadable($value, $message = '') + * @method static void nullOrWritable($value, $message = '') + * @method static void nullOrClassExists($value, $message = '') + * @method static void nullOrSubclassOf($value, $class, $message = '') + * @method static void nullOrImplementsInterface($value, $interface, $message = '') + * @method static void nullOrPropertyExists($value, $property, $message = '') + * @method static void nullOrPropertyNotExists($value, $property, $message = '') + * @method static void nullOrMethodExists($value, $method, $message = '') + * @method static void nullOrMethodNotExists($value, $method, $message = '') + * @method static void nullOrKeyExists($value, $key, $message = '') + * @method static void nullOrKeyNotExists($value, $key, $message = '') + * @method static void nullOrUuid($values, $message = '') + * @method static void allString($values, $message = '') + * @method static void allStringNotEmpty($values, $message = '') + * @method static void allInteger($values, $message = '') + * @method static void allIntegerish($values, $message = '') + * @method static void allFloat($values, $message = '') + * @method static void allNumeric($values, $message = '') + * @method static void allBoolean($values, $message = '') + * @method static void allScalar($values, $message = '') + * @method static void allObject($values, $message = '') + * @method static void allResource($values, $type = null, $message = '') + * @method static void allIsCallable($values, $message = '') + * @method static void allIsArray($values, $message = '') + * @method static void allIsTraversable($values, $message = '') + * @method static void allIsInstanceOf($values, $class, $message = '') + * @method static void allNotInstanceOf($values, $class, $message = '') + * @method static void allNull($values, $message = '') + * @method static void allNotNull($values, $message = '') + * @method static void allIsEmpty($values, $message = '') + * @method static void allNotEmpty($values, $message = '') + * @method static void allTrue($values, $message = '') + * @method static void allFalse($values, $message = '') + * @method static void allEq($values, $value2, $message = '') + * @method static void allNotEq($values,$value2, $message = '') + * @method static void allSame($values, $value2, $message = '') + * @method static void allNotSame($values, $value2, $message = '') + * @method static void allGreaterThan($values, $value2, $message = '') + * @method static void allGreaterThanEq($values, $value2, $message = '') + * @method static void allLessThan($values, $value2, $message = '') + * @method static void allLessThanEq($values, $value2, $message = '') + * @method static void allRange($values, $min, $max, $message = '') + * @method static void allOneOf($values, $values, $message = '') + * @method static void allContains($values, $subString, $message = '') + * @method static void allStartsWith($values, $prefix, $message = '') + * @method static void allStartsWithLetter($values, $message = '') + * @method static void allEndsWith($values, $suffix, $message = '') + * @method static void allRegex($values, $pattern, $message = '') + * @method static void allAlpha($values, $message = '') + * @method static void allDigits($values, $message = '') + * @method static void allAlnum($values, $message = '') + * @method static void allLower($values, $message = '') + * @method static void allUpper($values, $message = '') + * @method static void allLength($values, $length, $message = '') + * @method static void allMinLength($values, $min, $message = '') + * @method static void allMaxLength($values, $max, $message = '') + * @method static void allLengthBetween($values, $min, $max, $message = '') + * @method static void allFileExists($values, $message = '') + * @method static void allFile($values, $message = '') + * @method static void allDirectory($values, $message = '') + * @method static void allReadable($values, $message = '') + * @method static void allWritable($values, $message = '') + * @method static void allClassExists($values, $message = '') + * @method static void allSubclassOf($values, $class, $message = '') + * @method static void allImplementsInterface($values, $interface, $message = '') + * @method static void allPropertyExists($values, $property, $message = '') + * @method static void allPropertyNotExists($values, $property, $message = '') + * @method static void allMethodExists($values, $method, $message = '') + * @method static void allMethodNotExists($values, $method, $message = '') + * @method static void allKeyExists($values, $key, $message = '') + * @method static void allKeyNotExists($values, $key, $message = '') + * @method static void allUuid($values, $message = '') + * + * @since 1.0 + * + * @author Bernhard Schussek + */ +class Assert +{ + public static function string($value, $message = '') + { + if (!is_string($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a string. Got: %s', + self::typeToString($value) + )); + } + } + + public static function stringNotEmpty($value, $message = '') + { + self::string($value, $message); + self::notEmpty($value, $message); + } + + public static function integer($value, $message = '') + { + if (!is_int($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected an integer. Got: %s', + self::typeToString($value) + )); + } + } + + public static function integerish($value, $message = '') + { + if (!is_numeric($value) || $value != (int) $value) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected an integerish value. Got: %s', + self::typeToString($value) + )); + } + } + + public static function float($value, $message = '') + { + if (!is_float($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a float. Got: %s', + self::typeToString($value) + )); + } + } + + public static function numeric($value, $message = '') + { + if (!is_numeric($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a numeric. Got: %s', + self::typeToString($value) + )); + } + } + + public static function boolean($value, $message = '') + { + if (!is_bool($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a boolean. Got: %s', + self::typeToString($value) + )); + } + } + + public static function scalar($value, $message = '') + { + if (!is_scalar($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a scalar. Got: %s', + self::typeToString($value) + )); + } + } + + public static function object($value, $message = '') + { + if (!is_object($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected an object. Got: %s', + self::typeToString($value) + )); + } + } + + public static function resource($value, $type = null, $message = '') + { + if (!is_resource($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a resource. Got: %s', + self::typeToString($value) + )); + } + + if ($type && $type !== get_resource_type($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a resource of type %2$s. Got: %s', + self::typeToString($value), + $type + )); + } + } + + public static function isCallable($value, $message = '') + { + if (!is_callable($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a callable. Got: %s', + self::typeToString($value) + )); + } + } + + public static function isArray($value, $message = '') + { + if (!is_array($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected an array. Got: %s', + self::typeToString($value) + )); + } + } + + public static function isTraversable($value, $message = '') + { + if (!is_array($value) && !($value instanceof Traversable)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a traversable. Got: %s', + self::typeToString($value) + )); + } + } + + public static function isInstanceOf($value, $class, $message = '') + { + if (!($value instanceof $class)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected an instance of %2$s. Got: %s', + self::typeToString($value), + $class + )); + } + } + + public static function notInstanceOf($value, $class, $message = '') + { + if ($value instanceof $class) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected an instance other than %2$s. Got: %s', + self::typeToString($value), + $class + )); + } + } + + public static function isEmpty($value, $message = '') + { + if (!empty($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected an empty value. Got: %s', + self::valueToString($value) + )); + } + } + + public static function notEmpty($value, $message = '') + { + if (empty($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a non-empty value. Got: %s', + self::valueToString($value) + )); + } + } + + public static function null($value, $message = '') + { + if (null !== $value) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected null. Got: %s', + self::valueToString($value) + )); + } + } + + public static function notNull($value, $message = '') + { + if (null === $value) { + throw new InvalidArgumentException( + $message ?: 'Expected a value other than null.' + ); + } + } + + public static function true($value, $message = '') + { + if (true !== $value) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to be true. Got: %s', + self::valueToString($value) + )); + } + } + + public static function false($value, $message = '') + { + if (false !== $value) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to be false. Got: %s', + self::valueToString($value) + )); + } + } + + public static function eq($value, $value2, $message = '') + { + if ($value2 != $value) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value equal to %2$s. Got: %s', + self::valueToString($value), + self::valueToString($value2) + )); + } + } + + public static function notEq($value, $value2, $message = '') + { + if ($value2 == $value) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a different value than %s.', + self::valueToString($value2) + )); + } + } + + public static function same($value, $value2, $message = '') + { + if ($value2 !== $value) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value identical to %2$s. Got: %s', + self::valueToString($value), + self::valueToString($value2) + )); + } + } + + public static function notSame($value, $value2, $message = '') + { + if ($value2 === $value) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value not identical to %s.', + self::valueToString($value2) + )); + } + } + + public static function greaterThan($value, $limit, $message = '') + { + if ($value <= $limit) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value greater than %2$s. Got: %s', + self::valueToString($value), + self::valueToString($limit) + )); + } + } + + public static function greaterThanEq($value, $limit, $message = '') + { + if ($value < $limit) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value greater than or equal to %2$s. Got: %s', + self::valueToString($value), + self::valueToString($limit) + )); + } + } + + public static function lessThan($value, $limit, $message = '') + { + if ($value >= $limit) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value less than %2$s. Got: %s', + self::valueToString($value), + self::valueToString($limit) + )); + } + } + + public static function lessThanEq($value, $limit, $message = '') + { + if ($value > $limit) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value less than or equal to %2$s. Got: %s', + self::valueToString($value), + self::valueToString($limit) + )); + } + } + + public static function range($value, $min, $max, $message = '') + { + if ($value < $min || $value > $max) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value between %2$s and %3$s. Got: %s', + self::valueToString($value), + self::valueToString($min), + self::valueToString($max) + )); + } + } + + public static function oneOf($value, array $values, $message = '') + { + if (!in_array($value, $values, true)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected one of: %2$s. Got: %s', + self::valueToString($value), + implode(', ', array_map(array(__CLASS__, 'valueToString'), $values)) + )); + } + } + + public static function contains($value, $subString, $message = '') + { + if (false === strpos($value, $subString)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to contain %2$s. Got: %s', + self::valueToString($value), + self::valueToString($subString) + )); + } + } + + public static function startsWith($value, $prefix, $message = '') + { + if (0 !== strpos($value, $prefix)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to start with %2$s. Got: %s', + self::valueToString($value), + self::valueToString($prefix) + )); + } + } + + public static function startsWithLetter($value, $message = '') + { + $valid = isset($value[0]); + + if ($valid) { + $locale = setlocale(LC_CTYPE, 0); + setlocale(LC_CTYPE, 'C'); + $valid = ctype_alpha($value[0]); + setlocale(LC_CTYPE, $locale); + } + + if (!$valid) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to start with a letter. Got: %s', + self::valueToString($value) + )); + } + } + + public static function endsWith($value, $suffix, $message = '') + { + if ($suffix !== substr($value, -self::strlen($suffix))) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to end with %2$s. Got: %s', + self::valueToString($value), + self::valueToString($suffix) + )); + } + } + + public static function regex($value, $pattern, $message = '') + { + if (!preg_match($pattern, $value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'The value %s does not match the expected pattern.', + self::valueToString($value) + )); + } + } + + public static function alpha($value, $message = '') + { + $locale = setlocale(LC_CTYPE, 0); + setlocale(LC_CTYPE, 'C'); + $valid = !ctype_alpha($value); + setlocale(LC_CTYPE, $locale); + + if ($valid) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to contain only letters. Got: %s', + self::valueToString($value) + )); + } + } + + public static function digits($value, $message = '') + { + $locale = setlocale(LC_CTYPE, 0); + setlocale(LC_CTYPE, 'C'); + $valid = !ctype_digit($value); + setlocale(LC_CTYPE, $locale); + + if ($valid) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to contain digits only. Got: %s', + self::valueToString($value) + )); + } + } + + public static function alnum($value, $message = '') + { + $locale = setlocale(LC_CTYPE, 0); + setlocale(LC_CTYPE, 'C'); + $valid = !ctype_alnum($value); + setlocale(LC_CTYPE, $locale); + + if ($valid) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to contain letters and digits only. Got: %s', + self::valueToString($value) + )); + } + } + + public static function lower($value, $message = '') + { + $locale = setlocale(LC_CTYPE, 0); + setlocale(LC_CTYPE, 'C'); + $valid = !ctype_lower($value); + setlocale(LC_CTYPE, $locale); + + if ($valid) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to contain lowercase characters only. Got: %s', + self::valueToString($value) + )); + } + } + + public static function upper($value, $message = '') + { + $locale = setlocale(LC_CTYPE, 0); + setlocale(LC_CTYPE, 'C'); + $valid = !ctype_upper($value); + setlocale(LC_CTYPE, $locale); + + if ($valid) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to contain uppercase characters only. Got: %s', + self::valueToString($value) + )); + } + } + + public static function length($value, $length, $message = '') + { + if ($length !== self::strlen($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to contain %2$s characters. Got: %s', + self::valueToString($value), + $length + )); + } + } + + public static function minLength($value, $min, $message = '') + { + if (self::strlen($value) < $min) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to contain at least %2$s characters. Got: %s', + self::valueToString($value), + $min + )); + } + } + + public static function maxLength($value, $max, $message = '') + { + if (self::strlen($value) > $max) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to contain at most %2$s characters. Got: %s', + self::valueToString($value), + $max + )); + } + } + + public static function lengthBetween($value, $min, $max, $message = '') + { + $length = self::strlen($value); + + if ($length < $min || $length > $max) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a value to contain between %2$s and %3$s characters. Got: %s', + self::valueToString($value), + $min, + $max + )); + } + } + + public static function fileExists($value, $message = '') + { + self::string($value); + + if (!file_exists($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'The file %s does not exist.', + self::valueToString($value) + )); + } + } + + public static function file($value, $message = '') + { + self::fileExists($value, $message); + + if (!is_file($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'The path %s is not a file.', + self::valueToString($value) + )); + } + } + + public static function directory($value, $message = '') + { + self::fileExists($value, $message); + + if (!is_dir($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'The path %s is no directory.', + self::valueToString($value) + )); + } + } + + public static function readable($value, $message = '') + { + if (!is_readable($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'The path %s is not readable.', + self::valueToString($value) + )); + } + } + + public static function writable($value, $message = '') + { + if (!is_writable($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'The path %s is not writable.', + self::valueToString($value) + )); + } + } + + public static function classExists($value, $message = '') + { + if (!class_exists($value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected an existing class name. Got: %s', + self::valueToString($value) + )); + } + } + + public static function subclassOf($value, $class, $message = '') + { + if (!is_subclass_of($value, $class)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected a sub-class of %2$s. Got: %s', + self::valueToString($value), + self::valueToString($class) + )); + } + } + + public static function implementsInterface($value, $interface, $message = '') + { + if (!in_array($interface, class_implements($value))) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected an implementation of %2$s. Got: %s', + self::valueToString($value), + self::valueToString($interface) + )); + } + } + + public static function propertyExists($classOrObject, $property, $message = '') + { + if (!property_exists($classOrObject, $property)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected the property %s to exist.', + self::valueToString($property) + )); + } + } + + public static function propertyNotExists($classOrObject, $property, $message = '') + { + if (property_exists($classOrObject, $property)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected the property %s to not exist.', + self::valueToString($property) + )); + } + } + + public static function methodExists($classOrObject, $method, $message = '') + { + if (!method_exists($classOrObject, $method)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected the method %s to exist.', + self::valueToString($method) + )); + } + } + + public static function methodNotExists($classOrObject, $method, $message = '') + { + if (method_exists($classOrObject, $method)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected the method %s to not exist.', + self::valueToString($method) + )); + } + } + + public static function keyExists($array, $key, $message = '') + { + if (!array_key_exists($key, $array)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected the key %s to exist.', + self::valueToString($key) + )); + } + } + + public static function keyNotExists($array, $key, $message = '') + { + if (array_key_exists($key, $array)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Expected the key %s to not exist.', + self::valueToString($key) + )); + } + } + + public static function uuid($value, $message = '') + { + $value = str_replace(array('urn:', 'uuid:', '{', '}'), '', $value); + + // The nil UUID is special form of UUID that is specified to have all + // 128 bits set to zero. + if ('00000000-0000-0000-0000-000000000000' === $value) { + return; + } + + if (!preg_match('/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/', $value)) { + throw new InvalidArgumentException(sprintf( + $message ?: 'Value "%s" is not a valid UUID.', + self::valueToString($value) + )); + } + } + + public static function __callStatic($name, $arguments) + { + if ('nullOr' === substr($name, 0, 6)) { + if (null !== $arguments[0]) { + $method = lcfirst(substr($name, 6)); + call_user_func_array(array('static', $method), $arguments); + } + + return; + } + + if ('all' === substr($name, 0, 3)) { + self::isTraversable($arguments[0]); + + $method = lcfirst(substr($name, 3)); + $args = $arguments; + + foreach ($arguments[0] as $entry) { + $args[0] = $entry; + + call_user_func_array(array('static', $method), $args); + } + + return; + } + + throw new BadMethodCallException('No such method: '.$name); + } + + protected static function valueToString($value) + { + if (null === $value) { + return 'null'; + } + + if (true === $value) { + return 'true'; + } + + if (false === $value) { + return 'false'; + } + + if (is_array($value)) { + return 'array'; + } + + if (is_object($value)) { + return get_class($value); + } + + if (is_resource($value)) { + return 'resource'; + } + + if (is_string($value)) { + return '"'.$value.'"'; + } + + return (string) $value; + } + + protected static function typeToString($value) + { + return is_object($value) ? get_class($value) : gettype($value); + } + + protected static function strlen($value) + { + if (!function_exists('mb_detect_encoding')) { + return strlen($value); + } + + if (false === $encoding = mb_detect_encoding($value)) { + return strlen($value); + } + + return mb_strwidth($value, $encoding); + } + + private function __construct() + { + } +} diff --git a/app/src/vendor/PHP-Benchmark/vendor/composer/installed.json b/app/src/vendor/PHP-Benchmark/vendor/composer/installed.json index 4abb381a..9e9dfcd8 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/composer/installed.json +++ b/app/src/vendor/PHP-Benchmark/vendor/composer/installed.json @@ -1,55 +1,4 @@ [ - { - "name": "symfony/yaml", - "version": "v2.8.3", - "version_normalized": "2.8.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "2a4ee40acb880c56f29fb1b8886e7ffe94f3b995" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2a4ee40acb880c56f29fb1b8886e7ffe94f3b995", - "reference": "2a4ee40acb880c56f29fb1b8886e7ffe94f3b995", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "time": "2016-02-23 07:41:20", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "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": "Symfony Yaml Component", - "homepage": "https://symfony.com" - }, { "name": "phpunit/php-text-template", "version": "1.2.1", @@ -144,49 +93,6 @@ "xunit" ] }, - { - "name": "phpunit/php-timer", - "version": "1.0.7", - "version_normalized": "1.0.7.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2015-06-21 08:01:12", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ] - }, { "name": "phpunit/php-token-stream", "version": "1.2.2", @@ -479,19 +385,62 @@ "listener" ] }, + { + "name": "victorjonsson/markdowndocs", + "version": "1.3.5", + "version_normalized": "1.3.5.0", + "source": { + "type": "git", + "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", + "reference": "4814be1e08d80b64f0ffcb5fbbb84a47dd0992f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/4814be1e08d80b64f0ffcb5fbbb84a47dd0992f7", + "reference": "4814be1e08d80b64f0ffcb5fbbb84a47dd0992f7", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "symfony/console": ">=2.6" + }, + "require-dev": { + "phpunit/phpunit": "3.7.23" + }, + "time": "2016-02-12 13:19:04", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "PHPDocsMD": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Victor Jonsson", + "email": "kontakt@victorjonsson.se" + } + ], + "description": "Command line tool for generating markdown-formatted class documentation", + "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator" + }, { "name": "symfony/polyfill-mbstring", - "version": "v1.1.1", - "version_normalized": "1.1.1.0", + "version": "v1.2.0", + "version_normalized": "1.2.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "1289d16209491b584839022f29257ad859b8532d" + "reference": "dff51f72b0706335131b00a7f49606168c582594" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d", - "reference": "1289d16209491b584839022f29257ad859b8532d", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", + "reference": "dff51f72b0706335131b00a7f49606168c582594", "shasum": "" }, "require": { @@ -500,11 +449,11 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2016-01-20 09:13:37", + "time": "2016-05-18 14:26:46", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.2-dev" } }, "installation-source": "dist", @@ -542,17 +491,17 @@ }, { "name": "symfony/console", - "version": "v3.0.3", - "version_normalized": "3.0.3.0", + "version": "v3.1.4", + "version_normalized": "3.1.4.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "2ed5e2706ce92313d120b8fe50d1063bcfd12e04" + "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/2ed5e2706ce92313d120b8fe50d1063bcfd12e04", - "reference": "2ed5e2706ce92313d120b8fe50d1063bcfd12e04", + "url": "https://api.github.com/repos/symfony/console/zipball/8ea494c34f0f772c3954b5fbe00bffc5a435e563", + "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563", "shasum": "" }, "require": { @@ -569,11 +518,11 @@ "symfony/event-dispatcher": "", "symfony/process": "" }, - "time": "2016-02-28 16:24:34", + "time": "2016-08-19 06:48:39", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "installation-source": "dist", @@ -603,46 +552,100 @@ "homepage": "https://symfony.com" }, { - "name": "victorjonsson/markdowndocs", - "version": "1.3.5", - "version_normalized": "1.3.5.0", + "name": "phpunit/php-timer", + "version": "1.0.8", + "version_normalized": "1.0.8.0", "source": { "type": "git", - "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", - "reference": "4814be1e08d80b64f0ffcb5fbbb84a47dd0992f7" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/4814be1e08d80b64f0ffcb5fbbb84a47dd0992f7", - "reference": "4814be1e08d80b64f0ffcb5fbbb84a47dd0992f7", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", "shasum": "" }, "require": { - "php": ">=5.5.0", - "symfony/console": ">=2.6" + "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "3.7.23" + "phpunit/phpunit": "~4|~5" }, - "time": "2016-02-12 13:19:04", + "time": "2016-05-12 18:03:57", "type": "library", "installation-source": "dist", "autoload": { - "psr-0": { - "PHPDocsMD": "src/" + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ] + }, + { + "name": "symfony/yaml", + "version": "v2.8.11", + "version_normalized": "2.8.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "e7540734bad981fe59f8ef14b6fc194ae9df8d9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e7540734bad981fe59f8ef14b6fc194ae9df8d9c", + "reference": "e7540734bad981fe59f8ef14b6fc194ae9df8d9c", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "time": "2016-09-02 01:57:56", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" } }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Victor Jonsson", - "email": "kontakt@victorjonsson.se" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Command line tool for generating markdown-formatted class documentation", - "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator" + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com" } ] diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Application.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Application.php index a01d6695..6434ef71 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Application.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Application.php @@ -210,7 +210,7 @@ public function getHelperSet() } /** - * Set an input definition set to be used with this application. + * Set an input definition to be used with this application. * * @param InputDefinition $definition The input definition */ @@ -232,13 +232,23 @@ public function getDefinition() /** * Gets the help message. * - * @return string A help message. + * @return string A help message */ public function getHelp() { return $this->getLongVersion(); } + /** + * Gets whether to catch exceptions or not during commands execution. + * + * @return bool Whether to catch exceptions or not during commands execution + */ + public function areExceptionsCaught() + { + return $this->catchExceptions; + } + /** * Sets whether to catch exceptions or not during commands execution. * @@ -249,6 +259,16 @@ public function setCatchExceptions($boolean) $this->catchExceptions = (bool) $boolean; } + /** + * Gets whether to automatically exit after a command execution or not. + * + * @return bool Whether to automatically exit after a command execution or not + */ + public function isAutoExitEnabled() + { + return $this->autoExit; + } + /** * Sets whether to automatically exit after a command execution or not. * @@ -332,6 +352,8 @@ public function register($name) /** * Adds an array of command objects. * + * If a Command is not enabled it will not be added. + * * @param Command[] $commands An array of commands */ public function addCommands(array $commands) @@ -345,10 +367,11 @@ public function addCommands(array $commands) * Adds a command object. * * If a command with the same name already exists, it will be overridden. + * If the command is not enabled it will not be added. * * @param Command $command A Command object * - * @return Command The registered command + * @return Command|null The registered command if enabled or null */ public function add(Command $command) { @@ -417,9 +440,9 @@ public function has($name) /** * Returns an array of all unique namespaces used by currently registered commands. * - * It does not returns the global namespace which always exists. + * It does not return the global namespace which always exists. * - * @return array An array of namespaces + * @return string[] An array of namespaces */ public function getNamespaces() { @@ -588,7 +611,11 @@ public function renderException(\Exception $e, OutputInterface $output) $output->writeln('', OutputInterface::VERBOSITY_QUIET); do { - $title = sprintf(' [%s] ', get_class($e)); + $title = sprintf( + ' [%s%s] ', + get_class($e), + $output->isVerbose() && 0 !== ($code = $e->getCode()) ? ' ('.$code.')' : '' + ); $len = $this->stringWidth($title); @@ -909,7 +936,7 @@ private function getSttyColumns() /** * Runs and parses mode CON if it's available, suppressing any error output. * - * @return string x or null if it could not be parsed + * @return string|null x or null if it could not be parsed */ private function getConsoleMode() { @@ -968,7 +995,7 @@ public function extractNamespace($name, $limit = null) * @param string $name The string * @param array|\Traversable $collection The collection * - * @return array A sorted array of similar string + * @return string[] A sorted array of similar string */ private function findAlternatives($name, $collection) { @@ -1067,7 +1094,7 @@ private function splitStringByWidth($string, $width) * * @param string $name The full name of the command * - * @return array The namespaces of the command + * @return string[] The namespaces of the command */ private function extractAllNamespaces($name) { diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Command/Command.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Command/Command.php index c8429845..d212a325 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Command/Command.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Command/Command.php @@ -300,14 +300,14 @@ public function mergeApplicationDefinition($mergeArgs = true) return; } + $this->definition->addOptions($this->application->getDefinition()->getOptions()); + if ($mergeArgs) { $currentArguments = $this->definition->getArguments(); $this->definition->setArguments($this->application->getDefinition()->getArguments()); $this->definition->addArguments($currentArguments); } - $this->definition->addOptions($this->application->getDefinition()->getOptions()); - $this->applicationDefinitionMerged = true; if ($mergeArgs) { $this->applicationDefinitionMergedWithArgs = true; @@ -601,10 +601,15 @@ public function getUsages() * * @return mixed The helper value * + * @throws LogicException if no HelperSet is defined * @throws InvalidArgumentException if the helper is not defined */ public function getHelper($name) { + if (null === $this->helperSet) { + throw new LogicException(sprintf('Cannot retrieve helper "%s" because there is no HelperSet defined. Did you forget to add your command to the application or to set the application on the command using the setApplication() method? You can also set the HelperSet directly using the setHelperSet() method.', $name)); + } + return $this->helperSet->get($name); } diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/ConsoleEvents.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/ConsoleEvents.php index 1ed41b7d..b3571e9a 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/ConsoleEvents.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/ConsoleEvents.php @@ -23,10 +23,7 @@ final class ConsoleEvents * executed by the console. It also allows you to modify the command, input and output * before they are handled to the command. * - * The event listener method receives a Symfony\Component\Console\Event\ConsoleCommandEvent - * instance. - * - * @Event + * @Event("Symfony\Component\Console\Event\ConsoleCommandEvent") * * @var string */ @@ -36,10 +33,7 @@ final class ConsoleEvents * The TERMINATE event allows you to attach listeners after a command is * executed by the console. * - * The event listener method receives a Symfony\Component\Console\Event\ConsoleTerminateEvent - * instance. - * - * @Event + * @Event("Symfony\Component\Console\Event\ConsoleTerminateEvent") * * @var string */ @@ -49,11 +43,9 @@ final class ConsoleEvents * The EXCEPTION event occurs when an uncaught exception appears. * * This event allows you to deal with the exception or - * to modify the thrown exception. The event listener method receives - * a Symfony\Component\Console\Event\ConsoleExceptionEvent - * instance. + * to modify the thrown exception. * - * @Event + * @Event("Symfony\Component\Console\Event\ConsoleExceptionEvent") * * @var string */ diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Descriptor/TextDescriptor.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Descriptor/TextDescriptor.php index 560ce150..f7446eb0 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Descriptor/TextDescriptor.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Descriptor/TextDescriptor.php @@ -156,7 +156,7 @@ protected function describeCommand(Command $command, array $options = array()) $this->writeText("\n"); $this->writeText('Help:', $options); $this->writeText("\n"); - $this->writeText(' '.str_replace("\n", "\n ", $help), $options); + $this->writeText(' '.str_replace("\n", "\n ", $help), $options); $this->writeText("\n"); } } diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Exception/CommandNotFoundException.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Exception/CommandNotFoundException.php index ce6fefe3..54f1a5b0 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Exception/CommandNotFoundException.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Exception/CommandNotFoundException.php @@ -21,10 +21,10 @@ class CommandNotFoundException extends \InvalidArgumentException implements Exce private $alternatives; /** - * @param string $message Exception message to throw. - * @param array $alternatives List of similar defined names. - * @param int $code Exception code. - * @param Exception $previous previous exception used for the exception chaining. + * @param string $message Exception message to throw + * @param array $alternatives List of similar defined names + * @param int $code Exception code + * @param Exception $previous previous exception used for the exception chaining */ public function __construct($message, array $alternatives = array(), $code = 0, \Exception $previous = null) { @@ -34,7 +34,7 @@ public function __construct($message, array $alternatives = array(), $code = 0, } /** - * @return array A list of similar defined names. + * @return array A list of similar defined names */ public function getAlternatives() { diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/FormatterHelper.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/FormatterHelper.php index ac736f98..6a48a77f 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/FormatterHelper.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/FormatterHelper.php @@ -72,6 +72,30 @@ public function formatBlock($messages, $style, $large = false) return implode("\n", $messages); } + /** + * Truncates a message to the given length. + * + * @param string $message + * @param int $length + * @param string $suffix + * + * @return string + */ + public function truncate($message, $length, $suffix = '...') + { + $computedLength = $length - $this->strlen($suffix); + + if ($computedLength > $this->strlen($message)) { + return $message; + } + + if (false === $encoding = mb_detect_encoding($message, null, true)) { + return substr($message, 0, $length).$suffix; + } + + return mb_substr($message, 0, $length, $encoding).$suffix; + } + /** * {@inheritdoc} */ diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/Helper.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/Helper.php index b542be3a..43f9a169 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/Helper.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/Helper.php @@ -62,26 +62,28 @@ public static function formatTime($secs) { static $timeFormats = array( array(0, '< 1 sec'), - array(2, '1 sec'), - array(59, 'secs', 1), + array(1, '1 sec'), + array(2, 'secs', 1), array(60, '1 min'), - array(3600, 'mins', 60), - array(5400, '1 hr'), - array(86400, 'hrs', 3600), - array(129600, '1 day'), - array(604800, 'days', 86400), + array(120, 'mins', 60), + array(3600, '1 hr'), + array(7200, 'hrs', 3600), + array(86400, '1 day'), + array(172800, 'days', 86400), ); - foreach ($timeFormats as $format) { + foreach ($timeFormats as $index => $format) { if ($secs >= $format[0]) { - continue; + if ((isset($timeFormats[$index + 1]) && $secs < $timeFormats[$index + 1][0]) + || $index == count($timeFormats) - 1 + ) { + if (2 == count($format)) { + return $format[1]; + } + + return floor($secs / $format[2]).' '.$format[1]; + } } - - if (2 == count($format)) { - return $format[1]; - } - - return ceil($secs / $format[2]).' '.$format[1]; } } diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/HelperSet.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/HelperSet.php index f7d703ab..6f12b39d 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/HelperSet.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/HelperSet.php @@ -21,13 +21,16 @@ */ class HelperSet implements \IteratorAggregate { + /** + * @var Helper[] + */ private $helpers = array(); private $command; /** * Constructor. * - * @param Helper[] $helpers An array of helper. + * @param Helper[] $helpers An array of helper */ public function __construct(array $helpers = array()) { @@ -102,6 +105,9 @@ public function getCommand() return $this->command; } + /** + * @return Helper[] + */ public function getIterator() { return new \ArrayIterator($this->helpers); diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/ProgressBar.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/ProgressBar.php index 51083aa5..6aea12ea 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/ProgressBar.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/ProgressBar.php @@ -41,10 +41,10 @@ class ProgressBar private $startTime; private $stepWidth; private $percent = 0.0; - private $lastMessagesLength = 0; private $formatLineCount; - private $messages; + private $messages = array(); private $overwrite = true; + private $firstRun = true; private static $formatters; private static $formats; @@ -141,6 +141,16 @@ public static function getFormatDefinition($name) return isset(self::$formats[$name]) ? self::$formats[$name] : null; } + /** + * Associates a text with a named placeholder. + * + * The text is displayed when the progress bar is rendered but only + * when the corresponding placeholder is part of the custom format line + * (by wrapping the name with %). + * + * @param string $message The text to associate with the placeholder + * @param string $name The name of the placeholder + */ public function setMessage($message, $name = 'message') { $this->messages[$name] = $message; @@ -437,7 +447,7 @@ public function clear() $this->setRealFormat($this->internalFormat ?: $this->determineBestFormat()); } - $this->overwrite(str_repeat("\n", $this->formatLineCount)); + $this->overwrite(''); } /** @@ -477,37 +487,26 @@ private function setMaxSteps($max) */ private function overwrite($message) { - $lines = explode("\n", $message); + if ($this->overwrite) { + if (!$this->firstRun) { + // Move the cursor to the beginning of the line + $this->output->write("\x0D"); + + // Erase the line + $this->output->write("\x1B[2K"); - // append whitespace to match the line's length - if (null !== $this->lastMessagesLength) { - foreach ($lines as $i => $line) { - if ($this->lastMessagesLength > Helper::strlenWithoutDecoration($this->output->getFormatter(), $line)) { - $lines[$i] = str_pad($line, $this->lastMessagesLength, "\x20", STR_PAD_RIGHT); + // Erase previous lines + if ($this->formatLineCount > 0) { + $this->output->write(str_repeat("\x1B[1A\x1B[2K", $this->formatLineCount)); } } - } - - if ($this->overwrite) { - // move back to the beginning of the progress bar before redrawing it - $this->output->write("\x0D"); } elseif ($this->step > 0) { - // move to new line $this->output->writeln(''); } - if ($this->formatLineCount) { - $this->output->write(sprintf("\033[%dA", $this->formatLineCount)); - } - $this->output->write(implode("\n", $lines)); + $this->firstRun = false; - $this->lastMessagesLength = 0; - foreach ($lines as $line) { - $len = Helper::strlenWithoutDecoration($this->output->getFormatter(), $line); - if ($len > $this->lastMessagesLength) { - $this->lastMessagesLength = $len; - } - } + $this->output->write($message); } private function determineBestFormat() diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/ProgressIndicator.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/ProgressIndicator.php index 8c8a49c4..f90a85c2 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/ProgressIndicator.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/ProgressIndicator.php @@ -11,6 +11,8 @@ namespace Symfony\Component\Console\Helper; +use Symfony\Component\Console\Exception\InvalidArgumentException; +use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Output\OutputInterface; /** @@ -53,7 +55,7 @@ public function __construct(OutputInterface $output, $format = null, $indicatorC $indicatorValues = array_values($indicatorValues); if (2 > count($indicatorValues)) { - throw new \InvalidArgumentException('Must have at least 2 indicator value characters.'); + throw new InvalidArgumentException('Must have at least 2 indicator value characters.'); } $this->format = self::getFormatDefinition($format); @@ -74,42 +76,6 @@ public function setMessage($message) $this->display(); } - /** - * Gets the current indicator message. - * - * @return string|null - * - * @internal for PHP 5.3 compatibility - */ - public function getMessage() - { - return $this->message; - } - - /** - * Gets the progress bar start time. - * - * @return int The progress bar start time - * - * @internal for PHP 5.3 compatibility - */ - public function getStartTime() - { - return $this->startTime; - } - - /** - * Gets the current animated indicator character. - * - * @return string - * - * @internal for PHP 5.3 compatibility - */ - public function getCurrentValue() - { - return $this->indicatorValues[$this->indicatorCurrent % count($this->indicatorValues)]; - } - /** * Starts the indicator output. * @@ -118,7 +84,7 @@ public function getCurrentValue() public function start($message) { if ($this->started) { - throw new \LogicException('Progress indicator already started.'); + throw new LogicException('Progress indicator already started.'); } $this->message = $message; @@ -137,7 +103,7 @@ public function start($message) public function advance() { if (!$this->started) { - throw new \LogicException('Progress indicator has not yet been started.'); + throw new LogicException('Progress indicator has not yet been started.'); } if (!$this->output->isDecorated()) { @@ -164,7 +130,7 @@ public function advance() public function finish($message) { if (!$this->started) { - throw new \LogicException('Progress indicator has not yet been started.'); + throw new LogicException('Progress indicator has not yet been started.'); } $this->message = $message; @@ -292,13 +258,13 @@ private static function initPlaceholderFormatters() { return array( 'indicator' => function (ProgressIndicator $indicator) { - return $indicator->getCurrentValue(); + return $indicator->indicatorValues[$indicator->indicatorCurrent % count($indicator->indicatorValues)]; }, 'message' => function (ProgressIndicator $indicator) { - return $indicator->getMessage(); + return $indicator->message; }, 'elapsed' => function (ProgressIndicator $indicator) { - return Helper::formatTime(time() - $indicator->getStartTime()); + return Helper::formatTime(time() - $indicator->startTime); }, 'memory' => function () { return Helper::formatMemory(memory_get_usage(true)); diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/SymfonyQuestionHelper.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/SymfonyQuestionHelper.php index 942278bd..aeddb760 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/SymfonyQuestionHelper.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/SymfonyQuestionHelper.php @@ -67,6 +67,18 @@ protected function writePrompt(OutputInterface $output, Question $question) break; + case $question instanceof ChoiceQuestion && $question->isMultiselect(): + $choices = $question->getChoices(); + $default = explode(',', $default); + + foreach ($default as $key => $value) { + $default[$key] = $choices[trim($value)]; + } + + $text = sprintf(' %s [%s]:', $text, implode(', ', $default)); + + break; + case $question instanceof ChoiceQuestion: $choices = $question->getChoices(); $text = sprintf(' %s [%s]:', $text, $choices[$default]); diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/Table.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/Table.php index 1f103ad1..1434562d 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/Table.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/Table.php @@ -43,7 +43,7 @@ class Table * * @var array */ - private $columnWidths = array(); + private $effectiveColumnWidths = array(); /** * Number of columns cache. @@ -67,6 +67,13 @@ class Table */ private $columnStyles = array(); + /** + * User set column widths. + * + * @var array + */ + private $columnWidths = array(); + private static $styles; public function __construct(OutputInterface $output) @@ -108,11 +115,11 @@ public static function getStyleDefinition($name) self::$styles = self::initStyles(); } - if (!self::$styles[$name]) { - throw new InvalidArgumentException(sprintf('Style "%s" is not defined.', $name)); + if (isset(self::$styles[$name])) { + return self::$styles[$name]; } - return self::$styles[$name]; + throw new InvalidArgumentException(sprintf('Style "%s" is not defined.', $name)); } /** @@ -124,13 +131,7 @@ public static function getStyleDefinition($name) */ public function setStyle($name) { - if ($name instanceof TableStyle) { - $this->style = $name; - } elseif (isset(self::$styles[$name])) { - $this->style = self::$styles[$name]; - } else { - throw new InvalidArgumentException(sprintf('Style "%s" is not defined.', $name)); - } + $this->style = $this->resolveStyle($name); return $this; } @@ -157,13 +158,7 @@ public function setColumnStyle($columnIndex, $name) { $columnIndex = intval($columnIndex); - if ($name instanceof TableStyle) { - $this->columnStyles[$columnIndex] = $name; - } elseif (isset(self::$styles[$name])) { - $this->columnStyles[$columnIndex] = self::$styles[$name]; - } else { - throw new \InvalidArgumentException(sprintf('Style "%s" is not defined.', $name)); - } + $this->columnStyles[$columnIndex] = $this->resolveStyle($name); return $this; } @@ -186,6 +181,38 @@ public function getColumnStyle($columnIndex) return $this->getStyle(); } + /** + * Sets the minimum width of a column. + * + * @param int $columnIndex Column index + * @param int $width Minimum column width in characters + * + * @return Table + */ + public function setColumnWidth($columnIndex, $width) + { + $this->columnWidths[intval($columnIndex)] = intval($width); + + return $this; + } + + /** + * Sets the minimum width of all columns. + * + * @param array $widths + * + * @return Table + */ + public function setColumnWidths(array $widths) + { + $this->columnWidths = array(); + foreach ($widths as $index => $width) { + $this->setColumnWidth($index, $width); + } + + return $this; + } + public function setHeaders(array $headers) { $headers = array_values($headers); @@ -296,7 +323,7 @@ private function renderRowSeparator() $markup = $this->style->getCrossingChar(); for ($column = 0; $column < $count; ++$column) { - $markup .= str_repeat($this->style->getHorizontalBorderChar(), $this->columnWidths[$column]).$this->style->getCrossingChar(); + $markup .= str_repeat($this->style->getHorizontalBorderChar(), $this->effectiveColumnWidths[$column]).$this->style->getCrossingChar(); } $this->output->writeln(sprintf($this->style->getBorderFormat(), $markup)); @@ -307,7 +334,7 @@ private function renderRowSeparator() */ private function renderColumnSeparator() { - $this->output->write(sprintf($this->style->getBorderFormat(), $this->style->getVerticalBorderChar())); + return sprintf($this->style->getBorderFormat(), $this->style->getVerticalBorderChar()); } /** @@ -324,12 +351,12 @@ private function renderRow(array $row, $cellFormat) return; } - $this->renderColumnSeparator(); + $rowContent = $this->renderColumnSeparator(); foreach ($this->getRowColumns($row) as $column) { - $this->renderCell($row, $column, $cellFormat); - $this->renderColumnSeparator(); + $rowContent .= $this->renderCell($row, $column, $cellFormat); + $rowContent .= $this->renderColumnSeparator(); } - $this->output->writeln(''); + $this->output->writeln($rowContent); } /** @@ -342,11 +369,11 @@ private function renderRow(array $row, $cellFormat) private function renderCell(array $row, $column, $cellFormat) { $cell = isset($row[$column]) ? $row[$column] : ''; - $width = $this->columnWidths[$column]; + $width = $this->effectiveColumnWidths[$column]; if ($cell instanceof TableCell && $cell->getColspan() > 1) { // add the width of the following columns(numbers of colspan). foreach (range($column + 1, $column + $cell->getColspan() - 1) as $nextColumn) { - $width += $this->getColumnSeparatorWidth() + $this->columnWidths[$nextColumn]; + $width += $this->getColumnSeparatorWidth() + $this->effectiveColumnWidths[$nextColumn]; } } @@ -358,12 +385,13 @@ private function renderCell(array $row, $column, $cellFormat) $style = $this->getColumnStyle($column); if ($cell instanceof TableSeparator) { - $this->output->write(sprintf($style->getBorderFormat(), str_repeat($style->getHorizontalBorderChar(), $width))); - } else { - $width += Helper::strlen($cell) - Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell); - $content = sprintf($style->getCellRowContentFormat(), $cell); - $this->output->write(sprintf($cellFormat, str_pad($content, $width, $style->getPaddingChar(), $style->getPadType()))); + return sprintf($style->getBorderFormat(), str_repeat($style->getHorizontalBorderChar(), $width)); } + + $width += Helper::strlen($cell) - Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell); + $content = sprintf($style->getCellRowContentFormat(), $cell); + + return sprintf($cellFormat, str_pad($content, $width, $style->getPaddingChar(), $style->getPadType())); } /** @@ -447,7 +475,7 @@ private function fillNextRows($rows, $line) } // create a two dimensional array (rowspan x colspan) - $unmergedRows = array_replace_recursive(array_fill($line + 1, $nbLines, ''), $unmergedRows); + $unmergedRows = array_replace_recursive(array_fill($line + 1, $nbLines, array()), $unmergedRows); foreach ($unmergedRows as $unmergedRowKey => $unmergedRow) { $value = isset($lines[$unmergedRowKey - $line]) ? $lines[$unmergedRowKey - $line] : ''; $unmergedRows[$unmergedRowKey][$column] = new TableCell($value, array('colspan' => $cell->getColspan())); @@ -569,10 +597,22 @@ private function calculateColumnsWidth($rows) continue; } + foreach ($row as $i => $cell) { + if ($cell instanceof TableCell) { + $textLength = strlen($cell); + if ($textLength > 0) { + $contentColumns = str_split($cell, ceil($textLength / $cell->getColspan())); + foreach ($contentColumns as $position => $content) { + $row[$i + $position] = $content; + } + } + } + } + $lengths[] = $this->getCellWidth($row, $column); } - $this->columnWidths[$column] = max($lengths) + strlen($this->style->getCellRowContentFormat()) - 2; + $this->effectiveColumnWidths[$column] = max($lengths) + strlen($this->style->getCellRowContentFormat()) - 2; } } @@ -596,18 +636,16 @@ private function getColumnSeparatorWidth() */ private function getCellWidth(array $row, $column) { + $cellWidth = 0; + if (isset($row[$column])) { $cell = $row[$column]; $cellWidth = Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell); - if ($cell instanceof TableCell && $cell->getColspan() > 1) { - // we assume that cell value will be across more than one column. - $cellWidth = $cellWidth / $cell->getColspan(); - } - - return $cellWidth; } - return 0; + $columnWidth = isset($this->columnWidths[$column]) ? $this->columnWidths[$column] : 0; + + return max($cellWidth, $columnWidth); } /** @@ -615,7 +653,7 @@ private function getCellWidth(array $row, $column) */ private function cleanup() { - $this->columnWidths = array(); + $this->effectiveColumnWidths = array(); $this->numberOfColumns = null; } @@ -651,4 +689,17 @@ private static function initStyles() 'symfony-style-guide' => $styleGuide, ); } + + private function resolveStyle($name) + { + if ($name instanceof TableStyle) { + return $name; + } + + if (isset(self::$styles[$name])) { + return self::$styles[$name]; + } + + throw new InvalidArgumentException(sprintf('Style "%s" is not defined.', $name)); + } } diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/TableSeparator.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/TableSeparator.php index 8cbbc661..8cc73e69 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/TableSeparator.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Helper/TableSeparator.php @@ -19,8 +19,7 @@ class TableSeparator extends TableCell { /** - * @param string $value - * @param array $options + * @param array $options */ public function __construct(array $options = array()) { diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/ArgvInput.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/ArgvInput.php index fec04e21..cb0a8aa5 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/ArgvInput.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/ArgvInput.php @@ -46,8 +46,8 @@ class ArgvInput extends Input /** * Constructor. * - * @param array $argv An array of parameters from the CLI (in the argv format) - * @param InputDefinition $definition A InputDefinition instance + * @param array|null $argv An array of parameters from the CLI (in the argv format) + * @param InputDefinition|null $definition A InputDefinition instance */ public function __construct(array $argv = null, InputDefinition $definition = null) { @@ -69,7 +69,7 @@ protected function setTokens(array $tokens) } /** - * Processes command line arguments. + * {@inheritdoc} */ protected function parse() { @@ -93,7 +93,7 @@ protected function parse() /** * Parses a short option. * - * @param string $token The current token. + * @param string $token The current token */ private function parseShortOption($token) { @@ -176,7 +176,12 @@ private function parseArgument($token) // unexpected argument } else { - throw new RuntimeException('Too many arguments.'); + $all = $this->definition->getArguments(); + if (count($all)) { + throw new RuntimeException(sprintf('Too many arguments, expected arguments "%s".', implode('" "', array_keys($all)))); + } + + throw new RuntimeException(sprintf('No arguments expected, got "%s".', $token)); } } @@ -253,9 +258,7 @@ private function addLongOption($name, $value) } /** - * Returns the first argument from the raw parameters (not parsed). - * - * @return string The value of the first argument or null otherwise + * {@inheritdoc} */ public function getFirstArgument() { @@ -269,15 +272,7 @@ public function getFirstArgument() } /** - * Returns true if the raw parameters (not parsed) contain a value. - * - * This method is to be used to introspect the input parameters - * before they have been validated. It must be used carefully. - * - * @param string|array $values The value(s) to look for in the raw parameters (can be an array) - * @param bool $onlyParams Only check real parameters, skip those following an end of options (--) signal - * - * @return bool true if the value is contained in the raw parameters + * {@inheritdoc} */ public function hasParameterOption($values, $onlyParams = false) { @@ -298,16 +293,7 @@ public function hasParameterOption($values, $onlyParams = false) } /** - * Returns the value of a raw option (not parsed). - * - * This method is to be used to introspect the input parameters - * before they have been validated. It must be used carefully. - * - * @param string|array $values The value(s) to look for in the raw parameters (can be an array) - * @param mixed $default The default value to return if no result is found - * @param bool $onlyParams Only check real parameters, skip those following an end of options (--) signal - * - * @return mixed The option value + * {@inheritdoc} */ public function getParameterOption($values, $default = false, $onlyParams = false) { diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/ArrayInput.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/ArrayInput.php index 6705d4bb..a44b6b28 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/ArrayInput.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/ArrayInput.php @@ -30,8 +30,8 @@ class ArrayInput extends Input /** * Constructor. * - * @param array $parameters An array of parameters - * @param InputDefinition $definition A InputDefinition instance + * @param array $parameters An array of parameters + * @param InputDefinition|null $definition A InputDefinition instance */ public function __construct(array $parameters, InputDefinition $definition = null) { @@ -41,9 +41,7 @@ public function __construct(array $parameters, InputDefinition $definition = nul } /** - * Returns the first argument from the raw parameters (not parsed). - * - * @return string The value of the first argument or null otherwise + * {@inheritdoc} */ public function getFirstArgument() { @@ -57,15 +55,7 @@ public function getFirstArgument() } /** - * Returns true if the raw parameters (not parsed) contain a value. - * - * This method is to be used to introspect the input parameters - * before they have been validated. It must be used carefully. - * - * @param string|array $values The values to look for in the raw parameters (can be an array) - * @param bool $onlyParams Only check real parameters, skip those following an end of options (--) signal - * - * @return bool true if the value is contained in the raw parameters + * {@inheritdoc} */ public function hasParameterOption($values, $onlyParams = false) { @@ -89,16 +79,7 @@ public function hasParameterOption($values, $onlyParams = false) } /** - * Returns the value of a raw option (not parsed). - * - * This method is to be used to introspect the input parameters - * before they have been validated. It must be used carefully. - * - * @param string|array $values The value(s) to look for in the raw parameters (can be an array) - * @param mixed $default The default value to return if no result is found - * @param bool $onlyParams Only check real parameters, skip those following an end of options (--) signal - * - * @return mixed The option value + * {@inheritdoc} */ public function getParameterOption($values, $default = false, $onlyParams = false) { @@ -141,7 +122,7 @@ public function __toString() } /** - * Processes command line arguments. + * {@inheritdoc} */ protected function parse() { diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/Input.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/Input.php index 85499fc4..817292ed 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/Input.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/Input.php @@ -38,7 +38,7 @@ abstract class Input implements InputInterface /** * Constructor. * - * @param InputDefinition $definition A InputDefinition instance + * @param InputDefinition|null $definition A InputDefinition instance */ public function __construct(InputDefinition $definition = null) { @@ -51,9 +51,7 @@ public function __construct(InputDefinition $definition = null) } /** - * Binds the current Input instance with the given arguments and options. - * - * @param InputDefinition $definition A InputDefinition instance + * {@inheritdoc} */ public function bind(InputDefinition $definition) { @@ -70,9 +68,7 @@ public function bind(InputDefinition $definition) abstract protected function parse(); /** - * Validates the input. - * - * @throws RuntimeException When not enough arguments are given + * {@inheritdoc} */ public function validate() { @@ -89,9 +85,7 @@ public function validate() } /** - * Checks if the input is interactive. - * - * @return bool Returns true if the input is interactive + * {@inheritdoc} */ public function isInteractive() { @@ -99,9 +93,7 @@ public function isInteractive() } /** - * Sets the input interactivity. - * - * @param bool $interactive If the input should be interactive + * {@inheritdoc} */ public function setInteractive($interactive) { @@ -109,9 +101,7 @@ public function setInteractive($interactive) } /** - * Returns the argument values. - * - * @return array An array of argument values + * {@inheritdoc} */ public function getArguments() { @@ -119,13 +109,7 @@ public function getArguments() } /** - * Returns the argument value for a given argument name. - * - * @param string $name The argument name - * - * @return mixed The argument value - * - * @throws InvalidArgumentException When argument given doesn't exist + * {@inheritdoc} */ public function getArgument($name) { @@ -137,12 +121,7 @@ public function getArgument($name) } /** - * Sets an argument value by name. - * - * @param string $name The argument name - * @param string $value The argument value - * - * @throws InvalidArgumentException When argument given doesn't exist + * {@inheritdoc} */ public function setArgument($name, $value) { @@ -154,11 +133,7 @@ public function setArgument($name, $value) } /** - * Returns true if an InputArgument object exists by name or position. - * - * @param string|int $name The InputArgument name or position - * - * @return bool true if the InputArgument object exists, false otherwise + * {@inheritdoc} */ public function hasArgument($name) { @@ -166,9 +141,7 @@ public function hasArgument($name) } /** - * Returns the options values. - * - * @return array An array of option values + * {@inheritdoc} */ public function getOptions() { @@ -176,13 +149,7 @@ public function getOptions() } /** - * Returns the option value for a given option name. - * - * @param string $name The option name - * - * @return mixed The option value - * - * @throws InvalidArgumentException When option given doesn't exist + * {@inheritdoc} */ public function getOption($name) { @@ -194,12 +161,7 @@ public function getOption($name) } /** - * Sets an option value by name. - * - * @param string $name The option name - * @param string|bool $value The option value - * - * @throws InvalidArgumentException When option given doesn't exist + * {@inheritdoc} */ public function setOption($name, $value) { @@ -211,11 +173,7 @@ public function setOption($name, $value) } /** - * Returns true if an InputOption object exists by name. - * - * @param string $name The InputOption name - * - * @return bool true if the InputOption object exists, false otherwise + * {@inheritdoc} */ public function hasOption($name) { diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/InputInterface.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/InputInterface.php index 2e1fb9fe..bc664664 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/InputInterface.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Input/InputInterface.php @@ -11,6 +11,9 @@ namespace Symfony\Component\Console\Input; +use Symfony\Component\Console\Exception\InvalidArgumentException; +use Symfony\Component\Console\Exception\RuntimeException; + /** * InputInterface is the interface implemented by all input classes. * @@ -60,11 +63,9 @@ public function getParameterOption($values, $default = false, $onlyParams = fals public function bind(InputDefinition $definition); /** - * Validates if arguments given are correct. - * - * Throws an exception when not enough arguments are given. + * Validates the input. * - * @throws \RuntimeException + * @throws RuntimeException When not enough arguments are given */ public function validate(); @@ -76,11 +77,13 @@ public function validate(); public function getArguments(); /** - * Gets argument by name. + * Returns the argument value for a given argument name. * - * @param string $name The name of the argument + * @param string $name The argument name * - * @return mixed + * @return mixed The argument value + * + * @throws InvalidArgumentException When argument given doesn't exist */ public function getArgument($name); @@ -111,11 +114,13 @@ public function hasArgument($name); public function getOptions(); /** - * Gets an option by name. + * Returns the option value for a given option name. * - * @param string $name The name of the option + * @param string $name The option name * - * @return mixed + * @return mixed The option value + * + * @throws InvalidArgumentException When option given doesn't exist */ public function getOption($name); diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/ConsoleOutput.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/ConsoleOutput.php index f666c793..007f3f01 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/ConsoleOutput.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/ConsoleOutput.php @@ -14,15 +14,16 @@ use Symfony\Component\Console\Formatter\OutputFormatterInterface; /** - * ConsoleOutput is the default class for all CLI output. It uses STDOUT. + * ConsoleOutput is the default class for all CLI output. It uses STDOUT and STDERR. * - * This class is a convenient wrapper around `StreamOutput`. + * This class is a convenient wrapper around `StreamOutput` for both STDOUT and STDERR. * * $output = new ConsoleOutput(); * * This is equivalent to: * * $output = new StreamOutput(fopen('php://stdout', 'w')); + * $stdErr = new StreamOutput(fopen('php://stderr', 'w')); * * @author Fabien Potencier */ @@ -139,9 +140,11 @@ function_exists('php_uname') ? php_uname('s') : '', */ private function openOutputStream() { - $outputStream = $this->hasStdoutSupport() ? 'php://stdout' : 'php://output'; + if (!$this->hasStdoutSupport()) { + return fopen('php://output', 'w'); + } - return @fopen($outputStream, 'w') ?: fopen('php://output', 'w'); + return @fopen('php://stdout', 'w') ?: fopen('php://output', 'w'); } /** @@ -149,8 +152,6 @@ private function openOutputStream() */ private function openErrorStream() { - $errorStream = $this->hasStderrSupport() ? 'php://stderr' : 'php://output'; - - return fopen($errorStream, 'w'); + return fopen($this->hasStderrSupport() ? 'php://stderr' : 'php://output', 'w'); } } diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/NullOutput.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/NullOutput.php index 682f9a4d..218f285b 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/NullOutput.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/NullOutput.php @@ -73,21 +73,33 @@ public function getVerbosity() return self::VERBOSITY_QUIET; } + /** + * {@inheritdoc} + */ public function isQuiet() { return true; } + /** + * {@inheritdoc} + */ public function isVerbose() { return false; } + /** + * {@inheritdoc} + */ public function isVeryVerbose() { return false; } + /** + * {@inheritdoc} + */ public function isDebug() { return false; diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/Output.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/Output.php index 4476ffb5..c12015cc 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/Output.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/Output.php @@ -94,21 +94,33 @@ public function getVerbosity() return $this->verbosity; } + /** + * {@inheritdoc} + */ public function isQuiet() { return self::VERBOSITY_QUIET === $this->verbosity; } + /** + * {@inheritdoc} + */ public function isVerbose() { return self::VERBOSITY_VERBOSE <= $this->verbosity; } + /** + * {@inheritdoc} + */ public function isVeryVerbose() { return self::VERBOSITY_VERY_VERBOSE <= $this->verbosity; } + /** + * {@inheritdoc} + */ public function isDebug() { return self::VERBOSITY_DEBUG <= $this->verbosity; diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/StreamOutput.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/StreamOutput.php index 62d04c0e..22b29aa1 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/StreamOutput.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Output/StreamOutput.php @@ -72,7 +72,7 @@ public function getStream() */ protected function doWrite($message, $newline) { - if (false === @fwrite($this->stream, $message.($newline ? PHP_EOL : ''))) { + if (false === @fwrite($this->stream, $message) || ($newline && (false === @fwrite($this->stream, PHP_EOL)))) { // should never happen throw new RuntimeException('Unable to write output.'); } @@ -85,7 +85,7 @@ protected function doWrite($message, $newline) * * Colorization is disabled if not supported by the stream: * - * - Windows without Ansicon, ConEmu or Mintty + * - Windows != 10.0.10586 without Ansicon, ConEmu or Mintty * - non tty consoles * * @return bool true if the stream supports colorization, false otherwise @@ -93,7 +93,11 @@ protected function doWrite($message, $newline) protected function hasColorSupport() { if (DIRECTORY_SEPARATOR === '\\') { - return false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI') || 'xterm' === getenv('TERM'); + return + '10.0.10586' === PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD + || false !== getenv('ANSICON') + || 'ON' === getenv('ConEmuANSI') + || 'xterm' === getenv('TERM'); } return function_exists('posix_isatty') && @posix_isatty($this->stream); diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Question/ChoiceQuestion.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Question/ChoiceQuestion.php index 2c40638d..39c4a852 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Question/ChoiceQuestion.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Question/ChoiceQuestion.php @@ -68,6 +68,16 @@ public function setMultiselect($multiselect) return $this; } + /** + * Returns whether the choices are multiselect. + * + * @return bool + */ + public function isMultiselect() + { + return $this->multiselect; + } + /** * Gets the prompt for choices. * diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Question/Question.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Question/Question.php index 310a2bfe..7a69279f 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Question/Question.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Question/Question.php @@ -138,8 +138,8 @@ public function getAutocompleterValues() */ public function setAutocompleterValues($values) { - if (is_array($values) && $this->isAssoc($values)) { - $values = array_merge(array_keys($values), array_values($values)); + if (is_array($values)) { + $values = $this->isAssoc($values) ? array_merge(array_keys($values), array_values($values)) : array_values($values); } if (null !== $values && !is_array($values)) { diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/README.md b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/README.md index 25f700c8..664a37c0 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/README.md +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/README.md @@ -1,67 +1,20 @@ Console Component ================= -Console eases the creation of beautiful and testable command line interfaces. +The Console component eases the creation of beautiful and testable command line +interfaces. -The Application object manages the CLI application: - -```php -use Symfony\Component\Console\Application; - -$console = new Application(); -$console->run(); -``` - -The ``run()`` method parses the arguments and options passed on the command -line and executes the right command. - -Registering a new command can easily be done via the ``register()`` method, -which returns a ``Command`` instance: - -```php -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\OutputInterface; - -$console - ->register('ls') - ->setDefinition(array( - new InputArgument('dir', InputArgument::REQUIRED, 'Directory name'), - )) - ->setDescription('Displays the files in the given directory') - ->setCode(function (InputInterface $input, OutputInterface $output) { - $dir = $input->getArgument('dir'); - - $output->writeln(sprintf('Dir listing for %s', $dir)); - }) -; -``` - -You can also register new commands via classes. - -The component provides a lot of features like output coloring, input and -output abstractions (so that you can easily unit-test your commands), -validation, automatic help messages, ... - -Tests ------ - -You can run the unit tests with the following command: +Resources +--------- - $ cd path/to/Symfony/Component/Console/ - $ composer install - $ phpunit + * [Documentation](https://symfony.com/doc/current/components/console/index.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) -Third Party ------------ +Credits +------- `Resources/bin/hiddeninput.exe` is a third party binary provided within this component. Find sources and license at https://github.com/Seldaek/hidden-input. - -Resources ---------- - -[The Console Component](https://symfony.com/doc/current/components/console.html) - -[How to create a Console Command](https://symfony.com/doc/current/cookbook/console/console_command.html) diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Style/SymfonyStyle.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Style/SymfonyStyle.php index 47d7d124..a9c57443 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Style/SymfonyStyle.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Style/SymfonyStyle.php @@ -65,40 +65,10 @@ public function __construct(InputInterface $input, OutputInterface $output) */ public function block($messages, $type = null, $style = null, $prefix = ' ', $padding = false) { - $this->autoPrependBlock(); $messages = is_array($messages) ? array_values($messages) : array($messages); - $lines = array(); - - // add type - if (null !== $type) { - $messages[0] = sprintf('[%s] %s', $type, $messages[0]); - } - - // wrap and add newlines for each element - foreach ($messages as $key => $message) { - $message = OutputFormatter::escape($message); - $lines = array_merge($lines, explode(PHP_EOL, wordwrap($message, $this->lineLength - Helper::strlen($prefix), PHP_EOL, true))); - - if (count($messages) > 1 && $key < count($messages) - 1) { - $lines[] = ''; - } - } - - if ($padding && $this->isDecorated()) { - array_unshift($lines, ''); - $lines[] = ''; - } - - foreach ($lines as &$line) { - $line = sprintf('%s%s', $prefix, $line); - $line .= str_repeat(' ', $this->lineLength - Helper::strlenWithoutDecoration($this->getFormatter(), $line)); - if ($style) { - $line = sprintf('<%s>%s', $style, $line); - } - } - - $this->writeln($lines); + $this->autoPrependBlock(); + $this->writeln($this->createBlock($messages, $type, $style, $prefix, $padding, true)); $this->newLine(); } @@ -156,16 +126,17 @@ public function text($message) } /** - * {@inheritdoc} + * Formats a command comment. + * + * @param string|array $message */ public function comment($message) { - $this->autoPrependText(); - $messages = is_array($message) ? array_values($message) : array($message); - foreach ($messages as $message) { - $this->writeln(sprintf(' // %s', $message)); - } + + $this->autoPrependBlock(); + $this->writeln($this->createBlock($messages, null, null, ' // ')); + $this->newLine(); } /** @@ -213,12 +184,13 @@ public function caution($message) */ public function table(array $headers, array $rows) { - $headers = array_map(function ($value) { return sprintf('%s', $value); }, $headers); + $style = clone Table::getStyleDefinition('symfony-style-guide'); + $style->setCellHeaderFormat('%s'); $table = new Table($this); $table->setHeaders($headers); $table->setRows($rows); - $table->setStyle('symfony-style-guide'); + $table->setStyle($style); $table->render(); $this->newLine(); @@ -412,4 +384,52 @@ private function reduceBuffer($messages) return substr($value, -4); }, array_merge(array($this->bufferedOutput->fetch()), (array) $messages)); } + + private function createBlock($messages, $type = null, $style = null, $prefix = ' ', $padding = false, $escape = false) + { + $indentLength = 0; + $prefixLength = Helper::strlenWithoutDecoration($this->getFormatter(), $prefix); + $lines = array(); + + if (null !== $type) { + $type = sprintf('[%s] ', $type); + $indentLength = strlen($type); + $lineIndentation = str_repeat(' ', $indentLength); + } + + // wrap and add newlines for each element + foreach ($messages as $key => $message) { + if ($escape) { + $message = OutputFormatter::escape($message); + } + + $lines = array_merge($lines, explode(PHP_EOL, wordwrap($message, $this->lineLength - $prefixLength - $indentLength, PHP_EOL, true))); + + if (count($messages) > 1 && $key < count($messages) - 1) { + $lines[] = ''; + } + } + + $firstLineIndex = 0; + if ($padding && $this->isDecorated()) { + $firstLineIndex = 1; + array_unshift($lines, ''); + $lines[] = ''; + } + + foreach ($lines as $i => &$line) { + if (null !== $type) { + $line = $firstLineIndex === $i ? $type.$line : $lineIndentation.$line; + } + + $line = $prefix.$line; + $line .= str_repeat(' ', $this->lineLength - Helper::strlenWithoutDecoration($this->getFormatter(), $line)); + + if ($style) { + $line = sprintf('<%s>%s', $style, $line); + } + } + + return $lines; + } } diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Tester/ApplicationTester.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Tester/ApplicationTester.php index da8a19ce..c0f8c720 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Tester/ApplicationTester.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Tester/ApplicationTester.php @@ -14,6 +14,7 @@ use Symfony\Component\Console\Application; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\ConsoleOutput; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\StreamOutput; @@ -31,14 +32,13 @@ class ApplicationTester { private $application; private $input; - private $output; private $statusCode; - /** - * Constructor. - * - * @param Application $application An Application instance to test. + * @var OutputInterface */ + private $output; + private $captureStreamsIndependently = false; + public function __construct(Application $application) { $this->application = $application; @@ -49,9 +49,10 @@ public function __construct(Application $application) * * Available options: * - * * interactive: Sets the input interactive flag - * * decorated: Sets the output decorated flag - * * verbosity: Sets the output verbosity flag + * * interactive: Sets the input interactive flag + * * decorated: Sets the output decorated flag + * * verbosity: Sets the output verbosity flag + * * capture_stderr_separately: Make output of stdOut and stdErr separately available * * @param array $input An array of arguments and options * @param array $options An array of options @@ -65,12 +66,35 @@ public function run(array $input, $options = array()) $this->input->setInteractive($options['interactive']); } - $this->output = new StreamOutput(fopen('php://memory', 'w', false)); - if (isset($options['decorated'])) { - $this->output->setDecorated($options['decorated']); - } - if (isset($options['verbosity'])) { - $this->output->setVerbosity($options['verbosity']); + $this->captureStreamsIndependently = array_key_exists('capture_stderr_separately', $options) && $options['capture_stderr_separately']; + if (!$this->captureStreamsIndependently) { + $this->output = new StreamOutput(fopen('php://memory', 'w', false)); + if (isset($options['decorated'])) { + $this->output->setDecorated($options['decorated']); + } + if (isset($options['verbosity'])) { + $this->output->setVerbosity($options['verbosity']); + } + } else { + $this->output = new ConsoleOutput( + isset($options['verbosity']) ? $options['verbosity'] : ConsoleOutput::VERBOSITY_NORMAL, + isset($options['decorated']) ? $options['decorated'] : null + ); + + $errorOutput = new StreamOutput(fopen('php://memory', 'w', false)); + $errorOutput->setFormatter($this->output->getFormatter()); + $errorOutput->setVerbosity($this->output->getVerbosity()); + $errorOutput->setDecorated($this->output->isDecorated()); + + $reflectedOutput = new \ReflectionObject($this->output); + $strErrProperty = $reflectedOutput->getProperty('stderr'); + $strErrProperty->setAccessible(true); + $strErrProperty->setValue($this->output, $errorOutput); + + $reflectedParent = $reflectedOutput->getParentClass(); + $streamProperty = $reflectedParent->getProperty('stream'); + $streamProperty->setAccessible(true); + $streamProperty->setValue($this->output, fopen('php://memory', 'w', false)); } return $this->statusCode = $this->application->run($this->input, $this->output); @@ -96,6 +120,30 @@ public function getDisplay($normalize = false) return $display; } + /** + * Gets the output written to STDERR by the application. + * + * @param bool $normalize Whether to normalize end of lines to \n or not + * + * @return string + */ + public function getErrorOutput($normalize = false) + { + if (!$this->captureStreamsIndependently) { + throw new \LogicException('The error output is not available when the tester is run without "capture_stderr_separately" option set.'); + } + + rewind($this->output->getErrorOutput()->getStream()); + + $display = stream_get_contents($this->output->getErrorOutput()->getStream()); + + if ($normalize) { + $display = str_replace(PHP_EOL, "\n", $display); + } + + return $display; + } + /** * Gets the input instance used by the last execution of the application. * diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Tester/CommandTester.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Tester/CommandTester.php index 8d6486e1..f95298bc 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Tester/CommandTester.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/Tester/CommandTester.php @@ -32,7 +32,7 @@ class CommandTester /** * Constructor. * - * @param Command $command A Command instance to test. + * @param Command $command A Command instance to test */ public function __construct(Command $command) { diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/phpunit.xml.dist b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/phpunit.xml.dist index ae0dcbea..8c09554f 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/console/phpunit.xml.dist +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/console/phpunit.xml.dist @@ -26,4 +26,14 @@ + + + + + + Symfony\Component\Console + + + +
diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Mbstring.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Mbstring.php index 31f678bd..85a06681 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -577,8 +577,8 @@ private static function title_case_upper($s) private static function getData($file) { - if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.ser')) { - return unserialize(file_get_contents($file)); + if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { + return require $file; } return false; diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php new file mode 100644 index 00000000..3ca16416 --- /dev/null +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php @@ -0,0 +1,1101 @@ + 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + 'À' => 'à', + 'Ã' => 'á', + 'Â' => 'â', + 'Ã' => 'ã', + 'Ä' => 'ä', + 'Ã…' => 'Ã¥', + 'Æ' => 'æ', + 'Ç' => 'ç', + 'È' => 'è', + 'É' => 'é', + 'Ê' => 'ê', + 'Ë' => 'ë', + 'ÃŒ' => 'ì', + 'Ã' => 'í', + 'ÃŽ' => 'î', + 'Ã' => 'ï', + 'Ã' => 'ð', + 'Ñ' => 'ñ', + 'Ã’' => 'ò', + 'Ó' => 'ó', + 'Ô' => 'ô', + 'Õ' => 'õ', + 'Ö' => 'ö', + 'Ø' => 'ø', + 'Ù' => 'ù', + 'Ú' => 'ú', + 'Û' => 'û', + 'Ãœ' => 'ü', + 'Ã' => 'ý', + 'Þ' => 'þ', + 'Ä€' => 'Ä', + 'Ä‚' => 'ă', + 'Ä„' => 'Ä…', + 'Ć' => 'ć', + 'Ĉ' => 'ĉ', + 'ÄŠ' => 'Ä‹', + 'ÄŒ' => 'Ä', + 'ÄŽ' => 'Ä', + 'Ä' => 'Ä‘', + 'Ä’' => 'Ä“', + 'Ä”' => 'Ä•', + 'Ä–' => 'Ä—', + 'Ę' => 'Ä™', + 'Äš' => 'Ä›', + 'Äœ' => 'Ä', + 'Äž' => 'ÄŸ', + 'Ä ' => 'Ä¡', + 'Ä¢' => 'Ä£', + 'Ĥ' => 'Ä¥', + 'Ħ' => 'ħ', + 'Ĩ' => 'Ä©', + 'Ī' => 'Ä«', + 'Ĭ' => 'Ä­', + 'Ä®' => 'į', + 'Ä°' => 'i', + 'IJ' => 'ij', + 'Ä´' => 'ĵ', + 'Ķ' => 'Ä·', + 'Ĺ' => 'ĺ', + 'Ä»' => 'ļ', + 'Ľ' => 'ľ', + 'Ä¿' => 'Å€', + 'Å' => 'Å‚', + 'Ń' => 'Å„', + 'Å…' => 'ņ', + 'Ň' => 'ň', + 'ÅŠ' => 'Å‹', + 'ÅŒ' => 'Å', + 'ÅŽ' => 'Å', + 'Å' => 'Å‘', + 'Å’' => 'Å“', + 'Å”' => 'Å•', + 'Å–' => 'Å—', + 'Ř' => 'Å™', + 'Åš' => 'Å›', + 'Åœ' => 'Å', + 'Åž' => 'ÅŸ', + 'Å ' => 'Å¡', + 'Å¢' => 'Å£', + 'Ť' => 'Å¥', + 'Ŧ' => 'ŧ', + 'Ũ' => 'Å©', + 'Ū' => 'Å«', + 'Ŭ' => 'Å­', + 'Å®' => 'ů', + 'Å°' => 'ű', + 'Ų' => 'ų', + 'Å´' => 'ŵ', + 'Ŷ' => 'Å·', + 'Ÿ' => 'ÿ', + 'Ź' => 'ź', + 'Å»' => 'ż', + 'Ž' => 'ž', + 'Æ' => 'É“', + 'Æ‚' => 'ƃ', + 'Æ„' => 'Æ…', + 'Ɔ' => 'É”', + 'Ƈ' => 'ƈ', + 'Ɖ' => 'É–', + 'ÆŠ' => 'É—', + 'Æ‹' => 'ÆŒ', + 'ÆŽ' => 'Ç', + 'Æ' => 'É™', + 'Æ' => 'É›', + 'Æ‘' => 'Æ’', + 'Æ“' => 'É ', + 'Æ”' => 'É£', + 'Æ–' => 'É©', + 'Æ—' => 'ɨ', + 'Ƙ' => 'Æ™', + 'Æœ' => 'ɯ', + 'Æ' => 'ɲ', + 'ÆŸ' => 'ɵ', + 'Æ ' => 'Æ¡', + 'Æ¢' => 'Æ£', + 'Ƥ' => 'Æ¥', + 'Ʀ' => 'Ê€', + 'Ƨ' => 'ƨ', + 'Æ©' => 'ʃ', + 'Ƭ' => 'Æ­', + 'Æ®' => 'ʈ', + 'Ư' => 'Æ°', + 'Ʊ' => 'ÊŠ', + 'Ʋ' => 'Ê‹', + 'Ƴ' => 'Æ´', + 'Ƶ' => 'ƶ', + 'Æ·' => 'Ê’', + 'Ƹ' => 'ƹ', + 'Ƽ' => 'ƽ', + 'Ç„' => 'dž', + 'Ç…' => 'dž', + 'LJ' => 'lj', + 'Lj' => 'lj', + 'ÇŠ' => 'ÇŒ', + 'Ç‹' => 'ÇŒ', + 'Ç' => 'ÇŽ', + 'Ç' => 'Ç', + 'Ç‘' => 'Ç’', + 'Ç“' => 'Ç”', + 'Ç•' => 'Ç–', + 'Ç—' => 'ǘ', + 'Ç™' => 'Çš', + 'Ç›' => 'Çœ', + 'Çž' => 'ÇŸ', + 'Ç ' => 'Ç¡', + 'Ç¢' => 'Ç£', + 'Ǥ' => 'Ç¥', + 'Ǧ' => 'ǧ', + 'Ǩ' => 'Ç©', + 'Ǫ' => 'Ç«', + 'Ǭ' => 'Ç­', + 'Ç®' => 'ǯ', + 'DZ' => 'dz', + 'Dz' => 'dz', + 'Ç´' => 'ǵ', + 'Ƕ' => 'Æ•', + 'Ç·' => 'Æ¿', + 'Ǹ' => 'ǹ', + 'Ǻ' => 'Ç»', + 'Ǽ' => 'ǽ', + 'Ǿ' => 'Ç¿', + 'È€' => 'È', + 'È‚' => 'ȃ', + 'È„' => 'È…', + 'Ȇ' => 'ȇ', + 'Ȉ' => 'ȉ', + 'ÈŠ' => 'È‹', + 'ÈŒ' => 'È', + 'ÈŽ' => 'È', + 'È' => 'È‘', + 'È’' => 'È“', + 'È”' => 'È•', + 'È–' => 'È—', + 'Ș' => 'È™', + 'Èš' => 'È›', + 'Èœ' => 'È', + 'Èž' => 'ÈŸ', + 'È ' => 'Æž', + 'È¢' => 'È£', + 'Ȥ' => 'È¥', + 'Ȧ' => 'ȧ', + 'Ȩ' => 'È©', + 'Ȫ' => 'È«', + 'Ȭ' => 'È­', + 'È®' => 'ȯ', + 'È°' => 'ȱ', + 'Ȳ' => 'ȳ', + 'Ⱥ' => 'â±¥', + 'È»' => 'ȼ', + 'Ƚ' => 'Æš', + 'Ⱦ' => 'ⱦ', + 'É' => 'É‚', + 'Ƀ' => 'Æ€', + 'É„' => 'ʉ', + 'É…' => 'ÊŒ', + 'Ɇ' => 'ɇ', + 'Ɉ' => 'ɉ', + 'ÉŠ' => 'É‹', + 'ÉŒ' => 'É', + 'ÉŽ' => 'É', + 'Í°' => 'ͱ', + 'Ͳ' => 'ͳ', + 'Ͷ' => 'Í·', + 'Í¿' => 'ϳ', + 'Ά' => 'ά', + 'Έ' => 'έ', + 'Ή' => 'ή', + 'Ί' => 'ί', + 'ÎŒ' => 'ÏŒ', + 'ÎŽ' => 'Ï', + 'Î' => 'ÏŽ', + 'Α' => 'α', + 'Î’' => 'β', + 'Γ' => 'γ', + 'Δ' => 'δ', + 'Ε' => 'ε', + 'Ζ' => 'ζ', + 'Η' => 'η', + 'Θ' => 'θ', + 'Ι' => 'ι', + 'Κ' => 'κ', + 'Λ' => 'λ', + 'Îœ' => 'μ', + 'Î' => 'ν', + 'Ξ' => 'ξ', + 'Ο' => 'ο', + 'Π' => 'Ï€', + 'Ρ' => 'Ï', + 'Σ' => 'σ', + 'Τ' => 'Ï„', + 'Î¥' => 'Ï…', + 'Φ' => 'φ', + 'Χ' => 'χ', + 'Ψ' => 'ψ', + 'Ω' => 'ω', + 'Ϊ' => 'ÏŠ', + 'Ϋ' => 'Ï‹', + 'Ï' => 'Ï—', + 'Ϙ' => 'Ï™', + 'Ïš' => 'Ï›', + 'Ïœ' => 'Ï', + 'Ïž' => 'ÏŸ', + 'Ï ' => 'Ï¡', + 'Ï¢' => 'Ï£', + 'Ϥ' => 'Ï¥', + 'Ϧ' => 'ϧ', + 'Ϩ' => 'Ï©', + 'Ϫ' => 'Ï«', + 'Ϭ' => 'Ï­', + 'Ï®' => 'ϯ', + 'Ï´' => 'θ', + 'Ï·' => 'ϸ', + 'Ϲ' => 'ϲ', + 'Ϻ' => 'Ï»', + 'Ͻ' => 'Í»', + 'Ͼ' => 'ͼ', + 'Ï¿' => 'ͽ', + 'Ѐ' => 'Ñ', + 'Ð' => 'Ñ‘', + 'Ђ' => 'Ñ’', + 'Ѓ' => 'Ñ“', + 'Є' => 'Ñ”', + 'Ð…' => 'Ñ•', + 'І' => 'Ñ–', + 'Ї' => 'Ñ—', + 'Ј' => 'ј', + 'Љ' => 'Ñ™', + 'Њ' => 'Ñš', + 'Ћ' => 'Ñ›', + 'ÐŒ' => 'Ñœ', + 'Ð' => 'Ñ', + 'ÐŽ' => 'Ñž', + 'Ð' => 'ÑŸ', + 'Ð' => 'а', + 'Б' => 'б', + 'Ð’' => 'в', + 'Г' => 'г', + 'Д' => 'д', + 'Е' => 'е', + 'Ж' => 'ж', + 'З' => 'з', + 'И' => 'и', + 'Й' => 'й', + 'К' => 'к', + 'Л' => 'л', + 'Ðœ' => 'м', + 'Ð' => 'н', + 'О' => 'о', + 'П' => 'п', + 'Р' => 'Ñ€', + 'С' => 'Ñ', + 'Т' => 'Ñ‚', + 'У' => 'у', + 'Ф' => 'Ñ„', + 'Ð¥' => 'Ñ…', + 'Ц' => 'ц', + 'Ч' => 'ч', + 'Ш' => 'ш', + 'Щ' => 'щ', + 'Ъ' => 'ÑŠ', + 'Ы' => 'Ñ‹', + 'Ь' => 'ÑŒ', + 'Э' => 'Ñ', + 'Ю' => 'ÑŽ', + 'Я' => 'Ñ', + 'Ñ ' => 'Ñ¡', + 'Ñ¢' => 'Ñ£', + 'Ѥ' => 'Ñ¥', + 'Ѧ' => 'ѧ', + 'Ѩ' => 'Ñ©', + 'Ѫ' => 'Ñ«', + 'Ѭ' => 'Ñ­', + 'Ñ®' => 'ѯ', + 'Ñ°' => 'ѱ', + 'Ѳ' => 'ѳ', + 'Ñ´' => 'ѵ', + 'Ѷ' => 'Ñ·', + 'Ѹ' => 'ѹ', + 'Ѻ' => 'Ñ»', + 'Ѽ' => 'ѽ', + 'Ѿ' => 'Ñ¿', + 'Ò€' => 'Ò', + 'ÒŠ' => 'Ò‹', + 'ÒŒ' => 'Ò', + 'ÒŽ' => 'Ò', + 'Ò' => 'Ò‘', + 'Ò’' => 'Ò“', + 'Ò”' => 'Ò•', + 'Ò–' => 'Ò—', + 'Ò˜' => 'Ò™', + 'Òš' => 'Ò›', + 'Òœ' => 'Ò', + 'Òž' => 'ÒŸ', + 'Ò ' => 'Ò¡', + 'Ò¢' => 'Ò£', + 'Ò¤' => 'Ò¥', + 'Ò¦' => 'Ò§', + 'Ò¨' => 'Ò©', + 'Òª' => 'Ò«', + 'Ò¬' => 'Ò­', + 'Ò®' => 'Ò¯', + 'Ò°' => 'Ò±', + 'Ò²' => 'Ò³', + 'Ò´' => 'Òµ', + 'Ò¶' => 'Ò·', + 'Ò¸' => 'Ò¹', + 'Òº' => 'Ò»', + 'Ò¼' => 'Ò½', + 'Ò¾' => 'Ò¿', + 'Ó€' => 'Ó', + 'Ó' => 'Ó‚', + 'Óƒ' => 'Ó„', + 'Ó…' => 'Ó†', + 'Ó‡' => 'Óˆ', + 'Ó‰' => 'ÓŠ', + 'Ó‹' => 'ÓŒ', + 'Ó' => 'ÓŽ', + 'Ó' => 'Ó‘', + 'Ó’' => 'Ó“', + 'Ó”' => 'Ó•', + 'Ó–' => 'Ó—', + 'Ó˜' => 'Ó™', + 'Óš' => 'Ó›', + 'Óœ' => 'Ó', + 'Óž' => 'ÓŸ', + 'Ó ' => 'Ó¡', + 'Ó¢' => 'Ó£', + 'Ó¤' => 'Ó¥', + 'Ó¦' => 'Ó§', + 'Ó¨' => 'Ó©', + 'Óª' => 'Ó«', + 'Ó¬' => 'Ó­', + 'Ó®' => 'Ó¯', + 'Ó°' => 'Ó±', + 'Ó²' => 'Ó³', + 'Ó´' => 'Óµ', + 'Ó¶' => 'Ó·', + 'Ó¸' => 'Ó¹', + 'Óº' => 'Ó»', + 'Ó¼' => 'Ó½', + 'Ó¾' => 'Ó¿', + 'Ô€' => 'Ô', + 'Ô‚' => 'Ôƒ', + 'Ô„' => 'Ô…', + 'Ô†' => 'Ô‡', + 'Ôˆ' => 'Ô‰', + 'ÔŠ' => 'Ô‹', + 'ÔŒ' => 'Ô', + 'ÔŽ' => 'Ô', + 'Ô' => 'Ô‘', + 'Ô’' => 'Ô“', + 'Ô”' => 'Ô•', + 'Ô–' => 'Ô—', + 'Ô˜' => 'Ô™', + 'Ôš' => 'Ô›', + 'Ôœ' => 'Ô', + 'Ôž' => 'ÔŸ', + 'Ô ' => 'Ô¡', + 'Ô¢' => 'Ô£', + 'Ô¤' => 'Ô¥', + 'Ô¦' => 'Ô§', + 'Ô¨' => 'Ô©', + 'Ôª' => 'Ô«', + 'Ô¬' => 'Ô­', + 'Ô®' => 'Ô¯', + 'Ô±' => 'Õ¡', + 'Ô²' => 'Õ¢', + 'Ô³' => 'Õ£', + 'Ô´' => 'Õ¤', + 'Ôµ' => 'Õ¥', + 'Ô¶' => 'Õ¦', + 'Ô·' => 'Õ§', + 'Ô¸' => 'Õ¨', + 'Ô¹' => 'Õ©', + 'Ôº' => 'Õª', + 'Ô»' => 'Õ«', + 'Ô¼' => 'Õ¬', + 'Ô½' => 'Õ­', + 'Ô¾' => 'Õ®', + 'Ô¿' => 'Õ¯', + 'Õ€' => 'Õ°', + 'Õ' => 'Õ±', + 'Õ‚' => 'Õ²', + 'Õƒ' => 'Õ³', + 'Õ„' => 'Õ´', + 'Õ…' => 'Õµ', + 'Õ†' => 'Õ¶', + 'Õ‡' => 'Õ·', + 'Õˆ' => 'Õ¸', + 'Õ‰' => 'Õ¹', + 'ÕŠ' => 'Õº', + 'Õ‹' => 'Õ»', + 'ÕŒ' => 'Õ¼', + 'Õ' => 'Õ½', + 'ÕŽ' => 'Õ¾', + 'Õ' => 'Õ¿', + 'Õ' => 'Ö€', + 'Õ‘' => 'Ö', + 'Õ’' => 'Ö‚', + 'Õ“' => 'Öƒ', + 'Õ”' => 'Ö„', + 'Õ•' => 'Ö…', + 'Õ–' => 'Ö†', + 'á‚ ' => 'â´€', + 'á‚¡' => 'â´', + 'á‚¢' => 'â´‚', + 'á‚£' => 'â´ƒ', + 'Ⴄ' => 'â´„', + 'á‚¥' => 'â´…', + 'Ⴆ' => 'â´†', + 'Ⴇ' => 'â´‡', + 'Ⴈ' => 'â´ˆ', + 'á‚©' => 'â´‰', + 'Ⴊ' => 'â´Š', + 'á‚«' => 'â´‹', + 'Ⴌ' => 'â´Œ', + 'á‚­' => 'â´', + 'á‚®' => 'â´Ž', + 'Ⴏ' => 'â´', + 'á‚°' => 'â´', + 'Ⴑ' => 'â´‘', + 'Ⴒ' => 'â´’', + 'Ⴓ' => 'â´“', + 'á‚´' => 'â´”', + 'Ⴕ' => 'â´•', + 'Ⴖ' => 'â´–', + 'á‚·' => 'â´—', + 'Ⴘ' => 'â´˜', + 'Ⴙ' => 'â´™', + 'Ⴚ' => 'â´š', + 'á‚»' => 'â´›', + 'Ⴜ' => 'â´œ', + 'Ⴝ' => 'â´', + 'Ⴞ' => 'â´ž', + 'á‚¿' => 'â´Ÿ', + 'Ⴠ' => 'â´ ', + 'áƒ' => 'â´¡', + 'Ⴢ' => 'â´¢', + 'Ⴣ' => 'â´£', + 'Ⴤ' => 'â´¤', + 'Ⴥ' => 'â´¥', + 'Ⴧ' => 'â´§', + 'áƒ' => 'â´­', + 'Ḁ' => 'á¸', + 'Ḃ' => 'ḃ', + 'Ḅ' => 'ḅ', + 'Ḇ' => 'ḇ', + 'Ḉ' => 'ḉ', + 'Ḋ' => 'ḋ', + 'Ḍ' => 'á¸', + 'Ḏ' => 'á¸', + 'á¸' => 'ḑ', + 'Ḓ' => 'ḓ', + 'Ḕ' => 'ḕ', + 'Ḗ' => 'ḗ', + 'Ḙ' => 'ḙ', + 'Ḛ' => 'ḛ', + 'Ḝ' => 'á¸', + 'Ḟ' => 'ḟ', + 'Ḡ' => 'ḡ', + 'Ḣ' => 'ḣ', + 'Ḥ' => 'ḥ', + 'Ḧ' => 'ḧ', + 'Ḩ' => 'ḩ', + 'Ḫ' => 'ḫ', + 'Ḭ' => 'ḭ', + 'Ḯ' => 'ḯ', + 'Ḱ' => 'ḱ', + 'Ḳ' => 'ḳ', + 'Ḵ' => 'ḵ', + 'Ḷ' => 'ḷ', + 'Ḹ' => 'ḹ', + 'Ḻ' => 'ḻ', + 'Ḽ' => 'ḽ', + 'Ḿ' => 'ḿ', + 'á¹€' => 'á¹', + 'Ṃ' => 'ṃ', + 'Ṅ' => 'á¹…', + 'Ṇ' => 'ṇ', + 'Ṉ' => 'ṉ', + 'Ṋ' => 'ṋ', + 'Ṍ' => 'á¹', + 'Ṏ' => 'á¹', + 'á¹' => 'ṑ', + 'á¹’' => 'ṓ', + 'á¹”' => 'ṕ', + 'á¹–' => 'á¹—', + 'Ṙ' => 'á¹™', + 'Ṛ' => 'á¹›', + 'Ṝ' => 'á¹', + 'Ṟ' => 'ṟ', + 'á¹ ' => 'ṡ', + 'á¹¢' => 'á¹£', + 'Ṥ' => 'á¹¥', + 'Ṧ' => 'ṧ', + 'Ṩ' => 'ṩ', + 'Ṫ' => 'ṫ', + 'Ṭ' => 'á¹­', + 'á¹®' => 'ṯ', + 'á¹°' => 'á¹±', + 'á¹²' => 'á¹³', + 'á¹´' => 'á¹µ', + 'Ṷ' => 'á¹·', + 'Ṹ' => 'á¹¹', + 'Ṻ' => 'á¹»', + 'á¹¼' => 'á¹½', + 'á¹¾' => 'ṿ', + 'Ẁ' => 'áº', + 'Ẃ' => 'ẃ', + 'Ẅ' => 'ẅ', + 'Ẇ' => 'ẇ', + 'Ẉ' => 'ẉ', + 'Ẋ' => 'ẋ', + 'Ẍ' => 'áº', + 'Ẏ' => 'áº', + 'áº' => 'ẑ', + 'Ẓ' => 'ẓ', + 'Ẕ' => 'ẕ', + 'ẞ' => 'ß', + 'Ạ' => 'ạ', + 'Ả' => 'ả', + 'Ấ' => 'ấ', + 'Ầ' => 'ầ', + 'Ẩ' => 'ẩ', + 'Ẫ' => 'ẫ', + 'Ậ' => 'ậ', + 'Ắ' => 'ắ', + 'Ằ' => 'ằ', + 'Ẳ' => 'ẳ', + 'Ẵ' => 'ẵ', + 'Ặ' => 'ặ', + 'Ẹ' => 'ẹ', + 'Ẻ' => 'ẻ', + 'Ẽ' => 'ẽ', + 'Ế' => 'ế', + 'Ề' => 'á»', + 'Ể' => 'ể', + 'Ễ' => 'á»…', + 'Ệ' => 'ệ', + 'Ỉ' => 'ỉ', + 'Ị' => 'ị', + 'Ọ' => 'á»', + 'Ỏ' => 'á»', + 'á»' => 'ố', + 'á»’' => 'ồ', + 'á»”' => 'ổ', + 'á»–' => 'á»—', + 'Ộ' => 'á»™', + 'Ớ' => 'á»›', + 'Ờ' => 'á»', + 'Ở' => 'ở', + 'á» ' => 'ỡ', + 'Ợ' => 'ợ', + 'Ụ' => 'ụ', + 'Ủ' => 'ủ', + 'Ứ' => 'ứ', + 'Ừ' => 'ừ', + 'Ử' => 'á»­', + 'á»®' => 'ữ', + 'á»°' => 'á»±', + 'Ỳ' => 'ỳ', + 'á»´' => 'ỵ', + 'Ỷ' => 'á»·', + 'Ỹ' => 'ỹ', + 'Ỻ' => 'á»»', + 'Ỽ' => 'ỽ', + 'Ỿ' => 'ỿ', + 'Ἀ' => 'á¼€', + 'Ἁ' => 'á¼', + 'Ἂ' => 'ἂ', + 'Ἃ' => 'ἃ', + 'Ἄ' => 'ἄ', + 'á¼' => 'á¼…', + 'Ἆ' => 'ἆ', + 'á¼' => 'ἇ', + 'Ἐ' => 'á¼', + 'á¼™' => 'ἑ', + 'Ἒ' => 'á¼’', + 'á¼›' => 'ἓ', + 'Ἔ' => 'á¼”', + 'á¼' => 'ἕ', + 'Ἠ' => 'á¼ ', + 'Ἡ' => 'ἡ', + 'Ἢ' => 'á¼¢', + 'Ἣ' => 'á¼£', + 'Ἤ' => 'ἤ', + 'á¼­' => 'á¼¥', + 'á¼®' => 'ἦ', + 'Ἧ' => 'ἧ', + 'Ἰ' => 'á¼°', + 'á¼¹' => 'á¼±', + 'Ἲ' => 'á¼²', + 'á¼»' => 'á¼³', + 'á¼¼' => 'á¼´', + 'á¼½' => 'á¼µ', + 'á¼¾' => 'ἶ', + 'Ἷ' => 'á¼·', + 'Ὀ' => 'á½€', + 'Ὁ' => 'á½', + 'Ὂ' => 'ὂ', + 'Ὃ' => 'ὃ', + 'Ὄ' => 'ὄ', + 'á½' => 'á½…', + 'á½™' => 'ὑ', + 'á½›' => 'ὓ', + 'á½' => 'ὕ', + 'Ὗ' => 'á½—', + 'Ὠ' => 'á½ ', + 'Ὡ' => 'ὡ', + 'Ὢ' => 'á½¢', + 'Ὣ' => 'á½£', + 'Ὤ' => 'ὤ', + 'á½­' => 'á½¥', + 'á½®' => 'ὦ', + 'Ὧ' => 'ὧ', + 'ᾈ' => 'á¾€', + 'ᾉ' => 'á¾', + 'ᾊ' => 'ᾂ', + 'ᾋ' => 'ᾃ', + 'ᾌ' => 'ᾄ', + 'á¾' => 'á¾…', + 'ᾎ' => 'ᾆ', + 'á¾' => 'ᾇ', + 'ᾘ' => 'á¾', + 'á¾™' => 'ᾑ', + 'ᾚ' => 'á¾’', + 'á¾›' => 'ᾓ', + 'ᾜ' => 'á¾”', + 'á¾' => 'ᾕ', + 'ᾞ' => 'á¾–', + 'ᾟ' => 'á¾—', + 'ᾨ' => 'á¾ ', + 'ᾩ' => 'ᾡ', + 'ᾪ' => 'á¾¢', + 'ᾫ' => 'á¾£', + 'ᾬ' => 'ᾤ', + 'á¾­' => 'á¾¥', + 'á¾®' => 'ᾦ', + 'ᾯ' => 'ᾧ', + 'Ᾰ' => 'á¾°', + 'á¾¹' => 'á¾±', + 'Ὰ' => 'á½°', + 'á¾»' => 'á½±', + 'á¾¼' => 'á¾³', + 'Ὲ' => 'á½²', + 'Έ' => 'á½³', + 'á¿Š' => 'á½´', + 'á¿‹' => 'á½µ', + 'á¿Œ' => 'ῃ', + 'Ῐ' => 'á¿', + 'á¿™' => 'á¿‘', + 'á¿š' => 'ὶ', + 'á¿›' => 'á½·', + 'Ῠ' => 'á¿ ', + 'á¿©' => 'á¿¡', + 'Ὺ' => 'ὺ', + 'á¿«' => 'á½»', + 'Ῥ' => 'á¿¥', + 'Ὸ' => 'ὸ', + 'Ό' => 'á½¹', + 'Ὼ' => 'á½¼', + 'á¿»' => 'á½½', + 'ῼ' => 'ῳ', + 'Ω' => 'ω', + 'K' => 'k', + 'â„«' => 'Ã¥', + 'Ⅎ' => 'â…Ž', + 'â… ' => 'â…°', + 'â…¡' => 'â…±', + 'â…¢' => 'â…²', + 'â…£' => 'â…³', + 'â…¤' => 'â…´', + 'â…¥' => 'â…µ', + 'â…¦' => 'â…¶', + 'â…§' => 'â…·', + 'â…¨' => 'â…¸', + 'â…©' => 'â…¹', + 'â…ª' => 'â…º', + 'â…«' => 'â…»', + 'â…¬' => 'â…¼', + 'â…­' => 'â…½', + 'â…®' => 'â…¾', + 'â…¯' => 'â…¿', + 'Ↄ' => 'ↄ', + 'â’¶' => 'â“', + 'â’·' => 'â“‘', + 'â’¸' => 'â“’', + 'â’¹' => 'â““', + 'â’º' => 'â“”', + 'â’»' => 'â“•', + 'â’¼' => 'â“–', + 'â’½' => 'â“—', + 'â’¾' => 'ⓘ', + 'â’¿' => 'â“™', + 'â“€' => 'â“š', + 'â“' => 'â“›', + 'â“‚' => 'â“œ', + 'Ⓝ' => 'â“', + 'â“„' => 'â“ž', + 'â“…' => 'â“Ÿ', + 'Ⓠ' => 'â“ ', + 'Ⓡ' => 'â“¡', + 'Ⓢ' => 'â“¢', + 'Ⓣ' => 'â“£', + 'â“Š' => 'ⓤ', + 'â“‹' => 'â“¥', + 'â“Œ' => 'ⓦ', + 'â“' => 'ⓧ', + 'â“Ž' => 'ⓨ', + 'â“' => 'â“©', + 'â°€' => 'â°°', + 'â°' => 'â°±', + 'â°‚' => 'â°²', + 'â°ƒ' => 'â°³', + 'â°„' => 'â°´', + 'â°…' => 'â°µ', + 'â°†' => 'â°¶', + 'â°‡' => 'â°·', + 'â°ˆ' => 'â°¸', + 'â°‰' => 'â°¹', + 'â°Š' => 'â°º', + 'â°‹' => 'â°»', + 'â°Œ' => 'â°¼', + 'â°' => 'â°½', + 'â°Ž' => 'â°¾', + 'â°' => 'â°¿', + 'â°' => 'â±€', + 'â°‘' => 'â±', + 'â°’' => 'ⱂ', + 'â°“' => 'ⱃ', + 'â°”' => 'ⱄ', + 'â°•' => 'â±…', + 'â°–' => 'ⱆ', + 'â°—' => 'ⱇ', + 'â°˜' => 'ⱈ', + 'â°™' => 'ⱉ', + 'â°š' => 'ⱊ', + 'â°›' => 'ⱋ', + 'â°œ' => 'ⱌ', + 'â°' => 'â±', + 'â°ž' => 'ⱎ', + 'â°Ÿ' => 'â±', + 'â° ' => 'â±', + 'â°¡' => 'ⱑ', + 'â°¢' => 'â±’', + 'â°£' => 'ⱓ', + 'â°¤' => 'â±”', + 'â°¥' => 'ⱕ', + 'â°¦' => 'â±–', + 'â°§' => 'â±—', + 'â°¨' => 'ⱘ', + 'â°©' => 'â±™', + 'â°ª' => 'ⱚ', + 'â°«' => 'â±›', + 'â°¬' => 'ⱜ', + 'â°­' => 'â±', + 'â°®' => 'ⱞ', + 'â± ' => 'ⱡ', + 'â±¢' => 'É«', + 'â±£' => 'áµ½', + 'Ɽ' => 'ɽ', + 'Ⱨ' => 'ⱨ', + 'Ⱪ' => 'ⱪ', + 'Ⱬ' => 'ⱬ', + 'â±­' => 'É‘', + 'â±®' => 'ɱ', + 'Ɐ' => 'É', + 'â±°' => 'É’', + 'â±²' => 'â±³', + 'â±µ' => 'ⱶ', + 'â±¾' => 'È¿', + 'Ɀ' => 'É€', + 'â²€' => 'â²', + 'Ⲃ' => 'ⲃ', + 'Ⲅ' => 'â²…', + 'Ⲇ' => 'ⲇ', + 'Ⲉ' => 'ⲉ', + 'Ⲋ' => 'ⲋ', + 'Ⲍ' => 'â²', + 'Ⲏ' => 'â²', + 'â²' => 'ⲑ', + 'â²’' => 'ⲓ', + 'â²”' => 'ⲕ', + 'â²–' => 'â²—', + 'Ⲙ' => 'â²™', + 'Ⲛ' => 'â²›', + 'Ⲝ' => 'â²', + 'Ⲟ' => 'ⲟ', + 'â² ' => 'ⲡ', + 'â²¢' => 'â²£', + 'Ⲥ' => 'â²¥', + 'Ⲧ' => 'ⲧ', + 'Ⲩ' => 'ⲩ', + 'Ⲫ' => 'ⲫ', + 'Ⲭ' => 'â²­', + 'â²®' => 'ⲯ', + 'â²°' => 'â²±', + 'â²²' => 'â²³', + 'â²´' => 'â²µ', + 'Ⲷ' => 'â²·', + 'Ⲹ' => 'â²¹', + 'Ⲻ' => 'â²»', + 'â²¼' => 'â²½', + 'â²¾' => 'ⲿ', + 'â³€' => 'â³', + 'Ⳃ' => 'ⳃ', + 'Ⳅ' => 'â³…', + 'Ⳇ' => 'ⳇ', + 'Ⳉ' => 'ⳉ', + 'Ⳋ' => 'ⳋ', + 'Ⳍ' => 'â³', + 'Ⳏ' => 'â³', + 'â³' => 'ⳑ', + 'â³’' => 'ⳓ', + 'â³”' => 'ⳕ', + 'â³–' => 'â³—', + 'Ⳙ' => 'â³™', + 'Ⳛ' => 'â³›', + 'Ⳝ' => 'â³', + 'Ⳟ' => 'ⳟ', + 'â³ ' => 'ⳡ', + 'â³¢' => 'â³£', + 'Ⳬ' => 'ⳬ', + 'â³­' => 'â³®', + 'â³²' => 'â³³', + 'Ꙁ' => 'ê™', + 'Ꙃ' => 'ꙃ', + 'Ꙅ' => 'ê™…', + 'Ꙇ' => 'ꙇ', + 'Ꙉ' => 'ꙉ', + 'Ꙋ' => 'ꙋ', + 'Ꙍ' => 'ê™', + 'Ꙏ' => 'ê™', + 'ê™' => 'ꙑ', + 'ê™’' => 'ꙓ', + 'ê™”' => 'ꙕ', + 'ê™–' => 'ê™—', + 'Ꙙ' => 'ê™™', + 'Ꙛ' => 'ê™›', + 'Ꙝ' => 'ê™', + 'Ꙟ' => 'ꙟ', + 'ê™ ' => 'ꙡ', + 'Ꙣ' => 'ꙣ', + 'Ꙥ' => 'ꙥ', + 'Ꙧ' => 'ꙧ', + 'Ꙩ' => 'ꙩ', + 'Ꙫ' => 'ꙫ', + 'Ꙭ' => 'ê™­', + 'Ꚁ' => 'êš', + 'êš‚' => 'ꚃ', + 'êš„' => 'êš…', + 'Ꚇ' => 'ꚇ', + 'Ꚉ' => 'ꚉ', + 'Ꚋ' => 'êš‹', + 'Ꚍ' => 'êš', + 'Ꚏ' => 'êš', + 'êš' => 'êš‘', + 'êš’' => 'êš“', + 'êš”' => 'êš•', + 'êš–' => 'êš—', + 'Ꚙ' => 'êš™', + 'êšš' => 'êš›', + 'Ꜣ' => 'ꜣ', + 'Ꜥ' => 'ꜥ', + 'Ꜧ' => 'ꜧ', + 'Ꜩ' => 'ꜩ', + 'Ꜫ' => 'ꜫ', + 'Ꜭ' => 'ꜭ', + 'Ꜯ' => 'ꜯ', + 'Ꜳ' => 'ꜳ', + 'Ꜵ' => 'ꜵ', + 'Ꜷ' => 'ꜷ', + 'Ꜹ' => 'ꜹ', + 'Ꜻ' => 'ꜻ', + 'Ꜽ' => 'ꜽ', + 'Ꜿ' => 'ꜿ', + 'ê€' => 'ê', + 'ê‚' => 'êƒ', + 'ê„' => 'ê…', + 'ê†' => 'ê‡', + 'êˆ' => 'ê‰', + 'êŠ' => 'ê‹', + 'êŒ' => 'ê', + 'êŽ' => 'ê', + 'ê' => 'ê‘', + 'ê’' => 'ê“', + 'ê”' => 'ê•', + 'ê–' => 'ê—', + 'ê˜' => 'ê™', + 'êš' => 'ê›', + 'êœ' => 'ê', + 'êž' => 'êŸ', + 'ê ' => 'ê¡', + 'ê¢' => 'ê£', + 'ê¤' => 'ê¥', + 'ê¦' => 'ê§', + 'ê¨' => 'ê©', + 'êª' => 'ê«', + 'ê¬' => 'ê­', + 'ê®' => 'ê¯', + 'ê¹' => 'êº', + 'ê»' => 'ê¼', + 'ê½' => 'áµ¹', + 'ê¾' => 'ê¿', + 'Ꞁ' => 'êž', + 'êž‚' => 'ꞃ', + 'êž„' => 'êž…', + 'Ꞇ' => 'ꞇ', + 'êž‹' => 'ꞌ', + 'êž' => 'É¥', + 'êž' => 'êž‘', + 'êž’' => 'êž“', + 'êž–' => 'êž—', + 'Ꞙ' => 'êž™', + 'êžš' => 'êž›', + 'êžœ' => 'êž', + 'êžž' => 'ꞟ', + 'êž ' => 'êž¡', + 'Ꞣ' => 'ꞣ', + 'Ꞥ' => 'ꞥ', + 'Ꞧ' => 'ꞧ', + 'Ꞩ' => 'êž©', + 'Ɦ' => 'ɦ', + 'êž«' => 'Éœ', + 'Ɡ' => 'É¡', + 'êž­' => 'ɬ', + 'êž°' => 'Êž', + 'êž±' => 'ʇ', + 'A' => 'ï½', + 'ï¼¢' => 'b', + 'ï¼£' => 'c', + 'D' => 'd', + 'ï¼¥' => 'ï½…', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'ï¼­' => 'ï½', + 'ï¼®' => 'n', + 'O' => 'ï½', + 'ï¼°' => 'ï½', + 'ï¼±' => 'q', + 'ï¼²' => 'ï½’', + 'ï¼³' => 's', + 'ï¼´' => 'ï½”', + 'ï¼µ' => 'u', + 'V' => 'ï½–', + 'ï¼·' => 'ï½—', + 'X' => 'x', + 'ï¼¹' => 'ï½™', + 'Z' => 'z', + 'ð€' => 'ð¨', + 'ð' => 'ð©', + 'ð‚' => 'ðª', + 'ðƒ' => 'ð«', + 'ð„' => 'ð¬', + 'ð…' => 'ð­', + 'ð†' => 'ð®', + 'ð‡' => 'ð¯', + 'ðˆ' => 'ð°', + 'ð‰' => 'ð±', + 'ðŠ' => 'ð²', + 'ð‹' => 'ð³', + 'ðŒ' => 'ð´', + 'ð' => 'ðµ', + 'ðŽ' => 'ð¶', + 'ð' => 'ð·', + 'ð' => 'ð¸', + 'ð‘' => 'ð¹', + 'ð’' => 'ðº', + 'ð“' => 'ð»', + 'ð”' => 'ð¼', + 'ð•' => 'ð½', + 'ð–' => 'ð¾', + 'ð—' => 'ð¿', + 'ð˜' => 'ð‘€', + 'ð™' => 'ð‘', + 'ðš' => 'ð‘‚', + 'ð›' => 'ð‘ƒ', + 'ðœ' => 'ð‘„', + 'ð' => 'ð‘…', + 'ðž' => 'ð‘†', + 'ðŸ' => 'ð‘‡', + 'ð ' => 'ð‘ˆ', + 'ð¡' => 'ð‘‰', + 'ð¢' => 'ð‘Š', + 'ð£' => 'ð‘‹', + 'ð¤' => 'ð‘Œ', + 'ð¥' => 'ð‘', + 'ð¦' => 'ð‘Ž', + 'ð§' => 'ð‘', + 'ð‘¢ ' => 'ð‘£€', + '𑢡' => 'ð‘£', + 'ð‘¢¢' => '𑣂', + 'ð‘¢£' => '𑣃', + '𑢤' => '𑣄', + 'ð‘¢¥' => 'ð‘£…', + '𑢦' => '𑣆', + '𑢧' => '𑣇', + '𑢨' => '𑣈', + '𑢩' => '𑣉', + '𑢪' => '𑣊', + '𑢫' => '𑣋', + '𑢬' => '𑣌', + 'ð‘¢­' => 'ð‘£', + 'ð‘¢®' => '𑣎', + '𑢯' => 'ð‘£', + 'ð‘¢°' => 'ð‘£', + 'ð‘¢±' => '𑣑', + 'ð‘¢²' => 'ð‘£’', + 'ð‘¢³' => '𑣓', + 'ð‘¢´' => 'ð‘£”', + 'ð‘¢µ' => '𑣕', + '𑢶' => 'ð‘£–', + 'ð‘¢·' => 'ð‘£—', + '𑢸' => '𑣘', + 'ð‘¢¹' => 'ð‘£™', + '𑢺' => '𑣚', + 'ð‘¢»' => 'ð‘£›', + 'ð‘¢¼' => '𑣜', + 'ð‘¢½' => 'ð‘£', + 'ð‘¢¾' => '𑣞', + '𑢿' => '𑣟', +); + +$result =& $data; +unset($data); + +return $result; diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.ser b/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.ser deleted file mode 100644 index 13dabdde..00000000 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.ser +++ /dev/null @@ -1 +0,0 @@ -a:1092:{s:1:"A";s:1:"a";s:1:"B";s:1:"b";s:1:"C";s:1:"c";s:1:"D";s:1:"d";s:1:"E";s:1:"e";s:1:"F";s:1:"f";s:1:"G";s:1:"g";s:1:"H";s:1:"h";s:1:"I";s:1:"i";s:1:"J";s:1:"j";s:1:"K";s:1:"k";s:1:"L";s:1:"l";s:1:"M";s:1:"m";s:1:"N";s:1:"n";s:1:"O";s:1:"o";s:1:"P";s:1:"p";s:1:"Q";s:1:"q";s:1:"R";s:1:"r";s:1:"S";s:1:"s";s:1:"T";s:1:"t";s:1:"U";s:1:"u";s:1:"V";s:1:"v";s:1:"W";s:1:"w";s:1:"X";s:1:"x";s:1:"Y";s:1:"y";s:1:"Z";s:1:"z";s:2:"À";s:2:"à";s:2:"Ã";s:2:"á";s:2:"Â";s:2:"â";s:2:"Ã";s:2:"ã";s:2:"Ä";s:2:"ä";s:2:"Ã…";s:2:"Ã¥";s:2:"Æ";s:2:"æ";s:2:"Ç";s:2:"ç";s:2:"È";s:2:"è";s:2:"É";s:2:"é";s:2:"Ê";s:2:"ê";s:2:"Ë";s:2:"ë";s:2:"ÃŒ";s:2:"ì";s:2:"Ã";s:2:"í";s:2:"ÃŽ";s:2:"î";s:2:"Ã";s:2:"ï";s:2:"Ã";s:2:"ð";s:2:"Ñ";s:2:"ñ";s:2:"Ã’";s:2:"ò";s:2:"Ó";s:2:"ó";s:2:"Ô";s:2:"ô";s:2:"Õ";s:2:"õ";s:2:"Ö";s:2:"ö";s:2:"Ø";s:2:"ø";s:2:"Ù";s:2:"ù";s:2:"Ú";s:2:"ú";s:2:"Û";s:2:"û";s:2:"Ãœ";s:2:"ü";s:2:"Ã";s:2:"ý";s:2:"Þ";s:2:"þ";s:2:"Ä€";s:2:"Ä";s:2:"Ä‚";s:2:"ă";s:2:"Ä„";s:2:"Ä…";s:2:"Ć";s:2:"ć";s:2:"Ĉ";s:2:"ĉ";s:2:"ÄŠ";s:2:"Ä‹";s:2:"ÄŒ";s:2:"Ä";s:2:"ÄŽ";s:2:"Ä";s:2:"Ä";s:2:"Ä‘";s:2:"Ä’";s:2:"Ä“";s:2:"Ä”";s:2:"Ä•";s:2:"Ä–";s:2:"Ä—";s:2:"Ę";s:2:"Ä™";s:2:"Äš";s:2:"Ä›";s:2:"Äœ";s:2:"Ä";s:2:"Äž";s:2:"ÄŸ";s:2:"Ä ";s:2:"Ä¡";s:2:"Ä¢";s:2:"Ä£";s:2:"Ĥ";s:2:"Ä¥";s:2:"Ħ";s:2:"ħ";s:2:"Ĩ";s:2:"Ä©";s:2:"Ī";s:2:"Ä«";s:2:"Ĭ";s:2:"Ä­";s:2:"Ä®";s:2:"į";s:2:"Ä°";s:1:"i";s:2:"IJ";s:2:"ij";s:2:"Ä´";s:2:"ĵ";s:2:"Ķ";s:2:"Ä·";s:2:"Ĺ";s:2:"ĺ";s:2:"Ä»";s:2:"ļ";s:2:"Ľ";s:2:"ľ";s:2:"Ä¿";s:2:"Å€";s:2:"Å";s:2:"Å‚";s:2:"Ń";s:2:"Å„";s:2:"Å…";s:2:"ņ";s:2:"Ň";s:2:"ň";s:2:"ÅŠ";s:2:"Å‹";s:2:"ÅŒ";s:2:"Å";s:2:"ÅŽ";s:2:"Å";s:2:"Å";s:2:"Å‘";s:2:"Å’";s:2:"Å“";s:2:"Å”";s:2:"Å•";s:2:"Å–";s:2:"Å—";s:2:"Ř";s:2:"Å™";s:2:"Åš";s:2:"Å›";s:2:"Åœ";s:2:"Å";s:2:"Åž";s:2:"ÅŸ";s:2:"Å ";s:2:"Å¡";s:2:"Å¢";s:2:"Å£";s:2:"Ť";s:2:"Å¥";s:2:"Ŧ";s:2:"ŧ";s:2:"Ũ";s:2:"Å©";s:2:"Ū";s:2:"Å«";s:2:"Ŭ";s:2:"Å­";s:2:"Å®";s:2:"ů";s:2:"Å°";s:2:"ű";s:2:"Ų";s:2:"ų";s:2:"Å´";s:2:"ŵ";s:2:"Ŷ";s:2:"Å·";s:2:"Ÿ";s:2:"ÿ";s:2:"Ź";s:2:"ź";s:2:"Å»";s:2:"ż";s:2:"Ž";s:2:"ž";s:2:"Æ";s:2:"É“";s:2:"Æ‚";s:2:"ƃ";s:2:"Æ„";s:2:"Æ…";s:2:"Ɔ";s:2:"É”";s:2:"Ƈ";s:2:"ƈ";s:2:"Ɖ";s:2:"É–";s:2:"ÆŠ";s:2:"É—";s:2:"Æ‹";s:2:"ÆŒ";s:2:"ÆŽ";s:2:"Ç";s:2:"Æ";s:2:"É™";s:2:"Æ";s:2:"É›";s:2:"Æ‘";s:2:"Æ’";s:2:"Æ“";s:2:"É ";s:2:"Æ”";s:2:"É£";s:2:"Æ–";s:2:"É©";s:2:"Æ—";s:2:"ɨ";s:2:"Ƙ";s:2:"Æ™";s:2:"Æœ";s:2:"ɯ";s:2:"Æ";s:2:"ɲ";s:2:"ÆŸ";s:2:"ɵ";s:2:"Æ ";s:2:"Æ¡";s:2:"Æ¢";s:2:"Æ£";s:2:"Ƥ";s:2:"Æ¥";s:2:"Ʀ";s:2:"Ê€";s:2:"Ƨ";s:2:"ƨ";s:2:"Æ©";s:2:"ʃ";s:2:"Ƭ";s:2:"Æ­";s:2:"Æ®";s:2:"ʈ";s:2:"Ư";s:2:"Æ°";s:2:"Ʊ";s:2:"ÊŠ";s:2:"Ʋ";s:2:"Ê‹";s:2:"Ƴ";s:2:"Æ´";s:2:"Ƶ";s:2:"ƶ";s:2:"Æ·";s:2:"Ê’";s:2:"Ƹ";s:2:"ƹ";s:2:"Ƽ";s:2:"ƽ";s:2:"Ç„";s:2:"dž";s:2:"Ç…";s:2:"dž";s:2:"LJ";s:2:"lj";s:2:"Lj";s:2:"lj";s:2:"ÇŠ";s:2:"ÇŒ";s:2:"Ç‹";s:2:"ÇŒ";s:2:"Ç";s:2:"ÇŽ";s:2:"Ç";s:2:"Ç";s:2:"Ç‘";s:2:"Ç’";s:2:"Ç“";s:2:"Ç”";s:2:"Ç•";s:2:"Ç–";s:2:"Ç—";s:2:"ǘ";s:2:"Ç™";s:2:"Çš";s:2:"Ç›";s:2:"Çœ";s:2:"Çž";s:2:"ÇŸ";s:2:"Ç ";s:2:"Ç¡";s:2:"Ç¢";s:2:"Ç£";s:2:"Ǥ";s:2:"Ç¥";s:2:"Ǧ";s:2:"ǧ";s:2:"Ǩ";s:2:"Ç©";s:2:"Ǫ";s:2:"Ç«";s:2:"Ǭ";s:2:"Ç­";s:2:"Ç®";s:2:"ǯ";s:2:"DZ";s:2:"dz";s:2:"Dz";s:2:"dz";s:2:"Ç´";s:2:"ǵ";s:2:"Ƕ";s:2:"Æ•";s:2:"Ç·";s:2:"Æ¿";s:2:"Ǹ";s:2:"ǹ";s:2:"Ǻ";s:2:"Ç»";s:2:"Ǽ";s:2:"ǽ";s:2:"Ǿ";s:2:"Ç¿";s:2:"È€";s:2:"È";s:2:"È‚";s:2:"ȃ";s:2:"È„";s:2:"È…";s:2:"Ȇ";s:2:"ȇ";s:2:"Ȉ";s:2:"ȉ";s:2:"ÈŠ";s:2:"È‹";s:2:"ÈŒ";s:2:"È";s:2:"ÈŽ";s:2:"È";s:2:"È";s:2:"È‘";s:2:"È’";s:2:"È“";s:2:"È”";s:2:"È•";s:2:"È–";s:2:"È—";s:2:"Ș";s:2:"È™";s:2:"Èš";s:2:"È›";s:2:"Èœ";s:2:"È";s:2:"Èž";s:2:"ÈŸ";s:2:"È ";s:2:"Æž";s:2:"È¢";s:2:"È£";s:2:"Ȥ";s:2:"È¥";s:2:"Ȧ";s:2:"ȧ";s:2:"Ȩ";s:2:"È©";s:2:"Ȫ";s:2:"È«";s:2:"Ȭ";s:2:"È­";s:2:"È®";s:2:"ȯ";s:2:"È°";s:2:"ȱ";s:2:"Ȳ";s:2:"ȳ";s:2:"Ⱥ";s:3:"â±¥";s:2:"È»";s:2:"ȼ";s:2:"Ƚ";s:2:"Æš";s:2:"Ⱦ";s:3:"ⱦ";s:2:"É";s:2:"É‚";s:2:"Ƀ";s:2:"Æ€";s:2:"É„";s:2:"ʉ";s:2:"É…";s:2:"ÊŒ";s:2:"Ɇ";s:2:"ɇ";s:2:"Ɉ";s:2:"ɉ";s:2:"ÉŠ";s:2:"É‹";s:2:"ÉŒ";s:2:"É";s:2:"ÉŽ";s:2:"É";s:2:"Í°";s:2:"ͱ";s:2:"Ͳ";s:2:"ͳ";s:2:"Ͷ";s:2:"Í·";s:2:"Í¿";s:2:"ϳ";s:2:"Ά";s:2:"ά";s:2:"Έ";s:2:"έ";s:2:"Ή";s:2:"ή";s:2:"Ί";s:2:"ί";s:2:"ÎŒ";s:2:"ÏŒ";s:2:"ÎŽ";s:2:"Ï";s:2:"Î";s:2:"ÏŽ";s:2:"Α";s:2:"α";s:2:"Î’";s:2:"β";s:2:"Γ";s:2:"γ";s:2:"Δ";s:2:"δ";s:2:"Ε";s:2:"ε";s:2:"Ζ";s:2:"ζ";s:2:"Η";s:2:"η";s:2:"Θ";s:2:"θ";s:2:"Ι";s:2:"ι";s:2:"Κ";s:2:"κ";s:2:"Λ";s:2:"λ";s:2:"Îœ";s:2:"μ";s:2:"Î";s:2:"ν";s:2:"Ξ";s:2:"ξ";s:2:"Ο";s:2:"ο";s:2:"Π";s:2:"Ï€";s:2:"Ρ";s:2:"Ï";s:2:"Σ";s:2:"σ";s:2:"Τ";s:2:"Ï„";s:2:"Î¥";s:2:"Ï…";s:2:"Φ";s:2:"φ";s:2:"Χ";s:2:"χ";s:2:"Ψ";s:2:"ψ";s:2:"Ω";s:2:"ω";s:2:"Ϊ";s:2:"ÏŠ";s:2:"Ϋ";s:2:"Ï‹";s:2:"Ï";s:2:"Ï—";s:2:"Ϙ";s:2:"Ï™";s:2:"Ïš";s:2:"Ï›";s:2:"Ïœ";s:2:"Ï";s:2:"Ïž";s:2:"ÏŸ";s:2:"Ï ";s:2:"Ï¡";s:2:"Ï¢";s:2:"Ï£";s:2:"Ϥ";s:2:"Ï¥";s:2:"Ϧ";s:2:"ϧ";s:2:"Ϩ";s:2:"Ï©";s:2:"Ϫ";s:2:"Ï«";s:2:"Ϭ";s:2:"Ï­";s:2:"Ï®";s:2:"ϯ";s:2:"Ï´";s:2:"θ";s:2:"Ï·";s:2:"ϸ";s:2:"Ϲ";s:2:"ϲ";s:2:"Ϻ";s:2:"Ï»";s:2:"Ͻ";s:2:"Í»";s:2:"Ͼ";s:2:"ͼ";s:2:"Ï¿";s:2:"ͽ";s:2:"Ѐ";s:2:"Ñ";s:2:"Ð";s:2:"Ñ‘";s:2:"Ђ";s:2:"Ñ’";s:2:"Ѓ";s:2:"Ñ“";s:2:"Є";s:2:"Ñ”";s:2:"Ð…";s:2:"Ñ•";s:2:"І";s:2:"Ñ–";s:2:"Ї";s:2:"Ñ—";s:2:"Ј";s:2:"ј";s:2:"Љ";s:2:"Ñ™";s:2:"Њ";s:2:"Ñš";s:2:"Ћ";s:2:"Ñ›";s:2:"ÐŒ";s:2:"Ñœ";s:2:"Ð";s:2:"Ñ";s:2:"ÐŽ";s:2:"Ñž";s:2:"Ð";s:2:"ÑŸ";s:2:"Ð";s:2:"а";s:2:"Б";s:2:"б";s:2:"Ð’";s:2:"в";s:2:"Г";s:2:"г";s:2:"Д";s:2:"д";s:2:"Е";s:2:"е";s:2:"Ж";s:2:"ж";s:2:"З";s:2:"з";s:2:"И";s:2:"и";s:2:"Й";s:2:"й";s:2:"К";s:2:"к";s:2:"Л";s:2:"л";s:2:"Ðœ";s:2:"м";s:2:"Ð";s:2:"н";s:2:"О";s:2:"о";s:2:"П";s:2:"п";s:2:"Р";s:2:"Ñ€";s:2:"С";s:2:"Ñ";s:2:"Т";s:2:"Ñ‚";s:2:"У";s:2:"у";s:2:"Ф";s:2:"Ñ„";s:2:"Ð¥";s:2:"Ñ…";s:2:"Ц";s:2:"ц";s:2:"Ч";s:2:"ч";s:2:"Ш";s:2:"ш";s:2:"Щ";s:2:"щ";s:2:"Ъ";s:2:"ÑŠ";s:2:"Ы";s:2:"Ñ‹";s:2:"Ь";s:2:"ÑŒ";s:2:"Э";s:2:"Ñ";s:2:"Ю";s:2:"ÑŽ";s:2:"Я";s:2:"Ñ";s:2:"Ñ ";s:2:"Ñ¡";s:2:"Ñ¢";s:2:"Ñ£";s:2:"Ѥ";s:2:"Ñ¥";s:2:"Ѧ";s:2:"ѧ";s:2:"Ѩ";s:2:"Ñ©";s:2:"Ѫ";s:2:"Ñ«";s:2:"Ѭ";s:2:"Ñ­";s:2:"Ñ®";s:2:"ѯ";s:2:"Ñ°";s:2:"ѱ";s:2:"Ѳ";s:2:"ѳ";s:2:"Ñ´";s:2:"ѵ";s:2:"Ѷ";s:2:"Ñ·";s:2:"Ѹ";s:2:"ѹ";s:2:"Ѻ";s:2:"Ñ»";s:2:"Ѽ";s:2:"ѽ";s:2:"Ѿ";s:2:"Ñ¿";s:2:"Ò€";s:2:"Ò";s:2:"ÒŠ";s:2:"Ò‹";s:2:"ÒŒ";s:2:"Ò";s:2:"ÒŽ";s:2:"Ò";s:2:"Ò";s:2:"Ò‘";s:2:"Ò’";s:2:"Ò“";s:2:"Ò”";s:2:"Ò•";s:2:"Ò–";s:2:"Ò—";s:2:"Ò˜";s:2:"Ò™";s:2:"Òš";s:2:"Ò›";s:2:"Òœ";s:2:"Ò";s:2:"Òž";s:2:"ÒŸ";s:2:"Ò ";s:2:"Ò¡";s:2:"Ò¢";s:2:"Ò£";s:2:"Ò¤";s:2:"Ò¥";s:2:"Ò¦";s:2:"Ò§";s:2:"Ò¨";s:2:"Ò©";s:2:"Òª";s:2:"Ò«";s:2:"Ò¬";s:2:"Ò­";s:2:"Ò®";s:2:"Ò¯";s:2:"Ò°";s:2:"Ò±";s:2:"Ò²";s:2:"Ò³";s:2:"Ò´";s:2:"Òµ";s:2:"Ò¶";s:2:"Ò·";s:2:"Ò¸";s:2:"Ò¹";s:2:"Òº";s:2:"Ò»";s:2:"Ò¼";s:2:"Ò½";s:2:"Ò¾";s:2:"Ò¿";s:2:"Ó€";s:2:"Ó";s:2:"Ó";s:2:"Ó‚";s:2:"Óƒ";s:2:"Ó„";s:2:"Ó…";s:2:"Ó†";s:2:"Ó‡";s:2:"Óˆ";s:2:"Ó‰";s:2:"ÓŠ";s:2:"Ó‹";s:2:"ÓŒ";s:2:"Ó";s:2:"ÓŽ";s:2:"Ó";s:2:"Ó‘";s:2:"Ó’";s:2:"Ó“";s:2:"Ó”";s:2:"Ó•";s:2:"Ó–";s:2:"Ó—";s:2:"Ó˜";s:2:"Ó™";s:2:"Óš";s:2:"Ó›";s:2:"Óœ";s:2:"Ó";s:2:"Óž";s:2:"ÓŸ";s:2:"Ó ";s:2:"Ó¡";s:2:"Ó¢";s:2:"Ó£";s:2:"Ó¤";s:2:"Ó¥";s:2:"Ó¦";s:2:"Ó§";s:2:"Ó¨";s:2:"Ó©";s:2:"Óª";s:2:"Ó«";s:2:"Ó¬";s:2:"Ó­";s:2:"Ó®";s:2:"Ó¯";s:2:"Ó°";s:2:"Ó±";s:2:"Ó²";s:2:"Ó³";s:2:"Ó´";s:2:"Óµ";s:2:"Ó¶";s:2:"Ó·";s:2:"Ó¸";s:2:"Ó¹";s:2:"Óº";s:2:"Ó»";s:2:"Ó¼";s:2:"Ó½";s:2:"Ó¾";s:2:"Ó¿";s:2:"Ô€";s:2:"Ô";s:2:"Ô‚";s:2:"Ôƒ";s:2:"Ô„";s:2:"Ô…";s:2:"Ô†";s:2:"Ô‡";s:2:"Ôˆ";s:2:"Ô‰";s:2:"ÔŠ";s:2:"Ô‹";s:2:"ÔŒ";s:2:"Ô";s:2:"ÔŽ";s:2:"Ô";s:2:"Ô";s:2:"Ô‘";s:2:"Ô’";s:2:"Ô“";s:2:"Ô”";s:2:"Ô•";s:2:"Ô–";s:2:"Ô—";s:2:"Ô˜";s:2:"Ô™";s:2:"Ôš";s:2:"Ô›";s:2:"Ôœ";s:2:"Ô";s:2:"Ôž";s:2:"ÔŸ";s:2:"Ô ";s:2:"Ô¡";s:2:"Ô¢";s:2:"Ô£";s:2:"Ô¤";s:2:"Ô¥";s:2:"Ô¦";s:2:"Ô§";s:2:"Ô¨";s:2:"Ô©";s:2:"Ôª";s:2:"Ô«";s:2:"Ô¬";s:2:"Ô­";s:2:"Ô®";s:2:"Ô¯";s:2:"Ô±";s:2:"Õ¡";s:2:"Ô²";s:2:"Õ¢";s:2:"Ô³";s:2:"Õ£";s:2:"Ô´";s:2:"Õ¤";s:2:"Ôµ";s:2:"Õ¥";s:2:"Ô¶";s:2:"Õ¦";s:2:"Ô·";s:2:"Õ§";s:2:"Ô¸";s:2:"Õ¨";s:2:"Ô¹";s:2:"Õ©";s:2:"Ôº";s:2:"Õª";s:2:"Ô»";s:2:"Õ«";s:2:"Ô¼";s:2:"Õ¬";s:2:"Ô½";s:2:"Õ­";s:2:"Ô¾";s:2:"Õ®";s:2:"Ô¿";s:2:"Õ¯";s:2:"Õ€";s:2:"Õ°";s:2:"Õ";s:2:"Õ±";s:2:"Õ‚";s:2:"Õ²";s:2:"Õƒ";s:2:"Õ³";s:2:"Õ„";s:2:"Õ´";s:2:"Õ…";s:2:"Õµ";s:2:"Õ†";s:2:"Õ¶";s:2:"Õ‡";s:2:"Õ·";s:2:"Õˆ";s:2:"Õ¸";s:2:"Õ‰";s:2:"Õ¹";s:2:"ÕŠ";s:2:"Õº";s:2:"Õ‹";s:2:"Õ»";s:2:"ÕŒ";s:2:"Õ¼";s:2:"Õ";s:2:"Õ½";s:2:"ÕŽ";s:2:"Õ¾";s:2:"Õ";s:2:"Õ¿";s:2:"Õ";s:2:"Ö€";s:2:"Õ‘";s:2:"Ö";s:2:"Õ’";s:2:"Ö‚";s:2:"Õ“";s:2:"Öƒ";s:2:"Õ”";s:2:"Ö„";s:2:"Õ•";s:2:"Ö…";s:2:"Õ–";s:2:"Ö†";s:3:"á‚ ";s:3:"â´€";s:3:"á‚¡";s:3:"â´";s:3:"á‚¢";s:3:"â´‚";s:3:"á‚£";s:3:"â´ƒ";s:3:"Ⴄ";s:3:"â´„";s:3:"á‚¥";s:3:"â´…";s:3:"Ⴆ";s:3:"â´†";s:3:"Ⴇ";s:3:"â´‡";s:3:"Ⴈ";s:3:"â´ˆ";s:3:"á‚©";s:3:"â´‰";s:3:"Ⴊ";s:3:"â´Š";s:3:"á‚«";s:3:"â´‹";s:3:"Ⴌ";s:3:"â´Œ";s:3:"á‚­";s:3:"â´";s:3:"á‚®";s:3:"â´Ž";s:3:"Ⴏ";s:3:"â´";s:3:"á‚°";s:3:"â´";s:3:"Ⴑ";s:3:"â´‘";s:3:"Ⴒ";s:3:"â´’";s:3:"Ⴓ";s:3:"â´“";s:3:"á‚´";s:3:"â´”";s:3:"Ⴕ";s:3:"â´•";s:3:"Ⴖ";s:3:"â´–";s:3:"á‚·";s:3:"â´—";s:3:"Ⴘ";s:3:"â´˜";s:3:"Ⴙ";s:3:"â´™";s:3:"Ⴚ";s:3:"â´š";s:3:"á‚»";s:3:"â´›";s:3:"Ⴜ";s:3:"â´œ";s:3:"Ⴝ";s:3:"â´";s:3:"Ⴞ";s:3:"â´ž";s:3:"á‚¿";s:3:"â´Ÿ";s:3:"Ⴠ";s:3:"â´ ";s:3:"áƒ";s:3:"â´¡";s:3:"Ⴢ";s:3:"â´¢";s:3:"Ⴣ";s:3:"â´£";s:3:"Ⴤ";s:3:"â´¤";s:3:"Ⴥ";s:3:"â´¥";s:3:"Ⴧ";s:3:"â´§";s:3:"áƒ";s:3:"â´­";s:3:"Ḁ";s:3:"á¸";s:3:"Ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"ḇ";s:3:"Ḉ";s:3:"ḉ";s:3:"Ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"á¸";s:3:"Ḏ";s:3:"á¸";s:3:"á¸";s:3:"ḑ";s:3:"Ḓ";s:3:"ḓ";s:3:"Ḕ";s:3:"ḕ";s:3:"Ḗ";s:3:"ḗ";s:3:"Ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"ḛ";s:3:"Ḝ";s:3:"á¸";s:3:"Ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"ḭ";s:3:"Ḯ";s:3:"ḯ";s:3:"Ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"ḷ";s:3:"Ḹ";s:3:"ḹ";s:3:"Ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"ḿ";s:3:"á¹€";s:3:"á¹";s:3:"Ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"á¹…";s:3:"Ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"ṋ";s:3:"Ṍ";s:3:"á¹";s:3:"Ṏ";s:3:"á¹";s:3:"á¹";s:3:"ṑ";s:3:"á¹’";s:3:"ṓ";s:3:"á¹”";s:3:"ṕ";s:3:"á¹–";s:3:"á¹—";s:3:"Ṙ";s:3:"á¹™";s:3:"Ṛ";s:3:"á¹›";s:3:"Ṝ";s:3:"á¹";s:3:"Ṟ";s:3:"ṟ";s:3:"á¹ ";s:3:"ṡ";s:3:"á¹¢";s:3:"á¹£";s:3:"Ṥ";s:3:"á¹¥";s:3:"Ṧ";s:3:"ṧ";s:3:"Ṩ";s:3:"ṩ";s:3:"Ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"á¹­";s:3:"á¹®";s:3:"ṯ";s:3:"á¹°";s:3:"á¹±";s:3:"á¹²";s:3:"á¹³";s:3:"á¹´";s:3:"á¹µ";s:3:"Ṷ";s:3:"á¹·";s:3:"Ṹ";s:3:"á¹¹";s:3:"Ṻ";s:3:"á¹»";s:3:"á¹¼";s:3:"á¹½";s:3:"á¹¾";s:3:"ṿ";s:3:"Ẁ";s:3:"áº";s:3:"Ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"áº";s:3:"Ẏ";s:3:"áº";s:3:"áº";s:3:"ẑ";s:3:"Ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẞ";s:2:"ß";s:3:"Ạ";s:3:"ạ";s:3:"Ả";s:3:"ả";s:3:"Ấ";s:3:"ấ";s:3:"Ầ";s:3:"ầ";s:3:"Ẩ";s:3:"ẩ";s:3:"Ẫ";s:3:"ẫ";s:3:"Ậ";s:3:"ậ";s:3:"Ắ";s:3:"ắ";s:3:"Ằ";s:3:"ằ";s:3:"Ẳ";s:3:"ẳ";s:3:"Ẵ";s:3:"ẵ";s:3:"Ặ";s:3:"ặ";s:3:"Ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"ẽ";s:3:"Ế";s:3:"ế";s:3:"Ề";s:3:"á»";s:3:"Ể";s:3:"ể";s:3:"Ễ";s:3:"á»…";s:3:"Ệ";s:3:"ệ";s:3:"Ỉ";s:3:"ỉ";s:3:"Ị";s:3:"ị";s:3:"Ọ";s:3:"á»";s:3:"Ỏ";s:3:"á»";s:3:"á»";s:3:"ố";s:3:"á»’";s:3:"ồ";s:3:"á»”";s:3:"ổ";s:3:"á»–";s:3:"á»—";s:3:"Ộ";s:3:"á»™";s:3:"Ớ";s:3:"á»›";s:3:"Ờ";s:3:"á»";s:3:"Ở";s:3:"ở";s:3:"á» ";s:3:"ỡ";s:3:"Ợ";s:3:"ợ";s:3:"Ụ";s:3:"ụ";s:3:"Ủ";s:3:"ủ";s:3:"Ứ";s:3:"ứ";s:3:"Ừ";s:3:"ừ";s:3:"Ử";s:3:"á»­";s:3:"á»®";s:3:"ữ";s:3:"á»°";s:3:"á»±";s:3:"Ỳ";s:3:"ỳ";s:3:"á»´";s:3:"ỵ";s:3:"Ỷ";s:3:"á»·";s:3:"Ỹ";s:3:"ỹ";s:3:"Ỻ";s:3:"á»»";s:3:"Ỽ";s:3:"ỽ";s:3:"Ỿ";s:3:"ỿ";s:3:"Ἀ";s:3:"á¼€";s:3:"Ἁ";s:3:"á¼";s:3:"Ἂ";s:3:"ἂ";s:3:"Ἃ";s:3:"ἃ";s:3:"Ἄ";s:3:"ἄ";s:3:"á¼";s:3:"á¼…";s:3:"Ἆ";s:3:"ἆ";s:3:"á¼";s:3:"ἇ";s:3:"Ἐ";s:3:"á¼";s:3:"á¼™";s:3:"ἑ";s:3:"Ἒ";s:3:"á¼’";s:3:"á¼›";s:3:"ἓ";s:3:"Ἔ";s:3:"á¼”";s:3:"á¼";s:3:"ἕ";s:3:"Ἠ";s:3:"á¼ ";s:3:"Ἡ";s:3:"ἡ";s:3:"Ἢ";s:3:"á¼¢";s:3:"Ἣ";s:3:"á¼£";s:3:"Ἤ";s:3:"ἤ";s:3:"á¼­";s:3:"á¼¥";s:3:"á¼®";s:3:"ἦ";s:3:"Ἧ";s:3:"ἧ";s:3:"Ἰ";s:3:"á¼°";s:3:"á¼¹";s:3:"á¼±";s:3:"Ἲ";s:3:"á¼²";s:3:"á¼»";s:3:"á¼³";s:3:"á¼¼";s:3:"á¼´";s:3:"á¼½";s:3:"á¼µ";s:3:"á¼¾";s:3:"ἶ";s:3:"Ἷ";s:3:"á¼·";s:3:"Ὀ";s:3:"á½€";s:3:"Ὁ";s:3:"á½";s:3:"Ὂ";s:3:"ὂ";s:3:"Ὃ";s:3:"ὃ";s:3:"Ὄ";s:3:"ὄ";s:3:"á½";s:3:"á½…";s:3:"á½™";s:3:"ὑ";s:3:"á½›";s:3:"ὓ";s:3:"á½";s:3:"ὕ";s:3:"Ὗ";s:3:"á½—";s:3:"Ὠ";s:3:"á½ ";s:3:"Ὡ";s:3:"ὡ";s:3:"Ὢ";s:3:"á½¢";s:3:"Ὣ";s:3:"á½£";s:3:"Ὤ";s:3:"ὤ";s:3:"á½­";s:3:"á½¥";s:3:"á½®";s:3:"ὦ";s:3:"Ὧ";s:3:"ὧ";s:3:"ᾈ";s:3:"á¾€";s:3:"ᾉ";s:3:"á¾";s:3:"ᾊ";s:3:"ᾂ";s:3:"ᾋ";s:3:"ᾃ";s:3:"ᾌ";s:3:"ᾄ";s:3:"á¾";s:3:"á¾…";s:3:"ᾎ";s:3:"ᾆ";s:3:"á¾";s:3:"ᾇ";s:3:"ᾘ";s:3:"á¾";s:3:"á¾™";s:3:"ᾑ";s:3:"ᾚ";s:3:"á¾’";s:3:"á¾›";s:3:"ᾓ";s:3:"ᾜ";s:3:"á¾”";s:3:"á¾";s:3:"ᾕ";s:3:"ᾞ";s:3:"á¾–";s:3:"ᾟ";s:3:"á¾—";s:3:"ᾨ";s:3:"á¾ ";s:3:"ᾩ";s:3:"ᾡ";s:3:"ᾪ";s:3:"á¾¢";s:3:"ᾫ";s:3:"á¾£";s:3:"ᾬ";s:3:"ᾤ";s:3:"á¾­";s:3:"á¾¥";s:3:"á¾®";s:3:"ᾦ";s:3:"ᾯ";s:3:"ᾧ";s:3:"Ᾰ";s:3:"á¾°";s:3:"á¾¹";s:3:"á¾±";s:3:"Ὰ";s:3:"á½°";s:3:"á¾»";s:3:"á½±";s:3:"á¾¼";s:3:"á¾³";s:3:"Ὲ";s:3:"á½²";s:3:"Έ";s:3:"á½³";s:3:"á¿Š";s:3:"á½´";s:3:"á¿‹";s:3:"á½µ";s:3:"á¿Œ";s:3:"ῃ";s:3:"Ῐ";s:3:"á¿";s:3:"á¿™";s:3:"á¿‘";s:3:"á¿š";s:3:"ὶ";s:3:"á¿›";s:3:"á½·";s:3:"Ῠ";s:3:"á¿ ";s:3:"á¿©";s:3:"á¿¡";s:3:"Ὺ";s:3:"ὺ";s:3:"á¿«";s:3:"á½»";s:3:"Ῥ";s:3:"á¿¥";s:3:"Ὸ";s:3:"ὸ";s:3:"Ό";s:3:"á½¹";s:3:"Ὼ";s:3:"á½¼";s:3:"á¿»";s:3:"á½½";s:3:"ῼ";s:3:"ῳ";s:3:"Ω";s:2:"ω";s:3:"K";s:1:"k";s:3:"â„«";s:2:"Ã¥";s:3:"Ⅎ";s:3:"â…Ž";s:3:"â… ";s:3:"â…°";s:3:"â…¡";s:3:"â…±";s:3:"â…¢";s:3:"â…²";s:3:"â…£";s:3:"â…³";s:3:"â…¤";s:3:"â…´";s:3:"â…¥";s:3:"â…µ";s:3:"â…¦";s:3:"â…¶";s:3:"â…§";s:3:"â…·";s:3:"â…¨";s:3:"â…¸";s:3:"â…©";s:3:"â…¹";s:3:"â…ª";s:3:"â…º";s:3:"â…«";s:3:"â…»";s:3:"â…¬";s:3:"â…¼";s:3:"â…­";s:3:"â…½";s:3:"â…®";s:3:"â…¾";s:3:"â…¯";s:3:"â…¿";s:3:"Ↄ";s:3:"ↄ";s:3:"â’¶";s:3:"â“";s:3:"â’·";s:3:"â“‘";s:3:"â’¸";s:3:"â“’";s:3:"â’¹";s:3:"â““";s:3:"â’º";s:3:"â“”";s:3:"â’»";s:3:"â“•";s:3:"â’¼";s:3:"â“–";s:3:"â’½";s:3:"â“—";s:3:"â’¾";s:3:"ⓘ";s:3:"â’¿";s:3:"â“™";s:3:"â“€";s:3:"â“š";s:3:"â“";s:3:"â“›";s:3:"â“‚";s:3:"â“œ";s:3:"Ⓝ";s:3:"â“";s:3:"â“„";s:3:"â“ž";s:3:"â“…";s:3:"â“Ÿ";s:3:"Ⓠ";s:3:"â“ ";s:3:"Ⓡ";s:3:"â“¡";s:3:"Ⓢ";s:3:"â“¢";s:3:"Ⓣ";s:3:"â“£";s:3:"â“Š";s:3:"ⓤ";s:3:"â“‹";s:3:"â“¥";s:3:"â“Œ";s:3:"ⓦ";s:3:"â“";s:3:"ⓧ";s:3:"â“Ž";s:3:"ⓨ";s:3:"â“";s:3:"â“©";s:3:"â°€";s:3:"â°°";s:3:"â°";s:3:"â°±";s:3:"â°‚";s:3:"â°²";s:3:"â°ƒ";s:3:"â°³";s:3:"â°„";s:3:"â°´";s:3:"â°…";s:3:"â°µ";s:3:"â°†";s:3:"â°¶";s:3:"â°‡";s:3:"â°·";s:3:"â°ˆ";s:3:"â°¸";s:3:"â°‰";s:3:"â°¹";s:3:"â°Š";s:3:"â°º";s:3:"â°‹";s:3:"â°»";s:3:"â°Œ";s:3:"â°¼";s:3:"â°";s:3:"â°½";s:3:"â°Ž";s:3:"â°¾";s:3:"â°";s:3:"â°¿";s:3:"â°";s:3:"â±€";s:3:"â°‘";s:3:"â±";s:3:"â°’";s:3:"ⱂ";s:3:"â°“";s:3:"ⱃ";s:3:"â°”";s:3:"ⱄ";s:3:"â°•";s:3:"â±…";s:3:"â°–";s:3:"ⱆ";s:3:"â°—";s:3:"ⱇ";s:3:"â°˜";s:3:"ⱈ";s:3:"â°™";s:3:"ⱉ";s:3:"â°š";s:3:"ⱊ";s:3:"â°›";s:3:"ⱋ";s:3:"â°œ";s:3:"ⱌ";s:3:"â°";s:3:"â±";s:3:"â°ž";s:3:"ⱎ";s:3:"â°Ÿ";s:3:"â±";s:3:"â° ";s:3:"â±";s:3:"â°¡";s:3:"ⱑ";s:3:"â°¢";s:3:"â±’";s:3:"â°£";s:3:"ⱓ";s:3:"â°¤";s:3:"â±”";s:3:"â°¥";s:3:"ⱕ";s:3:"â°¦";s:3:"â±–";s:3:"â°§";s:3:"â±—";s:3:"â°¨";s:3:"ⱘ";s:3:"â°©";s:3:"â±™";s:3:"â°ª";s:3:"ⱚ";s:3:"â°«";s:3:"â±›";s:3:"â°¬";s:3:"ⱜ";s:3:"â°­";s:3:"â±";s:3:"â°®";s:3:"ⱞ";s:3:"â± ";s:3:"ⱡ";s:3:"â±¢";s:2:"É«";s:3:"â±£";s:3:"áµ½";s:3:"Ɽ";s:2:"ɽ";s:3:"Ⱨ";s:3:"ⱨ";s:3:"Ⱪ";s:3:"ⱪ";s:3:"Ⱬ";s:3:"ⱬ";s:3:"â±­";s:2:"É‘";s:3:"â±®";s:2:"ɱ";s:3:"Ɐ";s:2:"É";s:3:"â±°";s:2:"É’";s:3:"â±²";s:3:"â±³";s:3:"â±µ";s:3:"ⱶ";s:3:"â±¾";s:2:"È¿";s:3:"Ɀ";s:2:"É€";s:3:"â²€";s:3:"â²";s:3:"Ⲃ";s:3:"ⲃ";s:3:"Ⲅ";s:3:"â²…";s:3:"Ⲇ";s:3:"ⲇ";s:3:"Ⲉ";s:3:"ⲉ";s:3:"Ⲋ";s:3:"ⲋ";s:3:"Ⲍ";s:3:"â²";s:3:"Ⲏ";s:3:"â²";s:3:"â²";s:3:"ⲑ";s:3:"â²’";s:3:"ⲓ";s:3:"â²”";s:3:"ⲕ";s:3:"â²–";s:3:"â²—";s:3:"Ⲙ";s:3:"â²™";s:3:"Ⲛ";s:3:"â²›";s:3:"Ⲝ";s:3:"â²";s:3:"Ⲟ";s:3:"ⲟ";s:3:"â² ";s:3:"ⲡ";s:3:"â²¢";s:3:"â²£";s:3:"Ⲥ";s:3:"â²¥";s:3:"Ⲧ";s:3:"ⲧ";s:3:"Ⲩ";s:3:"ⲩ";s:3:"Ⲫ";s:3:"ⲫ";s:3:"Ⲭ";s:3:"â²­";s:3:"â²®";s:3:"ⲯ";s:3:"â²°";s:3:"â²±";s:3:"â²²";s:3:"â²³";s:3:"â²´";s:3:"â²µ";s:3:"Ⲷ";s:3:"â²·";s:3:"Ⲹ";s:3:"â²¹";s:3:"Ⲻ";s:3:"â²»";s:3:"â²¼";s:3:"â²½";s:3:"â²¾";s:3:"ⲿ";s:3:"â³€";s:3:"â³";s:3:"Ⳃ";s:3:"ⳃ";s:3:"Ⳅ";s:3:"â³…";s:3:"Ⳇ";s:3:"ⳇ";s:3:"Ⳉ";s:3:"ⳉ";s:3:"Ⳋ";s:3:"ⳋ";s:3:"Ⳍ";s:3:"â³";s:3:"Ⳏ";s:3:"â³";s:3:"â³";s:3:"ⳑ";s:3:"â³’";s:3:"ⳓ";s:3:"â³”";s:3:"ⳕ";s:3:"â³–";s:3:"â³—";s:3:"Ⳙ";s:3:"â³™";s:3:"Ⳛ";s:3:"â³›";s:3:"Ⳝ";s:3:"â³";s:3:"Ⳟ";s:3:"ⳟ";s:3:"â³ ";s:3:"ⳡ";s:3:"â³¢";s:3:"â³£";s:3:"Ⳬ";s:3:"ⳬ";s:3:"â³­";s:3:"â³®";s:3:"â³²";s:3:"â³³";s:3:"Ꙁ";s:3:"ê™";s:3:"Ꙃ";s:3:"ꙃ";s:3:"Ꙅ";s:3:"ê™…";s:3:"Ꙇ";s:3:"ꙇ";s:3:"Ꙉ";s:3:"ꙉ";s:3:"Ꙋ";s:3:"ꙋ";s:3:"Ꙍ";s:3:"ê™";s:3:"Ꙏ";s:3:"ê™";s:3:"ê™";s:3:"ꙑ";s:3:"ê™’";s:3:"ꙓ";s:3:"ê™”";s:3:"ꙕ";s:3:"ê™–";s:3:"ê™—";s:3:"Ꙙ";s:3:"ê™™";s:3:"Ꙛ";s:3:"ê™›";s:3:"Ꙝ";s:3:"ê™";s:3:"Ꙟ";s:3:"ꙟ";s:3:"ê™ ";s:3:"ꙡ";s:3:"Ꙣ";s:3:"ꙣ";s:3:"Ꙥ";s:3:"ꙥ";s:3:"Ꙧ";s:3:"ꙧ";s:3:"Ꙩ";s:3:"ꙩ";s:3:"Ꙫ";s:3:"ꙫ";s:3:"Ꙭ";s:3:"ê™­";s:3:"Ꚁ";s:3:"êš";s:3:"êš‚";s:3:"ꚃ";s:3:"êš„";s:3:"êš…";s:3:"Ꚇ";s:3:"ꚇ";s:3:"Ꚉ";s:3:"ꚉ";s:3:"Ꚋ";s:3:"êš‹";s:3:"Ꚍ";s:3:"êš";s:3:"Ꚏ";s:3:"êš";s:3:"êš";s:3:"êš‘";s:3:"êš’";s:3:"êš“";s:3:"êš”";s:3:"êš•";s:3:"êš–";s:3:"êš—";s:3:"Ꚙ";s:3:"êš™";s:3:"êšš";s:3:"êš›";s:3:"Ꜣ";s:3:"ꜣ";s:3:"Ꜥ";s:3:"ꜥ";s:3:"Ꜧ";s:3:"ꜧ";s:3:"Ꜩ";s:3:"ꜩ";s:3:"Ꜫ";s:3:"ꜫ";s:3:"Ꜭ";s:3:"ꜭ";s:3:"Ꜯ";s:3:"ꜯ";s:3:"Ꜳ";s:3:"ꜳ";s:3:"Ꜵ";s:3:"ꜵ";s:3:"Ꜷ";s:3:"ꜷ";s:3:"Ꜹ";s:3:"ꜹ";s:3:"Ꜻ";s:3:"ꜻ";s:3:"Ꜽ";s:3:"ꜽ";s:3:"Ꜿ";s:3:"ꜿ";s:3:"ê€";s:3:"ê";s:3:"ê‚";s:3:"êƒ";s:3:"ê„";s:3:"ê…";s:3:"ê†";s:3:"ê‡";s:3:"êˆ";s:3:"ê‰";s:3:"êŠ";s:3:"ê‹";s:3:"êŒ";s:3:"ê";s:3:"êŽ";s:3:"ê";s:3:"ê";s:3:"ê‘";s:3:"ê’";s:3:"ê“";s:3:"ê”";s:3:"ê•";s:3:"ê–";s:3:"ê—";s:3:"ê˜";s:3:"ê™";s:3:"êš";s:3:"ê›";s:3:"êœ";s:3:"ê";s:3:"êž";s:3:"êŸ";s:3:"ê ";s:3:"ê¡";s:3:"ê¢";s:3:"ê£";s:3:"ê¤";s:3:"ê¥";s:3:"ê¦";s:3:"ê§";s:3:"ê¨";s:3:"ê©";s:3:"êª";s:3:"ê«";s:3:"ê¬";s:3:"ê­";s:3:"ê®";s:3:"ê¯";s:3:"ê¹";s:3:"êº";s:3:"ê»";s:3:"ê¼";s:3:"ê½";s:3:"áµ¹";s:3:"ê¾";s:3:"ê¿";s:3:"Ꞁ";s:3:"êž";s:3:"êž‚";s:3:"ꞃ";s:3:"êž„";s:3:"êž…";s:3:"Ꞇ";s:3:"ꞇ";s:3:"êž‹";s:3:"ꞌ";s:3:"êž";s:2:"É¥";s:3:"êž";s:3:"êž‘";s:3:"êž’";s:3:"êž“";s:3:"êž–";s:3:"êž—";s:3:"Ꞙ";s:3:"êž™";s:3:"êžš";s:3:"êž›";s:3:"êžœ";s:3:"êž";s:3:"êžž";s:3:"ꞟ";s:3:"êž ";s:3:"êž¡";s:3:"Ꞣ";s:3:"ꞣ";s:3:"Ꞥ";s:3:"ꞥ";s:3:"Ꞧ";s:3:"ꞧ";s:3:"Ꞩ";s:3:"êž©";s:3:"Ɦ";s:2:"ɦ";s:3:"êž«";s:2:"Éœ";s:3:"Ɡ";s:2:"É¡";s:3:"êž­";s:2:"ɬ";s:3:"êž°";s:2:"Êž";s:3:"êž±";s:2:"ʇ";s:3:"A";s:3:"ï½";s:3:"ï¼¢";s:3:"b";s:3:"ï¼£";s:3:"c";s:3:"D";s:3:"d";s:3:"ï¼¥";s:3:"ï½…";s:3:"F";s:3:"f";s:3:"G";s:3:"g";s:3:"H";s:3:"h";s:3:"I";s:3:"i";s:3:"J";s:3:"j";s:3:"K";s:3:"k";s:3:"L";s:3:"l";s:3:"ï¼­";s:3:"ï½";s:3:"ï¼®";s:3:"n";s:3:"O";s:3:"ï½";s:3:"ï¼°";s:3:"ï½";s:3:"ï¼±";s:3:"q";s:3:"ï¼²";s:3:"ï½’";s:3:"ï¼³";s:3:"s";s:3:"ï¼´";s:3:"ï½”";s:3:"ï¼µ";s:3:"u";s:3:"V";s:3:"ï½–";s:3:"ï¼·";s:3:"ï½—";s:3:"X";s:3:"x";s:3:"ï¼¹";s:3:"ï½™";s:3:"Z";s:3:"z";s:4:"ð€";s:4:"ð¨";s:4:"ð";s:4:"ð©";s:4:"ð‚";s:4:"ðª";s:4:"ðƒ";s:4:"ð«";s:4:"ð„";s:4:"ð¬";s:4:"ð…";s:4:"ð­";s:4:"ð†";s:4:"ð®";s:4:"ð‡";s:4:"ð¯";s:4:"ðˆ";s:4:"ð°";s:4:"ð‰";s:4:"ð±";s:4:"ðŠ";s:4:"ð²";s:4:"ð‹";s:4:"ð³";s:4:"ðŒ";s:4:"ð´";s:4:"ð";s:4:"ðµ";s:4:"ðŽ";s:4:"ð¶";s:4:"ð";s:4:"ð·";s:4:"ð";s:4:"ð¸";s:4:"ð‘";s:4:"ð¹";s:4:"ð’";s:4:"ðº";s:4:"ð“";s:4:"ð»";s:4:"ð”";s:4:"ð¼";s:4:"ð•";s:4:"ð½";s:4:"ð–";s:4:"ð¾";s:4:"ð—";s:4:"ð¿";s:4:"ð˜";s:4:"ð‘€";s:4:"ð™";s:4:"ð‘";s:4:"ðš";s:4:"ð‘‚";s:4:"ð›";s:4:"ð‘ƒ";s:4:"ðœ";s:4:"ð‘„";s:4:"ð";s:4:"ð‘…";s:4:"ðž";s:4:"ð‘†";s:4:"ðŸ";s:4:"ð‘‡";s:4:"ð ";s:4:"ð‘ˆ";s:4:"ð¡";s:4:"ð‘‰";s:4:"ð¢";s:4:"ð‘Š";s:4:"ð£";s:4:"ð‘‹";s:4:"ð¤";s:4:"ð‘Œ";s:4:"ð¥";s:4:"ð‘";s:4:"ð¦";s:4:"ð‘Ž";s:4:"ð§";s:4:"ð‘";s:4:"ð‘¢ ";s:4:"ð‘£€";s:4:"𑢡";s:4:"ð‘£";s:4:"ð‘¢¢";s:4:"𑣂";s:4:"ð‘¢£";s:4:"𑣃";s:4:"𑢤";s:4:"𑣄";s:4:"ð‘¢¥";s:4:"ð‘£…";s:4:"𑢦";s:4:"𑣆";s:4:"𑢧";s:4:"𑣇";s:4:"𑢨";s:4:"𑣈";s:4:"𑢩";s:4:"𑣉";s:4:"𑢪";s:4:"𑣊";s:4:"𑢫";s:4:"𑣋";s:4:"𑢬";s:4:"𑣌";s:4:"ð‘¢­";s:4:"ð‘£";s:4:"ð‘¢®";s:4:"𑣎";s:4:"𑢯";s:4:"ð‘£";s:4:"ð‘¢°";s:4:"ð‘£";s:4:"ð‘¢±";s:4:"𑣑";s:4:"ð‘¢²";s:4:"ð‘£’";s:4:"ð‘¢³";s:4:"𑣓";s:4:"ð‘¢´";s:4:"ð‘£”";s:4:"ð‘¢µ";s:4:"𑣕";s:4:"𑢶";s:4:"ð‘£–";s:4:"ð‘¢·";s:4:"ð‘£—";s:4:"𑢸";s:4:"𑣘";s:4:"ð‘¢¹";s:4:"ð‘£™";s:4:"𑢺";s:4:"𑣚";s:4:"ð‘¢»";s:4:"ð‘£›";s:4:"ð‘¢¼";s:4:"𑣜";s:4:"ð‘¢½";s:4:"ð‘£";s:4:"ð‘¢¾";s:4:"𑣞";s:4:"𑢿";s:4:"𑣟";} \ No newline at end of file diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php new file mode 100644 index 00000000..ec942212 --- /dev/null +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php @@ -0,0 +1,1109 @@ + 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + 'µ' => 'Îœ', + 'à' => 'À', + 'á' => 'Ã', + 'â' => 'Â', + 'ã' => 'Ã', + 'ä' => 'Ä', + 'Ã¥' => 'Ã…', + 'æ' => 'Æ', + 'ç' => 'Ç', + 'è' => 'È', + 'é' => 'É', + 'ê' => 'Ê', + 'ë' => 'Ë', + 'ì' => 'ÃŒ', + 'í' => 'Ã', + 'î' => 'ÃŽ', + 'ï' => 'Ã', + 'ð' => 'Ã', + 'ñ' => 'Ñ', + 'ò' => 'Ã’', + 'ó' => 'Ó', + 'ô' => 'Ô', + 'õ' => 'Õ', + 'ö' => 'Ö', + 'ø' => 'Ø', + 'ù' => 'Ù', + 'ú' => 'Ú', + 'û' => 'Û', + 'ü' => 'Ãœ', + 'ý' => 'Ã', + 'þ' => 'Þ', + 'ÿ' => 'Ÿ', + 'Ä' => 'Ä€', + 'ă' => 'Ä‚', + 'Ä…' => 'Ä„', + 'ć' => 'Ć', + 'ĉ' => 'Ĉ', + 'Ä‹' => 'ÄŠ', + 'Ä' => 'ÄŒ', + 'Ä' => 'ÄŽ', + 'Ä‘' => 'Ä', + 'Ä“' => 'Ä’', + 'Ä•' => 'Ä”', + 'Ä—' => 'Ä–', + 'Ä™' => 'Ę', + 'Ä›' => 'Äš', + 'Ä' => 'Äœ', + 'ÄŸ' => 'Äž', + 'Ä¡' => 'Ä ', + 'Ä£' => 'Ä¢', + 'Ä¥' => 'Ĥ', + 'ħ' => 'Ħ', + 'Ä©' => 'Ĩ', + 'Ä«' => 'Ī', + 'Ä­' => 'Ĭ', + 'į' => 'Ä®', + 'ı' => 'I', + 'ij' => 'IJ', + 'ĵ' => 'Ä´', + 'Ä·' => 'Ķ', + 'ĺ' => 'Ĺ', + 'ļ' => 'Ä»', + 'ľ' => 'Ľ', + 'Å€' => 'Ä¿', + 'Å‚' => 'Å', + 'Å„' => 'Ń', + 'ņ' => 'Å…', + 'ň' => 'Ň', + 'Å‹' => 'ÅŠ', + 'Å' => 'ÅŒ', + 'Å' => 'ÅŽ', + 'Å‘' => 'Å', + 'Å“' => 'Å’', + 'Å•' => 'Å”', + 'Å—' => 'Å–', + 'Å™' => 'Ř', + 'Å›' => 'Åš', + 'Å' => 'Åœ', + 'ÅŸ' => 'Åž', + 'Å¡' => 'Å ', + 'Å£' => 'Å¢', + 'Å¥' => 'Ť', + 'ŧ' => 'Ŧ', + 'Å©' => 'Ũ', + 'Å«' => 'Ū', + 'Å­' => 'Ŭ', + 'ů' => 'Å®', + 'ű' => 'Å°', + 'ų' => 'Ų', + 'ŵ' => 'Å´', + 'Å·' => 'Ŷ', + 'ź' => 'Ź', + 'ż' => 'Å»', + 'ž' => 'Ž', + 'Å¿' => 'S', + 'Æ€' => 'Ƀ', + 'ƃ' => 'Æ‚', + 'Æ…' => 'Æ„', + 'ƈ' => 'Ƈ', + 'ÆŒ' => 'Æ‹', + 'Æ’' => 'Æ‘', + 'Æ•' => 'Ƕ', + 'Æ™' => 'Ƙ', + 'Æš' => 'Ƚ', + 'Æž' => 'È ', + 'Æ¡' => 'Æ ', + 'Æ£' => 'Æ¢', + 'Æ¥' => 'Ƥ', + 'ƨ' => 'Ƨ', + 'Æ­' => 'Ƭ', + 'Æ°' => 'Ư', + 'Æ´' => 'Ƴ', + 'ƶ' => 'Ƶ', + 'ƹ' => 'Ƹ', + 'ƽ' => 'Ƽ', + 'Æ¿' => 'Ç·', + 'Ç…' => 'Ç„', + 'dž' => 'Ç„', + 'Lj' => 'LJ', + 'lj' => 'LJ', + 'Ç‹' => 'ÇŠ', + 'ÇŒ' => 'ÇŠ', + 'ÇŽ' => 'Ç', + 'Ç' => 'Ç', + 'Ç’' => 'Ç‘', + 'Ç”' => 'Ç“', + 'Ç–' => 'Ç•', + 'ǘ' => 'Ç—', + 'Çš' => 'Ç™', + 'Çœ' => 'Ç›', + 'Ç' => 'ÆŽ', + 'ÇŸ' => 'Çž', + 'Ç¡' => 'Ç ', + 'Ç£' => 'Ç¢', + 'Ç¥' => 'Ǥ', + 'ǧ' => 'Ǧ', + 'Ç©' => 'Ǩ', + 'Ç«' => 'Ǫ', + 'Ç­' => 'Ǭ', + 'ǯ' => 'Ç®', + 'Dz' => 'DZ', + 'dz' => 'DZ', + 'ǵ' => 'Ç´', + 'ǹ' => 'Ǹ', + 'Ç»' => 'Ǻ', + 'ǽ' => 'Ǽ', + 'Ç¿' => 'Ǿ', + 'È' => 'È€', + 'ȃ' => 'È‚', + 'È…' => 'È„', + 'ȇ' => 'Ȇ', + 'ȉ' => 'Ȉ', + 'È‹' => 'ÈŠ', + 'È' => 'ÈŒ', + 'È' => 'ÈŽ', + 'È‘' => 'È', + 'È“' => 'È’', + 'È•' => 'È”', + 'È—' => 'È–', + 'È™' => 'Ș', + 'È›' => 'Èš', + 'È' => 'Èœ', + 'ÈŸ' => 'Èž', + 'È£' => 'È¢', + 'È¥' => 'Ȥ', + 'ȧ' => 'Ȧ', + 'È©' => 'Ȩ', + 'È«' => 'Ȫ', + 'È­' => 'Ȭ', + 'ȯ' => 'È®', + 'ȱ' => 'È°', + 'ȳ' => 'Ȳ', + 'ȼ' => 'È»', + 'È¿' => 'â±¾', + 'É€' => 'Ɀ', + 'É‚' => 'É', + 'ɇ' => 'Ɇ', + 'ɉ' => 'Ɉ', + 'É‹' => 'ÉŠ', + 'É' => 'ÉŒ', + 'É' => 'ÉŽ', + 'É' => 'Ɐ', + 'É‘' => 'â±­', + 'É’' => 'â±°', + 'É“' => 'Æ', + 'É”' => 'Ɔ', + 'É–' => 'Ɖ', + 'É—' => 'ÆŠ', + 'É™' => 'Æ', + 'É›' => 'Æ', + 'Éœ' => 'êž«', + 'É ' => 'Æ“', + 'É¡' => 'Ɡ', + 'É£' => 'Æ”', + 'É¥' => 'êž', + 'ɦ' => 'Ɦ', + 'ɨ' => 'Æ—', + 'É©' => 'Æ–', + 'É«' => 'â±¢', + 'ɬ' => 'êž­', + 'ɯ' => 'Æœ', + 'ɱ' => 'â±®', + 'ɲ' => 'Æ', + 'ɵ' => 'ÆŸ', + 'ɽ' => 'Ɽ', + 'Ê€' => 'Ʀ', + 'ʃ' => 'Æ©', + 'ʇ' => 'êž±', + 'ʈ' => 'Æ®', + 'ʉ' => 'É„', + 'ÊŠ' => 'Ʊ', + 'Ê‹' => 'Ʋ', + 'ÊŒ' => 'É…', + 'Ê’' => 'Æ·', + 'Êž' => 'êž°', + 'Í…' => 'Ι', + 'ͱ' => 'Í°', + 'ͳ' => 'Ͳ', + 'Í·' => 'Ͷ', + 'Í»' => 'Ͻ', + 'ͼ' => 'Ͼ', + 'ͽ' => 'Ï¿', + 'ά' => 'Ά', + 'έ' => 'Έ', + 'ή' => 'Ή', + 'ί' => 'Ί', + 'α' => 'Α', + 'β' => 'Î’', + 'γ' => 'Γ', + 'δ' => 'Δ', + 'ε' => 'Ε', + 'ζ' => 'Ζ', + 'η' => 'Η', + 'θ' => 'Θ', + 'ι' => 'Ι', + 'κ' => 'Κ', + 'λ' => 'Λ', + 'μ' => 'Îœ', + 'ν' => 'Î', + 'ξ' => 'Ξ', + 'ο' => 'Ο', + 'Ï€' => 'Π', + 'Ï' => 'Ρ', + 'Ï‚' => 'Σ', + 'σ' => 'Σ', + 'Ï„' => 'Τ', + 'Ï…' => 'Î¥', + 'φ' => 'Φ', + 'χ' => 'Χ', + 'ψ' => 'Ψ', + 'ω' => 'Ω', + 'ÏŠ' => 'Ϊ', + 'Ï‹' => 'Ϋ', + 'ÏŒ' => 'ÎŒ', + 'Ï' => 'ÎŽ', + 'ÏŽ' => 'Î', + 'Ï' => 'Î’', + 'Ï‘' => 'Θ', + 'Ï•' => 'Φ', + 'Ï–' => 'Π', + 'Ï—' => 'Ï', + 'Ï™' => 'Ϙ', + 'Ï›' => 'Ïš', + 'Ï' => 'Ïœ', + 'ÏŸ' => 'Ïž', + 'Ï¡' => 'Ï ', + 'Ï£' => 'Ï¢', + 'Ï¥' => 'Ϥ', + 'ϧ' => 'Ϧ', + 'Ï©' => 'Ϩ', + 'Ï«' => 'Ϫ', + 'Ï­' => 'Ϭ', + 'ϯ' => 'Ï®', + 'Ï°' => 'Κ', + 'ϱ' => 'Ρ', + 'ϲ' => 'Ϲ', + 'ϳ' => 'Í¿', + 'ϵ' => 'Ε', + 'ϸ' => 'Ï·', + 'Ï»' => 'Ϻ', + 'а' => 'Ð', + 'б' => 'Б', + 'в' => 'Ð’', + 'г' => 'Г', + 'д' => 'Д', + 'е' => 'Е', + 'ж' => 'Ж', + 'з' => 'З', + 'и' => 'И', + 'й' => 'Й', + 'к' => 'К', + 'л' => 'Л', + 'м' => 'Ðœ', + 'н' => 'Ð', + 'о' => 'О', + 'п' => 'П', + 'Ñ€' => 'Р', + 'Ñ' => 'С', + 'Ñ‚' => 'Т', + 'у' => 'У', + 'Ñ„' => 'Ф', + 'Ñ…' => 'Ð¥', + 'ц' => 'Ц', + 'ч' => 'Ч', + 'ш' => 'Ш', + 'щ' => 'Щ', + 'ÑŠ' => 'Ъ', + 'Ñ‹' => 'Ы', + 'ÑŒ' => 'Ь', + 'Ñ' => 'Э', + 'ÑŽ' => 'Ю', + 'Ñ' => 'Я', + 'Ñ' => 'Ѐ', + 'Ñ‘' => 'Ð', + 'Ñ’' => 'Ђ', + 'Ñ“' => 'Ѓ', + 'Ñ”' => 'Є', + 'Ñ•' => 'Ð…', + 'Ñ–' => 'І', + 'Ñ—' => 'Ї', + 'ј' => 'Ј', + 'Ñ™' => 'Љ', + 'Ñš' => 'Њ', + 'Ñ›' => 'Ћ', + 'Ñœ' => 'ÐŒ', + 'Ñ' => 'Ð', + 'Ñž' => 'ÐŽ', + 'ÑŸ' => 'Ð', + 'Ñ¡' => 'Ñ ', + 'Ñ£' => 'Ñ¢', + 'Ñ¥' => 'Ѥ', + 'ѧ' => 'Ѧ', + 'Ñ©' => 'Ѩ', + 'Ñ«' => 'Ѫ', + 'Ñ­' => 'Ѭ', + 'ѯ' => 'Ñ®', + 'ѱ' => 'Ñ°', + 'ѳ' => 'Ѳ', + 'ѵ' => 'Ñ´', + 'Ñ·' => 'Ѷ', + 'ѹ' => 'Ѹ', + 'Ñ»' => 'Ѻ', + 'ѽ' => 'Ѽ', + 'Ñ¿' => 'Ѿ', + 'Ò' => 'Ò€', + 'Ò‹' => 'ÒŠ', + 'Ò' => 'ÒŒ', + 'Ò' => 'ÒŽ', + 'Ò‘' => 'Ò', + 'Ò“' => 'Ò’', + 'Ò•' => 'Ò”', + 'Ò—' => 'Ò–', + 'Ò™' => 'Ò˜', + 'Ò›' => 'Òš', + 'Ò' => 'Òœ', + 'ÒŸ' => 'Òž', + 'Ò¡' => 'Ò ', + 'Ò£' => 'Ò¢', + 'Ò¥' => 'Ò¤', + 'Ò§' => 'Ò¦', + 'Ò©' => 'Ò¨', + 'Ò«' => 'Òª', + 'Ò­' => 'Ò¬', + 'Ò¯' => 'Ò®', + 'Ò±' => 'Ò°', + 'Ò³' => 'Ò²', + 'Òµ' => 'Ò´', + 'Ò·' => 'Ò¶', + 'Ò¹' => 'Ò¸', + 'Ò»' => 'Òº', + 'Ò½' => 'Ò¼', + 'Ò¿' => 'Ò¾', + 'Ó‚' => 'Ó', + 'Ó„' => 'Óƒ', + 'Ó†' => 'Ó…', + 'Óˆ' => 'Ó‡', + 'ÓŠ' => 'Ó‰', + 'ÓŒ' => 'Ó‹', + 'ÓŽ' => 'Ó', + 'Ó' => 'Ó€', + 'Ó‘' => 'Ó', + 'Ó“' => 'Ó’', + 'Ó•' => 'Ó”', + 'Ó—' => 'Ó–', + 'Ó™' => 'Ó˜', + 'Ó›' => 'Óš', + 'Ó' => 'Óœ', + 'ÓŸ' => 'Óž', + 'Ó¡' => 'Ó ', + 'Ó£' => 'Ó¢', + 'Ó¥' => 'Ó¤', + 'Ó§' => 'Ó¦', + 'Ó©' => 'Ó¨', + 'Ó«' => 'Óª', + 'Ó­' => 'Ó¬', + 'Ó¯' => 'Ó®', + 'Ó±' => 'Ó°', + 'Ó³' => 'Ó²', + 'Óµ' => 'Ó´', + 'Ó·' => 'Ó¶', + 'Ó¹' => 'Ó¸', + 'Ó»' => 'Óº', + 'Ó½' => 'Ó¼', + 'Ó¿' => 'Ó¾', + 'Ô' => 'Ô€', + 'Ôƒ' => 'Ô‚', + 'Ô…' => 'Ô„', + 'Ô‡' => 'Ô†', + 'Ô‰' => 'Ôˆ', + 'Ô‹' => 'ÔŠ', + 'Ô' => 'ÔŒ', + 'Ô' => 'ÔŽ', + 'Ô‘' => 'Ô', + 'Ô“' => 'Ô’', + 'Ô•' => 'Ô”', + 'Ô—' => 'Ô–', + 'Ô™' => 'Ô˜', + 'Ô›' => 'Ôš', + 'Ô' => 'Ôœ', + 'ÔŸ' => 'Ôž', + 'Ô¡' => 'Ô ', + 'Ô£' => 'Ô¢', + 'Ô¥' => 'Ô¤', + 'Ô§' => 'Ô¦', + 'Ô©' => 'Ô¨', + 'Ô«' => 'Ôª', + 'Ô­' => 'Ô¬', + 'Ô¯' => 'Ô®', + 'Õ¡' => 'Ô±', + 'Õ¢' => 'Ô²', + 'Õ£' => 'Ô³', + 'Õ¤' => 'Ô´', + 'Õ¥' => 'Ôµ', + 'Õ¦' => 'Ô¶', + 'Õ§' => 'Ô·', + 'Õ¨' => 'Ô¸', + 'Õ©' => 'Ô¹', + 'Õª' => 'Ôº', + 'Õ«' => 'Ô»', + 'Õ¬' => 'Ô¼', + 'Õ­' => 'Ô½', + 'Õ®' => 'Ô¾', + 'Õ¯' => 'Ô¿', + 'Õ°' => 'Õ€', + 'Õ±' => 'Õ', + 'Õ²' => 'Õ‚', + 'Õ³' => 'Õƒ', + 'Õ´' => 'Õ„', + 'Õµ' => 'Õ…', + 'Õ¶' => 'Õ†', + 'Õ·' => 'Õ‡', + 'Õ¸' => 'Õˆ', + 'Õ¹' => 'Õ‰', + 'Õº' => 'ÕŠ', + 'Õ»' => 'Õ‹', + 'Õ¼' => 'ÕŒ', + 'Õ½' => 'Õ', + 'Õ¾' => 'ÕŽ', + 'Õ¿' => 'Õ', + 'Ö€' => 'Õ', + 'Ö' => 'Õ‘', + 'Ö‚' => 'Õ’', + 'Öƒ' => 'Õ“', + 'Ö„' => 'Õ”', + 'Ö…' => 'Õ•', + 'Ö†' => 'Õ–', + 'áµ¹' => 'ê½', + 'áµ½' => 'â±£', + 'á¸' => 'Ḁ', + 'ḃ' => 'Ḃ', + 'ḅ' => 'Ḅ', + 'ḇ' => 'Ḇ', + 'ḉ' => 'Ḉ', + 'ḋ' => 'Ḋ', + 'á¸' => 'Ḍ', + 'á¸' => 'Ḏ', + 'ḑ' => 'á¸', + 'ḓ' => 'Ḓ', + 'ḕ' => 'Ḕ', + 'ḗ' => 'Ḗ', + 'ḙ' => 'Ḙ', + 'ḛ' => 'Ḛ', + 'á¸' => 'Ḝ', + 'ḟ' => 'Ḟ', + 'ḡ' => 'Ḡ', + 'ḣ' => 'Ḣ', + 'ḥ' => 'Ḥ', + 'ḧ' => 'Ḧ', + 'ḩ' => 'Ḩ', + 'ḫ' => 'Ḫ', + 'ḭ' => 'Ḭ', + 'ḯ' => 'Ḯ', + 'ḱ' => 'Ḱ', + 'ḳ' => 'Ḳ', + 'ḵ' => 'Ḵ', + 'ḷ' => 'Ḷ', + 'ḹ' => 'Ḹ', + 'ḻ' => 'Ḻ', + 'ḽ' => 'Ḽ', + 'ḿ' => 'Ḿ', + 'á¹' => 'á¹€', + 'ṃ' => 'Ṃ', + 'á¹…' => 'Ṅ', + 'ṇ' => 'Ṇ', + 'ṉ' => 'Ṉ', + 'ṋ' => 'Ṋ', + 'á¹' => 'Ṍ', + 'á¹' => 'Ṏ', + 'ṑ' => 'á¹', + 'ṓ' => 'á¹’', + 'ṕ' => 'á¹”', + 'á¹—' => 'á¹–', + 'á¹™' => 'Ṙ', + 'á¹›' => 'Ṛ', + 'á¹' => 'Ṝ', + 'ṟ' => 'Ṟ', + 'ṡ' => 'á¹ ', + 'á¹£' => 'á¹¢', + 'á¹¥' => 'Ṥ', + 'ṧ' => 'Ṧ', + 'ṩ' => 'Ṩ', + 'ṫ' => 'Ṫ', + 'á¹­' => 'Ṭ', + 'ṯ' => 'á¹®', + 'á¹±' => 'á¹°', + 'á¹³' => 'á¹²', + 'á¹µ' => 'á¹´', + 'á¹·' => 'Ṷ', + 'á¹¹' => 'Ṹ', + 'á¹»' => 'Ṻ', + 'á¹½' => 'á¹¼', + 'ṿ' => 'á¹¾', + 'áº' => 'Ẁ', + 'ẃ' => 'Ẃ', + 'ẅ' => 'Ẅ', + 'ẇ' => 'Ẇ', + 'ẉ' => 'Ẉ', + 'ẋ' => 'Ẋ', + 'áº' => 'Ẍ', + 'áº' => 'Ẏ', + 'ẑ' => 'áº', + 'ẓ' => 'Ẓ', + 'ẕ' => 'Ẕ', + 'ẛ' => 'á¹ ', + 'ạ' => 'Ạ', + 'ả' => 'Ả', + 'ấ' => 'Ấ', + 'ầ' => 'Ầ', + 'ẩ' => 'Ẩ', + 'ẫ' => 'Ẫ', + 'ậ' => 'Ậ', + 'ắ' => 'Ắ', + 'ằ' => 'Ằ', + 'ẳ' => 'Ẳ', + 'ẵ' => 'Ẵ', + 'ặ' => 'Ặ', + 'ẹ' => 'Ẹ', + 'ẻ' => 'Ẻ', + 'ẽ' => 'Ẽ', + 'ế' => 'Ế', + 'á»' => 'Ề', + 'ể' => 'Ể', + 'á»…' => 'Ễ', + 'ệ' => 'Ệ', + 'ỉ' => 'Ỉ', + 'ị' => 'Ị', + 'á»' => 'Ọ', + 'á»' => 'Ỏ', + 'ố' => 'á»', + 'ồ' => 'á»’', + 'ổ' => 'á»”', + 'á»—' => 'á»–', + 'á»™' => 'Ộ', + 'á»›' => 'Ớ', + 'á»' => 'Ờ', + 'ở' => 'Ở', + 'ỡ' => 'á» ', + 'ợ' => 'Ợ', + 'ụ' => 'Ụ', + 'ủ' => 'Ủ', + 'ứ' => 'Ứ', + 'ừ' => 'Ừ', + 'á»­' => 'Ử', + 'ữ' => 'á»®', + 'á»±' => 'á»°', + 'ỳ' => 'Ỳ', + 'ỵ' => 'á»´', + 'á»·' => 'Ỷ', + 'ỹ' => 'Ỹ', + 'á»»' => 'Ỻ', + 'ỽ' => 'Ỽ', + 'ỿ' => 'Ỿ', + 'á¼€' => 'Ἀ', + 'á¼' => 'Ἁ', + 'ἂ' => 'Ἂ', + 'ἃ' => 'Ἃ', + 'ἄ' => 'Ἄ', + 'á¼…' => 'á¼', + 'ἆ' => 'Ἆ', + 'ἇ' => 'á¼', + 'á¼' => 'Ἐ', + 'ἑ' => 'á¼™', + 'á¼’' => 'Ἒ', + 'ἓ' => 'á¼›', + 'á¼”' => 'Ἔ', + 'ἕ' => 'á¼', + 'á¼ ' => 'Ἠ', + 'ἡ' => 'Ἡ', + 'á¼¢' => 'Ἢ', + 'á¼£' => 'Ἣ', + 'ἤ' => 'Ἤ', + 'á¼¥' => 'á¼­', + 'ἦ' => 'á¼®', + 'ἧ' => 'Ἧ', + 'á¼°' => 'Ἰ', + 'á¼±' => 'á¼¹', + 'á¼²' => 'Ἲ', + 'á¼³' => 'á¼»', + 'á¼´' => 'á¼¼', + 'á¼µ' => 'á¼½', + 'ἶ' => 'á¼¾', + 'á¼·' => 'Ἷ', + 'á½€' => 'Ὀ', + 'á½' => 'Ὁ', + 'ὂ' => 'Ὂ', + 'ὃ' => 'Ὃ', + 'ὄ' => 'Ὄ', + 'á½…' => 'á½', + 'ὑ' => 'á½™', + 'ὓ' => 'á½›', + 'ὕ' => 'á½', + 'á½—' => 'Ὗ', + 'á½ ' => 'Ὠ', + 'ὡ' => 'Ὡ', + 'á½¢' => 'Ὢ', + 'á½£' => 'Ὣ', + 'ὤ' => 'Ὤ', + 'á½¥' => 'á½­', + 'ὦ' => 'á½®', + 'ὧ' => 'Ὧ', + 'á½°' => 'Ὰ', + 'á½±' => 'á¾»', + 'á½²' => 'Ὲ', + 'á½³' => 'Έ', + 'á½´' => 'á¿Š', + 'á½µ' => 'á¿‹', + 'ὶ' => 'á¿š', + 'á½·' => 'á¿›', + 'ὸ' => 'Ὸ', + 'á½¹' => 'Ό', + 'ὺ' => 'Ὺ', + 'á½»' => 'á¿«', + 'á½¼' => 'Ὼ', + 'á½½' => 'á¿»', + 'á¾€' => 'ᾈ', + 'á¾' => 'ᾉ', + 'ᾂ' => 'ᾊ', + 'ᾃ' => 'ᾋ', + 'ᾄ' => 'ᾌ', + 'á¾…' => 'á¾', + 'ᾆ' => 'ᾎ', + 'ᾇ' => 'á¾', + 'á¾' => 'ᾘ', + 'ᾑ' => 'á¾™', + 'á¾’' => 'ᾚ', + 'ᾓ' => 'á¾›', + 'á¾”' => 'ᾜ', + 'ᾕ' => 'á¾', + 'á¾–' => 'ᾞ', + 'á¾—' => 'ᾟ', + 'á¾ ' => 'ᾨ', + 'ᾡ' => 'ᾩ', + 'á¾¢' => 'ᾪ', + 'á¾£' => 'ᾫ', + 'ᾤ' => 'ᾬ', + 'á¾¥' => 'á¾­', + 'ᾦ' => 'á¾®', + 'ᾧ' => 'ᾯ', + 'á¾°' => 'Ᾰ', + 'á¾±' => 'á¾¹', + 'á¾³' => 'á¾¼', + 'á¾¾' => 'Ι', + 'ῃ' => 'á¿Œ', + 'á¿' => 'Ῐ', + 'á¿‘' => 'á¿™', + 'á¿ ' => 'Ῠ', + 'á¿¡' => 'á¿©', + 'á¿¥' => 'Ῥ', + 'ῳ' => 'ῼ', + 'â…Ž' => 'Ⅎ', + 'â…°' => 'â… ', + 'â…±' => 'â…¡', + 'â…²' => 'â…¢', + 'â…³' => 'â…£', + 'â…´' => 'â…¤', + 'â…µ' => 'â…¥', + 'â…¶' => 'â…¦', + 'â…·' => 'â…§', + 'â…¸' => 'â…¨', + 'â…¹' => 'â…©', + 'â…º' => 'â…ª', + 'â…»' => 'â…«', + 'â…¼' => 'â…¬', + 'â…½' => 'â…­', + 'â…¾' => 'â…®', + 'â…¿' => 'â…¯', + 'ↄ' => 'Ↄ', + 'â“' => 'â’¶', + 'â“‘' => 'â’·', + 'â“’' => 'â’¸', + 'â““' => 'â’¹', + 'â“”' => 'â’º', + 'â“•' => 'â’»', + 'â“–' => 'â’¼', + 'â“—' => 'â’½', + 'ⓘ' => 'â’¾', + 'â“™' => 'â’¿', + 'â“š' => 'â“€', + 'â“›' => 'â“', + 'â“œ' => 'â“‚', + 'â“' => 'Ⓝ', + 'â“ž' => 'â“„', + 'â“Ÿ' => 'â“…', + 'â“ ' => 'Ⓠ', + 'â“¡' => 'Ⓡ', + 'â“¢' => 'Ⓢ', + 'â“£' => 'Ⓣ', + 'ⓤ' => 'â“Š', + 'â“¥' => 'â“‹', + 'ⓦ' => 'â“Œ', + 'ⓧ' => 'â“', + 'ⓨ' => 'â“Ž', + 'â“©' => 'â“', + 'â°°' => 'â°€', + 'â°±' => 'â°', + 'â°²' => 'â°‚', + 'â°³' => 'â°ƒ', + 'â°´' => 'â°„', + 'â°µ' => 'â°…', + 'â°¶' => 'â°†', + 'â°·' => 'â°‡', + 'â°¸' => 'â°ˆ', + 'â°¹' => 'â°‰', + 'â°º' => 'â°Š', + 'â°»' => 'â°‹', + 'â°¼' => 'â°Œ', + 'â°½' => 'â°', + 'â°¾' => 'â°Ž', + 'â°¿' => 'â°', + 'â±€' => 'â°', + 'â±' => 'â°‘', + 'ⱂ' => 'â°’', + 'ⱃ' => 'â°“', + 'ⱄ' => 'â°”', + 'â±…' => 'â°•', + 'ⱆ' => 'â°–', + 'ⱇ' => 'â°—', + 'ⱈ' => 'â°˜', + 'ⱉ' => 'â°™', + 'ⱊ' => 'â°š', + 'ⱋ' => 'â°›', + 'ⱌ' => 'â°œ', + 'â±' => 'â°', + 'ⱎ' => 'â°ž', + 'â±' => 'â°Ÿ', + 'â±' => 'â° ', + 'ⱑ' => 'â°¡', + 'â±’' => 'â°¢', + 'ⱓ' => 'â°£', + 'â±”' => 'â°¤', + 'ⱕ' => 'â°¥', + 'â±–' => 'â°¦', + 'â±—' => 'â°§', + 'ⱘ' => 'â°¨', + 'â±™' => 'â°©', + 'ⱚ' => 'â°ª', + 'â±›' => 'â°«', + 'ⱜ' => 'â°¬', + 'â±' => 'â°­', + 'ⱞ' => 'â°®', + 'ⱡ' => 'â± ', + 'â±¥' => 'Ⱥ', + 'ⱦ' => 'Ⱦ', + 'ⱨ' => 'Ⱨ', + 'ⱪ' => 'Ⱪ', + 'ⱬ' => 'Ⱬ', + 'â±³' => 'â±²', + 'ⱶ' => 'â±µ', + 'â²' => 'â²€', + 'ⲃ' => 'Ⲃ', + 'â²…' => 'Ⲅ', + 'ⲇ' => 'Ⲇ', + 'ⲉ' => 'Ⲉ', + 'ⲋ' => 'Ⲋ', + 'â²' => 'Ⲍ', + 'â²' => 'Ⲏ', + 'ⲑ' => 'â²', + 'ⲓ' => 'â²’', + 'ⲕ' => 'â²”', + 'â²—' => 'â²–', + 'â²™' => 'Ⲙ', + 'â²›' => 'Ⲛ', + 'â²' => 'Ⲝ', + 'ⲟ' => 'Ⲟ', + 'ⲡ' => 'â² ', + 'â²£' => 'â²¢', + 'â²¥' => 'Ⲥ', + 'ⲧ' => 'Ⲧ', + 'ⲩ' => 'Ⲩ', + 'ⲫ' => 'Ⲫ', + 'â²­' => 'Ⲭ', + 'ⲯ' => 'â²®', + 'â²±' => 'â²°', + 'â²³' => 'â²²', + 'â²µ' => 'â²´', + 'â²·' => 'Ⲷ', + 'â²¹' => 'Ⲹ', + 'â²»' => 'Ⲻ', + 'â²½' => 'â²¼', + 'ⲿ' => 'â²¾', + 'â³' => 'â³€', + 'ⳃ' => 'Ⳃ', + 'â³…' => 'Ⳅ', + 'ⳇ' => 'Ⳇ', + 'ⳉ' => 'Ⳉ', + 'ⳋ' => 'Ⳋ', + 'â³' => 'Ⳍ', + 'â³' => 'Ⳏ', + 'ⳑ' => 'â³', + 'ⳓ' => 'â³’', + 'ⳕ' => 'â³”', + 'â³—' => 'â³–', + 'â³™' => 'Ⳙ', + 'â³›' => 'Ⳛ', + 'â³' => 'Ⳝ', + 'ⳟ' => 'Ⳟ', + 'ⳡ' => 'â³ ', + 'â³£' => 'â³¢', + 'ⳬ' => 'Ⳬ', + 'â³®' => 'â³­', + 'â³³' => 'â³²', + 'â´€' => 'á‚ ', + 'â´' => 'á‚¡', + 'â´‚' => 'á‚¢', + 'â´ƒ' => 'á‚£', + 'â´„' => 'Ⴄ', + 'â´…' => 'á‚¥', + 'â´†' => 'Ⴆ', + 'â´‡' => 'Ⴇ', + 'â´ˆ' => 'Ⴈ', + 'â´‰' => 'á‚©', + 'â´Š' => 'Ⴊ', + 'â´‹' => 'á‚«', + 'â´Œ' => 'Ⴌ', + 'â´' => 'á‚­', + 'â´Ž' => 'á‚®', + 'â´' => 'Ⴏ', + 'â´' => 'á‚°', + 'â´‘' => 'Ⴑ', + 'â´’' => 'Ⴒ', + 'â´“' => 'Ⴓ', + 'â´”' => 'á‚´', + 'â´•' => 'Ⴕ', + 'â´–' => 'Ⴖ', + 'â´—' => 'á‚·', + 'â´˜' => 'Ⴘ', + 'â´™' => 'Ⴙ', + 'â´š' => 'Ⴚ', + 'â´›' => 'á‚»', + 'â´œ' => 'Ⴜ', + 'â´' => 'Ⴝ', + 'â´ž' => 'Ⴞ', + 'â´Ÿ' => 'á‚¿', + 'â´ ' => 'Ⴠ', + 'â´¡' => 'áƒ', + 'â´¢' => 'Ⴢ', + 'â´£' => 'Ⴣ', + 'â´¤' => 'Ⴤ', + 'â´¥' => 'Ⴥ', + 'â´§' => 'Ⴧ', + 'â´­' => 'áƒ', + 'ê™' => 'Ꙁ', + 'ꙃ' => 'Ꙃ', + 'ê™…' => 'Ꙅ', + 'ꙇ' => 'Ꙇ', + 'ꙉ' => 'Ꙉ', + 'ꙋ' => 'Ꙋ', + 'ê™' => 'Ꙍ', + 'ê™' => 'Ꙏ', + 'ꙑ' => 'ê™', + 'ꙓ' => 'ê™’', + 'ꙕ' => 'ê™”', + 'ê™—' => 'ê™–', + 'ê™™' => 'Ꙙ', + 'ê™›' => 'Ꙛ', + 'ê™' => 'Ꙝ', + 'ꙟ' => 'Ꙟ', + 'ꙡ' => 'ê™ ', + 'ꙣ' => 'Ꙣ', + 'ꙥ' => 'Ꙥ', + 'ꙧ' => 'Ꙧ', + 'ꙩ' => 'Ꙩ', + 'ꙫ' => 'Ꙫ', + 'ê™­' => 'Ꙭ', + 'êš' => 'Ꚁ', + 'ꚃ' => 'êš‚', + 'êš…' => 'êš„', + 'ꚇ' => 'Ꚇ', + 'ꚉ' => 'Ꚉ', + 'êš‹' => 'Ꚋ', + 'êš' => 'Ꚍ', + 'êš' => 'Ꚏ', + 'êš‘' => 'êš', + 'êš“' => 'êš’', + 'êš•' => 'êš”', + 'êš—' => 'êš–', + 'êš™' => 'Ꚙ', + 'êš›' => 'êšš', + 'ꜣ' => 'Ꜣ', + 'ꜥ' => 'Ꜥ', + 'ꜧ' => 'Ꜧ', + 'ꜩ' => 'Ꜩ', + 'ꜫ' => 'Ꜫ', + 'ꜭ' => 'Ꜭ', + 'ꜯ' => 'Ꜯ', + 'ꜳ' => 'Ꜳ', + 'ꜵ' => 'Ꜵ', + 'ꜷ' => 'Ꜷ', + 'ꜹ' => 'Ꜹ', + 'ꜻ' => 'Ꜻ', + 'ꜽ' => 'Ꜽ', + 'ꜿ' => 'Ꜿ', + 'ê' => 'ê€', + 'êƒ' => 'ê‚', + 'ê…' => 'ê„', + 'ê‡' => 'ê†', + 'ê‰' => 'êˆ', + 'ê‹' => 'êŠ', + 'ê' => 'êŒ', + 'ê' => 'êŽ', + 'ê‘' => 'ê', + 'ê“' => 'ê’', + 'ê•' => 'ê”', + 'ê—' => 'ê–', + 'ê™' => 'ê˜', + 'ê›' => 'êš', + 'ê' => 'êœ', + 'êŸ' => 'êž', + 'ê¡' => 'ê ', + 'ê£' => 'ê¢', + 'ê¥' => 'ê¤', + 'ê§' => 'ê¦', + 'ê©' => 'ê¨', + 'ê«' => 'êª', + 'ê­' => 'ê¬', + 'ê¯' => 'ê®', + 'êº' => 'ê¹', + 'ê¼' => 'ê»', + 'ê¿' => 'ê¾', + 'êž' => 'Ꞁ', + 'ꞃ' => 'êž‚', + 'êž…' => 'êž„', + 'ꞇ' => 'Ꞇ', + 'ꞌ' => 'êž‹', + 'êž‘' => 'êž', + 'êž“' => 'êž’', + 'êž—' => 'êž–', + 'êž™' => 'Ꞙ', + 'êž›' => 'êžš', + 'êž' => 'êžœ', + 'ꞟ' => 'êžž', + 'êž¡' => 'êž ', + 'ꞣ' => 'Ꞣ', + 'ꞥ' => 'Ꞥ', + 'ꞧ' => 'Ꞧ', + 'êž©' => 'Ꞩ', + 'ï½' => 'A', + 'b' => 'ï¼¢', + 'c' => 'ï¼£', + 'd' => 'D', + 'ï½…' => 'ï¼¥', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'ï½' => 'ï¼­', + 'n' => 'ï¼®', + 'ï½' => 'O', + 'ï½' => 'ï¼°', + 'q' => 'ï¼±', + 'ï½’' => 'ï¼²', + 's' => 'ï¼³', + 'ï½”' => 'ï¼´', + 'u' => 'ï¼µ', + 'ï½–' => 'V', + 'ï½—' => 'ï¼·', + 'x' => 'X', + 'ï½™' => 'ï¼¹', + 'z' => 'Z', + 'ð¨' => 'ð€', + 'ð©' => 'ð', + 'ðª' => 'ð‚', + 'ð«' => 'ðƒ', + 'ð¬' => 'ð„', + 'ð­' => 'ð…', + 'ð®' => 'ð†', + 'ð¯' => 'ð‡', + 'ð°' => 'ðˆ', + 'ð±' => 'ð‰', + 'ð²' => 'ðŠ', + 'ð³' => 'ð‹', + 'ð´' => 'ðŒ', + 'ðµ' => 'ð', + 'ð¶' => 'ðŽ', + 'ð·' => 'ð', + 'ð¸' => 'ð', + 'ð¹' => 'ð‘', + 'ðº' => 'ð’', + 'ð»' => 'ð“', + 'ð¼' => 'ð”', + 'ð½' => 'ð•', + 'ð¾' => 'ð–', + 'ð¿' => 'ð—', + 'ð‘€' => 'ð˜', + 'ð‘' => 'ð™', + 'ð‘‚' => 'ðš', + 'ð‘ƒ' => 'ð›', + 'ð‘„' => 'ðœ', + 'ð‘…' => 'ð', + 'ð‘†' => 'ðž', + 'ð‘‡' => 'ðŸ', + 'ð‘ˆ' => 'ð ', + 'ð‘‰' => 'ð¡', + 'ð‘Š' => 'ð¢', + 'ð‘‹' => 'ð£', + 'ð‘Œ' => 'ð¤', + 'ð‘' => 'ð¥', + 'ð‘Ž' => 'ð¦', + 'ð‘' => 'ð§', + 'ð‘£€' => 'ð‘¢ ', + 'ð‘£' => '𑢡', + '𑣂' => 'ð‘¢¢', + '𑣃' => 'ð‘¢£', + '𑣄' => '𑢤', + 'ð‘£…' => 'ð‘¢¥', + '𑣆' => '𑢦', + '𑣇' => '𑢧', + '𑣈' => '𑢨', + '𑣉' => '𑢩', + '𑣊' => '𑢪', + '𑣋' => '𑢫', + '𑣌' => '𑢬', + 'ð‘£' => 'ð‘¢­', + '𑣎' => 'ð‘¢®', + 'ð‘£' => '𑢯', + 'ð‘£' => 'ð‘¢°', + '𑣑' => 'ð‘¢±', + 'ð‘£’' => 'ð‘¢²', + '𑣓' => 'ð‘¢³', + 'ð‘£”' => 'ð‘¢´', + '𑣕' => 'ð‘¢µ', + 'ð‘£–' => '𑢶', + 'ð‘£—' => 'ð‘¢·', + '𑣘' => '𑢸', + 'ð‘£™' => 'ð‘¢¹', + '𑣚' => '𑢺', + 'ð‘£›' => 'ð‘¢»', + '𑣜' => 'ð‘¢¼', + 'ð‘£' => 'ð‘¢½', + '𑣞' => 'ð‘¢¾', + '𑣟' => '𑢿', +); + +$result =& $data; +unset($data); + +return $result; diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.ser b/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.ser deleted file mode 100644 index e9e0ec2d..00000000 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.ser +++ /dev/null @@ -1 +0,0 @@ -a:1100:{s:1:"a";s:1:"A";s:1:"b";s:1:"B";s:1:"c";s:1:"C";s:1:"d";s:1:"D";s:1:"e";s:1:"E";s:1:"f";s:1:"F";s:1:"g";s:1:"G";s:1:"h";s:1:"H";s:1:"i";s:1:"I";s:1:"j";s:1:"J";s:1:"k";s:1:"K";s:1:"l";s:1:"L";s:1:"m";s:1:"M";s:1:"n";s:1:"N";s:1:"o";s:1:"O";s:1:"p";s:1:"P";s:1:"q";s:1:"Q";s:1:"r";s:1:"R";s:1:"s";s:1:"S";s:1:"t";s:1:"T";s:1:"u";s:1:"U";s:1:"v";s:1:"V";s:1:"w";s:1:"W";s:1:"x";s:1:"X";s:1:"y";s:1:"Y";s:1:"z";s:1:"Z";s:2:"µ";s:2:"Îœ";s:2:"à";s:2:"À";s:2:"á";s:2:"Ã";s:2:"â";s:2:"Â";s:2:"ã";s:2:"Ã";s:2:"ä";s:2:"Ä";s:2:"Ã¥";s:2:"Ã…";s:2:"æ";s:2:"Æ";s:2:"ç";s:2:"Ç";s:2:"è";s:2:"È";s:2:"é";s:2:"É";s:2:"ê";s:2:"Ê";s:2:"ë";s:2:"Ë";s:2:"ì";s:2:"ÃŒ";s:2:"í";s:2:"Ã";s:2:"î";s:2:"ÃŽ";s:2:"ï";s:2:"Ã";s:2:"ð";s:2:"Ã";s:2:"ñ";s:2:"Ñ";s:2:"ò";s:2:"Ã’";s:2:"ó";s:2:"Ó";s:2:"ô";s:2:"Ô";s:2:"õ";s:2:"Õ";s:2:"ö";s:2:"Ö";s:2:"ø";s:2:"Ø";s:2:"ù";s:2:"Ù";s:2:"ú";s:2:"Ú";s:2:"û";s:2:"Û";s:2:"ü";s:2:"Ãœ";s:2:"ý";s:2:"Ã";s:2:"þ";s:2:"Þ";s:2:"ÿ";s:2:"Ÿ";s:2:"Ä";s:2:"Ä€";s:2:"ă";s:2:"Ä‚";s:2:"Ä…";s:2:"Ä„";s:2:"ć";s:2:"Ć";s:2:"ĉ";s:2:"Ĉ";s:2:"Ä‹";s:2:"ÄŠ";s:2:"Ä";s:2:"ÄŒ";s:2:"Ä";s:2:"ÄŽ";s:2:"Ä‘";s:2:"Ä";s:2:"Ä“";s:2:"Ä’";s:2:"Ä•";s:2:"Ä”";s:2:"Ä—";s:2:"Ä–";s:2:"Ä™";s:2:"Ę";s:2:"Ä›";s:2:"Äš";s:2:"Ä";s:2:"Äœ";s:2:"ÄŸ";s:2:"Äž";s:2:"Ä¡";s:2:"Ä ";s:2:"Ä£";s:2:"Ä¢";s:2:"Ä¥";s:2:"Ĥ";s:2:"ħ";s:2:"Ħ";s:2:"Ä©";s:2:"Ĩ";s:2:"Ä«";s:2:"Ī";s:2:"Ä­";s:2:"Ĭ";s:2:"į";s:2:"Ä®";s:2:"ı";s:1:"I";s:2:"ij";s:2:"IJ";s:2:"ĵ";s:2:"Ä´";s:2:"Ä·";s:2:"Ķ";s:2:"ĺ";s:2:"Ĺ";s:2:"ļ";s:2:"Ä»";s:2:"ľ";s:2:"Ľ";s:2:"Å€";s:2:"Ä¿";s:2:"Å‚";s:2:"Å";s:2:"Å„";s:2:"Ń";s:2:"ņ";s:2:"Å…";s:2:"ň";s:2:"Ň";s:2:"Å‹";s:2:"ÅŠ";s:2:"Å";s:2:"ÅŒ";s:2:"Å";s:2:"ÅŽ";s:2:"Å‘";s:2:"Å";s:2:"Å“";s:2:"Å’";s:2:"Å•";s:2:"Å”";s:2:"Å—";s:2:"Å–";s:2:"Å™";s:2:"Ř";s:2:"Å›";s:2:"Åš";s:2:"Å";s:2:"Åœ";s:2:"ÅŸ";s:2:"Åž";s:2:"Å¡";s:2:"Å ";s:2:"Å£";s:2:"Å¢";s:2:"Å¥";s:2:"Ť";s:2:"ŧ";s:2:"Ŧ";s:2:"Å©";s:2:"Ũ";s:2:"Å«";s:2:"Ū";s:2:"Å­";s:2:"Ŭ";s:2:"ů";s:2:"Å®";s:2:"ű";s:2:"Å°";s:2:"ų";s:2:"Ų";s:2:"ŵ";s:2:"Å´";s:2:"Å·";s:2:"Ŷ";s:2:"ź";s:2:"Ź";s:2:"ż";s:2:"Å»";s:2:"ž";s:2:"Ž";s:2:"Å¿";s:1:"S";s:2:"Æ€";s:2:"Ƀ";s:2:"ƃ";s:2:"Æ‚";s:2:"Æ…";s:2:"Æ„";s:2:"ƈ";s:2:"Ƈ";s:2:"ÆŒ";s:2:"Æ‹";s:2:"Æ’";s:2:"Æ‘";s:2:"Æ•";s:2:"Ƕ";s:2:"Æ™";s:2:"Ƙ";s:2:"Æš";s:2:"Ƚ";s:2:"Æž";s:2:"È ";s:2:"Æ¡";s:2:"Æ ";s:2:"Æ£";s:2:"Æ¢";s:2:"Æ¥";s:2:"Ƥ";s:2:"ƨ";s:2:"Ƨ";s:2:"Æ­";s:2:"Ƭ";s:2:"Æ°";s:2:"Ư";s:2:"Æ´";s:2:"Ƴ";s:2:"ƶ";s:2:"Ƶ";s:2:"ƹ";s:2:"Ƹ";s:2:"ƽ";s:2:"Ƽ";s:2:"Æ¿";s:2:"Ç·";s:2:"Ç…";s:2:"Ç„";s:2:"dž";s:2:"Ç„";s:2:"Lj";s:2:"LJ";s:2:"lj";s:2:"LJ";s:2:"Ç‹";s:2:"ÇŠ";s:2:"ÇŒ";s:2:"ÇŠ";s:2:"ÇŽ";s:2:"Ç";s:2:"Ç";s:2:"Ç";s:2:"Ç’";s:2:"Ç‘";s:2:"Ç”";s:2:"Ç“";s:2:"Ç–";s:2:"Ç•";s:2:"ǘ";s:2:"Ç—";s:2:"Çš";s:2:"Ç™";s:2:"Çœ";s:2:"Ç›";s:2:"Ç";s:2:"ÆŽ";s:2:"ÇŸ";s:2:"Çž";s:2:"Ç¡";s:2:"Ç ";s:2:"Ç£";s:2:"Ç¢";s:2:"Ç¥";s:2:"Ǥ";s:2:"ǧ";s:2:"Ǧ";s:2:"Ç©";s:2:"Ǩ";s:2:"Ç«";s:2:"Ǫ";s:2:"Ç­";s:2:"Ǭ";s:2:"ǯ";s:2:"Ç®";s:2:"Dz";s:2:"DZ";s:2:"dz";s:2:"DZ";s:2:"ǵ";s:2:"Ç´";s:2:"ǹ";s:2:"Ǹ";s:2:"Ç»";s:2:"Ǻ";s:2:"ǽ";s:2:"Ǽ";s:2:"Ç¿";s:2:"Ǿ";s:2:"È";s:2:"È€";s:2:"ȃ";s:2:"È‚";s:2:"È…";s:2:"È„";s:2:"ȇ";s:2:"Ȇ";s:2:"ȉ";s:2:"Ȉ";s:2:"È‹";s:2:"ÈŠ";s:2:"È";s:2:"ÈŒ";s:2:"È";s:2:"ÈŽ";s:2:"È‘";s:2:"È";s:2:"È“";s:2:"È’";s:2:"È•";s:2:"È”";s:2:"È—";s:2:"È–";s:2:"È™";s:2:"Ș";s:2:"È›";s:2:"Èš";s:2:"È";s:2:"Èœ";s:2:"ÈŸ";s:2:"Èž";s:2:"È£";s:2:"È¢";s:2:"È¥";s:2:"Ȥ";s:2:"ȧ";s:2:"Ȧ";s:2:"È©";s:2:"Ȩ";s:2:"È«";s:2:"Ȫ";s:2:"È­";s:2:"Ȭ";s:2:"ȯ";s:2:"È®";s:2:"ȱ";s:2:"È°";s:2:"ȳ";s:2:"Ȳ";s:2:"ȼ";s:2:"È»";s:2:"È¿";s:3:"â±¾";s:2:"É€";s:3:"Ɀ";s:2:"É‚";s:2:"É";s:2:"ɇ";s:2:"Ɇ";s:2:"ɉ";s:2:"Ɉ";s:2:"É‹";s:2:"ÉŠ";s:2:"É";s:2:"ÉŒ";s:2:"É";s:2:"ÉŽ";s:2:"É";s:3:"Ɐ";s:2:"É‘";s:3:"â±­";s:2:"É’";s:3:"â±°";s:2:"É“";s:2:"Æ";s:2:"É”";s:2:"Ɔ";s:2:"É–";s:2:"Ɖ";s:2:"É—";s:2:"ÆŠ";s:2:"É™";s:2:"Æ";s:2:"É›";s:2:"Æ";s:2:"Éœ";s:3:"êž«";s:2:"É ";s:2:"Æ“";s:2:"É¡";s:3:"Ɡ";s:2:"É£";s:2:"Æ”";s:2:"É¥";s:3:"êž";s:2:"ɦ";s:3:"Ɦ";s:2:"ɨ";s:2:"Æ—";s:2:"É©";s:2:"Æ–";s:2:"É«";s:3:"â±¢";s:2:"ɬ";s:3:"êž­";s:2:"ɯ";s:2:"Æœ";s:2:"ɱ";s:3:"â±®";s:2:"ɲ";s:2:"Æ";s:2:"ɵ";s:2:"ÆŸ";s:2:"ɽ";s:3:"Ɽ";s:2:"Ê€";s:2:"Ʀ";s:2:"ʃ";s:2:"Æ©";s:2:"ʇ";s:3:"êž±";s:2:"ʈ";s:2:"Æ®";s:2:"ʉ";s:2:"É„";s:2:"ÊŠ";s:2:"Ʊ";s:2:"Ê‹";s:2:"Ʋ";s:2:"ÊŒ";s:2:"É…";s:2:"Ê’";s:2:"Æ·";s:2:"Êž";s:3:"êž°";s:2:"Í…";s:2:"Ι";s:2:"ͱ";s:2:"Í°";s:2:"ͳ";s:2:"Ͳ";s:2:"Í·";s:2:"Ͷ";s:2:"Í»";s:2:"Ͻ";s:2:"ͼ";s:2:"Ͼ";s:2:"ͽ";s:2:"Ï¿";s:2:"ά";s:2:"Ά";s:2:"έ";s:2:"Έ";s:2:"ή";s:2:"Ή";s:2:"ί";s:2:"Ί";s:2:"α";s:2:"Α";s:2:"β";s:2:"Î’";s:2:"γ";s:2:"Γ";s:2:"δ";s:2:"Δ";s:2:"ε";s:2:"Ε";s:2:"ζ";s:2:"Ζ";s:2:"η";s:2:"Η";s:2:"θ";s:2:"Θ";s:2:"ι";s:2:"Ι";s:2:"κ";s:2:"Κ";s:2:"λ";s:2:"Λ";s:2:"μ";s:2:"Îœ";s:2:"ν";s:2:"Î";s:2:"ξ";s:2:"Ξ";s:2:"ο";s:2:"Ο";s:2:"Ï€";s:2:"Π";s:2:"Ï";s:2:"Ρ";s:2:"Ï‚";s:2:"Σ";s:2:"σ";s:2:"Σ";s:2:"Ï„";s:2:"Τ";s:2:"Ï…";s:2:"Î¥";s:2:"φ";s:2:"Φ";s:2:"χ";s:2:"Χ";s:2:"ψ";s:2:"Ψ";s:2:"ω";s:2:"Ω";s:2:"ÏŠ";s:2:"Ϊ";s:2:"Ï‹";s:2:"Ϋ";s:2:"ÏŒ";s:2:"ÎŒ";s:2:"Ï";s:2:"ÎŽ";s:2:"ÏŽ";s:2:"Î";s:2:"Ï";s:2:"Î’";s:2:"Ï‘";s:2:"Θ";s:2:"Ï•";s:2:"Φ";s:2:"Ï–";s:2:"Π";s:2:"Ï—";s:2:"Ï";s:2:"Ï™";s:2:"Ϙ";s:2:"Ï›";s:2:"Ïš";s:2:"Ï";s:2:"Ïœ";s:2:"ÏŸ";s:2:"Ïž";s:2:"Ï¡";s:2:"Ï ";s:2:"Ï£";s:2:"Ï¢";s:2:"Ï¥";s:2:"Ϥ";s:2:"ϧ";s:2:"Ϧ";s:2:"Ï©";s:2:"Ϩ";s:2:"Ï«";s:2:"Ϫ";s:2:"Ï­";s:2:"Ϭ";s:2:"ϯ";s:2:"Ï®";s:2:"Ï°";s:2:"Κ";s:2:"ϱ";s:2:"Ρ";s:2:"ϲ";s:2:"Ϲ";s:2:"ϳ";s:2:"Í¿";s:2:"ϵ";s:2:"Ε";s:2:"ϸ";s:2:"Ï·";s:2:"Ï»";s:2:"Ϻ";s:2:"а";s:2:"Ð";s:2:"б";s:2:"Б";s:2:"в";s:2:"Ð’";s:2:"г";s:2:"Г";s:2:"д";s:2:"Д";s:2:"е";s:2:"Е";s:2:"ж";s:2:"Ж";s:2:"з";s:2:"З";s:2:"и";s:2:"И";s:2:"й";s:2:"Й";s:2:"к";s:2:"К";s:2:"л";s:2:"Л";s:2:"м";s:2:"Ðœ";s:2:"н";s:2:"Ð";s:2:"о";s:2:"О";s:2:"п";s:2:"П";s:2:"Ñ€";s:2:"Р";s:2:"Ñ";s:2:"С";s:2:"Ñ‚";s:2:"Т";s:2:"у";s:2:"У";s:2:"Ñ„";s:2:"Ф";s:2:"Ñ…";s:2:"Ð¥";s:2:"ц";s:2:"Ц";s:2:"ч";s:2:"Ч";s:2:"ш";s:2:"Ш";s:2:"щ";s:2:"Щ";s:2:"ÑŠ";s:2:"Ъ";s:2:"Ñ‹";s:2:"Ы";s:2:"ÑŒ";s:2:"Ь";s:2:"Ñ";s:2:"Э";s:2:"ÑŽ";s:2:"Ю";s:2:"Ñ";s:2:"Я";s:2:"Ñ";s:2:"Ѐ";s:2:"Ñ‘";s:2:"Ð";s:2:"Ñ’";s:2:"Ђ";s:2:"Ñ“";s:2:"Ѓ";s:2:"Ñ”";s:2:"Є";s:2:"Ñ•";s:2:"Ð…";s:2:"Ñ–";s:2:"І";s:2:"Ñ—";s:2:"Ї";s:2:"ј";s:2:"Ј";s:2:"Ñ™";s:2:"Љ";s:2:"Ñš";s:2:"Њ";s:2:"Ñ›";s:2:"Ћ";s:2:"Ñœ";s:2:"ÐŒ";s:2:"Ñ";s:2:"Ð";s:2:"Ñž";s:2:"ÐŽ";s:2:"ÑŸ";s:2:"Ð";s:2:"Ñ¡";s:2:"Ñ ";s:2:"Ñ£";s:2:"Ñ¢";s:2:"Ñ¥";s:2:"Ѥ";s:2:"ѧ";s:2:"Ѧ";s:2:"Ñ©";s:2:"Ѩ";s:2:"Ñ«";s:2:"Ѫ";s:2:"Ñ­";s:2:"Ѭ";s:2:"ѯ";s:2:"Ñ®";s:2:"ѱ";s:2:"Ñ°";s:2:"ѳ";s:2:"Ѳ";s:2:"ѵ";s:2:"Ñ´";s:2:"Ñ·";s:2:"Ѷ";s:2:"ѹ";s:2:"Ѹ";s:2:"Ñ»";s:2:"Ѻ";s:2:"ѽ";s:2:"Ѽ";s:2:"Ñ¿";s:2:"Ѿ";s:2:"Ò";s:2:"Ò€";s:2:"Ò‹";s:2:"ÒŠ";s:2:"Ò";s:2:"ÒŒ";s:2:"Ò";s:2:"ÒŽ";s:2:"Ò‘";s:2:"Ò";s:2:"Ò“";s:2:"Ò’";s:2:"Ò•";s:2:"Ò”";s:2:"Ò—";s:2:"Ò–";s:2:"Ò™";s:2:"Ò˜";s:2:"Ò›";s:2:"Òš";s:2:"Ò";s:2:"Òœ";s:2:"ÒŸ";s:2:"Òž";s:2:"Ò¡";s:2:"Ò ";s:2:"Ò£";s:2:"Ò¢";s:2:"Ò¥";s:2:"Ò¤";s:2:"Ò§";s:2:"Ò¦";s:2:"Ò©";s:2:"Ò¨";s:2:"Ò«";s:2:"Òª";s:2:"Ò­";s:2:"Ò¬";s:2:"Ò¯";s:2:"Ò®";s:2:"Ò±";s:2:"Ò°";s:2:"Ò³";s:2:"Ò²";s:2:"Òµ";s:2:"Ò´";s:2:"Ò·";s:2:"Ò¶";s:2:"Ò¹";s:2:"Ò¸";s:2:"Ò»";s:2:"Òº";s:2:"Ò½";s:2:"Ò¼";s:2:"Ò¿";s:2:"Ò¾";s:2:"Ó‚";s:2:"Ó";s:2:"Ó„";s:2:"Óƒ";s:2:"Ó†";s:2:"Ó…";s:2:"Óˆ";s:2:"Ó‡";s:2:"ÓŠ";s:2:"Ó‰";s:2:"ÓŒ";s:2:"Ó‹";s:2:"ÓŽ";s:2:"Ó";s:2:"Ó";s:2:"Ó€";s:2:"Ó‘";s:2:"Ó";s:2:"Ó“";s:2:"Ó’";s:2:"Ó•";s:2:"Ó”";s:2:"Ó—";s:2:"Ó–";s:2:"Ó™";s:2:"Ó˜";s:2:"Ó›";s:2:"Óš";s:2:"Ó";s:2:"Óœ";s:2:"ÓŸ";s:2:"Óž";s:2:"Ó¡";s:2:"Ó ";s:2:"Ó£";s:2:"Ó¢";s:2:"Ó¥";s:2:"Ó¤";s:2:"Ó§";s:2:"Ó¦";s:2:"Ó©";s:2:"Ó¨";s:2:"Ó«";s:2:"Óª";s:2:"Ó­";s:2:"Ó¬";s:2:"Ó¯";s:2:"Ó®";s:2:"Ó±";s:2:"Ó°";s:2:"Ó³";s:2:"Ó²";s:2:"Óµ";s:2:"Ó´";s:2:"Ó·";s:2:"Ó¶";s:2:"Ó¹";s:2:"Ó¸";s:2:"Ó»";s:2:"Óº";s:2:"Ó½";s:2:"Ó¼";s:2:"Ó¿";s:2:"Ó¾";s:2:"Ô";s:2:"Ô€";s:2:"Ôƒ";s:2:"Ô‚";s:2:"Ô…";s:2:"Ô„";s:2:"Ô‡";s:2:"Ô†";s:2:"Ô‰";s:2:"Ôˆ";s:2:"Ô‹";s:2:"ÔŠ";s:2:"Ô";s:2:"ÔŒ";s:2:"Ô";s:2:"ÔŽ";s:2:"Ô‘";s:2:"Ô";s:2:"Ô“";s:2:"Ô’";s:2:"Ô•";s:2:"Ô”";s:2:"Ô—";s:2:"Ô–";s:2:"Ô™";s:2:"Ô˜";s:2:"Ô›";s:2:"Ôš";s:2:"Ô";s:2:"Ôœ";s:2:"ÔŸ";s:2:"Ôž";s:2:"Ô¡";s:2:"Ô ";s:2:"Ô£";s:2:"Ô¢";s:2:"Ô¥";s:2:"Ô¤";s:2:"Ô§";s:2:"Ô¦";s:2:"Ô©";s:2:"Ô¨";s:2:"Ô«";s:2:"Ôª";s:2:"Ô­";s:2:"Ô¬";s:2:"Ô¯";s:2:"Ô®";s:2:"Õ¡";s:2:"Ô±";s:2:"Õ¢";s:2:"Ô²";s:2:"Õ£";s:2:"Ô³";s:2:"Õ¤";s:2:"Ô´";s:2:"Õ¥";s:2:"Ôµ";s:2:"Õ¦";s:2:"Ô¶";s:2:"Õ§";s:2:"Ô·";s:2:"Õ¨";s:2:"Ô¸";s:2:"Õ©";s:2:"Ô¹";s:2:"Õª";s:2:"Ôº";s:2:"Õ«";s:2:"Ô»";s:2:"Õ¬";s:2:"Ô¼";s:2:"Õ­";s:2:"Ô½";s:2:"Õ®";s:2:"Ô¾";s:2:"Õ¯";s:2:"Ô¿";s:2:"Õ°";s:2:"Õ€";s:2:"Õ±";s:2:"Õ";s:2:"Õ²";s:2:"Õ‚";s:2:"Õ³";s:2:"Õƒ";s:2:"Õ´";s:2:"Õ„";s:2:"Õµ";s:2:"Õ…";s:2:"Õ¶";s:2:"Õ†";s:2:"Õ·";s:2:"Õ‡";s:2:"Õ¸";s:2:"Õˆ";s:2:"Õ¹";s:2:"Õ‰";s:2:"Õº";s:2:"ÕŠ";s:2:"Õ»";s:2:"Õ‹";s:2:"Õ¼";s:2:"ÕŒ";s:2:"Õ½";s:2:"Õ";s:2:"Õ¾";s:2:"ÕŽ";s:2:"Õ¿";s:2:"Õ";s:2:"Ö€";s:2:"Õ";s:2:"Ö";s:2:"Õ‘";s:2:"Ö‚";s:2:"Õ’";s:2:"Öƒ";s:2:"Õ“";s:2:"Ö„";s:2:"Õ”";s:2:"Ö…";s:2:"Õ•";s:2:"Ö†";s:2:"Õ–";s:3:"áµ¹";s:3:"ê½";s:3:"áµ½";s:3:"â±£";s:3:"á¸";s:3:"Ḁ";s:3:"ḃ";s:3:"Ḃ";s:3:"ḅ";s:3:"Ḅ";s:3:"ḇ";s:3:"Ḇ";s:3:"ḉ";s:3:"Ḉ";s:3:"ḋ";s:3:"Ḋ";s:3:"á¸";s:3:"Ḍ";s:3:"á¸";s:3:"Ḏ";s:3:"ḑ";s:3:"á¸";s:3:"ḓ";s:3:"Ḓ";s:3:"ḕ";s:3:"Ḕ";s:3:"ḗ";s:3:"Ḗ";s:3:"ḙ";s:3:"Ḙ";s:3:"ḛ";s:3:"Ḛ";s:3:"á¸";s:3:"Ḝ";s:3:"ḟ";s:3:"Ḟ";s:3:"ḡ";s:3:"Ḡ";s:3:"ḣ";s:3:"Ḣ";s:3:"ḥ";s:3:"Ḥ";s:3:"ḧ";s:3:"Ḧ";s:3:"ḩ";s:3:"Ḩ";s:3:"ḫ";s:3:"Ḫ";s:3:"ḭ";s:3:"Ḭ";s:3:"ḯ";s:3:"Ḯ";s:3:"ḱ";s:3:"Ḱ";s:3:"ḳ";s:3:"Ḳ";s:3:"ḵ";s:3:"Ḵ";s:3:"ḷ";s:3:"Ḷ";s:3:"ḹ";s:3:"Ḹ";s:3:"ḻ";s:3:"Ḻ";s:3:"ḽ";s:3:"Ḽ";s:3:"ḿ";s:3:"Ḿ";s:3:"á¹";s:3:"á¹€";s:3:"ṃ";s:3:"Ṃ";s:3:"á¹…";s:3:"Ṅ";s:3:"ṇ";s:3:"Ṇ";s:3:"ṉ";s:3:"Ṉ";s:3:"ṋ";s:3:"Ṋ";s:3:"á¹";s:3:"Ṍ";s:3:"á¹";s:3:"Ṏ";s:3:"ṑ";s:3:"á¹";s:3:"ṓ";s:3:"á¹’";s:3:"ṕ";s:3:"á¹”";s:3:"á¹—";s:3:"á¹–";s:3:"á¹™";s:3:"Ṙ";s:3:"á¹›";s:3:"Ṛ";s:3:"á¹";s:3:"Ṝ";s:3:"ṟ";s:3:"Ṟ";s:3:"ṡ";s:3:"á¹ ";s:3:"á¹£";s:3:"á¹¢";s:3:"á¹¥";s:3:"Ṥ";s:3:"ṧ";s:3:"Ṧ";s:3:"ṩ";s:3:"Ṩ";s:3:"ṫ";s:3:"Ṫ";s:3:"á¹­";s:3:"Ṭ";s:3:"ṯ";s:3:"á¹®";s:3:"á¹±";s:3:"á¹°";s:3:"á¹³";s:3:"á¹²";s:3:"á¹µ";s:3:"á¹´";s:3:"á¹·";s:3:"Ṷ";s:3:"á¹¹";s:3:"Ṹ";s:3:"á¹»";s:3:"Ṻ";s:3:"á¹½";s:3:"á¹¼";s:3:"ṿ";s:3:"á¹¾";s:3:"áº";s:3:"Ẁ";s:3:"ẃ";s:3:"Ẃ";s:3:"ẅ";s:3:"Ẅ";s:3:"ẇ";s:3:"Ẇ";s:3:"ẉ";s:3:"Ẉ";s:3:"ẋ";s:3:"Ẋ";s:3:"áº";s:3:"Ẍ";s:3:"áº";s:3:"Ẏ";s:3:"ẑ";s:3:"áº";s:3:"ẓ";s:3:"Ẓ";s:3:"ẕ";s:3:"Ẕ";s:3:"ẛ";s:3:"á¹ ";s:3:"ạ";s:3:"Ạ";s:3:"ả";s:3:"Ả";s:3:"ấ";s:3:"Ấ";s:3:"ầ";s:3:"Ầ";s:3:"ẩ";s:3:"Ẩ";s:3:"ẫ";s:3:"Ẫ";s:3:"ậ";s:3:"Ậ";s:3:"ắ";s:3:"Ắ";s:3:"ằ";s:3:"Ằ";s:3:"ẳ";s:3:"Ẳ";s:3:"ẵ";s:3:"Ẵ";s:3:"ặ";s:3:"Ặ";s:3:"ẹ";s:3:"Ẹ";s:3:"ẻ";s:3:"Ẻ";s:3:"ẽ";s:3:"Ẽ";s:3:"ế";s:3:"Ế";s:3:"á»";s:3:"Ề";s:3:"ể";s:3:"Ể";s:3:"á»…";s:3:"Ễ";s:3:"ệ";s:3:"Ệ";s:3:"ỉ";s:3:"Ỉ";s:3:"ị";s:3:"Ị";s:3:"á»";s:3:"Ọ";s:3:"á»";s:3:"Ỏ";s:3:"ố";s:3:"á»";s:3:"ồ";s:3:"á»’";s:3:"ổ";s:3:"á»”";s:3:"á»—";s:3:"á»–";s:3:"á»™";s:3:"Ộ";s:3:"á»›";s:3:"Ớ";s:3:"á»";s:3:"Ờ";s:3:"ở";s:3:"Ở";s:3:"ỡ";s:3:"á» ";s:3:"ợ";s:3:"Ợ";s:3:"ụ";s:3:"Ụ";s:3:"ủ";s:3:"Ủ";s:3:"ứ";s:3:"Ứ";s:3:"ừ";s:3:"Ừ";s:3:"á»­";s:3:"Ử";s:3:"ữ";s:3:"á»®";s:3:"á»±";s:3:"á»°";s:3:"ỳ";s:3:"Ỳ";s:3:"ỵ";s:3:"á»´";s:3:"á»·";s:3:"Ỷ";s:3:"ỹ";s:3:"Ỹ";s:3:"á»»";s:3:"Ỻ";s:3:"ỽ";s:3:"Ỽ";s:3:"ỿ";s:3:"Ỿ";s:3:"á¼€";s:3:"Ἀ";s:3:"á¼";s:3:"Ἁ";s:3:"ἂ";s:3:"Ἂ";s:3:"ἃ";s:3:"Ἃ";s:3:"ἄ";s:3:"Ἄ";s:3:"á¼…";s:3:"á¼";s:3:"ἆ";s:3:"Ἆ";s:3:"ἇ";s:3:"á¼";s:3:"á¼";s:3:"Ἐ";s:3:"ἑ";s:3:"á¼™";s:3:"á¼’";s:3:"Ἒ";s:3:"ἓ";s:3:"á¼›";s:3:"á¼”";s:3:"Ἔ";s:3:"ἕ";s:3:"á¼";s:3:"á¼ ";s:3:"Ἠ";s:3:"ἡ";s:3:"Ἡ";s:3:"á¼¢";s:3:"Ἢ";s:3:"á¼£";s:3:"Ἣ";s:3:"ἤ";s:3:"Ἤ";s:3:"á¼¥";s:3:"á¼­";s:3:"ἦ";s:3:"á¼®";s:3:"ἧ";s:3:"Ἧ";s:3:"á¼°";s:3:"Ἰ";s:3:"á¼±";s:3:"á¼¹";s:3:"á¼²";s:3:"Ἲ";s:3:"á¼³";s:3:"á¼»";s:3:"á¼´";s:3:"á¼¼";s:3:"á¼µ";s:3:"á¼½";s:3:"ἶ";s:3:"á¼¾";s:3:"á¼·";s:3:"Ἷ";s:3:"á½€";s:3:"Ὀ";s:3:"á½";s:3:"Ὁ";s:3:"ὂ";s:3:"Ὂ";s:3:"ὃ";s:3:"Ὃ";s:3:"ὄ";s:3:"Ὄ";s:3:"á½…";s:3:"á½";s:3:"ὑ";s:3:"á½™";s:3:"ὓ";s:3:"á½›";s:3:"ὕ";s:3:"á½";s:3:"á½—";s:3:"Ὗ";s:3:"á½ ";s:3:"Ὠ";s:3:"ὡ";s:3:"Ὡ";s:3:"á½¢";s:3:"Ὢ";s:3:"á½£";s:3:"Ὣ";s:3:"ὤ";s:3:"Ὤ";s:3:"á½¥";s:3:"á½­";s:3:"ὦ";s:3:"á½®";s:3:"ὧ";s:3:"Ὧ";s:3:"á½°";s:3:"Ὰ";s:3:"á½±";s:3:"á¾»";s:3:"á½²";s:3:"Ὲ";s:3:"á½³";s:3:"Έ";s:3:"á½´";s:3:"á¿Š";s:3:"á½µ";s:3:"á¿‹";s:3:"ὶ";s:3:"á¿š";s:3:"á½·";s:3:"á¿›";s:3:"ὸ";s:3:"Ὸ";s:3:"á½¹";s:3:"Ό";s:3:"ὺ";s:3:"Ὺ";s:3:"á½»";s:3:"á¿«";s:3:"á½¼";s:3:"Ὼ";s:3:"á½½";s:3:"á¿»";s:3:"á¾€";s:3:"ᾈ";s:3:"á¾";s:3:"ᾉ";s:3:"ᾂ";s:3:"ᾊ";s:3:"ᾃ";s:3:"ᾋ";s:3:"ᾄ";s:3:"ᾌ";s:3:"á¾…";s:3:"á¾";s:3:"ᾆ";s:3:"ᾎ";s:3:"ᾇ";s:3:"á¾";s:3:"á¾";s:3:"ᾘ";s:3:"ᾑ";s:3:"á¾™";s:3:"á¾’";s:3:"ᾚ";s:3:"ᾓ";s:3:"á¾›";s:3:"á¾”";s:3:"ᾜ";s:3:"ᾕ";s:3:"á¾";s:3:"á¾–";s:3:"ᾞ";s:3:"á¾—";s:3:"ᾟ";s:3:"á¾ ";s:3:"ᾨ";s:3:"ᾡ";s:3:"ᾩ";s:3:"á¾¢";s:3:"ᾪ";s:3:"á¾£";s:3:"ᾫ";s:3:"ᾤ";s:3:"ᾬ";s:3:"á¾¥";s:3:"á¾­";s:3:"ᾦ";s:3:"á¾®";s:3:"ᾧ";s:3:"ᾯ";s:3:"á¾°";s:3:"Ᾰ";s:3:"á¾±";s:3:"á¾¹";s:3:"á¾³";s:3:"á¾¼";s:3:"á¾¾";s:2:"Ι";s:3:"ῃ";s:3:"á¿Œ";s:3:"á¿";s:3:"Ῐ";s:3:"á¿‘";s:3:"á¿™";s:3:"á¿ ";s:3:"Ῠ";s:3:"á¿¡";s:3:"á¿©";s:3:"á¿¥";s:3:"Ῥ";s:3:"ῳ";s:3:"ῼ";s:3:"â…Ž";s:3:"Ⅎ";s:3:"â…°";s:3:"â… ";s:3:"â…±";s:3:"â…¡";s:3:"â…²";s:3:"â…¢";s:3:"â…³";s:3:"â…£";s:3:"â…´";s:3:"â…¤";s:3:"â…µ";s:3:"â…¥";s:3:"â…¶";s:3:"â…¦";s:3:"â…·";s:3:"â…§";s:3:"â…¸";s:3:"â…¨";s:3:"â…¹";s:3:"â…©";s:3:"â…º";s:3:"â…ª";s:3:"â…»";s:3:"â…«";s:3:"â…¼";s:3:"â…¬";s:3:"â…½";s:3:"â…­";s:3:"â…¾";s:3:"â…®";s:3:"â…¿";s:3:"â…¯";s:3:"ↄ";s:3:"Ↄ";s:3:"â“";s:3:"â’¶";s:3:"â“‘";s:3:"â’·";s:3:"â“’";s:3:"â’¸";s:3:"â““";s:3:"â’¹";s:3:"â“”";s:3:"â’º";s:3:"â“•";s:3:"â’»";s:3:"â“–";s:3:"â’¼";s:3:"â“—";s:3:"â’½";s:3:"ⓘ";s:3:"â’¾";s:3:"â“™";s:3:"â’¿";s:3:"â“š";s:3:"â“€";s:3:"â“›";s:3:"â“";s:3:"â“œ";s:3:"â“‚";s:3:"â“";s:3:"Ⓝ";s:3:"â“ž";s:3:"â“„";s:3:"â“Ÿ";s:3:"â“…";s:3:"â“ ";s:3:"Ⓠ";s:3:"â“¡";s:3:"Ⓡ";s:3:"â“¢";s:3:"Ⓢ";s:3:"â“£";s:3:"Ⓣ";s:3:"ⓤ";s:3:"â“Š";s:3:"â“¥";s:3:"â“‹";s:3:"ⓦ";s:3:"â“Œ";s:3:"ⓧ";s:3:"â“";s:3:"ⓨ";s:3:"â“Ž";s:3:"â“©";s:3:"â“";s:3:"â°°";s:3:"â°€";s:3:"â°±";s:3:"â°";s:3:"â°²";s:3:"â°‚";s:3:"â°³";s:3:"â°ƒ";s:3:"â°´";s:3:"â°„";s:3:"â°µ";s:3:"â°…";s:3:"â°¶";s:3:"â°†";s:3:"â°·";s:3:"â°‡";s:3:"â°¸";s:3:"â°ˆ";s:3:"â°¹";s:3:"â°‰";s:3:"â°º";s:3:"â°Š";s:3:"â°»";s:3:"â°‹";s:3:"â°¼";s:3:"â°Œ";s:3:"â°½";s:3:"â°";s:3:"â°¾";s:3:"â°Ž";s:3:"â°¿";s:3:"â°";s:3:"â±€";s:3:"â°";s:3:"â±";s:3:"â°‘";s:3:"ⱂ";s:3:"â°’";s:3:"ⱃ";s:3:"â°“";s:3:"ⱄ";s:3:"â°”";s:3:"â±…";s:3:"â°•";s:3:"ⱆ";s:3:"â°–";s:3:"ⱇ";s:3:"â°—";s:3:"ⱈ";s:3:"â°˜";s:3:"ⱉ";s:3:"â°™";s:3:"ⱊ";s:3:"â°š";s:3:"ⱋ";s:3:"â°›";s:3:"ⱌ";s:3:"â°œ";s:3:"â±";s:3:"â°";s:3:"ⱎ";s:3:"â°ž";s:3:"â±";s:3:"â°Ÿ";s:3:"â±";s:3:"â° ";s:3:"ⱑ";s:3:"â°¡";s:3:"â±’";s:3:"â°¢";s:3:"ⱓ";s:3:"â°£";s:3:"â±”";s:3:"â°¤";s:3:"ⱕ";s:3:"â°¥";s:3:"â±–";s:3:"â°¦";s:3:"â±—";s:3:"â°§";s:3:"ⱘ";s:3:"â°¨";s:3:"â±™";s:3:"â°©";s:3:"ⱚ";s:3:"â°ª";s:3:"â±›";s:3:"â°«";s:3:"ⱜ";s:3:"â°¬";s:3:"â±";s:3:"â°­";s:3:"ⱞ";s:3:"â°®";s:3:"ⱡ";s:3:"â± ";s:3:"â±¥";s:2:"Ⱥ";s:3:"ⱦ";s:2:"Ⱦ";s:3:"ⱨ";s:3:"Ⱨ";s:3:"ⱪ";s:3:"Ⱪ";s:3:"ⱬ";s:3:"Ⱬ";s:3:"â±³";s:3:"â±²";s:3:"ⱶ";s:3:"â±µ";s:3:"â²";s:3:"â²€";s:3:"ⲃ";s:3:"Ⲃ";s:3:"â²…";s:3:"Ⲅ";s:3:"ⲇ";s:3:"Ⲇ";s:3:"ⲉ";s:3:"Ⲉ";s:3:"ⲋ";s:3:"Ⲋ";s:3:"â²";s:3:"Ⲍ";s:3:"â²";s:3:"Ⲏ";s:3:"ⲑ";s:3:"â²";s:3:"ⲓ";s:3:"â²’";s:3:"ⲕ";s:3:"â²”";s:3:"â²—";s:3:"â²–";s:3:"â²™";s:3:"Ⲙ";s:3:"â²›";s:3:"Ⲛ";s:3:"â²";s:3:"Ⲝ";s:3:"ⲟ";s:3:"Ⲟ";s:3:"ⲡ";s:3:"â² ";s:3:"â²£";s:3:"â²¢";s:3:"â²¥";s:3:"Ⲥ";s:3:"ⲧ";s:3:"Ⲧ";s:3:"ⲩ";s:3:"Ⲩ";s:3:"ⲫ";s:3:"Ⲫ";s:3:"â²­";s:3:"Ⲭ";s:3:"ⲯ";s:3:"â²®";s:3:"â²±";s:3:"â²°";s:3:"â²³";s:3:"â²²";s:3:"â²µ";s:3:"â²´";s:3:"â²·";s:3:"Ⲷ";s:3:"â²¹";s:3:"Ⲹ";s:3:"â²»";s:3:"Ⲻ";s:3:"â²½";s:3:"â²¼";s:3:"ⲿ";s:3:"â²¾";s:3:"â³";s:3:"â³€";s:3:"ⳃ";s:3:"Ⳃ";s:3:"â³…";s:3:"Ⳅ";s:3:"ⳇ";s:3:"Ⳇ";s:3:"ⳉ";s:3:"Ⳉ";s:3:"ⳋ";s:3:"Ⳋ";s:3:"â³";s:3:"Ⳍ";s:3:"â³";s:3:"Ⳏ";s:3:"ⳑ";s:3:"â³";s:3:"ⳓ";s:3:"â³’";s:3:"ⳕ";s:3:"â³”";s:3:"â³—";s:3:"â³–";s:3:"â³™";s:3:"Ⳙ";s:3:"â³›";s:3:"Ⳛ";s:3:"â³";s:3:"Ⳝ";s:3:"ⳟ";s:3:"Ⳟ";s:3:"ⳡ";s:3:"â³ ";s:3:"â³£";s:3:"â³¢";s:3:"ⳬ";s:3:"Ⳬ";s:3:"â³®";s:3:"â³­";s:3:"â³³";s:3:"â³²";s:3:"â´€";s:3:"á‚ ";s:3:"â´";s:3:"á‚¡";s:3:"â´‚";s:3:"á‚¢";s:3:"â´ƒ";s:3:"á‚£";s:3:"â´„";s:3:"Ⴄ";s:3:"â´…";s:3:"á‚¥";s:3:"â´†";s:3:"Ⴆ";s:3:"â´‡";s:3:"Ⴇ";s:3:"â´ˆ";s:3:"Ⴈ";s:3:"â´‰";s:3:"á‚©";s:3:"â´Š";s:3:"Ⴊ";s:3:"â´‹";s:3:"á‚«";s:3:"â´Œ";s:3:"Ⴌ";s:3:"â´";s:3:"á‚­";s:3:"â´Ž";s:3:"á‚®";s:3:"â´";s:3:"Ⴏ";s:3:"â´";s:3:"á‚°";s:3:"â´‘";s:3:"Ⴑ";s:3:"â´’";s:3:"Ⴒ";s:3:"â´“";s:3:"Ⴓ";s:3:"â´”";s:3:"á‚´";s:3:"â´•";s:3:"Ⴕ";s:3:"â´–";s:3:"Ⴖ";s:3:"â´—";s:3:"á‚·";s:3:"â´˜";s:3:"Ⴘ";s:3:"â´™";s:3:"Ⴙ";s:3:"â´š";s:3:"Ⴚ";s:3:"â´›";s:3:"á‚»";s:3:"â´œ";s:3:"Ⴜ";s:3:"â´";s:3:"Ⴝ";s:3:"â´ž";s:3:"Ⴞ";s:3:"â´Ÿ";s:3:"á‚¿";s:3:"â´ ";s:3:"Ⴠ";s:3:"â´¡";s:3:"áƒ";s:3:"â´¢";s:3:"Ⴢ";s:3:"â´£";s:3:"Ⴣ";s:3:"â´¤";s:3:"Ⴤ";s:3:"â´¥";s:3:"Ⴥ";s:3:"â´§";s:3:"Ⴧ";s:3:"â´­";s:3:"áƒ";s:3:"ê™";s:3:"Ꙁ";s:3:"ꙃ";s:3:"Ꙃ";s:3:"ê™…";s:3:"Ꙅ";s:3:"ꙇ";s:3:"Ꙇ";s:3:"ꙉ";s:3:"Ꙉ";s:3:"ꙋ";s:3:"Ꙋ";s:3:"ê™";s:3:"Ꙍ";s:3:"ê™";s:3:"Ꙏ";s:3:"ꙑ";s:3:"ê™";s:3:"ꙓ";s:3:"ê™’";s:3:"ꙕ";s:3:"ê™”";s:3:"ê™—";s:3:"ê™–";s:3:"ê™™";s:3:"Ꙙ";s:3:"ê™›";s:3:"Ꙛ";s:3:"ê™";s:3:"Ꙝ";s:3:"ꙟ";s:3:"Ꙟ";s:3:"ꙡ";s:3:"ê™ ";s:3:"ꙣ";s:3:"Ꙣ";s:3:"ꙥ";s:3:"Ꙥ";s:3:"ꙧ";s:3:"Ꙧ";s:3:"ꙩ";s:3:"Ꙩ";s:3:"ꙫ";s:3:"Ꙫ";s:3:"ê™­";s:3:"Ꙭ";s:3:"êš";s:3:"Ꚁ";s:3:"ꚃ";s:3:"êš‚";s:3:"êš…";s:3:"êš„";s:3:"ꚇ";s:3:"Ꚇ";s:3:"ꚉ";s:3:"Ꚉ";s:3:"êš‹";s:3:"Ꚋ";s:3:"êš";s:3:"Ꚍ";s:3:"êš";s:3:"Ꚏ";s:3:"êš‘";s:3:"êš";s:3:"êš“";s:3:"êš’";s:3:"êš•";s:3:"êš”";s:3:"êš—";s:3:"êš–";s:3:"êš™";s:3:"Ꚙ";s:3:"êš›";s:3:"êšš";s:3:"ꜣ";s:3:"Ꜣ";s:3:"ꜥ";s:3:"Ꜥ";s:3:"ꜧ";s:3:"Ꜧ";s:3:"ꜩ";s:3:"Ꜩ";s:3:"ꜫ";s:3:"Ꜫ";s:3:"ꜭ";s:3:"Ꜭ";s:3:"ꜯ";s:3:"Ꜯ";s:3:"ꜳ";s:3:"Ꜳ";s:3:"ꜵ";s:3:"Ꜵ";s:3:"ꜷ";s:3:"Ꜷ";s:3:"ꜹ";s:3:"Ꜹ";s:3:"ꜻ";s:3:"Ꜻ";s:3:"ꜽ";s:3:"Ꜽ";s:3:"ꜿ";s:3:"Ꜿ";s:3:"ê";s:3:"ê€";s:3:"êƒ";s:3:"ê‚";s:3:"ê…";s:3:"ê„";s:3:"ê‡";s:3:"ê†";s:3:"ê‰";s:3:"êˆ";s:3:"ê‹";s:3:"êŠ";s:3:"ê";s:3:"êŒ";s:3:"ê";s:3:"êŽ";s:3:"ê‘";s:3:"ê";s:3:"ê“";s:3:"ê’";s:3:"ê•";s:3:"ê”";s:3:"ê—";s:3:"ê–";s:3:"ê™";s:3:"ê˜";s:3:"ê›";s:3:"êš";s:3:"ê";s:3:"êœ";s:3:"êŸ";s:3:"êž";s:3:"ê¡";s:3:"ê ";s:3:"ê£";s:3:"ê¢";s:3:"ê¥";s:3:"ê¤";s:3:"ê§";s:3:"ê¦";s:3:"ê©";s:3:"ê¨";s:3:"ê«";s:3:"êª";s:3:"ê­";s:3:"ê¬";s:3:"ê¯";s:3:"ê®";s:3:"êº";s:3:"ê¹";s:3:"ê¼";s:3:"ê»";s:3:"ê¿";s:3:"ê¾";s:3:"êž";s:3:"Ꞁ";s:3:"ꞃ";s:3:"êž‚";s:3:"êž…";s:3:"êž„";s:3:"ꞇ";s:3:"Ꞇ";s:3:"ꞌ";s:3:"êž‹";s:3:"êž‘";s:3:"êž";s:3:"êž“";s:3:"êž’";s:3:"êž—";s:3:"êž–";s:3:"êž™";s:3:"Ꞙ";s:3:"êž›";s:3:"êžš";s:3:"êž";s:3:"êžœ";s:3:"ꞟ";s:3:"êžž";s:3:"êž¡";s:3:"êž ";s:3:"ꞣ";s:3:"Ꞣ";s:3:"ꞥ";s:3:"Ꞥ";s:3:"ꞧ";s:3:"Ꞧ";s:3:"êž©";s:3:"Ꞩ";s:3:"ï½";s:3:"A";s:3:"b";s:3:"ï¼¢";s:3:"c";s:3:"ï¼£";s:3:"d";s:3:"D";s:3:"ï½…";s:3:"ï¼¥";s:3:"f";s:3:"F";s:3:"g";s:3:"G";s:3:"h";s:3:"H";s:3:"i";s:3:"I";s:3:"j";s:3:"J";s:3:"k";s:3:"K";s:3:"l";s:3:"L";s:3:"ï½";s:3:"ï¼­";s:3:"n";s:3:"ï¼®";s:3:"ï½";s:3:"O";s:3:"ï½";s:3:"ï¼°";s:3:"q";s:3:"ï¼±";s:3:"ï½’";s:3:"ï¼²";s:3:"s";s:3:"ï¼³";s:3:"ï½”";s:3:"ï¼´";s:3:"u";s:3:"ï¼µ";s:3:"ï½–";s:3:"V";s:3:"ï½—";s:3:"ï¼·";s:3:"x";s:3:"X";s:3:"ï½™";s:3:"ï¼¹";s:3:"z";s:3:"Z";s:4:"ð¨";s:4:"ð€";s:4:"ð©";s:4:"ð";s:4:"ðª";s:4:"ð‚";s:4:"ð«";s:4:"ðƒ";s:4:"ð¬";s:4:"ð„";s:4:"ð­";s:4:"ð…";s:4:"ð®";s:4:"ð†";s:4:"ð¯";s:4:"ð‡";s:4:"ð°";s:4:"ðˆ";s:4:"ð±";s:4:"ð‰";s:4:"ð²";s:4:"ðŠ";s:4:"ð³";s:4:"ð‹";s:4:"ð´";s:4:"ðŒ";s:4:"ðµ";s:4:"ð";s:4:"ð¶";s:4:"ðŽ";s:4:"ð·";s:4:"ð";s:4:"ð¸";s:4:"ð";s:4:"ð¹";s:4:"ð‘";s:4:"ðº";s:4:"ð’";s:4:"ð»";s:4:"ð“";s:4:"ð¼";s:4:"ð”";s:4:"ð½";s:4:"ð•";s:4:"ð¾";s:4:"ð–";s:4:"ð¿";s:4:"ð—";s:4:"ð‘€";s:4:"ð˜";s:4:"ð‘";s:4:"ð™";s:4:"ð‘‚";s:4:"ðš";s:4:"ð‘ƒ";s:4:"ð›";s:4:"ð‘„";s:4:"ðœ";s:4:"ð‘…";s:4:"ð";s:4:"ð‘†";s:4:"ðž";s:4:"ð‘‡";s:4:"ðŸ";s:4:"ð‘ˆ";s:4:"ð ";s:4:"ð‘‰";s:4:"ð¡";s:4:"ð‘Š";s:4:"ð¢";s:4:"ð‘‹";s:4:"ð£";s:4:"ð‘Œ";s:4:"ð¤";s:4:"ð‘";s:4:"ð¥";s:4:"ð‘Ž";s:4:"ð¦";s:4:"ð‘";s:4:"ð§";s:4:"ð‘£€";s:4:"ð‘¢ ";s:4:"ð‘£";s:4:"𑢡";s:4:"𑣂";s:4:"ð‘¢¢";s:4:"𑣃";s:4:"ð‘¢£";s:4:"𑣄";s:4:"𑢤";s:4:"ð‘£…";s:4:"ð‘¢¥";s:4:"𑣆";s:4:"𑢦";s:4:"𑣇";s:4:"𑢧";s:4:"𑣈";s:4:"𑢨";s:4:"𑣉";s:4:"𑢩";s:4:"𑣊";s:4:"𑢪";s:4:"𑣋";s:4:"𑢫";s:4:"𑣌";s:4:"𑢬";s:4:"ð‘£";s:4:"ð‘¢­";s:4:"𑣎";s:4:"ð‘¢®";s:4:"ð‘£";s:4:"𑢯";s:4:"ð‘£";s:4:"ð‘¢°";s:4:"𑣑";s:4:"ð‘¢±";s:4:"ð‘£’";s:4:"ð‘¢²";s:4:"𑣓";s:4:"ð‘¢³";s:4:"ð‘£”";s:4:"ð‘¢´";s:4:"𑣕";s:4:"ð‘¢µ";s:4:"ð‘£–";s:4:"𑢶";s:4:"ð‘£—";s:4:"ð‘¢·";s:4:"𑣘";s:4:"𑢸";s:4:"ð‘£™";s:4:"ð‘¢¹";s:4:"𑣚";s:4:"𑢺";s:4:"ð‘£›";s:4:"ð‘¢»";s:4:"𑣜";s:4:"ð‘¢¼";s:4:"ð‘£";s:4:"ð‘¢½";s:4:"𑣞";s:4:"ð‘¢¾";s:4:"𑣟";s:4:"𑢿";} \ No newline at end of file diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Dumper.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Dumper.php index 39cdcfc5..05817f5d 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Dumper.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Dumper.php @@ -28,10 +28,14 @@ class Dumper /** * Sets the indentation. * - * @param int $num The amount of spaces to use for indentation of nested nodes. + * @param int $num The amount of spaces to use for indentation of nested nodes */ public function setIndentation($num) { + if ($num < 1) { + throw new \InvalidArgumentException('The indentation must be greater than zero.'); + } + $this->indentation = (int) $num; } @@ -54,7 +58,7 @@ public function dump($input, $inline = 0, $indent = 0, $exceptionOnInvalidType = if ($inline <= 0 || !is_array($input) || empty($input)) { $output .= $prefix.Inline::dump($input, $exceptionOnInvalidType, $objectSupport); } else { - $isAHash = array_keys($input) !== range(0, count($input) - 1); + $isAHash = Inline::isHash($input); foreach ($input as $key => $value) { $willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value); diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Escaper.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Escaper.php index 7bac8dde..a74f14dd 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Escaper.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Escaper.php @@ -46,7 +46,7 @@ class Escaper * * @param string $value A PHP value * - * @return bool True if the value would require double quotes. + * @return bool True if the value would require double quotes */ public static function requiresDoubleQuoting($value) { @@ -70,7 +70,7 @@ public static function escapeWithDoubleQuotes($value) * * @param string $value A PHP value * - * @return bool True if the value would require single quotes. + * @return bool True if the value would require single quotes */ public static function requiresSingleQuoting($value) { diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Inline.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Inline.php index bb2db360..717cbfd5 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Inline.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Inline.php @@ -157,6 +157,28 @@ public static function dump($value, $exceptionOnInvalidType = false, $objectSupp } } + /** + * Check if given array is hash or just normal indexed array. + * + * @internal + * + * @param array $value The PHP array to check + * + * @return bool true if value is hash array, false otherwise + */ + public static function isHash(array $value) + { + $expectedKey = 0; + + foreach ($value as $key => $val) { + if ($key !== $expectedKey++) { + return true; + } + } + + return false; + } + /** * Dumps a PHP array to a YAML string. * @@ -169,11 +191,7 @@ public static function dump($value, $exceptionOnInvalidType = false, $objectSupp private static function dumpArray($value, $exceptionOnInvalidType, $objectSupport) { // array - $keys = array_keys($value); - $keysCount = count($keys); - if ((1 === $keysCount && '0' == $keys[0]) - || ($keysCount > 1 && array_reduce($keys, function ($v, $w) { return (int) $v + $w; }, 0) === $keysCount * ($keysCount - 1) / 2) - ) { + if ($value && !self::isHash($value)) { $output = array(); foreach ($value as $val) { $output[] = self::dump($val, $exceptionOnInvalidType, $objectSupport); @@ -182,7 +200,7 @@ private static function dumpArray($value, $exceptionOnInvalidType, $objectSuppor return sprintf('[%s]', implode(', ', $output)); } - // mapping + // hash $output = array(); foreach ($value as $key => $val) { $output[] = sprintf('%s: %s', self::dump($key, $exceptionOnInvalidType, $objectSupport), self::dump($val, $exceptionOnInvalidType, $objectSupport)); diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Parser.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Parser.php index 41134e6b..66b81c5f 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Parser.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Parser.php @@ -25,19 +25,26 @@ class Parser const FOLDED_SCALAR_PATTERN = self::BLOCK_SCALAR_HEADER_PATTERN; private $offset = 0; + private $totalNumberOfLines; private $lines = array(); private $currentLineNb = -1; private $currentLine = ''; private $refs = array(); + private $skippedLineNumbers = array(); + private $locallySkippedLineNumbers = array(); /** * Constructor. * - * @param int $offset The offset of YAML document (used for line numbers in error messages) + * @param int $offset The offset of YAML document (used for line numbers in error messages) + * @param int|null $totalNumberOfLines The overall number of lines being parsed + * @param int[] $skippedLineNumbers Number of comment lines that have been skipped by the parser */ - public function __construct($offset = 0) + public function __construct($offset = 0, $totalNumberOfLines = null, array $skippedLineNumbers = array()) { $this->offset = $offset; + $this->totalNumberOfLines = $totalNumberOfLines; + $this->skippedLineNumbers = $skippedLineNumbers; } /** @@ -62,6 +69,10 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = $value = $this->cleanup($value); $this->lines = explode("\n", $value); + if (null === $this->totalNumberOfLines) { + $this->totalNumberOfLines = count($this->lines); + } + if (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) { $mbEncoding = mb_internal_encoding(); mb_internal_encoding('UTF-8'); @@ -83,7 +94,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = $isRef = $mergeNode = false; if (preg_match('#^\-((?P\s+)(?P.+?))?\s*$#u', $this->currentLine, $values)) { if ($context && 'mapping' == $context) { - throw new ParseException('You cannot define a sequence item when in a mapping'); + throw new ParseException('You cannot define a sequence item when in a mapping', $this->getRealCurrentLineNb() + 1, $this->currentLine); } $context = 'sequence'; @@ -94,25 +105,18 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = // array if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) { - $c = $this->getRealCurrentLineNb() + 1; - $parser = new self($c); - $parser->refs = &$this->refs; - $data[] = $parser->parse($this->getNextEmbedBlock(null, true), $exceptionOnInvalidType, $objectSupport, $objectForMap); + $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $exceptionOnInvalidType, $objectSupport, $objectForMap); } else { if (isset($values['leadspaces']) && preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P.+?))?\s*$#u', $values['value'], $matches) ) { // this is a compact notation element, add to next block and parse - $c = $this->getRealCurrentLineNb(); - $parser = new self($c); - $parser->refs = &$this->refs; - $block = $values['value']; if ($this->isNextLineIndented()) { $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + strlen($values['leadspaces']) + 1); } - $data[] = $parser->parse($block, $exceptionOnInvalidType, $objectSupport, $objectForMap); + $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $exceptionOnInvalidType, $objectSupport, $objectForMap); } else { $data[] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport, $objectForMap, $context); } @@ -122,7 +126,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = } } elseif (preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\[\{].*?) *\:(\s+(?P.+?))?\s*$#u', $this->currentLine, $values) && (false === strpos($values['key'], ' #') || in_array($values['key'][0], array('"', "'")))) { if ($context && 'sequence' == $context) { - throw new ParseException('You cannot define a mapping item when in a sequence'); + throw new ParseException('You cannot define a mapping item when in a sequence', $this->currentLineNb + 1, $this->currentLine); } $context = 'mapping'; @@ -168,10 +172,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = } else { $value = $this->getNextEmbedBlock(); } - $c = $this->getRealCurrentLineNb() + 1; - $parser = new self($c); - $parser->refs = &$this->refs; - $parsed = $parser->parse($value, $exceptionOnInvalidType, $objectSupport, $objectForMap); + $parsed = $this->parseBlock($this->getRealCurrentLineNb() + 1, $value, $exceptionOnInvalidType, $objectSupport, $objectForMap); if (!is_array($parsed)) { throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine); @@ -219,10 +220,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = $data[$key] = null; } } else { - $c = $this->getRealCurrentLineNb() + 1; - $parser = new self($c); - $parser->refs = &$this->refs; - $value = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport, $objectForMap); + $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport, $objectForMap); // Spec: Keys MUST be unique; first one wins. // But overwriting is allowed when a merge node is used in current block. if ($allowOverwrite || !isset($data[$key])) { @@ -243,7 +241,7 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = } else { // multiple documents are not supported if ('---' === $this->currentLine) { - throw new ParseException('Multiple documents are not supported.'); + throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine); } // 1-liner optionally followed by newline(s) @@ -257,17 +255,6 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = throw $e; } - if (is_array($value)) { - $first = reset($value); - if (is_string($first) && 0 === strpos($first, '*')) { - $data = array(); - foreach ($value as $alias) { - $data[] = $this->refs[substr($alias, 1)]; - } - $value = $data; - } - } - if (isset($mbEncoding)) { mb_internal_encoding($mbEncoding); } @@ -316,6 +303,24 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = return empty($data) ? null : $data; } + private function parseBlock($offset, $yaml, $exceptionOnInvalidType, $objectSupport, $objectForMap) + { + $skippedLineNumbers = $this->skippedLineNumbers; + + foreach ($this->locallySkippedLineNumbers as $lineNumber) { + if ($lineNumber < $offset) { + continue; + } + + $skippedLineNumbers[] = $lineNumber; + } + + $parser = new self($offset, $this->totalNumberOfLines, $skippedLineNumbers); + $parser->refs = &$this->refs; + + return $parser->parse($yaml, $exceptionOnInvalidType, $objectSupport, $objectForMap); + } + /** * Returns the current line number (takes the offset into account). * @@ -323,7 +328,17 @@ public function parse($value, $exceptionOnInvalidType = false, $objectSupport = */ private function getRealCurrentLineNb() { - return $this->currentLineNb + $this->offset; + $realCurrentLineNumber = $this->currentLineNb + $this->offset; + + foreach ($this->skippedLineNumbers as $skippedLineNumber) { + if ($skippedLineNumber > $realCurrentLineNumber) { + break; + } + + ++$realCurrentLineNumber; + } + + return $realCurrentLineNumber; } /** @@ -426,6 +441,14 @@ private function getNextEmbedBlock($indentation = null, $inSequence = false) // we ignore "comment" lines only when we are not inside a scalar block if (empty($blockScalarIndentations) && $this->isCurrentLineComment()) { + // remember ignored comment lines (they are used later in nested + // parser calls to determine real line numbers) + // + // CAUTION: beware to not populate the global property here as it + // will otherwise influence the getRealCurrentLineNb() call here + // for consecutive comment lines and subsequent embedded blocks + $this->locallySkippedLineNumbers[] = $this->getRealCurrentLineNb(); + continue; } @@ -461,10 +484,18 @@ private function moveToNextLine() /** * Moves the parser to the previous line. + * + * @return bool */ private function moveToPreviousLine() { + if ($this->currentLineNb < 1) { + return false; + } + $this->currentLine = $this->lines[--$this->currentLineNb]; + + return true; } /** @@ -490,7 +521,7 @@ private function parseValue($value, $exceptionOnInvalidType, $objectSupport, $ob } if (!array_key_exists($value, $this->refs)) { - throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLine); + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine); } return $this->refs[$value]; @@ -585,6 +616,8 @@ private function parseBlockScalar($style, $chomping = '', $indentation = 0) if ($notEOF) { $blockLines[] = ''; $this->moveToPreviousLine(); + } elseif (!$notEOF && !$this->isCurrentLineLastLineInDocument()) { + $blockLines[] = ''; } // folded style @@ -691,6 +724,11 @@ private function isCurrentLineComment() return '' !== $ltrimmedLine && $ltrimmedLine[0] === '#'; } + private function isCurrentLineLastLineInDocument() + { + return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1); + } + /** * Cleanups a YAML string to be parsed. * @@ -768,7 +806,7 @@ private function isNextLineUnIndentedCollection() */ private function isStringUnIndentedCollectionItem() { - return 0 === strpos($this->currentLine, '- '); + return '-' === rtrim($this->currentLine) || 0 === strpos($this->currentLine, '- '); } /** diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/README.md b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/README.md index 85a97867..0d324881 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/README.md +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/README.md @@ -1,21 +1,13 @@ Yaml Component ============== -YAML implements most of the YAML 1.2 specification. - -```php -use Symfony\Component\Yaml\Yaml; - -$array = Yaml::parse(file_get_contents(filename)); - -print Yaml::dump($array); -``` +The Yaml component loads and dumps YAML files. Resources --------- -You can run the unit tests with the following command: - - $ cd path/to/Symfony/Component/Yaml/ - $ composer install - $ phpunit + * [Documentation](https://symfony.com/doc/current/components/yaml/index.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) diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Unescaper.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Unescaper.php index bb330161..1e02cc9f 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Unescaper.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Unescaper.php @@ -39,9 +39,9 @@ class Unescaper /** * Unescapes a single quoted string. * - * @param string $value A single quoted string. + * @param string $value A single quoted string * - * @return string The unescaped string. + * @return string The unescaped string */ public function unescapeSingleQuotedString($value) { @@ -51,9 +51,9 @@ public function unescapeSingleQuotedString($value) /** * Unescapes a double quoted string. * - * @param string $value A double quoted string. + * @param string $value A double quoted string * - * @return string The unescaped string. + * @return string The unescaped string */ public function unescapeDoubleQuotedString($value) { diff --git a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Yaml.php b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Yaml.php index be05a365..6fc4e927 100644 --- a/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Yaml.php +++ b/app/src/vendor/PHP-Benchmark/vendor/symfony/yaml/Yaml.php @@ -73,24 +73,28 @@ public static function parse($input, $exceptionOnInvalidType = false, $objectSup } /** - * Dumps a PHP array to a YAML string. + * Dumps a PHP value to a YAML string. * * The dump method, when supplied with an array, will do its best * to convert the array into friendly YAML. * - * @param array $array PHP array + * @param mixed $input The PHP value * @param int $inline The level where you switch to inline YAML - * @param int $indent The amount of spaces to use for indentation of nested nodes. + * @param int $indent The amount of spaces to use for indentation of nested nodes * @param bool $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise * @param bool $objectSupport true if object support is enabled, false otherwise * - * @return string A YAML string representing the original PHP array + * @return string A YAML string representing the original PHP value */ - public static function dump($array, $inline = 2, $indent = 4, $exceptionOnInvalidType = false, $objectSupport = false) + public static function dump($input, $inline = 2, $indent = 4, $exceptionOnInvalidType = false, $objectSupport = false) { + if ($indent < 1) { + throw new \InvalidArgumentException('The indentation must be greater than zero.'); + } + $yaml = new Dumper(); $yaml->setIndentation($indent); - return $yaml->dump($array, $inline, 0, $exceptionOnInvalidType, $objectSupport); + return $yaml->dump($input, $inline, 0, $exceptionOnInvalidType, $objectSupport); } } diff --git a/app/src/vendor/PHPMailer/vendor/composer/ClassLoader.php b/app/src/vendor/PHPMailer/vendor/composer/ClassLoader.php index 5e1469e8..ff6ecfb8 100644 --- a/app/src/vendor/PHPMailer/vendor/composer/ClassLoader.php +++ b/app/src/vendor/PHPMailer/vendor/composer/ClassLoader.php @@ -13,9 +13,7 @@ namespace Composer\Autoload; /** - * ClassLoader implements a PSR-0 class loader - * - * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. * * $loader = new \Composer\Autoload\ClassLoader(); * @@ -39,6 +37,8 @@ * * @author Fabien Potencier * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ */ class ClassLoader { @@ -147,7 +147,7 @@ public function add($prefix, $paths, $prepend = false) * appending or prepending to the ones previously set for this namespace. * * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-0 base directories + * @param array|string $paths The PSR-4 base directories * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException diff --git a/app/src/vendor/PHPMailer/vendor/composer/autoload_real.php b/app/src/vendor/PHPMailer/vendor/composer/autoload_real.php index 0329e419..95b70772 100644 --- a/app/src/vendor/PHPMailer/vendor/composer/autoload_real.php +++ b/app/src/vendor/PHPMailer/vendor/composer/autoload_real.php @@ -43,8 +43,3 @@ public static function getLoader() return $loader; } } - -function composerRequire1fb3952f42af375cd1183a4abb298b71($file) -{ - require $file; -} diff --git a/app/src/vendor/PHPMailer/vendor/composer/installed.json b/app/src/vendor/PHPMailer/vendor/composer/installed.json index a90a3e75..69f565d9 100644 --- a/app/src/vendor/PHPMailer/vendor/composer/installed.json +++ b/app/src/vendor/PHPMailer/vendor/composer/installed.json @@ -1,17 +1,17 @@ [ { "name": "phpmailer/phpmailer", - "version": "v5.2.14", - "version_normalized": "5.2.14.0", + "version": "v5.2.16", + "version_normalized": "5.2.16.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "e774bc9152de85547336e22b8926189e582ece95" + "reference": "1d85f9ef3ecfc42bbc4f3c70d5e37ca9a65f629a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e774bc9152de85547336e22b8926189e582ece95", - "reference": "e774bc9152de85547336e22b8926189e582ece95", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/1d85f9ef3ecfc42bbc4f3c70d5e37ca9a65f629a", + "reference": "1d85f9ef3ecfc42bbc4f3c70d5e37ca9a65f629a", "shasum": "" }, "require": { @@ -22,10 +22,9 @@ "phpunit/phpunit": "4.7.*" }, "suggest": { - "league/oauth2-client": "Needed for XOAUTH2 authentication", - "league/oauth2-google": "Needed for Gmail XOAUTH2" + "league/oauth2-google": "Needed for Google XOAUTH2 authentication" }, - "time": "2015-11-01 10:15:28", + "time": "2016-06-06 09:09:37", "type": "library", "installation-source": "dist", "autoload": { diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/.gitignore b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/.gitignore index e1294abd..1006c116 100644 --- a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/.gitignore +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/.gitignore @@ -2,6 +2,5 @@ docs/phpdoc/ test/message.txt test/testbootstrap.php test/*.pem -.idea build/ vendor/ diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/README.md b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/README.md index 0ecfa5dc..4eeecaf3 100644 --- a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/README.md +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/README.md @@ -24,12 +24,12 @@ Build status: [![Build Status](https://travis-ci.org/PHPMailer/PHPMailer.svg)](h ## Why you might need it -Many PHP developers utilize email in their code. The only PHP function that supports this is the mail() function. However, it does not provide any assistance for making use of popular features such as HTML-based emails and attachments. +Many PHP developers utilize email in their code. The only PHP function that supports this is the `mail()` function. However, it does not provide any assistance for making use of popular features such as HTML-based emails and attachments. -Formatting email correctly is surprisingly difficult. There are myriad overlapping RFCs, requiring tight adherence to horribly complicated formatting and encoding rules - the vast majority of code that you'll find online that uses the mail() function directly is just plain wrong! +Formatting email correctly is surprisingly difficult. There are myriad overlapping RFCs, requiring tight adherence to horribly complicated formatting and encoding rules - the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong! *Please* don't be tempted to do it yourself - if you don't use PHPMailer, there are many other excellent libraries that you should look at before rolling your own - try SwiftMailer, Zend_Mail, eZcomponents etc. -The PHP mail() function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD and OS X platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP implementation allows email sending on Windows platforms without a local mail server. +The PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD and OS X platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP implementation allows email sending on Windows platforms without a local mail server. ## License @@ -52,7 +52,7 @@ composer require phpmailer/phpmailer If you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the `league/oauth2-client` package. -Alternatively, copy the contents of the PHPMailer folder into somewhere that's in your PHP `include_path` setting. If you don't speak git or just want a tarball, click the 'zip' button at the top of the page in GitHub. +Alternatively, copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration. If you don't speak git or just want a tarball, click the 'zip' button at the top of the page in GitHub. If you're not using composer's autoloader, PHPMailer provides an SPL-compatible autoloader, and that is the preferred way of loading the library - just `require '/path/to/PHPMailerAutoload.php';` and everything should work. The autoloader does not throw errors if it can't find classes so it prepends itself to the SPL list, allowing your own (or your framework's) autoloader to catch errors. SPL autoloading was introduced in PHP 5.1.0, so if you are using a version older than that you will need to require/include each class manually. @@ -62,7 +62,7 @@ If you want to use Google's XOAUTH2 authentication mechanism, you need to be run ### Minimal installation -While installing the entire package manually or with composer is simple, convenient and reliable, you may want to include only vital files in your project. At the very least you will need [class.phpmailer.php](class.phpmailer.php). If you're using SMTP, you'll need [class.smtp.php](class.smtp.php), and if you're using POP-before SMTP, you'll need [class.pop3.php](class.pop3.php). For all of these, we recommend you use [the autoloader](PHPMailerAutoload.php) too as otherwise you will either have to `require` all classes manually or use some other autoloader. You can skip the [language](language/) folder if you're not showing errors to users and can make do with English-only errors. You may need the additional classes in the [extras](extras/) folder if you are using those features, including NTLM authentication and ics generation. If you're using Google XOAUTH2 you will need `class.phpmaileroauth.php` and `class.oauth.php` classes too, as well as the composer dependencies. +While installing the entire package manually or with composer is simple, convenient and reliable, you may want to include only vital files in your project. At the very least you will need [class.phpmailer.php](https://github.com/PHPMailer/PHPMailer/tree/master/class.phpmailer.php). If you're using SMTP, you'll need [class.smtp.php](https://github.com/PHPMailer/PHPMailer/tree/master/class.smtp.php), and if you're using POP-before SMTP, you'll need [class.pop3.php](https://github.com/PHPMailer/PHPMailer/tree/master/class.pop3.php). For all of these, we recommend you use [the autoloader](https://github.com/PHPMailer/PHPMailer/tree/master/PHPMailerAutoload.php) too as otherwise you will either have to `require` all classes manually or use some other autoloader. You can skip the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder if you're not showing errors to users and can make do with English-only errors. You may need the additional classes in the [extras](extras/) folder if you are using those features, including NTLM authentication and ics generation. If you're using Google XOAUTH2 you will need `class.phpmaileroauth.php` and `class.oauth.php` classes too, as well as the composer dependencies. ## A Simple Example @@ -105,35 +105,35 @@ if(!$mail->send()) { } ``` -You'll find plenty more to play with in the [examples](examples/) folder. +You'll find plenty more to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. That's it. You should now be ready to use PHPMailer! ## Localization -PHPMailer defaults to English, but in the [language](language/) folder you'll find numerous (46 at the time of writing!) translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: +PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder you'll find numerous (46 at the time of writing!) translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: ```php // To load the French version $mail->setLanguage('fr', '/optional/path/to/language/directory/'); ``` -We welcome corrections and new languages - if you're looking for corrections to do, run the [phpmailerLangTest.php](test/phpmailerLangTest.php) script in the tests folder and it will show any missing translations. +We welcome corrections and new languages - if you're looking for corrections to do, run the [phpmailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/phpmailerLangTest.php) script in the tests folder and it will show any missing translations. ## Documentation -Examples of how to use PHPMailer for common scenarios can be found in the [examples](examples/) folder. If you're looking for a good starting point, we recommend you start with [the gmail example](examples/gmail.phps). +Examples of how to use PHPMailer for common scenarios can be found in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. If you're looking for a good starting point, we recommend you start with [the Gmail example](https://github.com/PHPMailer/PHPMailer/tree/master/examples/gmail.phps). There are tips and a troubleshooting guide in the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, this should be the first place you look as it's the most frequently updated. Complete generated API documentation is [available online](http://phpmailer.github.io/PHPMailer/). -You'll find some basic user-level docs in the [docs](docs/) folder, and you can generate complete API-level documentation using the [generatedocs.sh](docs/generatedocs.sh) shell script in the docs folder, though you'll need to install [PHPDocumentor](http://www.phpdoc.org) first. You may find [the unit tests](test/phpmailerTest.php) a good source of how to do various operations such as encryption. +You'll find some basic user-level docs in the [docs](docs/) folder, and you can generate complete API-level documentation using the [generatedocs.sh](https://github.com/PHPMailer/PHPMailer/tree/master/docs/generatedocs.sh) shell script in the docs folder, though you'll need to install [PHPDocumentor](http://www.phpdoc.org) first. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/tree/master/test/phpmailerTest.php) a good source of how to do various operations such as encryption. -If the documentation doesn't cover what you need, search the [many questions on StackOverflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). +If the documentation doesn't cover what you need, search the [many questions on Stack Overflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about "SMTP Error: Could not connect to SMTP host.", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). ## Tests -There is a PHPUnit test script in the [test](test/) folder. +There is a PHPUnit test script in the [test](https://github.com/PHPMailer/PHPMailer/tree/master/test/) folder. Build status: [![Build Status](https://travis-ci.org/PHPMailer/PHPMailer.svg)](https://travis-ci.org/PHPMailer/PHPMailer) diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/VERSION b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/VERSION index ba678f2d..56f1219b 100644 --- a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/VERSION +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/VERSION @@ -1 +1 @@ -5.2.14 \ No newline at end of file +5.2.16 \ No newline at end of file diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.phpmailer.php b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.phpmailer.php index e4dd00bf..f9013ebb 100644 --- a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.phpmailer.php +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.phpmailer.php @@ -31,7 +31,7 @@ class PHPMailer * The PHPMailer Version number. * @var string */ - public $Version = '5.2.14'; + public $Version = '5.2.16'; /** * Email priority. @@ -285,7 +285,7 @@ class PHPMailer /** * SMTP auth type. - * Options are LOGIN (default), PLAIN, NTLM, CRAM-MD5 + * Options are CRAM-MD5, LOGIN, PLAIN, NTLM, XOAUTH2, attempted in that order if not specified * @var string */ public $AuthType = ''; @@ -352,6 +352,7 @@ class PHPMailer /** * Whether to split multiple to addresses into multiple messages * or send them all in one message. + * Only supported in `mail` and `sendmail` transports, not in SMTP. * @var boolean */ public $SingleTo = false; @@ -394,7 +395,7 @@ class PHPMailer /** * DKIM Identity. - * Usually the email address used as the source of the email + * Usually the email address used as the source of the email. * @var string */ public $DKIM_identity = ''; @@ -446,6 +447,15 @@ class PHPMailer */ public $XMailer = ''; + /** + * Which validator to use by default when validating email addresses. + * May be a callable to inject your own validator, but there are several built-in validators. + * @see PHPMailer::validateAddress() + * @var string|callable + * @static + */ + public static $validator = 'auto'; + /** * An instance of the SMTP sender class. * @var SMTP @@ -634,9 +644,11 @@ class PHPMailer * Constructor. * @param boolean $exceptions Should we throw external exceptions? */ - public function __construct($exceptions = false) + public function __construct($exceptions = null) { - $this->exceptions = (boolean)$exceptions; + if ($exceptions !== null) { + $this->exceptions = (boolean)$exceptions; + } } /** @@ -645,9 +657,7 @@ public function __construct($exceptions = false) public function __destruct() { //Close any open SMTP connection nicely - if ($this->Mailer == 'smtp') { - $this->smtpClose(); - } + $this->smtpClose(); } /** @@ -671,7 +681,9 @@ private function mailPassthru($to, $subject, $body, $header, $params) } else { $subject = $this->encodeHeader($this->secureHeader($subject)); } - if (ini_get('safe_mode') || !($this->UseSendmailOptions)) { + //Can't use additional_parameters in safe_mode + //@link http://php.net/manual/en/function.mail.php + if (ini_get('safe_mode') or !$this->UseSendmailOptions) { $result = @mail($to, $subject, $body, $header); } else { $result = @mail($to, $subject, $body, $header, $params); @@ -713,7 +725,7 @@ protected function edebug($str) case 'echo': default: //Normalize line breaks - $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str); + $str = preg_replace('/\r\n?/ms', "\n", $str); echo gmdate('Y-m-d H:i:s') . "\t" . str_replace( "\n", "\n \t ", @@ -850,7 +862,7 @@ protected function addOrEnqueueAnAddress($kind, $address, $name) $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim if (($pos = strrpos($address, '@')) === false) { // At-sign is misssing. - $error_message = $this->lang('invalid_address') . $address; + $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address"; $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { @@ -900,7 +912,7 @@ protected function addAnAddress($kind, $address, $name = '') return false; } if (!$this->validateAddress($address)) { - $error_message = $this->lang('invalid_address') . $address; + $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address"; $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { @@ -994,7 +1006,7 @@ public function setFrom($address, $name = '', $auto = true) if (($pos = strrpos($address, '@')) === false or (!$this->has8bitChars(substr($address, ++$pos)) or !$this->idnSupported()) and !$this->validateAddress($address)) { - $error_message = $this->lang('invalid_address') . $address; + $error_message = $this->lang('invalid_address') . " (setFrom) $address"; $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { @@ -1027,19 +1039,30 @@ public function getLastMessageID() /** * Check that a string looks like an email address. * @param string $address The email address to check - * @param string $patternselect A selector for the validation pattern to use : + * @param string|callable $patternselect A selector for the validation pattern to use : * * `auto` Pick best pattern automatically; * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0, PHP >= 5.3.2, 5.2.14; * * `pcre` Use old PCRE implementation; * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL; * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements. * * `noregex` Don't use a regex: super fast, really dumb. + * Alternatively you may pass in a callable to inject your own validator, for example: + * PHPMailer::validateAddress('user@example.com', function($address) { + * return (strpos($address, '@') !== false); + * }); + * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator. * @return boolean * @static * @access public */ - public static function validateAddress($address, $patternselect = 'auto') + public static function validateAddress($address, $patternselect = null) { + if (is_null($patternselect)) { + $patternselect = self::$validator; + } + if (is_callable($patternselect)) { + return call_user_func($patternselect, $address); + } //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321 if (strpos($address, "\n") !== false or strpos($address, "\r") !== false) { return false; @@ -1216,7 +1239,7 @@ public function preSend() } $this->$address_kind = $this->punyencodeAddress($this->$address_kind); if (!$this->validateAddress($this->$address_kind)) { - $error_message = $this->lang('invalid_address') . $this->$address_kind; + $error_message = $this->lang('invalid_address') . ' (punyEncode) ' . $this->$address_kind; $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { @@ -1227,7 +1250,7 @@ public function preSend() } // Set whether the message is multipart/alternative - if (!empty($this->AltBody)) { + if ($this->alternativeExists()) { $this->ContentType = 'multipart/alternative'; } @@ -1404,9 +1427,9 @@ protected function mailSend($header, $body) } $to = implode(', ', $toArr); - if (empty($this->Sender)) { - $params = ' '; - } else { + $params = null; + //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver + if (!empty($this->Sender)) { $params = sprintf('-f%s', $this->Sender); } if ($this->Sender != '' and !ini_get('safe_mode')) { @@ -1414,7 +1437,7 @@ protected function mailSend($header, $body) ini_set('sendmail_from', $this->Sender); } $result = false; - if ($this->SingleTo && count($toArr) > 1) { + if ($this->SingleTo and count($toArr) > 1) { foreach ($toArr as $toAddr) { $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params); $this->doCallback($result, array($toAddr), $this->cc, $this->bcc, $this->Subject, $body, $this->From); @@ -1520,12 +1543,17 @@ protected function smtpSend($header, $body) * @throws phpmailerException * @return boolean */ - public function smtpConnect($options = array()) + public function smtpConnect($options = null) { if (is_null($this->smtp)) { $this->smtp = $this->getSMTPInstance(); } + //If no options are provided, use whatever is set in the instance + if (is_null($options)) { + $options = $this->SMTPOptions; + } + // Already connected? if ($this->smtp->connected()) { return true; @@ -1595,7 +1623,7 @@ public function smtpConnect($options = array()) if (!$this->smtp->startTLS()) { throw new phpmailerException($this->lang('connect_host')); } - // We must resend HELO after tls negotiation + // We must resend EHLO after TLS negotiation $this->smtp->hello($hello); } if ($this->SMTPAuth) { @@ -1634,7 +1662,7 @@ public function smtpConnect($options = array()) */ public function smtpClose() { - if ($this->smtp !== null) { + if (is_a($this->smtp, 'SMTP')) { if ($this->smtp->connected()) { $this->smtp->quit(); $this->smtp->close(); @@ -1972,7 +2000,7 @@ public function createHeader() $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject))); } - if ($this->MessageID != '') { + if ('' != $this->MessageID and preg_match('/^<.*@.*>$/', $this->MessageID)) { $this->lastMessageID = $this->MessageID; } else { $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname()); @@ -2074,7 +2102,7 @@ public function getMailMIME() */ public function getSentMIMEMessage() { - return $this->MIMEHeader . $this->mailHeader . self::CRLF . $this->MIMEBody; + return rtrim($this->MIMEHeader . $this->mailHeader, "\n\r") . self::CRLF . self::CRLF . $this->MIMEBody; } /** @@ -2104,12 +2132,12 @@ public function createBody() //Can we do a 7-bit downgrade? if ($bodyEncoding == '8bit' and !$this->has8bitChars($this->Body)) { $bodyEncoding = '7bit'; + //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit $bodyCharSet = 'us-ascii'; } //If lines are too long, and we're not already using an encoding that will shorten them, - //change to quoted-printable transfer encoding + //change to quoted-printable transfer encoding for the body part only if ('base64' != $this->Encoding and self::hasLineLongerThanMax($this->Body)) { - $this->Encoding = 'quoted-printable'; $bodyEncoding = 'quoted-printable'; } @@ -2118,10 +2146,12 @@ public function createBody() //Can we do a 7-bit downgrade? if ($altBodyEncoding == '8bit' and !$this->has8bitChars($this->AltBody)) { $altBodyEncoding = '7bit'; + //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit $altBodyCharSet = 'us-ascii'; } - //If lines are too long, change to quoted-printable transfer encoding - if (self::hasLineLongerThanMax($this->AltBody)) { + //If lines are too long, and we're not already using an encoding that will shorten them, + //change to quoted-printable transfer encoding for the alt body part only + if ('base64' != $altBodyEncoding and self::hasLineLongerThanMax($this->AltBody)) { $altBodyEncoding = 'quoted-printable'; } //Use this as a preamble in all multipart message types @@ -2224,8 +2254,10 @@ public function createBody() $body .= $this->attachAll('attachment', $this->boundary[1]); break; default: - // catch case 'plain' and case '' - $body .= $this->encodeString($this->Body, $bodyEncoding); + // Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types + //Reset the `Encoding` property in case we changed it for line length reasons + $this->Encoding = $bodyEncoding; + $body .= $this->encodeString($this->Body, $this->Encoding); break; } @@ -2331,8 +2363,7 @@ protected function endBoundary($boundary) /** * Set the message type. - * PHPMailer only supports some preset message types, - * not arbitrary MIME structures. + * PHPMailer only supports some preset message types, not arbitrary MIME structures. * @access protected * @return void */ @@ -2350,6 +2381,7 @@ protected function setMessageType() } $this->message_type = implode('_', $type); if ($this->message_type == '') { + //The 'plain' message_type refers to the message having a single body element, not that it is plain-text $this->message_type = 'plain'; } } @@ -3296,7 +3328,7 @@ public function msgHTML($message, $basedir = '', $advanced = false) $message ); } - } elseif (substr($url, 0, 4) !== 'cid:' && !preg_match('#^[A-z]+://#', $url)) { + } elseif (substr($url, 0, 4) !== 'cid:' && !preg_match('#^[a-z][a-z0-9+.-]*://#i', $url)) { // Do not change urls for absolute images (thanks to corvuscorax) // Do not change urls that are already inline images $filename = basename($url); @@ -3332,7 +3364,7 @@ public function msgHTML($message, $basedir = '', $advanced = false) // Convert all message body line breaks to CRLF, makes quoted-printable encoding work much better $this->Body = $this->normalizeBreaks($message); $this->AltBody = $this->normalizeBreaks($this->html2text($message, $advanced)); - if (empty($this->AltBody)) { + if (!$this->alternativeExists()) { $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . self::CRLF . self::CRLF; } @@ -3657,11 +3689,13 @@ public function DKIM_Sign($signHeader) if ($this->DKIM_passphrase != '') { $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase); } else { - $privKey = $privKeyStr; + $privKey = openssl_pkey_get_private($privKeyStr); } - if (openssl_sign($signHeader, $signature, $privKey)) { + if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) { //sha1WithRSAEncryption + openssl_pkey_free($privKey); return base64_encode($signature); } + openssl_pkey_free($privKey); return ''; } @@ -3678,7 +3712,7 @@ public function DKIM_HeaderC($signHeader) foreach ($lines as $key => $line) { list($heading, $value) = explode(':', $line, 2); $heading = strtolower($heading); - $value = preg_replace('/\s+/', ' ', $value); // Compress useless spaces + $value = preg_replace('/\s{2,}/', ' ', $value); // Compress useless spaces $lines[$key] = $heading . ':' . trim($value); // Don't forget to remove WSP around the value } $signHeader = implode("\r\n", $lines); @@ -3716,7 +3750,7 @@ public function DKIM_BodyC($body) */ public function DKIM_Add($headers_line, $subject, $body) { - $DKIMsignatureType = 'rsa-sha1'; // Signature & hash algorithms + $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body $DKIMquery = 'dns/txt'; // Query method $DKIMtime = time(); // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone) @@ -3724,6 +3758,7 @@ public function DKIM_Add($headers_line, $subject, $body) $headers = explode($this->LE, $headers_line); $from_header = ''; $to_header = ''; + $date_header = ''; $current = ''; foreach ($headers as $header) { if (strpos($header, 'From:') === 0) { @@ -3732,6 +3767,9 @@ public function DKIM_Add($headers_line, $subject, $body) } elseif (strpos($header, 'To:') === 0) { $to_header = $header; $current = 'to_header'; + } elseif (strpos($header, 'Date:') === 0) { + $date_header = $header; + $current = 'date_header'; } else { if (!empty($$current) && strpos($header, ' =?') === 0) { $$current .= $header; @@ -3742,6 +3780,7 @@ public function DKIM_Add($headers_line, $subject, $body) } $from = str_replace('|', '=7C', $this->DKIM_QP($from_header)); $to = str_replace('|', '=7C', $this->DKIM_QP($to_header)); + $date = str_replace('|', '=7C', $this->DKIM_QP($date_header)); $subject = str_replace( '|', '=7C', @@ -3749,7 +3788,7 @@ public function DKIM_Add($headers_line, $subject, $body) ); // Copied header fields (dkim-quoted-printable) $body = $this->DKIM_BodyC($body); $DKIMlen = strlen($body); // Length of body - $DKIMb64 = base64_encode(pack('H*', sha1($body))); // Base64 of packed binary SHA-1 hash of body + $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body if ('' == $this->DKIM_identity) { $ident = ''; } else { @@ -3762,16 +3801,18 @@ public function DKIM_Add($headers_line, $subject, $body) $this->DKIM_selector . ";\r\n" . "\tt=" . $DKIMtime . '; c=' . $DKIMcanonicalization . ";\r\n" . - "\th=From:To:Subject;\r\n" . + "\th=From:To:Date:Subject;\r\n" . "\td=" . $this->DKIM_domain . ';' . $ident . "\r\n" . "\tz=$from\r\n" . "\t|$to\r\n" . + "\t|$date\r\n" . "\t|$subject;\r\n" . "\tbh=" . $DKIMb64 . ";\r\n" . "\tb="; $toSign = $this->DKIM_HeaderC( $from_header . "\r\n" . $to_header . "\r\n" . + $date_header . "\r\n" . $subject_header . "\r\n" . $dkimhdrs ); diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.phpmaileroauthgoogle.php b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.phpmaileroauthgoogle.php index ab6292b8..71c9bd32 100644 --- a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.phpmaileroauthgoogle.php +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.phpmaileroauthgoogle.php @@ -49,7 +49,8 @@ public function __construct( $this->oauthUserEmail = $UserEmail; } - private function getProvider() { + private function getProvider() + { return new League\OAuth2\Client\Provider\Google([ 'clientId' => $this->oauthClientId, 'clientSecret' => $this->oauthClientSecret diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.pop3.php b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.pop3.php index 403b573e..56ad1bfc 100644 --- a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.pop3.php +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.pop3.php @@ -34,7 +34,7 @@ class POP3 * @var string * @access public */ - public $Version = '5.2.14'; + public $Version = '5.2.16'; /** * Default POP3 port number. diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.smtp.php b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.smtp.php index 2e32e2fc..0c016f12 100644 --- a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.smtp.php +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/class.smtp.php @@ -30,7 +30,7 @@ class SMTP * The PHPMailer SMTP version number. * @var string */ - const VERSION = '5.2.14'; + const VERSION = '5.2.16'; /** * SMTP line break constant. @@ -81,7 +81,7 @@ class SMTP * @deprecated Use the `VERSION` constant instead * @see SMTP::VERSION */ - public $Version = '5.2.14'; + public $Version = '5.2.16'; /** * SMTP server port number. @@ -336,11 +336,22 @@ public function startTLS() if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) { return false; } + + //Allow the best TLS version(s) we can + $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT; + + //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT + //so add them back in manually if we can + if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) { + $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; + $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT; + } + // Begin encrypted connection if (!stream_socket_enable_crypto( $this->smtp_conn, true, - STREAM_CRYPTO_METHOD_TLS_CLIENT + $crypto_method )) { return false; } @@ -389,7 +400,7 @@ public function authenticate( ); if (empty($authtype)) { - foreach (array('LOGIN', 'CRAM-MD5', 'NTLM', 'PLAIN', 'XOAUTH2') as $method) { + foreach (array('CRAM-MD5', 'LOGIN', 'PLAIN', 'NTLM', 'XOAUTH2') as $method) { if (in_array($method, $this->server_caps['AUTH'])) { $authtype = $method; break; @@ -736,7 +747,7 @@ protected function sendHello($hello, $host) protected function parseHelloFields($type) { $this->server_caps = array(); - $lines = explode("\n", $this->last_reply); + $lines = explode("\n", $this->helo_rply); foreach ($lines as $n => $s) { //First 4 chars contain response code followed by - or space diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/Callback_function_notes.txt b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/Callback_function_notes.txt new file mode 100644 index 00000000..461ea508 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/Callback_function_notes.txt @@ -0,0 +1,17 @@ +NEW CALLBACK FUNCTION: +====================== + +We have had requests for a method to process the results of sending emails +through PHPMailer. In this new release, we have implemented a callback +function that passes the results of each email sent (to, cc, and/or bcc). +We have provided an example that echos the results back to the screen. The +callback function can be used for any purpose. With minor modifications, the +callback function can be used to create CSV logs, post results to databases, +etc. + +Please review the test.php script for the example. + +It's pretty straight forward. + +Enjoy! +Andy diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/DomainKeys_notes.txt b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/DomainKeys_notes.txt new file mode 100644 index 00000000..2ad10f15 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/DomainKeys_notes.txt @@ -0,0 +1,55 @@ +CREATE DKIM KEYS and DNS Resource Record: +========================================= + +To create DomainKeys Identified Mail keys, visit: +http://dkim.worxware.com/ +... read the information, fill in the form, and download the ZIP file +containing the public key, private key, DNS Resource Record and instructions +to add to your DNS Zone Record, and the PHPMailer code to enable DKIM +digital signing. + +/*** PROTECT YOUR PRIVATE & PUBLIC KEYS ***/ + +You need to protect your DKIM private and public keys from being viewed or +accessed. Add protection to your .htaccess file as in this example: + +# secure htkeyprivate file + + order allow,deny + deny from all + + +# secure htkeypublic file + + order allow,deny + deny from all + + +(the actual .htaccess additions are in the ZIP file sent back to you from +http://dkim.worxware.com/ + +A few notes on using DomainKey Identified Mail (DKIM): + +You do not need to use PHPMailer to DKIM sign emails IF: +- you enable DomainKey support and add the DNS resource record +- you use your outbound mail server + +If you are a third-party emailer that works on behalf of domain owners to +send their emails from your own server: +- you absolutely have to DKIM sign outbound emails +- the domain owner has to add the DNS resource record to match the + private key, public key, selector, identity, and domain that you create +- use caution with the "selector" ... at least one "selector" will already + exist in the DNS Zone Record of the domain at the domain owner's server + you need to ensure that the "selector" you use is unique +Note: since the IP address will not match the domain owner's DNS Zone record +you can be certain that email providers that validate based on DomainKey will +check the domain owner's DNS Zone record for your DNS resource record. Before +sending out emails on behalf of domain owners, ensure they have entered the +DNS resource record you provided them. + +Enjoy! +Andy + +PS. if you need additional information about DKIM, please see: +http://www.dkim.org/info/dkim-faq.html diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/Note_for_SMTP_debugging.txt b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/Note_for_SMTP_debugging.txt new file mode 100644 index 00000000..128b2d9d --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/Note_for_SMTP_debugging.txt @@ -0,0 +1,17 @@ +If you are having problems connecting or sending emails through your SMTP server, the SMTP class can provide more information about the processing/errors taking place. +Use the debug functionality of the class to see what's going on in your connections. To do that, set the debug level in your script. For example: + +$mail->SMTPDebug = 1; +$mail->isSMTP(); // telling the class to use SMTP +$mail->SMTPAuth = true; // enable SMTP authentication +$mail->Port = 26; // set the SMTP port +$mail->Host = "mail.yourhost.com"; // SMTP server +$mail->Username = "name@yourhost.com"; // SMTP account username +$mail->Password = "your password"; // SMTP account password + +Notes on this: +$mail->SMTPDebug = 0; ... will disable debugging (you can also leave this out completely, 0 is the default) +$mail->SMTPDebug = 1; ... will echo errors and server responses +$mail->SMTPDebug = 2; ... will echo errors, server responses and client messages + +And finally, don't forget to disable debugging before going into production. diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/extending.html b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/extending.html new file mode 100644 index 00000000..4466a1de --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/extending.html @@ -0,0 +1,128 @@ + + +Examples using phpmailer + + + + +

Examples using PHPMailer

+ +

1. Advanced Example

+

+ +This demonstrates sending multiple email messages with binary attachments +from a MySQL database using multipart/alternative messages.

+ +

+require 'PHPMailerAutoload.php';
+
+$mail = new PHPMailer();
+
+$mail->setFrom('list@example.com', 'List manager');
+$mail->Host   = 'smtp1.example.com;smtp2.example.com';
+$mail->Mailer = 'smtp';
+
+@mysqli_connect('localhost','root','password');
+@mysqli_select_db("my_company");
+$query = "SELECT full_name, email, photo FROM employee";
+$result = @mysqli_query($query);
+
+while ($row = mysqli_fetch_assoc($result))
+{
+    // HTML body
+    $body  = "Hello <font size=\"4\">" . $row['full_name'] . "</font>, <p>";
+    $body .= "<i>Your</i> personal photograph to this message.<p>";
+    $body .= "Sincerely, <br>";
+    $body .= "phpmailer List manager";
+
+    // Plain text body (for mail clients that cannot read HTML)
+    $text_body  = 'Hello ' . $row['full_name'] . ", \n\n";
+    $text_body .= "Your personal photograph to this message.\n\n";
+    $text_body .= "Sincerely, \n";
+    $text_body .= 'phpmailer List manager';
+
+    $mail->Body    = $body;
+    $mail->AltBody = $text_body;
+    $mail->addAddress($row['email'], $row['full_name']);
+    $mail->addStringAttachment($row['photo'], 'YourPhoto.jpg');
+
+    if(!$mail->send())
+        echo "There has been a mail error sending to " . $row['email'] . "<br>";
+
+    // Clear all addresses and attachments for next loop
+    $mail->clearAddresses();
+    $mail->clearAttachments();
+}
+
+

+ +

2. Extending PHPMailer

+

+ +Extending classes with inheritance is one of the most +powerful features of object-oriented programming. It allows you to make changes to the +original class for your own personal use without hacking the original +classes, and it's very easy to do: + +

+Here's a class that extends the phpmailer class and sets the defaults +for the particular site:
+PHP include file: my_phpmailer.php +

+ +

+require 'PHPMailerAutoload.php';
+
+class my_phpmailer extends PHPMailer {
+    // Set default variables for all new objects
+    public $From     = 'from@example.com';
+    public $FromName = 'Mailer';
+    public $Host     = 'smtp1.example.com;smtp2.example.com';
+    public $Mailer   = 'smtp';                         // Alternative to isSMTP()
+    public $WordWrap = 75;
+
+    // Replace the default debug output function
+    protected function edebug($msg) {
+        print('My Site Error');
+        print('Description:');
+        printf('%s', $msg);
+        exit;
+    }
+
+    //Extend the send function
+    public function send() {
+        $this->Subject = '[Yay for me!] '.$this->Subject;
+        return parent::send()
+    }
+
+    // Create an additional function
+    public function do_something($something) {
+        // Place your new code here
+    }
+}
+
+
+Now here's a normal PHP page in the site, which will have all the defaults set above:
+ +
+require 'my_phpmailer.php';
+
+// Instantiate your new class
+$mail = new my_phpmailer;
+
+// Now you only need to add the necessary stuff
+$mail->addAddress('josh@example.com', 'Josh Adams');
+$mail->Subject = 'Here is the subject';
+$mail->Body    = 'This is the message body';
+$mail->addAttachment('c:/temp/11-10-00.zip', 'new_name.zip');  // optional name
+
+if(!$mail->send())
+{
+   echo 'There was an error sending the message';
+   exit;
+}
+
+echo 'Message was sent successfully';
+
+ + diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/faq.html b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/faq.html new file mode 100644 index 00000000..7033a142 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/faq.html @@ -0,0 +1,28 @@ + + +PHPMailer FAQ + + +

PHPMailer FAQ

+
    +
  • Q: I am concerned that using include files will take up too much + processing time on my computer. How can I make it run faster?
    + A: PHP by itself is fairly fast, but it recompiles scripts every time they are run, which takes up valuable + computer resources. You can bypass this by using an opcode cache which compiles + PHP code and store it in memory to reduce overhead immensely. APC + (Alternative PHP Cache) is a free opcode cache extension in the PECL library.
  • +
  • Q: Which mailer gives me the best performance?
    + A: On a single machine the sendmail (or Qmail) is fastest overall. + Next fastest is mail() to give you the best performance. Both do not have the overhead of SMTP. + If you do not have a local mail server (as is typical on Windows), SMTP is your only option.
  • +
  • Q: When I try to attach a file with on my server I get a + "Could not find {file} on filesystem error". Why is this?
    + A: If you are using a Unix machine this is probably because the user + running your web server does not have read access to the directory in question. If you are using Windows, + then the problem is probably that you have used single backslashes to denote directories (\). + A single backslash has a special meaning to PHP so these are not + valid. Instead use double backslashes ("\\") or a single forward + slash ("/").
  • +
+ + diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/generatedocs.sh b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/generatedocs.sh new file mode 100755 index 00000000..9da1ddfe --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/generatedocs.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# Regenerate PHPMailer documentation +# Run from within the docs folder +rm -rf phpdoc/* +phpdoc --directory .. --target ./phpdoc --ignore test/,examples/,extras/,test_script/,vendor/,language/ --sourcecode --force --title PHPMailer --template="clean" +# You can merge regenerated docs into a separate docs working copy without messing up the git status like so: +# rsync -a --delete --exclude ".git" --exclude "phpdoc-cache-*/" --exclude "README.md" phpdoc/ ../../phpmailer-docs +# After updating docs, push/PR them to the phpmailer gh-pages branch: https://github.com/PHPMailer/PHPMailer/tree/gh-pages diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/pop3_article.txt b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/pop3_article.txt new file mode 100644 index 00000000..fb90b9c7 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/docs/pop3_article.txt @@ -0,0 +1,50 @@ +This is built for PHP Mailer 1.72 and was not tested with any previous version. It was developed under PHP 4.3.11 (E_ALL). It works under PHP 5 and 5.1 with E_ALL, but not in Strict mode due to var deprecation (but then neither does PHP Mailer either!). It follows the RFC 1939 standard explicitly and is fully commented. + +With that noted, here is how to implement it: + +I didn't want to modify the PHP Mailer classes at all, so you will have to include/require this class along with the base one. It can sit quite happily in the phpmailer directory. + +When you need it, create your POP3 object + +Right before I invoke PHP Mailer I activate the POP3 authorisation. POP3 before SMTP is a process whereby you login to your web hosts POP3 mail server BEFORE sending out any emails via SMTP. The POP3 logon 'verifies' your ability to send email by SMTP, which typically otherwise blocks you. On my web host (Pair Networks) a single POP3 logon is enough to 'verify' you for 90 minutes. Here is some sample PHP code that activates the POP3 logon and then sends an email via PHP Mailer: + +authorise('pop3.example.com', 110, 30, 'mailer', 'password', 1); +$mail = new PHPMailer(); $mail->SMTPDebug = 2; $mail->isSMTP(); +$mail->isHTML(false); $mail->Host = 'relay.example.com'; +$mail->From = 'mailer@example.com'; +$mail->FromName = 'Example Mailer'; +$mail->Subject = 'My subject'; +$mail->Body = 'Hello world'; +$mail->addAddress('rich@corephp.co.uk', 'Richard Davey'); +if (!$mail->send()) { + echo $mail->ErrorInfo; +} +?> + +The PHP Mailer parts of this code should be obvious to anyone who has used PHP Mailer before. One thing to note - you almost certainly will not need to use SMTP Authentication *and* POP3 before SMTP together. The Authorisation method is a proxy method to all of the others within that class. There are connect, Logon and disconnect methods available, but I wrapped them in the single Authorisation one to make things easier. +The Parameters + +The authorise parameters are as follows: + +$pop->authorise('pop3.example.com', 110, 30, 'mailer', 'password', 1); + + 1. pop3.example.com - The POP3 Mail Server Name (hostname or IP address) + 2. 110 - The POP3 Port on which to connect (default is usually 110, but check with your host) + 3. 30 - A connection time-out value (in seconds) + 4. mailer - The POP3 Username required to logon + 5. password - The POP3 Password required to logon + 6. 1 - The class debug level (0 = off, 1+ = debug output is echoed to the browser) + +Final Comments + the Download + +1) This class does not support APOP connections. This is only because I did not have an APOP server to test with, but if you'd like to see that added just contact me. + +2) Opening and closing lots of POP3 connections can be quite a resource/network drain. If you need to send a whole batch of emails then just perform the authentication once at the start, and then loop through your mail sending script. Providing this process doesn't take longer than the verification period lasts on your POP3 server, you should be fine. With my host that period is 90 minutes, i.e. plenty of time. + +3) If you have heavy requirements for this script (i.e. send a LOT of email on a frequent basis) then I would advise seeking out an alternative sending method (direct SMTP ideally). If this isn't possible then you could modify this class so the 'last authorised' date is recorded somewhere (MySQL, Flat file, etc) meaning you only open a new connection if the old one has expired, saving you precious overhead. + +4) There are lots of other POP3 classes for PHP available. However most of them implement the full POP3 command set, where-as this one is purely for authentication, and much lighter as a result. However using any of the other POP3 classes to just logon to your server would have the same net result. At the end of the day, use whatever method you feel most comfortable with. +Download + +My thanks to Chris Ryan for the inspiration (even if indirectly, via his SMTP class) diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/DKIM.phps b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/DKIM.phps new file mode 100644 index 00000000..e3d2bae0 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/DKIM.phps @@ -0,0 +1,38 @@ +setFrom('from@example.com', 'First Last'); +//Set an alternative reply-to address +$mail->addReplyTo('replyto@example.com', 'First Last'); +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); +//Set the subject line +$mail->Subject = 'PHPMailer DKIM test'; +//This should be the same as the domain of your From address +$mail->DKIM_domain = 'example.com'; +//Path to your private key file +$mail->DKIM_private = 'dkim_private.pem'; +//Set this to your own selector +$mail->DKIM_selector = 'phpmailer'; +//If your private key has a passphrase, set it here +$mail->DKIM_passphrase = ''; +//The identity you're signing as - usually your From address +$mail->DKIM_identity = $mail->From; + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; +} diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/code_generator.phps b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/code_generator.phps new file mode 100644 index 00000000..23458561 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/code_generator.phps @@ -0,0 +1,597 @@ +CharSet = 'utf-8'; +ini_set('default_charset', 'UTF-8'); +$mail->Debugoutput = $CFG['smtp_debugoutput']; +$example_code .= "\n\n\$mail = new PHPMailer(true);"; +$example_code .= "\n\$mail->CharSet = 'utf-8';"; +$example_code .= "\nini_set('default_charset', 'UTF-8');"; + +class phpmailerAppException extends phpmailerException +{ +} + +$example_code .= "\n\nclass phpmailerAppException extends phpmailerException {}"; +$example_code .= "\n\ntry {"; + +try { + if (isset($_POST["submit"]) && $_POST['submit'] == "Submit") { + $to = $_POST['To_Email']; + if (!PHPMailer::validateAddress($to)) { + throw new phpmailerAppException("Email address " . $to . " is invalid -- aborting!"); + } + + $example_code .= "\n\$to = '{$_POST['To_Email']}';"; + $example_code .= "\nif(!PHPMailer::validateAddress(\$to)) {"; + $example_code .= "\n throw new phpmailerAppException(\"Email address \" . " . + "\$to . \" is invalid -- aborting!\");"; + $example_code .= "\n}"; + + switch ($_POST['test_type']) { + case 'smtp': + $mail->isSMTP(); // telling the class to use SMTP + $mail->SMTPDebug = (integer)$_POST['smtp_debug']; + $mail->Host = $_POST['smtp_server']; // SMTP server + $mail->Port = (integer)$_POST['smtp_port']; // set the SMTP port + if ($_POST['smtp_secure']) { + $mail->SMTPSecure = strtolower($_POST['smtp_secure']); + } + $mail->SMTPAuth = array_key_exists('smtp_authenticate', $_POST); // enable SMTP authentication? + if (array_key_exists('smtp_authenticate', $_POST)) { + $mail->Username = $_POST['authenticate_username']; // SMTP account username + $mail->Password = $_POST['authenticate_password']; // SMTP account password + } + + $example_code .= "\n\$mail->isSMTP();"; + $example_code .= "\n\$mail->SMTPDebug = " . $_POST['smtp_debug'] . ";"; + $example_code .= "\n\$mail->Host = \"" . $_POST['smtp_server'] . "\";"; + $example_code .= "\n\$mail->Port = \"" . $_POST['smtp_port'] . "\";"; + $example_code .= "\n\$mail->SMTPSecure = \"" . strtolower($_POST['smtp_secure']) . "\";"; + $example_code .= "\n\$mail->SMTPAuth = " . (array_key_exists( + 'smtp_authenticate', + $_POST + ) ? 'true' : 'false') . ";"; + if (array_key_exists('smtp_authenticate', $_POST)) { + $example_code .= "\n\$mail->Username = \"" . $_POST['authenticate_username'] . "\";"; + $example_code .= "\n\$mail->Password = \"" . $_POST['authenticate_password'] . "\";"; + } + break; + case 'mail': + $mail->isMail(); // telling the class to use PHP's mail() + $example_code .= "\n\$mail->isMail();"; + break; + case 'sendmail': + $mail->isSendmail(); // telling the class to use Sendmail + $example_code .= "\n\$mail->isSendmail();"; + break; + case 'qmail': + $mail->isQmail(); // telling the class to use Qmail + $example_code .= "\n\$mail->isQmail();"; + break; + default: + throw new phpmailerAppException('Invalid test_type provided'); + } + + try { + if ($_POST['From_Name'] != '') { + $mail->addReplyTo($_POST['From_Email'], $_POST['From_Name']); + $mail->setFrom($_POST['From_Email'], $_POST['From_Name']); + + $example_code .= "\n\$mail->addReplyTo(\"" . + $_POST['From_Email'] . "\", \"" . $_POST['From_Name'] . "\");"; + $example_code .= "\n\$mail->setFrom(\"" . + $_POST['From_Email'] . "\", \"" . $_POST['From_Name'] . "\");"; + } else { + $mail->addReplyTo($_POST['From_Email']); + $mail->setFrom($_POST['From_Email'], $_POST['From_Email']); + + $example_code .= "\n\$mail->addReplyTo(\"" . $_POST['From_Email'] . "\");"; + $example_code .= "\n\$mail->setFrom(\"" . + $_POST['From_Email'] . "\", \"" . $_POST['From_Email'] . "\");"; + } + + if ($_POST['To_Name'] != '') { + $mail->addAddress($to, $_POST['To_Name']); + $example_code .= "\n\$mail->addAddress(\"$to\", \"" . $_POST['To_Name'] . "\");"; + } else { + $mail->addAddress($to); + $example_code .= "\n\$mail->addAddress(\"$to\");"; + } + + if ($_POST['bcc_Email'] != '') { + $indiBCC = explode(" ", $_POST['bcc_Email']); + foreach ($indiBCC as $key => $value) { + $mail->addBCC($value); + $example_code .= "\n\$mail->addBCC(\"$value\");"; + } + } + + if ($_POST['cc_Email'] != '') { + $indiCC = explode(" ", $_POST['cc_Email']); + foreach ($indiCC as $key => $value) { + $mail->addCC($value); + $example_code .= "\n\$mail->addCC(\"$value\");"; + } + } + } catch (phpmailerException $e) { //Catch all kinds of bad addressing + throw new phpmailerAppException($e->getMessage()); + } + $mail->Subject = $_POST['Subject'] . ' (PHPMailer test using ' . strtoupper($_POST['test_type']) . ')'; + $example_code .= "\n\$mail->Subject = \"" . $_POST['Subject'] . + ' (PHPMailer test using ' . strtoupper($_POST['test_type']) . ')";'; + + if ($_POST['Message'] == '') { + $body = file_get_contents('contents.html'); + } else { + $body = $_POST['Message']; + } + + $example_code .= "\n\$body = <<<'EOT'\n" . htmlentities($body) . "\nEOT;"; + + $mail->WordWrap = 78; // set word wrap to the RFC2822 limit + $mail->msgHTML($body, dirname(__FILE__), true); //Create message bodies and embed images + + $example_code .= "\n\$mail->WordWrap = 78;"; + $example_code .= "\n\$mail->msgHTML(\$body, dirname(__FILE__), true); //Create message bodies and embed images"; + + $mail->addAttachment('images/phpmailer_mini.png', 'phpmailer_mini.png'); // optional name + $mail->addAttachment('images/phpmailer.png', 'phpmailer.png'); // optional name + $example_code .= "\n\$mail->addAttachment('images/phpmailer_mini.png'," . + "'phpmailer_mini.png'); // optional name"; + $example_code .= "\n\$mail->addAttachment('images/phpmailer.png', 'phpmailer.png'); // optional name"; + + $example_code .= "\n\ntry {"; + $example_code .= "\n \$mail->send();"; + $example_code .= "\n \$results_messages[] = \"Message has been sent using " . + strtoupper($_POST['test_type']) . "\";"; + $example_code .= "\n}"; + $example_code .= "\ncatch (phpmailerException \$e) {"; + $example_code .= "\n throw new phpmailerAppException('Unable to send to: ' . \$to. ': '.\$e->getMessage());"; + $example_code .= "\n}"; + + try { + $mail->send(); + $results_messages[] = "Message has been sent using " . strtoupper($_POST["test_type"]); + } catch (phpmailerException $e) { + throw new phpmailerAppException("Unable to send to: " . $to . ': ' . $e->getMessage()); + } + } +} catch (phpmailerAppException $e) { + $results_messages[] = $e->errorMessage(); +} +$example_code .= "\n}"; +$example_code .= "\ncatch (phpmailerAppException \$e) {"; +$example_code .= "\n \$results_messages[] = \$e->errorMessage();"; +$example_code .= "\n}"; +$example_code .= "\n\nif (count(\$results_messages) > 0) {"; +$example_code .= "\n echo \"

Run results

\\n\";"; +$example_code .= "\n echo \"
    \\n\";"; +$example_code .= "\nforeach (\$results_messages as \$result) {"; +$example_code .= "\n echo \"
  • \$result
  • \\n\";"; +$example_code .= "\n}"; +$example_code .= "\necho \"
\\n\";"; +$example_code .= "\n}"; +?> + + + + PHPMailer Test Page + + + + + + + + +"; + echo exit("ERROR: Wrong PHP version. Must be PHP 5 or above."); +} + +if (count($results_messages) > 0) { + echo '

Run results

'; + echo '
    '; + foreach ($results_messages as $result) { + echo "
  • $result
  • "; + } + echo '
'; +} + +if (isset($_POST["submit"]) && $_POST["submit"] == "Submit") { + echo "
\n"; + echo "
Script:\n"; + echo "
\n";
+    echo $example_code;
+    echo "\n
\n"; + echo "\n
\n"; +} +?> +
+
+
+
+ Mail Details +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+
Test will include two attachments.
+ + +
+
+ Mail Test Specs + + + + + +
Test Type +
+ + + required> +
+
+ + + required> +
+
+ + + required> +
+
+ + + required> +
+
+
"> + SMTP Specific Options: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ + value=""> +
+ +
+ +
+
+
+
+
+ +
+
+ +
+ +
+ + + + diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/contents.html b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/contents.html new file mode 100644 index 00000000..dc3fc667 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/contents.html @@ -0,0 +1,17 @@ + + + + + PHPMailer Test + + +
+

This is a test of PHPMailer.

+
+ PHPMailer rocks +
+

This example uses HTML.

+

ISO-8859-1 text: éèîüçÅñæß

+
+ + diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/contentsutf8.html b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/contentsutf8.html new file mode 100644 index 00000000..81a20240 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/contentsutf8.html @@ -0,0 +1,20 @@ + + + + + PHPMailer Test + + +
+

This is a test of PHPMailer.

+
+ PHPMailer rocks +
+

This example uses HTML.

+

Chinese text: 郵件內容為空

+

Russian text: ПуÑтое тело ÑообщениÑ

+

Armenian text: Õ€Õ¡Õ²Õ¸Ö€Õ¤Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¤Õ¡Õ¿Õ¡Ö€Õ¯ Õ§

+

Czech text: Prázdné tělo zprávy

+
+ + diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/exceptions.phps b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/exceptions.phps new file mode 100644 index 00000000..0e941e73 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/exceptions.phps @@ -0,0 +1,35 @@ +setFrom('from@example.com', 'First Last'); + //Set an alternative reply-to address + $mail->addReplyTo('replyto@example.com', 'First Last'); + //Set who the message is to be sent to + $mail->addAddress('whoto@example.com', 'John Doe'); + //Set the subject line + $mail->Subject = 'PHPMailer Exceptions test'; + //Read an HTML message body from an external file, convert referenced images to embedded, + //and convert the HTML into a basic plain-text alternative body + $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + //Replace the plain text body with one created manually + $mail->AltBody = 'This is a plain-text message body'; + //Attach an image file + $mail->addAttachment('images/phpmailer_mini.png'); + //send the message + //Note that we don't need check the response from this because it will throw an exception if it has trouble + $mail->send(); + echo "Message sent!"; +} catch (phpmailerException $e) { + echo $e->errorMessage(); //Pretty error messages from PHPMailer +} catch (Exception $e) { + echo $e->getMessage(); //Boring error messages from anything else! +} diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/gmail.phps b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/gmail.phps new file mode 100644 index 00000000..b3cc02d5 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/gmail.phps @@ -0,0 +1,75 @@ +isSMTP(); + +//Enable SMTP debugging +// 0 = off (for production use) +// 1 = client messages +// 2 = client and server messages +$mail->SMTPDebug = 2; + +//Ask for HTML-friendly debug output +$mail->Debugoutput = 'html'; + +//Set the hostname of the mail server +$mail->Host = 'smtp.gmail.com'; +// use +// $mail->Host = gethostbyname('smtp.gmail.com'); +// if your network does not support SMTP over IPv6 + +//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission +$mail->Port = 587; + +//Set the encryption system to use - ssl (deprecated) or tls +$mail->SMTPSecure = 'tls'; + +//Whether to use SMTP authentication +$mail->SMTPAuth = true; + +//Username to use for SMTP authentication - use full email address for gmail +$mail->Username = "username@gmail.com"; + +//Password to use for SMTP authentication +$mail->Password = "yourpassword"; + +//Set who the message is to be sent from +$mail->setFrom('from@example.com', 'First Last'); + +//Set an alternative reply-to address +$mail->addReplyTo('replyto@example.com', 'First Last'); + +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); + +//Set the subject line +$mail->Subject = 'PHPMailer GMail SMTP test'; + +//Read an HTML message body from an external file, convert referenced images to embedded, +//convert HTML into a basic plain-text alternative body +$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + +//Replace the plain text body with one created manually +$mail->AltBody = 'This is a plain-text message body'; + +//Attach an image file +$mail->addAttachment('images/phpmailer_mini.png'); + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; +} diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps new file mode 100644 index 00000000..d64483a4 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/gmail_xoauth.phps @@ -0,0 +1,85 @@ +isSMTP(); + +//Enable SMTP debugging +// 0 = off (for production use) +// 1 = client messages +// 2 = client and server messages +$mail->SMTPDebug = 0; + +//Ask for HTML-friendly debug output +$mail->Debugoutput = 'html'; + +//Set the hostname of the mail server +$mail->Host = 'smtp.gmail.com'; + +//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission +$mail->Port = 587; + +//Set the encryption system to use - ssl (deprecated) or tls +$mail->SMTPSecure = 'tls'; + +//Whether to use SMTP authentication +$mail->SMTPAuth = true; + +//Set AuthType +$mail->AuthType = 'XOAUTH2'; + +//User Email to use for SMTP authentication - Use the same Email used in Google Developer Console +$mail->oauthUserEmail = "someone@gmail.com"; + +//Obtained From Google Developer Console +$mail->oauthClientId = "RANDOMCHARS-----duv1n2.apps.googleusercontent.com"; + +//Obtained From Google Developer Console +$mail->oauthClientSecret = "RANDOMCHARS-----lGyjPcRtvP"; + +//Obtained By running get_oauth_token.php after setting up APP in Google Developer Console. +//Set Redirect URI in Developer Console as [https/http]:////get_oauth_token.php +// eg: http://localhost/phpmail/get_oauth_token.php +$mail->oauthRefreshToken = "RANDOMCHARS-----DWxgOvPT003r-yFUV49TQYag7_Aod7y0"; + +//Set who the message is to be sent from +//For gmail, this generally needs to be the same as the user you logged in as +$mail->setFrom('from@example.com', 'First Last'); + +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); + +//Set the subject line +$mail->Subject = 'PHPMailer GMail SMTP test'; + +//Read an HTML message body from an external file, convert referenced images to embedded, +//convert HTML into a basic plain-text alternative body +$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + +//Replace the plain text body with one created manually +$mail->AltBody = 'This is a plain-text message body'; + +//Attach an image file +$mail->addAttachment('images/phpmailer_mini.png'); + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; +} diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/images/phpmailer.png b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/images/phpmailer.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdd83c8ded93d00b1e05abcfe1d6cb5b2ae96ef GIT binary patch literal 5831 zcmZ`-XE*jNYS*8Z~-kbfbkRA=)I& zL=Q&Y40Gq)^YcFU$G4xopS{2Jt@^I@?zd(p26WV1)I>x?bcXlz%!!DIEeQ9vlq7`f z)5P1NL_};!hI-l-A;h~M-afi%#W#Eg3tdJMlOkV7$H((Oj|&iz9I}fxNQi6Fd*67c zM1*OO(Lp4==ud;$&&mP4Xfs>STdPbC4CBRq2v*6efi0)WFI#+}yEx4`H=B<+a*9`5 z(EY2VGlpKdaTIfA;S+0U?EhKb!jOJBDVVSC--h|{tCM+yB%Ytm9+N|f+*vXXi&Im{ zsi}e%@$cSoi6W6mMv3FoQ+lsP=U$RStAo*g#}|K>J4y}U*N1!`OgwCDbIm+{)_y*^ zl$5&t?XP5EI;-?DB^}*WK0g?2kU*0r`hZK+Ol?N>>guW=T2xi_w*5XU2NzdgR+H;+ z(w{$nMn^}>%7hU}$SdqW&m!1m9e?S1dwbJTQ876(a&t>kVX@dZ)aMChY+mzqtgsvP zQgjDc%vc)Obj>K{j!um9*bA82I?smdXT;ae0fEny3=COhq@<)S_F|HfX=K|TTx)+O z@}?PTtsA4h+^0J@KU_D}1jt%#B_O>>v_br({1|gXeMSC`SrG#u(Jp)yvtC`fbM0I~Q`N$+o+TEn|Gxb&WoXs=@24 z%NTBsg)G+4ki&ziBG)COFZ0*HvyIW8TYW5e$LzVrx~U>uQFpgS5!wSt*^q6~`kv^9 zCG~VkC<_QfGN`Gkm9cG17P9*;U(~WiUUizsO^FDrZbI@z!(6YM>$(2SgK12?opR#R z&T6faL9f|)*{a=wK;iO=JfuH}}y!`RW?(rym++PB;s*DvH5@>0EecAdEmwYgy z)sLu7eIt|I4g3623xyjdrBkc`Q#&+V&;L}Q0@sYf%X2=c2b-TM(Y_+lgJyz$jivhX zlf&yr6aX(Tud0f7KIlSaA1+o-{Z{x#oa&H?de*oxYk_~aQ6^DRL1n#E5_{*H81fTu znV}I)B>w6Q( zxxorC;KzuxL)`JsAJkP-ov^I_CNn1=4)e`Ce>V>|U+)BC{a)mYssuAI0ya=u#d2;q zpGMR31^6x9r7_6si$Ft0cJ>Nc2))&dx`P21kI{uf93r4h&8f|dVL&ei+EPIazLbJA z4Gj3v($n9UrUz;AP!hC4=BC-&xBK_r2U1uhT0$<4t9)XwB(3VwZE?7x$=Q5-i|g4U z3H%Tk8Z85p`u#?aX=H2_P@gcn^vm#6_KbW)!rw>U_o%F|Z?h-3P1~*NuBjC zpS}|zr4S_$23*3LjVN-~_H1+;W23=%04Ny#^@l*?F*N>o##Ds(IrE+XMB$ZiF9C)# z(8B@P(q{!Vhfm+VaQSOC7rBiUdbQOO?&BF0Z92^i*j%@vpn0KRSK9;no0g&D_(qdVG1PPJs(}X1poflKz6XT-*4*BLk*~P^b2&)F|W)p2= z*EuvTa&{@%CB9f@9v~hC8t@mQ4GvqnLS`p?M^Z&jGeNA0Ac-imtPZRzHfCd@+OmfK zhVMiwIU8fa#RKRao~g&Y0Qp6?OrtoF0Aed!7P2aIzv_Fo{kDSJ=uLuB0WEE6k|O3I z!|E*~|Hx{QV%JHSeR)*WC4K(U*eGwPL)J4#kb2b2wcGf6LWaNIoX9u}-y2PFpC-RumMjV< zh5x(KMcNpLnyax&Sz@7ZIl~j zRfbB>UA?!4vS_R6^PlbwCq!7|8{oM1E`m@aq9ZiSk|h54>pbjCIvm-ohMEu7yWH@0XYuD zg+jHXU(#*M)OWT?jQNqFU5f2)@lLl{KzHXJT3Dcu9ABSjf3+lLPD0=oYNBmdt+EQe z=bJ-K^!2O{Hq<{(SLBF8T4Bt$7UDUt!pqqxV-`%IH&tOZl+^`S()hvm>|2|8<=FKj zol=^--D#r;FSlzPa4f@1jt1*QoX_}SSq81hIDQ*N-G1@soF4)PicHEL(v&@X7NVsP|!gFo1P+oGY4gm-ATKq)Co=){Y=5$IugU+j9XOknR&nb=fG6X|#TJ}KaK zKZA6q2yxIZ2m%B=@(U!LaVYybB~Yhg3=IT%1(H&YwU2dXZ7x|t$5&&(`6d<5#|<3_ zRd2=sGqbgocq%2iRo3h*@iO#>m<<>_Xx3>NCl;Y ze+Xe2o5WIN;wU+tgNmdeWA%JOw;&^Ngj%PIO8Q@Ut{o1{2?+^eLj~5*9_(dKj-p2s zj(}21=>$}}=X{*?4?txNosr}f5)zst?3-)F++DmeT4xQ-L_G(#^nx={5x6OCl}CnC z%gf^ggw)3v2(A;Rh3`?El0lmW@jXy?clV&6AQKaM&CV#4*1D*@#Ngndh=@r1c2-ta z>9;qdTv|~?V}AC~h}8zQmzr;iB?w}q5M~sww3!*z^GtWm}|b<*;GVi5Ok1E zE?l^k%9mbEFfN)N7#aqS9T5D)Dmh@J})K+a|uF-!-T`?cG zwkl_$+Ho99kHStOlalEFeW4Hihq$P^Ff;&7(|{w#P;jgoY3&y078HE@Phvw@0+fb2 z6IFzZFWB4_jPXhT*V9};V@|D!9`z216ha%&4h!qL{*nEk!9?8W+hwJ{O5FjvQ8>;k z+$OcCzTWf!bhmI{kbf+eHezS;?k|5;!f1VNZ`;0K5@Qv_#DVC2So$dhe~DDBHF9?(OalI8ANvB#PWAe8#x;a*CNo2E`2aqrD{uZorwsis{G6*GDL$g=`zK-XRGl)~><~_V@e?^FaX}qNVOgwT8CnG6 z7NNjTI&v>ma|LDlq3$)bOLFq0%P*|xXlY(EtiJolS=W!n;oD(;%kA<@$|3J}PIl&f zqH{m0?Clor%*I_0EOBqJ!ct%|UAi$7+trPq-Y7+Y+(Ob-Z+Gj}MqcDQDDtck`me-R zg`&ZJvnhO!P(G@kLLM)eyzVx&ku5-deH|8f9B*5cs{v@EAu#rS0#Om1*T15}hB-}l zEBhV1{7v9mNj$fwt&%kyTbu}UvCF>=h7F@gk^g|cXVVFc|76#Ol{q6!Z6M9?^DvD< z&DWur(F_@H1Es7=%>svZe*qRV^-tFi(Qw?0pWUX=FxQU3*-Tj{!mJs*KU6&lCdC;0 zsQjIz2TJp|8WXwvP+u{I9x*;A!r_N&cURUDU6o#>p!7l#UkSr9>YWga3ElSeaEyje zYL2OJ(G6LKrRJ@pjma`jzL90F$!_J4P04tJ+ECHiCS_qx-fsp*riGdeEV&TdxB8)cxyfM!QaWQFp7H8;-;JmbssU>R z;|R{}3ON+K+c8fCpjF&7(2CjkYX^zit%)1xXNCe_4+Wze$tuIY=?TEDPO@@&wn<)H z$H?(R&;Ihxmri_rec2=bn(t1CoQh}A`N8kAeH6FG#qMUc=RvX(lTx)P9P(DUUD~dd zb}c7cGY&iHcBTo$G3pdJbOn_c+(~gFkQX>a7aF4k2|sss98Tix?>9F=qA0Roz1_2? zof&6b+TLI85DKnjdBEFY4_CXxwmtNrYdToU(1_=MR%hHHyFj{p3$zI?&O z?DiLaHWYlp{gyWL=N5q%@`k2pzuu`f4e#-|=Vk)_=jjklcDj4LW4D6MK!nZ+yN`WW zkPjiUx2tUoXGv0Y5X##E5%A`e*vLTZ8QR5&ky~@;4GEV&3f>A7pb6D(YUORA@--Zo zp1mc+@ld_9nu|DxWjqUg0UWLmcfQ;S?-9~ac6+3I2a$>6B~(^^r9X+HG?3WkIalq3 zfCjWzRrC8DG^_Eh!(Ie0RFYII)h9$9G7 zz$&SGs)K!_$c5IDKi0j^j`$0v;h9ONmi*+ zl(vxI=$R};{)?P~T1&GY0Aq|*ey(DW$#`A@IpynD1gW5S!~5-CpI-pq0l)DGsxb_* z*Tx=i=XvAd6t-UL0ay&JGtG|Ou}QwkT&`Fm`O_AAMm+Qh+2HqjnwT6aR=G~obL^G(_r}PD~sjS%#jXH zhYS$0hzh3vJKDsZ8kCKPe-#_Of^^F4v1xFgVXT=$MoJskKs+<+xMs=Wro4UHK=j{5i#RM((VXR6JB>0)-hYOnl=6jNN??sTG{zN^F>hf8 zBPa?E%%(>H($vI=Ii(1RBB>XFEz7^jjt7g2$u%P(ZikG|N1KW98NZp|R7jQ7O=+k- z?TWD>85?-Kt#f#MnZ+sd-45^8Oht^dCG_KtvpGt zAkEob4fu-R9Zn=)p0yr6IJLsS_7>$?2ec?-wNsYrh|40_ZWUwRNw%8i3j67kqDleO zt$ob3_d0&Ly1L8bk3DHTe&lp@!^)}U$LM(cc@Pi}VubKRwQv#V#D}Dimn!Rl3kx*^ RgdfyIhIdW$>U5l={s-zotz7^B literal 0 HcmV?d00001 diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/images/phpmailer_mini.png new file mode 100644 index 0000000000000000000000000000000000000000..e6915f4317692a2591ef8c96ef74c50ea42a6fba GIT binary patch literal 1842 zcmV-22hI42P)cS z;&&eArFvNZrNTx8&q9F_J$UfI*49=(Ti!Qre+`?5s;4?sCM5$wU@&NWeB92?PCr{_ zqSMw;@*%0($^*qB(m{j=BkJz%wlJixH1->VNhVX(7ay~-B2 zwY9a(GT)!}^m4J`HFtBgo^6lOPqq0lIW5kK*IX*LY$!P<2pCjXSI06L85v;~s4wmT(7E?RPes7OO8NtDdii%h! z{r&wcFwPX`%IgXXZ}X*q-+qpER$22FIHr~_b;lDwf`dJJ^oV6rQBlDKW2FljYF*Q} zuB~mj-;tGGvh)cLcIworcO0EOdD0*l(vP{`7Dg*JM7cIVHY>t|VRWsouCmI%e*Idh zR2l<@^wR~y8$amlC$;nCVvknA?)Lj*7ErAt}3cqzHk8tJyGgWB7u&^*VIVczs_7Ju*_MGuU zwwED8;lV&fI-zM`NMlW!qYBCX+*niOi_DJC>RB!U=)mkQ7{Td!6+C7qhOx{7+&2x`M1bJkHQ7-=P<+qZ9bb#)m8tFEs8Cr&CldT(zJA$|b6b?esR;v&LPnGVa!%2;6B zSVvwk6f+wb8ew8$;y_^NY&$zUa6-VYUcHJVLh_YFB7uJ|FE0WH!O7Cn(wjGL9zTAZ zkdS~f5fKr+y}e8@IJ|c48jeoa*4A*BRVo!STU%Sx)6?_v@?dBR7(Dj%^${>c0|zoR zH8sTxM#4UDT1&w25ik15SI3VZ2Z>B3BVcF&yfeo^A&G(^@jP*Haq!FpD<~+y4i+(K z@Y&JPar5R)WDX1rAm{>tyZ-+E#)6^eU}U3WoD8k3te{E)_UzfSCk$cu?Sp|ICJhm=f7Nx`5cU}&*}bw&JQ zJiOpydV2co*|VtCU{}QX7)+oSFJ82?v>^PM35NTM4hd}dw70iswpd9?3A#GM%+OrO zDt^>vfLNLS>@_%TMr1Vd|}HzJ60aBvVG_rWmVq8E^8TZKZQ3k=w3 zG4~I0c6R<$z#ugK)2B}{N||6-QF?lMkh2elHspfgFU$WY1cok+^$k-66AaxF{i?aS z`Ocj?=xnIEsi}zzhH;Bx=&@M1F>~Nw9!vq#Xf&vpn~!h++*H;U0W&XIQq^iT*TmJ; z)!W;fH!c;CFJv;ra)+HtKtKRKVlhB1fF~OoM@Pr~TZ~(PVwlY0 + + + + PHPMailer Examples + + +

PHPMailer code examplesPHPMailer logo

+

This folder contains a collection of examples of using PHPMailer.

+

About testing email sending

+

When working on email sending code you'll find yourself worrying about what might happen if all these test emails got sent to your mailing list. The solution is to use a fake mail server, one that acts just like the real thing, but just doesn't actually send anything out. Some offer web interfaces, feedback, logging, the ability to return specific error codes, all things that are useful for testing error handling, authentication etc. Here's a selection of mail testing tools you might like to try:

+
    +
  • FakeSMTP, a Java desktop app with the ability to show an SMTP log and save messages to a folder.
  • +
  • FakeEmail, a Python-based fake mail server with a web interface.
  • +
  • smtp-sink, part of the Postfix mail server, so you probably already have this installed. This is used in the Travis-CI configuration to run PHPMailer's unit tests.
  • +
  • smtp4dev, a dummy SMTP server for Windows.
  • +
  • fakesendmail.sh, part of PHPMailer's test setup, this is a shell script that emulates sendmail for testing 'mail' or 'sendmail' methods in PHPMailer.
  • +
  • msglint, not a mail server, the IETF's MIME structure analyser checks the formatting of your messages.
  • +
+
+

Security note

+

Before running these examples you'll need to rename them with '.php' extensions. They are supplied as '.phps' files which will usually be displayed with syntax highlighting by PHP instead of running them. This prevents potential security issues with running potential spam-gateway code if you happen to deploy these code examples on a live site - please don't do that! Similarly, don't leave your passwords in these files as they will be visible to the world!

+
+

code_generator.phps

+

This script is a simple code generator - fill in the form and hit submit, and it will use when you entered to email you a message, and will also generate PHP code using your settings that you can copy and paste to use in your own apps. If you need to get going quickly, this is probably the best place to start.

+

mail.phps

+

This script is a basic example which creates an email message from an external HTML file, creates a plain text body, sets various addresses, adds an attachment and sends the message. It uses PHP's built-in mail() function which is the simplest to use, but relies on the presence of a local mail server, something which is not usually available on Windows. If you find yourself in that situation, either install a local mail server, or use a remote one and send using SMTP instead.

+

exceptions.phps

+

The same as the mail example, but shows how to use PHPMailer's optional exceptions for error handling.

+

smtp.phps

+

A simple example sending using SMTP with authentication.

+

smtp_no_auth.phps

+

A simple example sending using SMTP without authentication.

+

sendmail.phps

+

A simple example using sendmail. Sendmail is a program (usually found on Linux/BSD, OS X and other UNIX-alikes) that can be used to submit messages to a local mail server without a lengthy SMTP conversation. It's probably the fastest sending mechanism, but lacks some error reporting features. There are sendmail emulators for most popular mail servers including postfix, qmail, exim etc.

+

gmail.phps

+

Submitting email via Google's Gmail service is a popular use of PHPMailer. It's much the same as normal SMTP sending, just with some specific settings, namely using TLS encryption, authentication is enabled, and it connects to the SMTP submission port 587 on the smtp.gmail.com host. This example does all that.

+

pop_before_smtp.phps

+

Before effective SMTP authentication mechanisms were available, it was common for ISPs to use POP-before-SMTP authentication. As it implies, you authenticate using the POP3 protocol (an older protocol now mostly replaced by the far superior IMAP), and then the SMTP server will allow send access from your IP address for a short while, usually 5-15 minutes. PHPMailer includes a POP3 protocol client, so it can carry out this sequence - it's just like a normal SMTP conversation (without authentication), but connects via POP first.

+

mailing_list.phps

+

This is a somewhat naïve example of sending similar emails to a list of different addresses. It sets up a PHPMailer instance using SMTP, then connects to a MySQL database to retrieve a list of recipients. The code loops over this list, sending email to each person using their info and marks them as sent in the database. It makes use of SMTP keepalive which saves reconnecting and re-authenticating between each message.

+
+

smtp_check.phps

+

This is an example showing how to use the SMTP class by itself (without PHPMailer) to check an SMTP connection.

+
+

Most of these examples use the 'example.com' domain. This domain is reserved by IANA for illustrative purposes, as documented in RFC 2606. Don't use made-up domains like 'mydomain.com' or 'somedomain.com' in examples as someone, somewhere, probably owns them!

+ + diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/mail.phps b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/mail.phps new file mode 100644 index 00000000..8e129f47 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/mail.phps @@ -0,0 +1,31 @@ +setFrom('from@example.com', 'First Last'); +//Set an alternative reply-to address +$mail->addReplyTo('replyto@example.com', 'First Last'); +//Set who the message is to be sent to +$mail->addAddress('whoto@example.com', 'John Doe'); +//Set the subject line +$mail->Subject = 'PHPMailer mail() test'; +//Read an HTML message body from an external file, convert referenced images to embedded, +//convert HTML into a basic plain-text alternative body +$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); +//Replace the plain text body with one created manually +$mail->AltBody = 'This is a plain-text message body'; +//Attach an image file +$mail->addAttachment('images/phpmailer_mini.png'); + +//send the message, check for errors +if (!$mail->send()) { + echo "Mailer Error: " . $mail->ErrorInfo; +} else { + echo "Message sent!"; +} diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/mailing_list.phps b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/mailing_list.phps new file mode 100644 index 00000000..8644bb59 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/mailing_list.phps @@ -0,0 +1,59 @@ +isSMTP(); +$mail->Host = 'smtp.example.com'; +$mail->SMTPAuth = true; +$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead +$mail->Port = 25; +$mail->Username = 'yourname@example.com'; +$mail->Password = 'yourpassword'; +$mail->setFrom('list@example.com', 'List manager'); +$mail->addReplyTo('list@example.com', 'List manager'); + +$mail->Subject = "PHPMailer Simple database mailing list test"; + +//Same body for all messages, so set this before the sending loop +//If you generate a different body for each recipient (e.g. you're using a templating system), +//set it inside the loop +$mail->msgHTML($body); +//msgHTML also sets AltBody, but if you want a custom one, set it afterwards +$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; + +//Connect to the database and select the recipients from your mailing list that have not yet been sent to +//You'll need to alter this to match your database +$mysql = mysqli_connect('localhost', 'username', 'password'); +mysqli_select_db($mysql, 'mydb'); +$result = mysqli_query($mysql, 'SELECT full_name, email, photo FROM mailinglist WHERE sent = false'); + +foreach ($result as $row) { //This iterator syntax only works in PHP 5.4+ + $mail->addAddress($row['email'], $row['full_name']); + if (!empty($row['photo'])) { + $mail->addStringAttachment($row['photo'], 'YourPhoto.jpg'); //Assumes the image data is stored in the DB + } + + if (!$mail->send()) { + echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '
'; + break; //Abandon sending + } else { + echo "Message sent to :" . $row['full_name'] . ' (' . str_replace("@", "@", $row['email']) . ')
'; + //Mark it as sent in the DB + mysqli_query( + $mysql, + "UPDATE mailinglist SET sent = true WHERE email = '" . + mysqli_real_escape_string($mysql, $row['email']) . "'" + ); + } + // Clear all addresses and attachments for next loop + $mail->clearAddresses(); + $mail->clearAttachments(); +} diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps new file mode 100644 index 00000000..164dfe8d --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/pop_before_smtp.phps @@ -0,0 +1,54 @@ +isSMTP(); + //Enable SMTP debugging + // 0 = off (for production use) + // 1 = client messages + // 2 = client and server messages + $mail->SMTPDebug = 2; + //Ask for HTML-friendly debug output + $mail->Debugoutput = 'html'; + //Set the hostname of the mail server + $mail->Host = "mail.example.com"; + //Set the SMTP port number - likely to be 25, 465 or 587 + $mail->Port = 25; + //Whether to use SMTP authentication + $mail->SMTPAuth = false; + //Set who the message is to be sent from + $mail->setFrom('from@example.com', 'First Last'); + //Set an alternative reply-to address + $mail->addReplyTo('replyto@example.com', 'First Last'); + //Set who the message is to be sent to + $mail->addAddress('whoto@example.com', 'John Doe'); + //Set the subject line + $mail->Subject = 'PHPMailer POP-before-SMTP test'; + //Read an HTML message body from an external file, convert referenced images to embedded, + //and convert the HTML into a basic plain-text alternative body + $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); + //Replace the plain text body with one created manually + $mail->AltBody = 'This is a plain-text message body'; + //Attach an image file + $mail->addAttachment('images/phpmailer_mini.png'); + //send the message + //Note that we don't need check the response from this because it will throw an exception if it has trouble + $mail->send(); + echo "Message sent!"; +} catch (phpmailerException $e) { + echo $e->errorMessage(); //Pretty error messages from PHPMailer +} catch (Exception $e) { + echo $e->getMessage(); //Boring error messages from anything else! +} diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js new file mode 100644 index 00000000..ebdb9c94 --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/XRegExp.js @@ -0,0 +1,664 @@ +// XRegExp 1.5.1 +// (c) 2007-2012 Steven Levithan +// MIT License +// +// Provides an augmented, extensible, cross-browser implementation of regular expressions, +// including support for additional syntax, flags, and methods + +var XRegExp; + +if (XRegExp) { + // Avoid running twice, since that would break references to native globals + throw Error("can't load XRegExp twice in the same frame"); +} + +// Run within an anonymous function to protect variables and avoid new globals +(function (undefined) { + + //--------------------------------- + // Constructor + //--------------------------------- + + // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native + // regular expression in that additional syntax and flags are supported and cross-browser + // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and + // converts to type XRegExp + XRegExp = function (pattern, flags) { + var output = [], + currScope = XRegExp.OUTSIDE_CLASS, + pos = 0, + context, tokenResult, match, chr, regex; + + if (XRegExp.isRegExp(pattern)) { + if (flags !== undefined) + throw TypeError("can't supply flags when constructing one RegExp from another"); + return clone(pattern); + } + // Tokens become part of the regex construction process, so protect against infinite + // recursion when an XRegExp is constructed within a token handler or trigger + if (isInsideConstructor) + throw Error("can't call the XRegExp constructor within token definition functions"); + + flags = flags || ""; + context = { // `this` object for custom tokens + hasNamedCapture: false, + captureNames: [], + hasFlag: function (flag) {return flags.indexOf(flag) > -1;}, + setFlag: function (flag) {flags += flag;} + }; + + while (pos < pattern.length) { + // Check for custom tokens at the current position + tokenResult = runTokens(pattern, pos, currScope, context); + + if (tokenResult) { + output.push(tokenResult.output); + pos += (tokenResult.match[0].length || 1); + } else { + // Check for native multicharacter metasequences (excluding character classes) at + // the current position + if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) { + output.push(match[0]); + pos += match[0].length; + } else { + chr = pattern.charAt(pos); + if (chr === "[") + currScope = XRegExp.INSIDE_CLASS; + else if (chr === "]") + currScope = XRegExp.OUTSIDE_CLASS; + // Advance position one character + output.push(chr); + pos++; + } + } + } + + regex = RegExp(output.join(""), nativ.replace.call(flags, flagClip, "")); + regex._xregexp = { + source: pattern, + captureNames: context.hasNamedCapture ? context.captureNames : null + }; + return regex; + }; + + + //--------------------------------- + // Public properties + //--------------------------------- + + XRegExp.version = "1.5.1"; + + // Token scope bitflags + XRegExp.INSIDE_CLASS = 1; + XRegExp.OUTSIDE_CLASS = 2; + + + //--------------------------------- + // Private variables + //--------------------------------- + + var replacementToken = /\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g, + flagClip = /[^gimy]+|([\s\S])(?=[\s\S]*\1)/g, // Nonnative and duplicate flags + quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/, + isInsideConstructor = false, + tokens = [], + // Copy native globals for reference ("native" is an ES3 reserved keyword) + nativ = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split + }, + compliantExecNpcg = nativ.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups + compliantLastIndexIncrement = function () { + var x = /^/g; + nativ.test.call(x, ""); + return !x.lastIndex; + }(), + hasNativeY = RegExp.prototype.sticky !== undefined, + nativeTokens = {}; + + // `nativeTokens` match native multicharacter metasequences only (including deprecated octals, + // excluding character classes) + nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/; + nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/; + + + //--------------------------------- + // Public methods + //--------------------------------- + + // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by + // the XRegExp library and can be used to create XRegExp plugins. This function is intended for + // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can + // be disabled by `XRegExp.freezeTokens` + XRegExp.addToken = function (regex, handler, scope, trigger) { + tokens.push({ + pattern: clone(regex, "g" + (hasNativeY ? "y" : "")), + handler: handler, + scope: scope || XRegExp.OUTSIDE_CLASS, + trigger: trigger || null + }); + }; + + // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag + // combination has previously been cached, the cached copy is returned; otherwise the newly + // created regex is cached + XRegExp.cache = function (pattern, flags) { + var key = pattern + "/" + (flags || ""); + return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags)); + }; + + // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh + // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global` + // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve + // special properties required for named capture + XRegExp.copyAsGlobal = function (regex) { + return clone(regex, "g"); + }; + + // Accepts a string; returns the string with regex metacharacters escaped. The returned string + // can safely be used at any point within a regex to match the provided literal string. Escaped + // characters are [ ] { } ( ) * + ? - . , \ ^ $ | # and whitespace + XRegExp.escape = function (str) { + return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }; + + // Accepts a string to search, regex to search with, position to start the search within the + // string (default: 0), and an optional Boolean indicating whether matches must start at-or- + // after the position or at the specified position only. This function ignores the `lastIndex` + // of the provided regex in its own handling, but updates the property for compatibility + XRegExp.execAt = function (str, regex, pos, anchored) { + var r2 = clone(regex, "g" + ((anchored && hasNativeY) ? "y" : "")), + match; + r2.lastIndex = pos = pos || 0; + match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (anchored && match && match.index !== pos) + match = null; + if (regex.global) + regex.lastIndex = match ? r2.lastIndex : 0; + return match; + }; + + // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing + // syntax and flag changes. Should be run after XRegExp and any plugins are loaded + XRegExp.freezeTokens = function () { + XRegExp.addToken = function () { + throw Error("can't run addToken after freezeTokens"); + }; + }; + + // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object. + // Note that this is also `true` for regex literals and regexes created by the `XRegExp` + // constructor. This works correctly for variables created in another frame, when `instanceof` + // and `constructor` checks would fail to work as intended + XRegExp.isRegExp = function (o) { + return Object.prototype.toString.call(o) === "[object RegExp]"; + }; + + // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to + // iterate over regex matches compared to the traditional approaches of subverting + // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop + XRegExp.iterate = function (str, regex, callback, context) { + var r2 = clone(regex, "g"), + i = -1, match; + while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (regex.global) + regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback` + callback.call(context, match, ++i, str, regex); + if (r2.lastIndex === match.index) + r2.lastIndex++; + } + if (regex.global) + regex.lastIndex = 0; + }; + + // Accepts a string and an array of regexes; returns the result of using each successive regex + // to search within the matches of the previous regex. The array of regexes can also contain + // objects with `regex` and `backref` properties, in which case the named or numbered back- + // references specified are passed forward to the next regex or returned. E.g.: + // var xregexpImgFileNames = XRegExp.matchChain(html, [ + // {regex: /]+)>/i, backref: 1}, // tag attributes + // {regex: XRegExp('(?ix) \\s src=" (? [^"]+ )'), backref: "src"}, // src attribute values + // {regex: XRegExp("^http://xregexp\\.com(/[^#?]+)", "i"), backref: 1}, // xregexp.com paths + // /[^\/]+$/ // filenames (strip directory paths) + // ]); + XRegExp.matchChain = function (str, chain) { + return function recurseChain (values, level) { + var item = chain[level].regex ? chain[level] : {regex: chain[level]}, + regex = clone(item.regex, "g"), + matches = [], i; + for (i = 0; i < values.length; i++) { + XRegExp.iterate(values[i], regex, function (match) { + matches.push(item.backref ? (match[item.backref] || "") : match[0]); + }); + } + return ((level === chain.length - 1) || !matches.length) ? + matches : recurseChain(matches, level + 1); + }([str], 0); + }; + + + //--------------------------------- + // New RegExp prototype methods + //--------------------------------- + + // Accepts a context object and arguments array; returns the result of calling `exec` with the + // first value in the arguments array. the context is ignored but is accepted for congruity + // with `Function.prototype.apply` + RegExp.prototype.apply = function (context, args) { + return this.exec(args[0]); + }; + + // Accepts a context object and string; returns the result of calling `exec` with the provided + // string. the context is ignored but is accepted for congruity with `Function.prototype.call` + RegExp.prototype.call = function (context, str) { + return this.exec(str); + }; + + + //--------------------------------- + // Overriden native methods + //--------------------------------- + + // Adds named capture support (with backreferences returned as `result.name`), and fixes two + // cross-browser issues per ES3: + // - Captured values for nonparticipating capturing groups should be returned as `undefined`, + // rather than the empty string. + // - `lastIndex` should not be incremented after zero-length matches. + RegExp.prototype.exec = function (str) { + var match, name, r2, origLastIndex; + if (!this.global) + origLastIndex = this.lastIndex; + match = nativ.exec.apply(this, arguments); + if (match) { + // Fix browsers whose `exec` methods don't consistently return `undefined` for + // nonparticipating capturing groups + if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { + r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), "g", "")); + // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed + // matching due to characters outside the match + nativ.replace.call((str + "").slice(match.index), r2, function () { + for (var i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) + match[i] = undefined; + } + }); + } + // Attach named capture properties + if (this._xregexp && this._xregexp.captureNames) { + for (var i = 1; i < match.length; i++) { + name = this._xregexp.captureNames[i - 1]; + if (name) + match[name] = match[i]; + } + } + // Fix browsers that increment `lastIndex` after zero-length matches + if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + } + if (!this.global) + this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + return match; + }; + + // Fix browser bugs in native method + RegExp.prototype.test = function (str) { + // Use the native `exec` to skip some processing overhead, even though the altered + // `exec` would take care of the `lastIndex` fixes + var match, origLastIndex; + if (!this.global) + origLastIndex = this.lastIndex; + match = nativ.exec.call(this, str); + // Fix browsers that increment `lastIndex` after zero-length matches + if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + if (!this.global) + this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + return !!match; + }; + + // Adds named capture support and fixes browser bugs in native method + String.prototype.match = function (regex) { + if (!XRegExp.isRegExp(regex)) + regex = RegExp(regex); // Native `RegExp` + if (regex.global) { + var result = nativ.match.apply(this, arguments); + regex.lastIndex = 0; // Fix IE bug + return result; + } + return regex.exec(this); // Run the altered `exec` + }; + + // Adds support for `${n}` tokens for named and numbered backreferences in replacement text, + // and provides named backreferences to replacement functions as `arguments[0].name`. Also + // fixes cross-browser differences in replacement text syntax when performing a replacement + // using a nonregex search value, and the value of replacement regexes' `lastIndex` property + // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary + // third (`flags`) parameter + String.prototype.replace = function (search, replacement) { + var isRegex = XRegExp.isRegExp(search), + captureNames, result, str, origLastIndex; + + // There are too many combinations of search/replacement types/values and browser bugs that + // preclude passing to native `replace`, so don't try + //if (...) + // return nativ.replace.apply(this, arguments); + + if (isRegex) { + if (search._xregexp) + captureNames = search._xregexp.captureNames; // Array or `null` + if (!search.global) + origLastIndex = search.lastIndex; + } else { + search = search + ""; // Type conversion + } + + if (Object.prototype.toString.call(replacement) === "[object Function]") { + result = nativ.replace.call(this + "", search, function () { + if (captureNames) { + // Change the `arguments[0]` string primitive to a String object which can store properties + arguments[0] = new String(arguments[0]); + // Store named backreferences on `arguments[0]` + for (var i = 0; i < captureNames.length; i++) { + if (captureNames[i]) + arguments[0][captureNames[i]] = arguments[i + 1]; + } + } + // Update `lastIndex` before calling `replacement` (fix browsers) + if (isRegex && search.global) + search.lastIndex = arguments[arguments.length - 2] + arguments[0].length; + return replacement.apply(null, arguments); + }); + } else { + str = this + ""; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`) + result = nativ.replace.call(str, search, function () { + var args = arguments; // Keep this function's `arguments` available through closure + return nativ.replace.call(replacement + "", replacementToken, function ($0, $1, $2) { + // Numbered backreference (without delimiters) or special variable + if ($1) { + switch ($1) { + case "$": return "$"; + case "&": return args[0]; + case "`": return args[args.length - 1].slice(0, args[args.length - 2]); + case "'": return args[args.length - 1].slice(args[args.length - 2] + args[0].length); + // Numbered backreference + default: + // What does "$10" mean? + // - Backreference 10, if 10 or more capturing groups exist + // - Backreference 1 followed by "0", if 1-9 capturing groups exist + // - Otherwise, it's the string "$10" + // Also note: + // - Backreferences cannot be more than two digits (enforced by `replacementToken`) + // - "$01" is equivalent to "$1" if a capturing group exists, otherwise it's the string "$01" + // - There is no "$0" token ("$&" is the entire match) + var literalNumbers = ""; + $1 = +$1; // Type conversion; drop leading zero + if (!$1) // `$1` was "0" or "00" + return $0; + while ($1 > args.length - 3) { + literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers; + $1 = Math.floor($1 / 10); // Drop the last digit + } + return ($1 ? args[$1] || "" : "$") + literalNumbers; + } + // Named backreference or delimited numbered backreference + } else { + // What does "${n}" mean? + // - Backreference to numbered capture n. Two differences from "$n": + // - n can be more than two digits + // - Backreference 0 is allowed, and is the entire match + // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture + // - Otherwise, it's the string "${n}" + var n = +$2; // Type conversion; drop leading zeros + if (n <= args.length - 3) + return args[n]; + n = captureNames ? indexOf(captureNames, $2) : -1; + return n > -1 ? args[n + 1] : $0; + } + }); + }); + } + + if (isRegex) { + if (search.global) + search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows) + else + search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows) + } + + return result; + }; + + // A consistent cross-browser, ES3 compliant `split` + String.prototype.split = function (s /* separator */, limit) { + // If separator `s` is not a regex, use the native `split` + if (!XRegExp.isRegExp(s)) + return nativ.split.apply(this, arguments); + + var str = this + "", // Type conversion + output = [], + lastLastIndex = 0, + match, lastLength; + + // Behavior for `limit`: if it's... + // - `undefined`: No limit + // - `NaN` or zero: Return an empty array + // - A positive number: Use `Math.floor(limit)` + // - A negative number: No limit + // - Other: Type-convert, then use the above rules + if (limit === undefined || +limit < 0) { + limit = Infinity; + } else { + limit = Math.floor(+limit); + if (!limit) + return []; + } + + // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero + // and restore it to its original value when we're done using the regex + s = XRegExp.copyAsGlobal(s); + + while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (s.lastIndex > lastLastIndex) { + output.push(str.slice(lastLastIndex, match.index)); + + if (match.length > 1 && match.index < str.length) + Array.prototype.push.apply(output, match.slice(1)); + + lastLength = match[0].length; + lastLastIndex = s.lastIndex; + + if (output.length >= limit) + break; + } + + if (s.lastIndex === match.index) + s.lastIndex++; + } + + if (lastLastIndex === str.length) { + if (!nativ.test.call(s, "") || lastLength) + output.push(""); + } else { + output.push(str.slice(lastLastIndex)); + } + + return output.length > limit ? output.slice(0, limit) : output; + }; + + + //--------------------------------- + // Private helper functions + //--------------------------------- + + // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp` + // instance with a fresh `lastIndex` (set to zero), preserving properties required for named + // capture. Also allows adding new flags in the process of copying the regex + function clone (regex, additionalFlags) { + if (!XRegExp.isRegExp(regex)) + throw TypeError("type RegExp expected"); + var x = regex._xregexp; + regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || "")); + if (x) { + regex._xregexp = { + source: x.source, + captureNames: x.captureNames ? x.captureNames.slice(0) : null + }; + } + return regex; + } + + function getNativeFlags (regex) { + return (regex.global ? "g" : "") + + (regex.ignoreCase ? "i" : "") + + (regex.multiline ? "m" : "") + + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 + (regex.sticky ? "y" : ""); + } + + function runTokens (pattern, index, scope, context) { + var i = tokens.length, + result, match, t; + // Protect against constructing XRegExps within token handler and trigger functions + isInsideConstructor = true; + // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws + try { + while (i--) { // Run in reverse order + t = tokens[i]; + if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) { + t.pattern.lastIndex = index; + match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc. + if (match && match.index === index) { + result = { + output: t.handler.call(context, match, scope), + match: match + }; + break; + } + } + } + } catch (err) { + throw err; + } finally { + isInsideConstructor = false; + } + return result; + } + + function indexOf (array, item, from) { + if (Array.prototype.indexOf) // Use the native array method if available + return array.indexOf(item, from); + for (var i = from || 0; i < array.length; i++) { + if (array[i] === item) + return i; + } + return -1; + } + + + //--------------------------------- + // Built-in tokens + //--------------------------------- + + // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the + // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS` + + // Comment pattern: (?# ) + XRegExp.addToken( + /\(\?#[^)]*\)/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + } + ); + + // Capturing group (match the opening parenthesis only). + // Required for support of named capturing groups + XRegExp.addToken( + /\((?!\?)/, + function () { + this.captureNames.push(null); + return "("; + } + ); + + // Named capturing group (match the opening delimiter only): (? + XRegExp.addToken( + /\(\?<([$\w]+)>/, + function (match) { + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return "("; + } + ); + + // Named backreference: \k + XRegExp.addToken( + /\\k<([\w$]+)>/, + function (match) { + var index = indexOf(this.captureNames, match[1]); + // Keep backreferences separate from subsequent literal numbers. Preserve back- + // references to named groups that are undefined at this point as literal strings + return index > -1 ? + "\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? "" : "(?:)") : + match[0]; + } + ); + + // Empty character class: [] or [^] + XRegExp.addToken( + /\[\^?]/, + function (match) { + // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. + // (?!) should work like \b\B, but is unreliable in Firefox + return match[0] === "[]" ? "\\b\\B" : "[\\s\\S]"; + } + ); + + // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx) + // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc. + XRegExp.addToken( + /^\(\?([imsx]+)\)/, + function (match) { + this.setFlag(match[1]); + return ""; + } + ); + + // Whitespace and comments, in free-spacing (aka extended) mode only + XRegExp.addToken( + /(?:\s+|#.*)+/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + }, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("x");} + ); + + // Dot, in dotall (aka singleline) mode only + XRegExp.addToken( + /\./, + function () {return "[\\s\\S]";}, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("s");} + ); + + + //--------------------------------- + // Backward compatibility + //--------------------------------- + + // Uncomment the following block for compatibility with XRegExp 1.0-1.2: + /* + XRegExp.matchWithinChain = XRegExp.matchChain; + RegExp.prototype.addFlags = function (s) {return clone(this, s);}; + RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;}; + RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);}; + RegExp.prototype.validate = function (s) {var r = RegExp("^(?:" + this.source + ")$(?!\\s)", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;}; + */ + +})(); + diff --git a/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js new file mode 100644 index 00000000..9f5942ee --- /dev/null +++ b/app/src/vendor/PHPMailer/vendor/phpmailer/phpmailer/examples/scripts/shAutoloader.js @@ -0,0 +1,122 @@ +(function() { + +var sh = SyntaxHighlighter; + +/** + * Provides functionality to dynamically load only the brushes that a needed to render the current page. + * + * There are two syntaxes that autoload understands. For example: + * + * SyntaxHighlighter.autoloader( + * [ 'applescript', 'Scripts/shBrushAppleScript.js' ], + * [ 'actionscript3', 'as3', 'Scripts/shBrushAS3.js' ] + * ); + * + * or a more easily comprehendable one: + * + * SyntaxHighlighter.autoloader( + * 'applescript Scripts/shBrushAppleScript.js', + * 'actionscript3 as3 Scripts/shBrushAS3.js' + * ); + */ +sh.autoloader = function() +{ + var list = arguments, + elements = sh.findElements(), + brushes = {}, + scripts = {}, + all = SyntaxHighlighter.all, + allCalled = false, + allParams = null, + i + ; + + SyntaxHighlighter.all = function(params) + { + allParams = params; + allCalled = true; + }; + + function addBrush(aliases, url) + { + for (var i = 0; i < aliases.length; i++) + brushes[aliases[i]] = url; + }; + + function getAliases(item) + { + return item.pop + ? item + : item.split(/\s+/) + ; + } + + // create table of aliases and script urls + for (i = 0; i < list.length; i++) + { + var aliases = getAliases(list[i]), + url = aliases.pop() + ; + + addBrush(aliases, url); + } + + // dynamically add