# стиль абзаца заканчивается
в то время как (@код <$глубина) {
нажать ©код, $код;
$теги .= "<$код>"; # стиль абзаца начинается
}
если ($код[$#код] не $код) {
$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)) ;