ParsedMarkdown.php in Markdown 3.0.x
File
src/ParsedMarkdown.php
View source
<?php
namespace Drupal\markdown;
use Drupal\Component\Utility\Crypt;
use Drupal\Component\Utility\Unicode;
use Drupal\Component\Utility\Xss;
use Drupal\Core\Language\LanguageInterface;
class ParsedMarkdown implements ParsedMarkdownInterface {
protected $allowedTags = self::ALLOWED_TAGS;
protected $expire = ParsedMarkdownInterface::PERMANENT;
protected $html;
protected $id;
protected $label;
protected $markdown;
protected $language;
protected $size;
public function __construct($markdown = '', $html = '', LanguageInterface $language = NULL) {
$this->html = trim($html);
$this->markdown = trim($markdown);
$this->language = $language;
}
public function __toString() {
return $this
->getHtml();
}
public static function create($markdown = '', $html = '', LanguageInterface $language = NULL) {
return new static($markdown, $html, $language);
}
public static function load($id = NULL) {
if ($id && ($cache = \Drupal::cache('markdown')
->get($id)) && $cache->data instanceof static) {
return $cache->data;
}
return NULL;
}
public function count() {
return $this
->getSize();
}
public function getExpire($from_time = NULL) {
$expire = $this->expire;
if (is_string($expire)) {
$expire = strtotime($expire, $from_time ?: \Drupal::time()
->getRequestTime());
}
return $expire;
}
public function getHtml() {
if ($this->allowedTags === TRUE) {
return $this->html;
}
return Xss::filter($this->html, $this->allowedTags);
}
public function getId() {
if ($this->id === NULL) {
$this->id = Crypt::hashBase64($this
->getHtml());
}
return $this->id;
}
public function getLabel() {
return $this->label ?: $this
->getId();
}
public function getMarkdown() {
return static::normalizeMarkdown($this->markdown);
}
public function getSize($formatted = FALSE, $decimals = 2) {
if ($this->size === NULL) {
$this->size = Unicode::strlen($this
->getHtml());
}
return $formatted ? number_format($this->size, $decimals) : $this->size;
}
public function jsonSerialize() {
return $this
->__toString();
}
public function matches($markdown) {
if ($markdown instanceof static) {
return $markdown
->getMarkdown() === $this
->getMarkdown();
}
return static::normalizeMarkdown($markdown) === $this
->getMarkdown();
}
public static function normalizeMarkdown($markdown) {
return $markdown === '' ? '' : preg_replace('/\\r\\n|\\n/', "\n", (string) $markdown);
}
public function save() {
\Drupal::cache('markdown')
->set($this
->getId(), $this, $this
->getExpire());
return $this;
}
public function serialize() {
$data['object'] = serialize(get_object_vars($this));
$data['gzip'] = extension_loaded('zlib');
if ($data['gzip']) {
$data['object'] = base64_encode(gzencode($data['object'], 9));
}
return serialize($data);
}
public function setAllowedTags($allowed_tags = self::ALLOWED_TAGS) {
if ($allowed_tags !== TRUE && !is_array($allowed_tags)) {
$allowed_tags = static::ALLOWED_TAGS;
}
$this->allowedTags = $allowed_tags;
return $this;
}
public function setExpire($expire = ParsedMarkdownInterface::PERMANENT) {
$this->expire = $expire;
return $this;
}
public function setId($id) {
$this->id = $id;
return $this;
}
public function setLabel($label) {
$this->label = $label;
return $this;
}
public function unserialize($serialized) {
$data = unserialize($serialized);
if ($data['gzip']) {
if (extension_loaded('zlib')) {
$data['object'] = gzdecode(base64_decode($data['object']));
}
else {
$this->markdown = sprintf('This cached %s object was stored using gzip compression. Unable to decompress. The PHP on this server must have the "zlib" extension installed.', static::class);
$this->html = $this->markdown;
return;
}
}
$object = unserialize($data['object']);
foreach ($object as $prop => $value) {
$this->{$prop} = $value;
}
}
}