| Server IP : 103.161.17.216 / Your IP : 216.73.216.1 Web Server : nginx/1.18.0 System : Linux tipsysaigoncharming 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/thammyviendd.com/vendor/league/commonmark/src/Xml/ |
Upload File : |
<?php
declare(strict_types=1);
/*
* This file is part of the league/commonmark package.
*
* (c) Colin O'Dell <colinodell@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace League\CommonMark\Xml;
use League\CommonMark\Node\Block\AbstractBlock;
use League\CommonMark\Node\Inline\AbstractInline;
use League\CommonMark\Node\Node;
/**
* @internal
*/
final class FallbackNodeXmlRenderer implements XmlNodeRendererInterface
{
/**
* @var array<string, string>
*
* @psalm-allow-private-mutation
*/
private array $classCache = [];
/**
* @psalm-allow-private-mutation
*/
public function getXmlTagName(Node $node): string
{
$className = \get_class($node);
if (isset($this->classCache[$className])) {
return $this->classCache[$className];
}
$type = $node instanceof AbstractBlock ? 'block' : 'inline';
$shortName = \strtolower((new \ReflectionClass($node))->getShortName());
return $this->classCache[$className] = \sprintf('custom_%s_%s', $type, $shortName);
}
/**
* {@inheritDoc}
*/
public function getXmlAttributes(Node $node): array
{
$attrs = [];
foreach ($node->data->export() as $k => $v) {
if (self::isValueUsable($v)) {
$attrs[$k] = $v;
}
}
$reflClass = new \ReflectionClass($node);
foreach ($reflClass->getProperties() as $property) {
if (\in_array($property->getDeclaringClass()->getName(), [Node::class, AbstractBlock::class, AbstractInline::class], true)) {
continue;
}
$property->setAccessible(true);
$value = $property->getValue($node);
if (self::isValueUsable($value)) {
$attrs[$property->getName()] = $value;
}
}
return $attrs;
}
/**
* @param mixed $var
*
* @psalm-pure
*/
private static function isValueUsable($var): bool
{
return \is_string($var) || \is_int($var) || \is_float($var) || \is_bool($var);
}
}