<?php /** * @copyright Copyright 2023 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 superscript and subscript inline elements. */ trait SupSubTrait { protected function parseSupMarkers(): array { return array('++'); } /** * Parses the superscript feature. * * @marker ++ */ protected function parseSup($markdown): array { if ( preg_match( '/^\+\+(?!\+)(.*?[^\+\\\\])\+\+(?!\+)/s', $markdown, $matches ) ) { return [ [ 'sup', $this->parseInline($matches[1]) ], strlen($matches[0]) ]; } return [['text', $markdown[0] . $markdown[1]], 2]; } protected function renderSup($block): string { return '<sup>' . $this->renderAbsy($block[1]) . '</sup>'; } protected function parseSubMarkers(): array { return array('--'); } /** * Parses the subscript feature. * * @marker -- */ protected function parseSub($markdown): array { if ( preg_match( '/^--(?!-)(.*?[^-\\\\])--(?!-)/s', $markdown, $matches ) ) { return [ [ 'sub', $this->parseInline($matches[1]) ], strlen($matches[0]) ]; } return [['text', $markdown[0] . $markdown[1]], 2]; } protected function renderSub($block): string { return '<sub>' . $this->renderAbsy($block[1]) . '</sub>'; } abstract protected function parseInline($text); abstract protected function renderAbsy($blocks); }