3. Операторы Парсера
Формат вызова
^context[имя_таблицы;код]
Аргументы
имя_таблицы имя таблицы, назначаемой текущей.
код код, обрабатываемый Парсером.
Описание
Оператор назначает текущей указанную таблицу. Код обрабатывается Парсером.
Примеры
|
^context[data; ^menu[<A HREF=^item[id].html>^item[title]</A>] ]
|
|
|
|
Формат вызова
^config[данные]
^config[команда1...командаN;данные]
^config[команда1...командаN]
Аргументы
данные значения, загружаемые в таблицу.
команда1...командаN режимы формирования таблицы.
Описание
Оператор заполняет текущую таблицу переданными значениями, которые должны располагаться так же, как в файле формата tab-delimited. А именно: значения, принадлежащие одной строке таблицы, отделяются друг от друга символом табуляции, а строки таблицы символом перевода строки.
Аргумент команда задает режим заполнения таблицы. Этот аргумент может принимать следующие значения:
- named первая строка значений содержит имена столбцов таблицы;
- append данные будут добавлены в текущую таблицу последней строкой;
- insert данные будут вставлены перед текущей строкой таблицы. Новая строка сделается текущей;
- insert;номер_строки данные будут вставлены перед строкой с указанным номером;
- remove удаление текущей строки таблицы. Данные можно не передавать;
- remove;номер_строки удаление из таблицы строки с указанным номером. Данные можно не передавать;
- remove;номер_строки;количество_строк удаление указанного количества строк, начиная со строки с указанным номером. Данные можно не передавать;
- join;имя_таблицы добавить к текущей таблице строки из таблицы с указанным именем. Таблицы обязательно должны иметь одинаковую структуру. Данные можно не передавать.
Внимание! Закрывающую квадратную скобку следует ставить сразу после значения, расположенного на пересечении последней строки и последнего столбца. Если перенести ее на следующую строчку, то в контекст будет добавлена лишняя строка.
Замечание. Данные обрабатываются на уровне config (см. п. 1.6).
Примеры
Следующий фрагмент кода формирует таблицу из трех строк и трех столбцов.
|
^config[named; last_name > date_of_birth > e_mail Иванов > 20.10.65 > ivanov@nechto.ru Петров > 12.03.72 > petrov@nechto.ru Сидоров > 04.09.81 > sidoroff@nechto.ru]
|
|
|
|
Столбцы таблицы получат имена last_name, date_of_birth и e_mail. Как имена столбцов, так и значения в столбцах должны быть отделены друг от друга символом табуляции.
Формат вызова
^load[полное_имя_файла]
^load[named;полное_имя_файла]
Аргументы
полное_имя_файла имя файла данных.
named значение, которое указывает на то, что первая строка файла содержит имена столбцов.
Описание
Оператор загружает данные из файла в формате tab-delimited в текущую таблицу. Имя файла на диске должно начинаться символом подчеркивания, который не указывается в аргументе оператора. Если указан первый аргумент named, то первая строка файла интерпретируется как список имен столбцов.
Внимание! При загрузке данных в таблицу ее содержимое теряется.
Замечание. Пустые строки в файле данных игнорируются.
Замечание. Для того чтобы поместить в файл данных комментарий, можно поставить в первой позиции строки символ # (диез), а за ним написать текст комментария. Строки, начинающиеся символом #, Парсер пропускает.
Примеры
Следующий фрагмент кода назначает текущей таблицу data и загружает в нее данные из файла _data.cfg.
|
^context[data; ^load[named;data.cfg] ]
|
|
|
|
Замечание. Оператор имеет "фичу", т.к. создавался в том числе для хранения в конфигурационных файлах навигационных меню сайта.
Фича заключается в том, что после загрузки данных файла в контекст, оператор проверяет, совпадает-ли значение в какой-либо строке нулевого столбца с началом текущего URI, и если совпадает, то позиционирует текущий указатель контекста на данную строку.
Если у нас есть в корне сайта файл _root.cfg, содержащий следующие строки:
|
url > name /news/ > Новости /guest/ > Гостевая книга /about/ > О сайте
|
|
|
|
То код:
|
^context[root; ^load[named;root.cfg] ]
|
|
|
|
При вызове на странице с URI /news/2001-03-01.html, загрузит данные этого файла в контекст root и спозиционирует текущий указатель контекста на первую строку.
При вызове со странице с URI /about/me.html, загрузит содержимое и спозиционирует текущий указатель на 3 строку контекста.
Формат вызова
^empty[код_если_нет_данных;код_если_есть_данные]
Аргументы
код_если_нет_данных код, возвращаемый оператором при отсутствии данных в таблице.
код_если_есть_данные код, возвращаемый оператором при наличии данных в таблице.
Описание
Оператор возвращает первый аргумент, если текущая таблицы пуста, и второй в противном случае.
Примеры
Рассмотрим следующий фрагмент кода.
|
^context[data; ^config[] ^empty[^sendmail[to:admin@domain.ru subject: Таблица data не содержит записей
Дорогой администратор, твоя таблица совсем не содержит данных, пользователи мучаются, почини, пожалуйста. С уважением, твой навеки Робот ]; Данные успешно загружены ] ]
|
|
|
|
Обработка этого фрагмента приведет к отправке администратору сообщения по электронной почте. Если заполнить таблицу data данными, то сообщение отправлено не будет. Дело в том, что Парсер обрабатывает только те аргументы, значения которых необходимы для вычисления значения оператора.
Формат вызова
^item[столбец]
^item[next;столбец]
^item[prev;столбец]
^item[имя_таблицы;столбец]
Аргументы
столбец столбец, значение из которого требуется получить.
next, prev указывает, что значение следует брать не из текущей строки таблицы, а из следующей или предыдущей.
имя_таблицы имя таблицы, в том случае, если требуется получить значение не из текущей таблицы.
Описание
Оператор возвращает элемент, стоящий на пересечении указанного столбца и текущей строки таблицы. Если таблица не указана, то возвращаются данные из текущей таблицы. Для того чтобы получить значение не из текущей строки, а из предыдущей или следующей, укажите в качестве первого аргумента значения prev или next соответственно.
Замечание. При использовании аргументов prev и next считается, что таблица закольцована. Вызов ^item[next;столбец] для последней строки вернет значение из нулевой строки. И наоборот, вызов ^item[prev;столбец] для нулевой строки вернет значение из последней.
Специальные форматы вызова оператора item используются для получения сведений о текущей таблице.
^item[count] количество строк в текущей таблице.
^item[current] номер текущей строки текущей таблицы (начиная с 0).
^item[number] номер текущей строки текущей таблицы, начиная с 1.
Примеры
^item[title]
^item[prev;title]
^item[people;name]
^item[0]
Формат вызова
^menu[код]
^menu[код;разделитель]
Аргументы
код код, выполняемый для каждой строки таблицы.
разделитель код, размещаемый между результатами обработки строк.
Описание
Оператор выполняет переданный код последовательно для каждой строки текущей таблицы. Разделительный код вставляется между всеми непустыми результатами выполнения кода.
Замечание. Оператор menu не перемещает текущую строку таблицы, т. е. после его вызова текущей будет та же строка, что и до вызова.
Примеры
Следующий фрагмент кода создает таблицу и выводит ее содержимое в виде HTML-таблицы.
|
^context[data; ^config[named; last_name > date_of_birth > e_mail Иванов > 20.10.1965 > ivanov@nechto.ru Петров > 12.03.1972 > petrov@nechto.ru Сидоров > 04.09.1981 > sidoroff@nechto.ru] <TABLE BORDER=1> ^menu[<TR> <TD>^item[last_name]</TD> <TD>^item[date_of_birth]</TD> <TD>^item[e_mail]</TD> </TR> ] </TABLE> ]
|
|
|
|
Формат вызова
^table[количество_столбцов;код]
^table[количество_столбцов;код;заполнитель]
Аргументы
количество_столбцов количество столбцов в HTML-таблице.
код код, формируемый для каждой строки таблицы.
заполнитель данные, размещаемые в незаполненном до конца столбце HTML-таблицы.
Описание
Оператор располагает строки текущей таблицы в HTML-таблице с указанным количеством столбцов. Если в результате последние строки последнего столбца HTML-таблицы остаются пустыми, в них записывается заполнитель.
Примеры
Рассмотрим следующий код:
|
^context[data; ^config[named;id > title 1 > Новости 2 > Погода 3 > Публикации 4 > Ссылки 5 > Контакты] <TABLE> <TR> ^table[2; <TD><A HREF="^item[id].html">^item[title]</A></TD>;  ^; ] </TR> </TABLE> ]
|
|
|
|
Обработка приведенного выше кода даст следующий результат:
|
<TABLE> <TR> <TD><A HREF="1.html">Новости</A></TD> <TD><A HREF="3.html">Ссылки</A></TD> </TR><TR> <TD><A HREF="2.html">Погода</A></TD> <TD><A HREF="4.html">Контакты</A></TD> </TR><TR> <TD><A HREF="5.html">Публикации</A></TD> <TD> </TD> </TR> </TABLE>
|
|
|
|
Формат вызова
^locate[имя_столбца;образец]
Аргументы
имя_столбца имя столбца, в котором выполняется поиск.
образец искомое значение.
Описание
Оператор ищет в указанном столбце текущей таблицы значение, равное искомому значению. Строка таблицы, в которой обнаруживается такое значение, делается текущей. Если искомое значение найти не удается, текущей делается первая строка таблицы.
Примеры
|
^context[data; ^locate[last_name;Иванов] ^eq[^item[last_name];Иванов; Запись найдена; Запись не найдена ] ]
|
|
|
|
Формат вызова
^shift[количество_строк]
Аргументы
количество_строк расстояние, на которое надо переместиться по таблице.
Описание
Оператор перемещает указатель текущей строки текущей таблицы на заданное количество строк вниз. Если аргумент отрицательный, то указатель перемещается вверх. Указатель перемещается по таблице циклически, т. е., достигнув последней строки, перемещается к первой и наоборот.
Примеры
^shift[3]
^shift[-4]
Формат вызова
^flip[имя_таблицы]
Аргументы
имя_таблицы имя таблицы, над которой выполняется операция.
Описание
Оператор преобразует текущую строку таблицы в столбец. В результате образуется таблица, состоящая из одного столбца. Предыдущее содержимое таблицы теряется.
Примеры
Рассмотрим следующий фрагмент кода:
|
^context[data; ^config[1 > 2 > 3 4 > 5 > 6] ^flip[data] ^menu[^item[0]] ]
|
|
|
|
Обработка этого фрагмента даст такой результат: 123.
Формат вызова
^sort[столбец_сортировки;параметры_сортировки]
Аргументы
столбец_сортировки столбец, по которому требуется отсортировать таблицу.
параметры_сортировки параметры, задающие способ сортировки.
Описание
Оператор сортирует текущую таблицу по указанному столбцу. Способ сортировки определяется параметрами. Параметры всегда состоят из двух символов: первый обозначает направление сортировки, а второй способ сравнения значений.
Первый символ:
+ по возрастанию ключа;
- по убыванию ключа.
Второй символ:
A лексикографический порядок;
N значения сравниваются как действительные числа;
D значения сравниваются как целые числа.
Примеры
^sort[^item[0];+A]
Формат вызова
^save[имя_файла]
^save[имя файла;текст]
Аргументы
имя_файла имя файла, в который производится запись.
текст текст, записываемый в файл.
Описание
Если используется первый формат вызова, то оператор записывает данные из текущей таблицы в файл с указанным именем. Если используется второй формат вызова, то в файл записывается переданный текст. Имя файла на диске должно начинаться символом подчеркивания, который не указывается в аргументе оператора.
Внимание! Используя оператор save, следует иметь в виду, что несколько посетителей сайта могут инициировать одновременную запись данных в один и тот же файл. Последствия этого непредсказуемы. Поэтому, если речь идет не о простейших случаях, мы рекомендуем отказаться от использования файлов в формате tab-delimited и работать с базами данных.
Примеры
^context[data;^save[data.cfg]]
^context[data;^save[data.cfg;Жил-был у бабушки серенький козлик]]
|