Parsedown: суб / верхний индекс

Текущая версия Parsedown 1.8.0-бета-5 не имеет встроенного синтаксиса для суб / верхний индекс. Хотя CommonMark не указывает такой синтаксис, некоторые другие легкие языки разметки (например: Parsedown Extreme, текстильный) используйте синтаксис, подобный следующему:

in: 19^th^
out: 19<sup>th</sup>

in: H~2~O
out: H<sub>2</sub>O

Вопрос
Какие шаги следует предпринять для того, чтобы изменить Parsedown.php файл и включить такой синтаксис?

 


Замечания: Эта проблема уже поднималась в другой раз (Parsedown, добавить суб / верхний индекс). Тем не менее, до сих пор нет пошагового руководства, объясняющего, какие изменения должны быть сделаны в Parsedown.php файл для достижения этого.

1

Решение

  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'),
    );
    
  2. Определить методы 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',
    )
    ),
    );
    }
    }
    
  3. Определить методы 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',
    )
    ),
    );
    }
    
  4. Добавить новый символ в $inlineMarkerList:

    protected $inlineMarkerList = '!*_&[:<`~\\^';
    
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector