[ Index ] |
PHP Cross Reference of phpBB-3.3.14-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * @package s9e\TextFormatter 5 * @copyright Copyright (c) 2010-2022 The s9e authors 6 * @license http://www.opensource.org/licenses/mit-license.php The MIT License 7 */ 8 namespace s9e\TextFormatter\Plugins\Litedown\Parser\Passes; 9 10 use s9e\TextFormatter\Plugins\Litedown\Parser\LinkAttributesSetter; 11 12 class Images extends AbstractPass 13 { 14 use LinkAttributesSetter; 15 16 /** 17 * {@inheritdoc} 18 */ 19 public function parse() 20 { 21 $pos = $this->text->indexOf(' !== false) 27 { 28 $this->parseInlineImages(); 29 } 30 if ($this->text->hasReferences) 31 { 32 $this->parseReferenceImages(); 33 } 34 } 35 36 /** 37 * Add an image tag for given text span 38 * 39 * @param integer $startPos Start tag position 40 * @param integer $endPos End tag position 41 * @param integer $endLen End tag length 42 * @param string $linkInfo URL optionally followed by space and a title 43 * @param string $alt Value for the alt attribute 44 * @return void 45 */ 46 protected function addImageTag($startPos, $endPos, $endLen, $linkInfo, $alt) 47 { 48 $tag = $this->parser->addTagPair('IMG', $startPos, 2, $endPos, $endLen); 49 $this->setLinkAttributes($tag, $linkInfo, 'src'); 50 $tag->setAttribute('alt', $this->text->decode($alt)); 51 52 // Overwrite the markup 53 $this->text->overwrite($startPos, $endPos + $endLen - $startPos); 54 } 55 56 /** 57 * Parse inline images markup 58 * 59 * @return void 60 */ 61 protected function parseInlineImages() 62 { 63 preg_match_all( 64 '/!\\[(?:[^\\x17[\\]]|\\[[^\\x17[\\]]*\\])*\\]\\(( *(?:[^\\x17\\s()]|\\([^\\x17\\s()]*\\))*(?=[ )]) *(?:"[^\\x17]*?"|\'[^\\x17]*?\'|\\([^\\x17)]*\\))? *)\\)/', 65 $this->text, 66 $matches, 67 PREG_OFFSET_CAPTURE | PREG_SET_ORDER 68 ); 69 foreach ($matches as $m) 70 { 71 $linkInfo = $m[1][0]; 72 $startPos = $m[0][1]; 73 $endLen = 3 + strlen($linkInfo); 74 $endPos = $startPos + strlen($m[0][0]) - $endLen; 75 $alt = substr($m[0][0], 2, strlen($m[0][0]) - $endLen - 2); 76 77 $this->addImageTag($startPos, $endPos, $endLen, $linkInfo, $alt); 78 } 79 } 80 81 /** 82 * Parse reference images markup 83 * 84 * @return void 85 */ 86 protected function parseReferenceImages() 87 { 88 preg_match_all( 89 '/!\\[((?:[^\\x17[\\]]|\\[[^\\x17[\\]]*\\])*)\\](?: ?\\[([^\\x17[\\]]+)\\])?/', 90 $this->text, 91 $matches, 92 PREG_OFFSET_CAPTURE | PREG_SET_ORDER 93 ); 94 foreach ($matches as $m) 95 { 96 $startPos = $m[0][1]; 97 $endPos = $startPos + 2 + strlen($m[1][0]); 98 $endLen = 1; 99 $alt = $m[1][0]; 100 $id = $alt; 101 102 if (isset($m[2][0], $this->text->linkReferences[$m[2][0]])) 103 { 104 $endLen = strlen($m[0][0]) - strlen($alt) - 2; 105 $id = $m[2][0]; 106 } 107 elseif (!isset($this->text->linkReferences[$id])) 108 { 109 continue; 110 } 111 112 $this->addImageTag($startPos, $endPos, $endLen, $this->text->linkReferences[$id], $alt); 113 } 114 } 115 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Nov 25 19:05:08 2024 | Cross-referenced by PHPXref 0.7.1 |