[ 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\HTMLElements; 9 10 use s9e\TextFormatter\Parser\Tag; 11 use s9e\TextFormatter\Plugins\ParserBase; 12 13 class Parser extends ParserBase 14 { 15 /** 16 * {@inheritdoc} 17 */ 18 public function parse($text, array $matches) 19 { 20 foreach ($matches as $m) 21 { 22 // Test whether this is an end tag 23 $isEnd = (bool) ($text[$m[0][1] + 1] === '/'); 24 25 $pos = $m[0][1]; 26 $len = strlen($m[0][0]); 27 $elName = strtolower($m[2 - $isEnd][0]); 28 29 // Use the element's alias if applicable, or the name of the element (with the 30 // configured prefix) otherwise 31 $tagName = (isset($this->config['aliases'][$elName][''])) 32 ? $this->config['aliases'][$elName][''] 33 : $this->config['prefix'] . ':' . $elName; 34 35 if ($isEnd) 36 { 37 $this->parser->addEndTag($tagName, $pos, $len); 38 continue; 39 } 40 41 // Test whether it's a self-closing tag or a start tag. 42 // 43 // A self-closing tag will become one start tag consuming all of the text followed by a 44 // 0-width end tag. Alternatively, it could be replaced by a pair of 0-width tags plus 45 // an ignore tag to prevent the text in between from being output 46 $tag = (preg_match('/(<\\S+|[\'"\\s])\\/>$/', $m[0][0])) 47 ? $this->parser->addTagPair($tagName, $pos, $len, $pos + $len, 0) 48 : $this->parser->addStartTag($tagName, $pos, $len); 49 50 $this->captureAttributes($tag, $elName, $m[3][0]); 51 } 52 } 53 54 /** 55 * Capture all attributes in given string 56 * 57 * @param Tag $tag Target tag 58 * @param string $elName Name of the HTML element 59 * @param string $str String containing the attribute declarations 60 * @return void 61 */ 62 protected function captureAttributes(Tag $tag, $elName, $str) 63 { 64 $regexp = '/([a-z][-a-z0-9]*)(?>\\s*=\\s*("[^"]*"|\'[^\']*\'|[^\\s"\'=<>`]+))?/i'; 65 preg_match_all($regexp, $str, $matches, PREG_SET_ORDER); 66 67 foreach ($matches as $m) 68 { 69 /** 70 * If there's no value, it's a boolean attribute and we generate a value equal 71 * to the attribute's name, lowercased 72 * 73 * @link http://www.w3.org/html/wg/drafts/html/master/single-page.html#boolean-attributes 74 */ 75 $attrName = strtolower($m[1]); 76 $attrValue = $m[2] ?? $attrName; 77 78 // Use the attribute's alias if applicable 79 if (isset($this->config['aliases'][$elName][$attrName])) 80 { 81 $attrName = $this->config['aliases'][$elName][$attrName]; 82 } 83 84 // Remove quotes around the value 85 if ($attrValue[0] === '"' || $attrValue[0] === "'") 86 { 87 $attrValue = substr($attrValue, 1, -1); 88 } 89 90 $tag->setAttribute($attrName, html_entity_decode($attrValue, ENT_QUOTES, 'UTF-8')); 91 } 92 } 93 }
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 |