` | PARSER | документация |

parser

faqfaq
авторыавторы
документациядокументация

в действиив действии
куда говоритькуда говорить
жаргонжаргон

скачатьскачать

примерыпримеры
форумфорум

документация

3. Операторы Парсера

3.2. Макросы

3.2.1. Вызов макроса. Оператор macro

Формат вызова

^macro[макрос;аргумент1;аргумент2;....;аргументN]

Аргументы

макрос — имя вызываемого макроса.

аргумент1, … аргументN — значения аргументов, передаваемые макросу при вызове.

Описание

Оператор вызывает макрос и передает ему указанные значения аргументов. Результат вызова — обработанный Парсером текст макроса (см. п. 1.3).

Внимание! Обработка текста макроса выполняется в следующем порядке. Сначала имена аргументов, предваряемые символом $, заменяются их значениями, переданными при вызове. Важно, что значения аргументов передаются как есть, встречающиеся в них вызовы операторов не обрабатываются. Затем полученный текст обрабатывается Парсером. Приведенный ниже пример демонстрирует, что пренебрежение этим обстоятельством может приводить к ошибкам. Предположим, в файле _macro.cfg описан макрос repeat_text.

@repeat_text[snipet;times]
^var[
i;0]
^while[
i<$times;
       $
snipet
       ^var[i;+;1]
]

В шаблоне страницы мы вызываем этот макрос в следующем контексте:

^var[i;9]
^macro[
repeat_text;There is no beer;^var[i]]

Подстановка переданного значения аргумента times в текст макроса даст такой код:

^var[i;0]
^while[
i<^var[i];
       $
snipet
       ^var[i;+;1]
]

Легко видеть, что условие выполнения цикла всегда неверно, поэтому цикл не выполнится ни разу.

Примеры

Рассмотрим следующий фрагмент кода:

@section_header[title;date]
   <H1>$title</H1>
   <I>
date</I>
@main
   <HTML>
   <HEAD><TITLE>
Учебный сайт</TITLE></HEAD>
   <BODY>

      ^macro[section_header;Новости;^date[]]
   </BODY>
   </HTML>

Его обработка даст следующий результат:

<HTML>
<HEAD><TITLE>
Учебный сайт</TITLE></HEAD>
<BODY>
<H1>
Новости</H1> <I>05.03.2001</I>
</BODY>
</HTML>

3.2.2. Динамическое описание макроса. Оператор macro_new

Формат вызова

^macro_new[имя_макроса;текст_макроса]

^macro_new[имя_макроса[список_параметров];текст_макроса]

Аргументы

имя_макроса — имя определяемого макроса.

список_параметров — список параметров определяемого макроса.

описание_макроса — текст макроса.

Описание

Оператор определяет новый макрос. Если определяемый макрос не имеет аргументов, используется первая форма вызова, если имеет — то вторая.

Примеры

Опишем макрос link_to_contents без аргументов.

^macro_new[link_to_contents;<A HREF="contents.html">Содержание</A>]

Опишем макрос page_title с двумя аргументами и вызовем его.

^macro_new[page_title[title;tag];
           <$tag>$title</$tag>
]
^macro[
page_title;Новости;H1]

Результатом такого вызова будет следующий код: <H1>Новости</H1>.

3.2.3. Загрузка макросов из файла. Оператор macro_use

Формат вызова

^macro_use[путь]

Аргументы

путь — путь к файлу или каталогу с описаниями макросов.

Описание

Оператор загружает описания макросов из указанного файла. Имя файла на диске должно начинаться символом подчеркивания, который не указывается при передаче значения аргумента. Если передана строка parser.cfg, загружаются описания макросов изо всех файлов с таким именем, начиная с корня сервера. Если передан путь к каталогу, загружаются описания макросов изо всех файлов, расположенных в этом каталоге.

Примеры

^macro_use[/conf/issues.cfg]

3.2.4. Проверка существования макроса. Оператор macro_exists

Формат вызова

^macro_exists[имя_макроса]

Аргументы

имя_макроса — имя макроса, существование которого требуется проверить.

Описание

Оператор возвращает значение yes, если макрос с указанным именем существует. В противном случае оператор возвращает пустую строку.

Примеры

^eq[^macro_exists[show_copyright];yes;
    ^macro[
show_copyright];
    Копируй, кому не лень
]


E-mail: mailbox@parser.ruCopyright © 1997-2001 Студия Артемия Лебедева
`