parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Подумал. Вроде бы понял :)

Безымянный 30.07.2005 00:19

Цель: формировать средствами парсера JS-код для библиотеки JSHttpRequest (by Dmitry Koterov).

Библиотека создает запросы к серверу:
get-запрос:
script.html?sid=session_id...param=pairs...?request_id 

post-запрос:
script.html?sid=session_id?request_id 
[остальные данные в теле запроса]
GET-запрос: request_id = $form:qtail

POST-запрос: request_id можно получить только вручную:
$qtail[^request:query.mid(^request:query.pos[?]+1)]
Т.к. парсер не понимает %uXXXX, возникла необходимость написать свой метод разбора строки:
# передаем данные после замены  %uXXXX -> Win1251
# см. http://www.parser.ru/forum/?id=42777
@_parse_query_string[string][parts;key;value]
^if(^string.pos[?]>=0){
	$result.qtail[^string.mid(^string.pos[?]+1)]
	$string[^string.mid(0;^string.pos[?])]
}
$parts[^string.split[&]]
^parts.menu{
	^if(^parts.piece.pos[=] > 0){
		$key[^parts.piece.left(^parts.piece.pos[=])]
		$value[^parts.piece.mid(^parts.piece.pos[=]+1)]
		$result.$key[$value]
	}
}
Для начала стало понятным, что в этом случае (POST-запрос & нет поддержки %uXXXX) бессмысленно получение $form:qtail.

Тут я уже понял, что был не прав :-(

+ после непродолжительных раздумий, мне стало очевидным, что ситуация не является типичной. На мой взгляд, при POST-запросах логично не делать разбор $request:query (а значит, не определять $form:qtail).

Если параметры передаются в теле запроса, то передача переменных в строке запроса бессмысленна.

Если это требуется для каких-либо иных целей (например, как в моем случае - передача id запроса), тогда $form:qtail = $request:query.

Передача SID в данном конкретном случае - рудимент ПХП-шного костыля для создания сессий.

Вывод: больше отдыхать, больше думать => чтобы не писать глупостей.

В общем, спасибо за науку ;-)


Пожелание: дополнительные возможности строкового метода ^pos[].
Суть: ^строка.pos[подстрока;номер совпадения]
Например:
...
$string[17/9/2003]
$string[31/12/2004]
...

$year(^string.mid(^string.pos[/;2]))

На мой взгляд, такое дополнение в некоторых случаях позволит отказаться от использования регулярных выражений.