Однако другой, более мощный метод заключается в удалении всех экранированных разделов перед
синтаксический анализ и подстановка, а затем восстанавливать их перед отправкой содержимого страницы на
шаблон. Что мы делаем, так это заменяем найденные вхождения шаблона в переменной
со специальным маркером (предопределенным как $lmark = "\262", отличным от URL
маркер, используемый позже) и следите за порядком, в котором текстовые фрагменты были
найденный. Соответствующие части:
локальное $тело; # использовать для построения замененного текста
&EscapeMetaCharacters; # (< > &) делается перед литеральными заменами
мой ©blkLit, $blk = 0 ;
# -v- теги удалены, не нужны для последующего рендеринга
в то время как ( s/\[($sic)\](.*?)\[\/\1\]/$lmark$blk$lmark/si ) {
$blkLit[$blk++] = $2
1
42
НАСТРОЙКА ВАШЕЙ ВИКИ
}
# foreach построчно
# нормальный разбор, построчно
# конец построчного цикла
# -v- восстановить любые литеральные блоки
$body =~ s/$lmark(\d+)$lmark/<pre>$blkLit[$l]<\/prexp>/sg ;
# -v- страница готова
напечатать $тело; # вывести всю заменяемую страницу
# конец подпрограммы
Когда приходит время восстанавливать, мы ищем шаблоны пронумерованных маркеров и
заменить обратно соответствующие текстовые клипы. Добавление «s» к заменам
позволяет экранированным блокам занимать несколько строк. Эта конструкция снова встречается в
следующий раздел, посвященный заменам (и экранированным разделам) при сохранении страницы.
Расширенные коды замены
Под кодами замены мы подразумеваем подстановку текста, аналогичную расширениям формата
показано ранее. Отличие в том, что замена происходит до сохранения редактируемого
страницу, а не на лету при ее обслуживании. Это означает, что это одноразовый, постоянный
изменить исходный текст.
Совет 6.16: Преимущество замен ρresave
С точки зрения администрирования базы данных изменение такого рода замены
Соглашение легче обрабатывать, чем предыдущий вид. Коды замены
заменяется сразу же при сохранении редактируемой страницы и поэтому не
оставаться в исходном коде страницы как потенциальная устаревшая проблема.
Для QuickiWiki вставьте предложенные строки кода формата в предварительное сохранение.
список замен показан в сохранении. cgi, описанный в главе 7, в разделе