Parsedown: суб / верхний индекс
Текущая версия Parsedown 1.8.0-beta-5 не имеет встроенного синтаксиса для sub/superscript. Хотя CommonMark не определяет такой синтаксис, некоторые другие легкие языки разметки (например, Parsedown Extreme, Textile) используют синтаксис, подобный следующему:
in: 19^th^
out: 19<sup>th</sup>
in: H~2~O
out: H<sub>2</sub>O
Вопрос
Какие шаги следует предпринять для того, чтобы изменить Parsedown.php
файл и включить такой синтаксис?
Примечание. Эта проблема уже возникла в другой раз ( Parsedown, добавьте sub / superscript). Тем не менее, до сих пор нет пошагового руководства, объясняющего, какие изменения должны быть сделаны в Parsedown.php
файл для достижения этого.
1 ответ
присоединять
Superscript
а такжеTilde
в$InlineTypes
:protected $InlineTypes = array( '!' => array('Image'), '&' => array('SpecialCharacter'), '*' => array('Emphasis'), ':' => array('Url'), '<' => array('UrlTag', 'EmailTag', 'Markup'), '[' => array('Link'), '_' => array('Emphasis'), '`' => array('Code'), '~' => array('Tilde'), '^' => array('Superscript'), '\\' => array('EscapeSequence'), );
Определить методы
inlineSuperscript
, Это должно выглядеть примерно такinlineStrikethrough
:protected function inlineSuperscript($Excerpt) { if (preg_match('/^\^(.+?)\^/', $Excerpt['text'], $matches)) { return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => 'sup', 'handler' => array( 'function' => 'lineElements', 'argument' => $matches[1], 'destination' => 'elements', ) ), ); } }
Определить методы
inlineTilde
и удалить методinlineStrikethrough
, Это должно выглядеть примерно такinlineEmphasis
:protected function inlineTilde($Excerpt) { if ( ! isset($Excerpt['text'][1])) { return; } $marker = $Excerpt['text'][0]; if ($Excerpt['text'][1] === $marker and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) { $emphasis = 'del'; } elseif (preg_match('/^~(?=\S)(.+?)(?<=\S)~/', $Excerpt['text'], $matches)) { $emphasis = 'sub'; } else { return; } return array( 'extent' => strlen($matches[0]), 'element' => array( 'name' => $emphasis, 'handler' => array( 'function' => 'lineElements', 'argument' => $matches[1], 'destination' => 'elements', ) ), ); }
Добавить новый символ в
$inlineMarkerList
:protected $inlineMarkerList = '!*_&[:<`~\\^';