Потому что "экранированный режим" должен отключать все замены для указанного
блокировать, а затем снова включить его, важно, чтобы шаблон тега был
оба ясны и вряд ли будут запущены ложно. В этом примере выбран
шаблон:
[буквальный]
. . . текстовый блок, который нужно экранировать
[/ буквально]
Теперь есть два способа определить это поведение.
• Текстовый блок определяется строкой — другими словами, он ведет себя как абзац.
разметка, начинающаяся и заканчивающаяся строками.
• Допускается любой диапазон, поэтому вы можете избежать встроенной текстовой последовательности или любой произвольной строки.
"блок" текста без учета размещения "тегов" или натянутых строк.
На первый взгляд, первый вариант может показаться проще: поставить теги на свои строки.
и сбежавший блок между ними. Однако вы не можете использовать обычные
парсинг тега абзаца для этого, в частности потому, что нет соответствующего
Тег HTML для использования.
Схема этой версии синтаксического анализа (построчной печати) выглядит следующим образом:
суб PrintBodyText {
мой побег;
для каждого
(разделить (/\n/, $_)) {
# -v- сделать каждую явную исходную строку
ВЗЛОМ ВАШЕГО ИСТОЧНИКА WIKI
169
если ($ побег) {
$escape = ( ! s/(\[\/литерал\])//i ) ;
если (!$escape) { &EmitCode("", 0) }
} еще {
$.escape = ( s/( \ [literal\] ) //i ) ;
если ($escape) { &EmitCode(PRE, 1) }
}
если (!$ побег) {
# здесь идет обычная секция подстановки, опущенная для ясности
} # --конец побега, если
напечатать "$__"; # вывести каждую строку как подставленную
} # --конец цикла foreach(line)
&ВыдатьКод("", 0); # распаковать любой текущий тег
}
Такой подход без излишеств работает достаточно хорошо. Разделы if-else переключают экранированные
состояние и разрешить несколько блоков на одной странице. (Мы допускаем нечувствительность к регистру
квалификация шаблона соответствует "i".) Для экранированных блоков синтаксический анализ пропускает весь
раздел замены. В качестве меры предосторожности проверка тегов позволяет начальным или конечным псевдотегам
находиться в любом месте строки, если это не одна и та же строка, поэтому следующий текст будет
нормально сбежал.
[буквальный] Этот текстовый блок
также сбежал.[/literal]