Skip to content
Oleg Grigoriev edited this page Jan 17, 2014 · 3 revisions

Настройки разбора

Здесь приведён список настроек, используемых при разборе и отрисовке документа, а также их значения по умолчанию.

При создании экземпляра класса Parser, его настройки можно перекрыть:

use axy\ml\Parser;

$options = [
    'escape' => false,
    'tab' => 5,
];

$parser = new Parser($options);

Формат содержимого: nl (\n) и tab (4)

Исходный текст преобразуется следующим образом:

  • Все переносы строк в разных форматах заменяются на символ \n
  • Все знаки табуляции заменяются на последовательность из пробелов.

Количество пробелов на один таб задаётся опцией tab.

Внутри, при разборе текста, для переноса строк всегда используется \n, но при выводе его можно заменить на другой формат:

$parser = new Parser([
    'nl' => "\r\n",
    'tab' => 4,
]);

Обработка текста: escape (true) и textHandler

По умолчанию, все HTML-сущность в тексте экранируются. Это можно отключить с помощью опции escape=FALSE.

Если определить функции textHandler и все тексты буду пропускаться через неё. Можно использовать для добавления типографики.

Например, заменить -- на тире:

$parser = new Parser([
    'textHandler' => function (text) {
        return \str_replace($text, '--', '');
    },
]);

Если определён textHandler, а escape не сброшен, то сначала текст пропускается через обработчик, а затем экранируется.

Данное поведение также используется и для содержимого заголовков.

Теги сами решают, использовать или нет данные настройки.

Заголовки: hStart (1) и hHandler

По умолчанию, заголовок выводится через тег <hX>. Если у него есть имя, то оно выводится в атрибуте id.

То есть заголовок

##[name] This is Header

Выводится как

<h2 id="name">This is Header</h2>

Содержимое заголовка экранируется и обрабатывается одинаково с простым текстом (см. выше).

Все заголовки с уровнем выше 6, выводятся, как <h6>.

Начало нумерации задаёт опция hStart. Её можно сдвинуть. Если hStart=3, то # будет <h3>, а ### будет <h5>.

Либо можно определить функцию hHandler для отрисовки заголовков:

$parser = new Parser([
    'hHandler' => function (h) {
        return '<div class="h'.$h->level.'">'.$h->content.'</div>';
    },
]);

Данная функция получает единственным аргументом объект со свойствами:

  • content - содержимое заголовка
  • level - уровень (начиная с 1)
  • name - имя (якорь, NULL - если не указан)

Что функция возвращает, то и выводится без какого-либо экранирования и т.п.

Блоки: bTags (['<p>', '</p>]') и bHandler

Абзац, по умолчанию заключается в <p>. Используемый тег можно изменить с помощью bTags или вообще сбросить через bTags=['', ''].

Либо определить функцию bHandler. На вход она получает вёрстку содержимого абзаца, на выходе - вёрстка абзаца.

Разделитель блоков blocks_separator (\n\n)

Блок, это: абзац, заголовок, отдельно стоящий тег (из тех, что не создают для себя абзацев, например [HTML]).

По умолчанию они в итоговой вёрстке отделяются пустой строкой для красоты.

Если красота не нужна, можно убрать и сэкономить пару байтов.