Если запрошенная страница существует, мы пытаемся загрузить ее из каталога базы данных —
есть более элегантные способы прервать, чем «умереть», если это не удается, но примите это за
сейчас. При «отмене определения» символа новой строки yariable все строки загружаются одновременно. В
подпрограмм, вы можете использовать локальную $/, чтобы ограничить область этого, но здесь нам нужно
сохранить и восстановить правильное значение.
Затем мы переходим к подпрограмме FormatBody, из которой получаем
визуализированную HTML-версию содержимого и обратите внимание на дату последнего редактирования из
РАЗБИРАЕМ QUICKIWIKI
213
атрибуты файла. Если страницы не существует, мы просто даем пользователю приглашение
вместо этого создайте страницу.
$par{summary} = "Дата последнего редактирования: $date" if $date;
$пар{тело} = $тело;
$par{действие} = «
"ЭОФ";
<form method=post action="edit.cgi?$page">
<input type=submit value=" Редактировать эту страницу">
</форма>
EOF
Это определяет отметку даты страницы, отображаемый основной текст и кнопку редактирования для
страница. Осталось заполнить шаблон собранным текстом
компоненты.
открыть (T, 'template.html') || die "template.html: $!";
неопределенный $/;
$_ = <Т>;
шкаф);
s/\$(\w+)/определено($par{$l}) ? $par{$l} : ''/гео;
Распечатать;
$/ = $nl;
Оператор подстановки ищет любые слова с префиксом $ в шаблоне, которые
соответствуют определенному хеш-ключу — это наши определенные заполнители шаблона. Когда
местозаполнитель найден, связанное значение помещается на его место, неоднократно
по всему шаблону.
На этом основной поток этого модуля завершен, за исключением
подпрограммы. Модуль завершает работу, и управление возвращается к серверу, который
называется скриптом.
Далее взглянем на подпрограмму рендеринга, сердце замещения вики.
разбор. Здесь шаблоны ссылок идентифицируются и превращаются в якоря гиперссылок.
Здесь также преобразуются все выбранные коды форматов «вики-синтаксиса».
в соответствующие теги HTML.
Когда вы решите настроить и расширить форматирование (а большинство людей так и делают,
рано или поздно), это то, куда вы идете. Код компактный и лаконичный, но
Анализ объясняет принципы, чтобы вы понимали, как интерпретировать и
изменить эти утверждения.
214
ИЗУЧЕННЫЕ КОМПОНЕНТЫ ВИКИ
суб FormatBody {
местный $_ = сдвиг
мой ($InPlaceUrl, @InPlaceUrl);
мой ($код, @код);
мое $тело;
с/&/&амп;/г;
с/</</г;
с/>/>/г;
Основные требуемые списки, счетчики и строковые переменные объявлены, а
глобальные замены заменяют зарезервированные символы HTML их отображением
эквиваленты.
Отсюда обработка переходит к построчной.
foreach (split (/\n/, $_)) {: # -v- делать каждую явную исходную строку
$InPlaceUrl=0;
в то время как (s/\b(javascript):\S.*/$mark$InPlaceUrl$mark/)
$InPlaceUrl[$InPlaceUrl++] = $&
}
{
мой $protocol = "(?:http|ftp[mailto|file|gopher|telnet|новости)";
while (s/\b$протокол: [/S\s\<\>\ [\] " · \ (\) ] * ["\s\<\>\ [ \] " ' \ (\)
\.\?]/$mark$InPlaceUrl$mark/) {
$InPlaceUrl[$InPlaceUrl++] = $&
}