| |||
![]() | |||
| Последние новости | Птичка | Из раздела FAQ |
| [24 февраля 2011]
Выпущена версия 3.4.1: Появилась встроенная поддержка json. На UNIX появилась возможность собрать Parser с поддержкой библиотеки curl (через которую можно работать с https серверами и устанавливать keep-alive соединения). Подключаемые через @USE/^use[] классы сначала ищутся относительно текущего файла, в котором эти @USE/^use[] написаны. Теперь определяемые пользователем методы могут принимать произвольное число параметров: @method[arg;*args] (в переменной $args будет хэш со всеми параметрами с числовыми ключами начинающимися с 0). Пользовательским методам теперь можно определять допустимые типы их вызова. В директиве @OPTIONS можно указать параметр dynamic или static (если не указано — any), который будет действовать на все методы, описываемые в файле. А определённым методам можно задать только статический тип вызова: @static:method[params]. У пользовательских классов можно определить default setter (@SET_DEFAULT[name;value]) — метод, который будет вызываться при записи в несуществующие поля объектов данного класса. Оператор if теперь может иметь произвольное число «elseif» секций, например: ^if(a>0){1}(a==0){0}{-1}. У классов теперь отключено наследование метода @auto[]. Если класс A имеет производные классы B и C, то описанный в нём метод auto в любом случае будет выполнен лишь единожды (раньше он выполнялся при подключении каждого из классов). Класс void теперь полностью совместим с классом string, т.е. теперь можно вызывать функции строки у неопределённой переменной не проверяя её предварительно на определённость (def). У класса hash появился метод ^хэш._at($index) (или ^хэш._at[first|last]), который можно использовать для доступа к элементу хэша с нужным индексом (элементы в хэше упорядочены начиная с версии 3.4.0). Добавлен оператор ^apply-taint[[lang]][...], который приводит к сиюминутному преобразованию всех языковых кусочков в строке. Указанный язык (по умолчанию — as-is) применяется к грязным кусочком с неопределённым языком. Появился метод для конвертирования чисел из одной системы исчисления в другую: ^math:convert[number](base-from;base-to). Метод ^таблица.select(...)[опции] теперь понимает опции $.limit(X) и $.reverse(true|false). У метода поиска и замены в строке ^строка.match[...] появился необязательный четвёртый параметр, значение которого возвращается, если не было найдено совпадений с шаблоном. Парсер теперь ругается на неизвестные ключи у метода ^строка.match[...]. Метод ^string:js-unescape[...] теперь также декодирует символы, закодированные в виде \uXXXX (раньше декодировал только %uXXXX). У конструктора ^file::base64[закодированное] теперь есть ещё один способ вызова (по параметрам больше похожий на ^file::create[...]): ^file::base64[text|binary;имя файла;закодированное[;$.content-type[...]]]. Конструктор ^file::create[...] в опциях теперь понимает параметр $.content-type[...]. Добавлен метод ^reflection:copy[$src;$dest], который осуществляет копирование всех полей из $src в $dest. Если при загрузке таблицы из файла в опциях $.encloser или $.separator задано значение '#', то отключается удаление в загружаемом файле строк, начинающихся с этого символа (обычно они автоматически удаляются как комментарии). Теперь пробельные символы, написанные в коде между методами, не попадают в результат. В @МЕТАКОМАНДАХ (@USE, @CLASS, @BASE, @OPTIONS) теперь игнорируются пробельные символы в конце строк. Небезопасная версия (grpunlim) теперь позволяет передавать скриптам, запускаемым через ^file::exec/cgi[...], переменные окружения с любыми именами. У метода ^изображение.replace(color;color)[poligon] третий параметр теперь не является обязательным. Если он не задан, то цвет заменяется у всего изображения. Если при загрузке текстовых файлов или таблиц без опции $.charset у загружаемого файла обнаруживается BOM-код, то автоматически происходит его перекодирование из UTF-8 в текущую кодировку ($request:charset). Теперь метод ^reflection:method_info[класс;метод] в поле $.inherited возвращает имя того класса-предка, в котором находится реально вызываемый унаследованный метод. Теперь метод ^reflection:method_info[класс;метод] в поле $.overridden возвращает имя класса-предка, в котором находится последний перекрытый метод. Тело HTTP-запроса в виде файла теперь можно получить из $request:post-body. Версия скомпонована с последними версиями библиотек PCRE (8.12) и libxml2 (2.7.8). Исправлен ряд ошибок: Теперь при вызове ^file::exec/cgi[...;parser3.cgi] без параметров не происходит зацикливания. Исправлена ошибка, приводящая на некоторых системах к искажению данных. Исправлена ошибка, из-за которой не работало обращение к $method-junction.CLASS_NAME. Исправлена ошибка, из-за которой выдавалось невразумительное сообщение об ошибке при записи cookie со слишком большим значением expires. При выдаче исключений иногда сообщалось «element can not be stored to stateless_class», хотя вместо «stateless_class» должен был указываться конкретный класс. Исправлена ошибка, приводящая к core при отправке бинарных файлов удалённому серверу в конструкторе ^file::load[...;http://сервер/;$.file[$file]]. Исправлена ошибка, приводящая к core в случае сборки парсера некоторыми компиляторами. Исправлена ошибка, приводящая к core, если в строках оказывались символы \0 (добиться такого было сложно, но всё-таки можно). Исправлена ошибка, из-за которой метод ^таблица.locate[field;value] не понимал третий параметр с опциями. Исправлена ошибка, из-за которой порядок элементов в $form:fields не был определён. Исправлена ошибка, из-за которой в заголовках отправляемых писем иногда делался избыточный эскейпинг строчных латинских символов (проблем с чтением таких писем не возникало, но их размер получался больше, чем необходимо). Исправлена ошибка, из-за которой оператор ^sleep(...) понимал только целочисленные значения. В библиотеке PCRE исправлена ошибка, из-за которой неверно производился поиск заглавной буквы 'Ф' без учёта регистра. | ![]() | Что такое Parser? А зачем он вообще? Если есть PHP, то для чего Parser? Я программировал на других языках, можно ли, в двух словах, что же такого удобного в Parser? @header[] ... @footer[] ... @navigation[] ... @body[] ... Я в браузере вижу код на Parser, он не обработался, в чем может быть причина (использую веб-сервер Apache)?
Parser/3.x.xЕсли вы это увидели, парсер скопирован куда следует, права на него установлены правильные. Если парсер скопирован правильно и вы не забыли прописать в .htaccess инструкции, указанные в документации, возможно вы забыли разрешить апачу обработку .htaccess в файле httpd.conf с помощью инструкции AllowOverride. Чтобы проверить, обрабатывается ли у вас .htaccess — впишите в него какую-нибудь заведомо неверную инструкцию, например «mytest», в самое начало. Если при релоаде страницы вы не увидите 500 ошибку (она обязательно появится если все настроено верно) — значит данный файл у вас не обрабатывается. Измените значение AllowOverride или обратитесь к вашему администратору. |
|
| E-mail: mailbox@parser.ru | Copyright © 1997–2011 Студия Артемия Лебедева |