| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 | 
							- <?php
 
- /**
 
-  * @link http://www.yiiframework.com/
 
-  * @copyright Copyright (c) 2008 Yii Software LLC
 
-  * @license http://www.yiiframework.com/license/
 
-  */
 
- namespace yii\apidoc\helpers;
 
- use phpDocumentor\Reflection\DocBlock\Type\Collection;
 
- use yii\apidoc\models\MethodDoc;
 
- use yii\apidoc\models\TypeDoc;
 
- /**
 
-  * Class ApiMarkdownTrait
 
-  *
 
-  * @property TypeDoc $renderingContext
 
-  */
 
- trait ApiMarkdownTrait
 
- {
 
-     /**
 
-      * @marker [[
 
-      */
 
-     protected function parseApiLinks($text)
 
-     {
 
-         $context = $this->renderingContext;
 
-         if (preg_match('/^\[\[([\w\d\\\\\(\):$]+)(\|[^\]]*)?\]\]/', $text, $matches)) {
 
-             $offset = strlen($matches[0]);
 
-             $object = $matches[1];
 
-             $title = (empty($matches[2]) || $matches[2] == '|') ? null : substr($matches[2], 1);
 
-             if (($pos = strpos($object, '::')) !== false) {
 
-                 $typeName = substr($object, 0, $pos);
 
-                 $subjectName = substr($object, $pos + 2);
 
-                 if ($context !== null) {
 
-                     // Collection resolves relative types
 
-                     $typeName = (new Collection([$typeName], $context->phpDocContext))->__toString();
 
-                 }
 
-                 /** @var $type TypeDoc */
 
-                 $type = static::$renderer->apiContext->getType($typeName);
 
-                 if ($type === null) {
 
-                     static::$renderer->apiContext->errors[] = [
 
-                         'file' => ($context !== null) ? $context->sourceFile : null,
 
-                         'message' => 'broken link to ' . $typeName . '::' . $subjectName . (($context !== null) ? ' in ' . $context->name : ''),
 
-                     ];
 
-                     return [
 
-                         ['brokenApiLink', '<span class="broken-link">' . $typeName . '::' . $subjectName . '</span>'],
 
-                         $offset
 
-                     ];
 
-                 } else {
 
-                     if (($subject = $type->findSubject($subjectName)) !== null) {
 
-                         if ($title === null) {
 
-                             $title = $type->name . '::' . $subject->name;
 
-                             if ($subject instanceof MethodDoc) {
 
-                                 $title .= '()';
 
-                             }
 
-                         }
 
-                         return [
 
-                             ['apiLink', static::$renderer->createSubjectLink($subject, $title)],
 
-                             $offset
 
-                         ];
 
-                     } else {
 
-                         static::$renderer->apiContext->errors[] = [
 
-                             'file' => ($context !== null) ? $context->sourceFile : null,
 
-                             'message' => 'broken link to ' . $type->name . '::' . $subjectName . (($context !== null) ? ' in ' . $context->name : ''),
 
-                         ];
 
-                         return [
 
-                             ['brokenApiLink', '<span class="broken-link">' . $type->name . '::' . $subjectName . '</span>'],
 
-                             $offset
 
-                         ];
 
-                     }
 
-                 }
 
-             } elseif ($context !== null && ($subject = $context->findSubject($object)) !== null) {
 
-                 return [
 
-                     ['apiLink', static::$renderer->createSubjectLink($subject, $title)],
 
-                     $offset
 
-                 ];
 
-             }
 
-             if ($context !== null) {
 
-                 // Collection resolves relative types
 
-                 $object = (new Collection([$object], $context->phpDocContext))->__toString();
 
-             }
 
-             if (($type = static::$renderer->apiContext->getType($object)) !== null) {
 
-                 return [
 
-                     ['apiLink', static::$renderer->createTypeLink($type, null, $title)],
 
-                     $offset
 
-                 ];
 
-             } elseif (strpos($typeLink = static::$renderer->createTypeLink($object, null, $title), '<a href') !== false) {
 
-                 return [
 
-                     ['apiLink', $typeLink],
 
-                     $offset
 
-                 ];
 
-             }
 
-             static::$renderer->apiContext->errors[] = [
 
-                 'file' => ($context !== null) ? $context->sourceFile : null,
 
-                 'message' => 'broken link to ' . $object . (($context !== null) ? ' in ' . $context->name : ''),
 
-             ];
 
-             return [
 
-                 ['brokenApiLink', '<span class="broken-link">' . $object . '</span>'],
 
-                 $offset
 
-             ];
 
-         }
 
-         return [['text', '[['], 2];
 
-     }
 
-     /**
 
-      * Renders API link
 
-      * @param array $block
 
-      * @return string
 
-      */
 
-     protected function renderApiLink($block)
 
-     {
 
-         return $block[1];
 
-     }
 
-     /**
 
-      * Renders API link that is broken i.e. points nowhere
 
-      * @param array $block
 
-      * @return string
 
-      */
 
-     protected function renderBrokenApiLink($block)
 
-     {
 
-         return $block[1];
 
-     }
 
-     /**
 
-      * Consume lines for a blockquote element
 
-      */
 
-     protected function consumeQuote($lines, $current)
 
-     {
 
-         $block = parent::consumeQuote($lines, $current);
 
-         $blockTypes = [
 
-             'warning',
 
-             'note',
 
-             'info',
 
-             'tip',
 
-         ];
 
-         // check whether this is a special Info, Note, Warning, Tip block
 
-         $content = $block[0]['content'];
 
-         $first = reset($content);
 
-         if (isset($first[0]) && $first[0] === 'paragraph') {
 
-             $parfirst = reset($first['content']);
 
-             if (isset($parfirst[0]) && $parfirst[0] === 'text') {
 
-                 foreach ($blockTypes as $type) {
 
-                     if (strncasecmp("$type: ", $parfirst[1], $len = strlen($type) + 2) === 0) {
 
-                         // remove block indicator
 
-                         $block[0]['content'][0]['content'][0][1] = substr($parfirst[1], $len);
 
-                         // add translated block indicator as bold text
 
-                         array_unshift($block[0]['content'][0]['content'], [
 
-                             'strong',
 
-                             [
 
-                                 ['text', $this->translateBlockType($type)],
 
-                             ],
 
-                         ]);
 
-                         $block[0]['blocktype'] = $type;
 
-                         break;
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         return $block;
 
-     }
 
-     /**
 
-      * @since 2.0.5
 
-      */
 
-     protected abstract function translateBlockType($type);
 
-     /**
 
-      * Renders a blockquote
 
-      */
 
-     protected function renderQuote($block)
 
-     {
 
-         $class = '';
 
-         if (isset($block['blocktype'])) {
 
-             $class = ' class="' . $block['blocktype'] . '"';
 
-         }
 
-         return "<blockquote{$class}>" . $this->renderAbsy($block['content']) . "</blockquote>\n";
 
-     }
 
- }
 
 
  |