leilukin-tumbleblog/includes/lib/xenocrat/markdown/inline/MathTrait.php

66 lines
1.2 KiB
PHP
Raw Normal View History

2024-09-05 17:51:48 +00:00
<?php
/**
* @copyright Copyright 2024 Daniel Pimley
* @license https://github.com/xenocrat/chyrp-markdown/blob/master/LICENSE
* @link https://github.com/xenocrat/chyrp-markdown#readme
*/
namespace xenocrat\markdown\inline;
/**
* Adds math expression (LaTeX) inline elements.
*/
trait MathTrait
{
protected function parseMathMarkers(): array
{
return array('$`');
}
/**
* Parses the math feature.
*
* @marker $`
*/
protected function parseMath($text): array
{
if (
preg_match(
'/^\$`(.*?[^\\\\])`\$/s',
$text,
$matches
)
) {
$math = str_replace("\n", ' ', $matches[1]);
if (
strlen($math) > 2
&& ltrim($math, ' ') !== ''
&& substr($math, 0, 1) === ' '
&& substr($math, -1) === ' '
) {
$math = substr($math, 1, -1);
}
return [
[
'inlineMath',
$math
],
strlen($matches[0])
];
}
return [['text', $text[0] . $text[1]], 2];
}
protected function renderInlineMath($block): string
{
return '<la-tex display="inline">'
. $this->escapeHtmlEntities(
$block[1],
ENT_COMPAT | ENT_SUBSTITUTE
)
. '</la-tex>';
}
abstract protected function escapeHtmlEntities($text, $flags = 0);
}