Maslosoft Addendum API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
<?php
/**
* This software package is licensed under AGPL, Commercial license.
*
* @package maslosoft/addendum
* @licence AGPL, Commercial
* @copyright Copyright (c) Piotr Masełkowski <pmaselkowski@gmail.com> (Meta container, further improvements, bugfixes)
* @copyright Copyright (c) Maslosoft (Meta container, further improvements, bugfixes)
* @copyright Copyright (c) Jan Suchal (Original version, builder, parser)
* @link https://maslosoft.com/addendum/ - maslosoft addendum
* @link https://code.google.com/p/addendum/ - original addendum project
*/
namespace Maslosoft\Addendum\Matcher;
use Maslosoft\Addendum\Exceptions\ParseException;
use Maslosoft\Addendum\Interfaces\Matcher\MatcherInterface;
use Maslosoft\Addendum\Matcher\Helpers\Processor;
class AnnotationsMatcher implements MatcherInterface
{
use Traits\PluginsTrait;
protected function process($string)
{
return Processor::process($this, $string);
}
public function matches($string, &$annotations)
{
$string = $this->process($string);
$annotations = [];
$annotationMatcher = new AnnotationMatcher;
$annotationMatcher->setPlugins($this->getPlugins());
while (true)
{
if (preg_match('~\s(?=@)~', $string, $matches, PREG_OFFSET_CAPTURE))
{
$offset = $matches[0][1] + 1;
$string = substr($string, $offset);
}
else
{
return; // no more annotations
}
if (($length = $annotationMatcher->matches($string, $data)) !== false)
{
$srcString = $string;
$string = substr($string, $length);
list($name, $params) = $data;
$annotations[$name][] = $params;
// If have some params, match should be fine
if (!empty($params))
{
continue;
}
// Check if we should have some match
$stringParams = trim(preg_split("~[\r\n]~", $srcString)[0], '() ');
if (strlen($stringParams) > $length)
{
$msgParams = [
$name,
$stringParams
];
$msg = vsprintf('Could not parse params `%s` annotation near `%s`', $msgParams);
throw new ParseException($msg);
}
}
}
}
}
API documentation generated by ApiGen