<?php /** * @copyright Copyright 2014 Carsten Brandt, 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 inline code elements. */ trait CodeTrait { protected function parseInlineCodeMarkers(): array { return array('`'); } /** * Parses an inline code span. * * @marker ` */ protected function parseInlineCode($text): array { if (preg_match('/^(`+)(?!`)(.*?[^`])\1(?!`)/s', $text, $matches)) { $code = str_replace("\n", ' ', $matches[2]); if ( strlen($code) > 2 && ltrim($code, ' ') !== '' && substr($code, 0, 1) === ' ' && substr($code, -1) === ' ' ) { $code = substr($code, 1, -1); } return [ [ 'inlineCode', $code, ], strlen($matches[0]) ]; } return [['text', $text[0]], 1]; } protected function renderInlineCode($block): string { if (in_array('table', $this->context)) { // Unescape pipes if inside a table cell. $block[1] = str_replace('\|', '|', $block[1]); } return '<code>' . $this->escapeHtmlEntities( $block[1], ENT_COMPAT | ENT_SUBSTITUTE ) . '</code>'; } abstract protected function escapeHtmlEntities($text, $flags = 0); }