# стиль абзаца заканчивается

в то время как (@код <$глубина) {

нажать ©код, $код;

$теги .= "<$код>"; # стиль абзаца начинается

}

если ($код[$#код] не $код) {

$tags .= "</$code[$#code]>\n<$code>";

# разделить с новой строкой

$код[$#код] = $код; # обрабатывать смешанные теги

">

вернуть $теги;

}

Неинтуитивным аспектом сценария является то, как список замещения обрабатывает смешанные и

разметка вложенного абзаца правильно, в отличие от более простой встроенной разметки. Смотрящий

при полном списке раздела замещения (см. главу 7) следует отметить, что

последний оператор, который вызывает EmitCode:

$код

|| ($body .= &EmitCode('', 0));

# тег завершения

Значение $code отслеживает, имеет ли текущий абзац блочную разметку.

применяемый. Здесь либо в текущей строке произошло совпадение блоков для начала (или

continue) стиль абзаца ($code не пуст), иначе разметка абзаца закончилась

с ранее проанализированной строкой. В последнем случае пустой вызов «выскакивает

все уровни" и создает любые теги, завершающие текущий блок. Используемая привязка ИЛИ

здесь фактически противоположно предыдущей конструкции AND и может быть

читать как если (слева) {тогда сделать справа). Perl не смотрит дальше, если левая часть

правда.

Таким образом, синтаксический анализатор шаблонов правильно отслеживает вложенность даже для смешанных типов списков.

и сохраняет последовательные элементы одного и того же типа и уровня в одном и том же охватывающем

блокировать теги.

Обратите внимание на порядок, в котором теги добавляются к странице, которую мы создаем.

в $body — другими словами, на предыдущую (в стиле абзаца) строку с последнего раза

вокруг — или вставляется в текущую анализируемую строку. Это может показаться загадочным и

трудно следовать в первый раз, но поверьте нам: это работает. (Также легко испортить

при кодировании изменяется на этот синтаксический анализ.)

Чтобы таким же образом формировать нумерованные списки, мы выбираем знак решетки (#)

и на этот раз обратитесь к тегу блока <OL>. Принцип тот же, поэтому список

становится:


ВЗЛОМ ВАШЕГО ИСТОЧНИКА WIKI

165

с/*(\#+)/<li>/

ScSc($body .= &EmitCode('OL', длина $1)) ;