вторник, 23 марта 2010 г.

Puri и utf-8. Часть 2.

Стоило мне внести изменения в Puri, о чём я писал в предыдущей заметке, так сразу вылезла куча проблем в моих пакетах. Причиной этого является то, что ранее для компенсации "плохого" поведения Puri я использовал #'hunchentoot:url-decode. Пришлось разлруливать возникающие проблемы, в том числе, внести изменения в restas, в частности в ключевой метод genurl. В итоге, пришлось оформить это дело в виде новой версии - 0.0.6. Заодно, оформил новую версию cl-closure-template, которая теперь экспортирует простые функции для кодирования и декодирования url (есть и ещё пара небольших исправлений). Поначалу я их хотел убрать, ибо теперь есть нормальная версия Puri, но поразмышляв решил их оставить, они не совсем корректны, с точки зрения RFC 2396, но зато просты и будут стабильны. Между прочим, Puri сейчас является единственным инструментом, обеспечивающим абсолютно корректную работу с url в соответствии с RFC 2396, при этом, простые инструменты, типа url-encode/url-decode не могу обеспечить этого в принципе. Если кто успел попробовать пакет restas-wiki, то после обновления может обнаружить, что он теперь не видит некоторые старые страницы. Вылечить можно следующим кодом:
(defun update-wiki-pathname (path)
(let ((new-path (pathname (closure-template:encode-uri
(hunchentoot:url-decode
(hunchentoot:url-decode (namestring path)))))))
(unless (equal path new-path)
(rename-file path
(make-pathname :defaults new-path :type :unspecific)))))

(fad:walk-directory #P"/var/to/wiki/dir"
#'update-wiki-pathname)
Пока разбирался с этими проблемами, обнаружил, что и мой патч к puri не безгрешен, пришлось править ещё раз. Внёс соответствующие изменения в свой форк gentoo-lis-overlay, но правда пакеты restas-wiki, restas-directory-publisher и т.п. не обновил, ибо просто не успеваю всё делать, надо бы для них сделать 9999-пакеты. Да, последние дни выдались напряжёнными...

Комментариев нет:

Отправить комментарий