[re] Re: [re] HTML в stuphead.
Ivan Zakharyaschev
vanyaz на mccme.ru
Пт Дек 8 22:30:05 MSK 2000
Hello, Roman!
On Fri, 8 Dec 2000, Roman S wrote:
> Я хочу вструнить туда единый рекодирующий модуль,
> который будет работать со всеми кодировками, которые в
> состоянии обеспечить ОС.
Что-то похожее было сделано Львом Левитиным с PINE: туда была встроена
возможность перекодировки сообщений для разных целей (показ, сохранение,
цитирование, пересылка -- не все из этого гладко работает). PINE с такими
усовершентствованиями -- 4.21L, вошедший в Mdk RE 7.0. Сейчас я вроде стал
maintainer'ом этой "фичи" в нашем PINE.
Можно было бы скоординировать развитие такой фичи в MUA. В принципе,
договариваться почти не о чем, так как все довольно просто.
Надеюсь, никакой розни между разработчиками/пользователями разных MUA, в
частности Stuphead и PINE, я этим сообщением не разожгу.
Дальше идут подробности. Те, кому неинтересно, могут смело не читать и
перейти к следующему сообщению.
Есть собственно перекодирующий модуль, который очень прост (если он
основан на iconv, как в PINE). Выделять его в отдельную библиотеку нет
смысла. (Основная сложность при расширении PINE была не в создании этого
модуля, а во встраивании его в программу.) В PINE этот модуль -- небольшая
надстройка над стандартным iconv; особенности такие:
1. перекодировка задается не двумя параметрами (исходная и конечная
кодировка), а цепочкой правил (enc1->enc2,enc3->enc4,...,encN->encN+1);
2. другие названия кодировок; они преобразуются перед передачей их iconv:
например, windows-1251 становится cp1251.
Не знаю, нужна ли реально надстройка 1 (цепочки правил): понятно, что с
точки зрения реализации она не нужна, но, возможно, она придает некоторую
гибкость в обращении с модулем при использовании этой "фичи". По крайней
мере, никаких неудобств это не вызывает.
Вторая надстройка появилось из-за того, что в сообщениях в поле
Content-Type: названия кодировок используются не те же, что известны
системе. Получается, что каждой программе, имеющей дело с документами, где
кодировка указана по регистру IANA, и желающей использовать системные
функции перекодировки, нужно знать соответсвия между этими названиями и
системными. Я до сих пор еще не понял, как обычно решается эта проблема --
вот здесь можно было бы создать отдельную библиотеку, знающую эти
соответсвия, или научить glibc (интересно, по каким соображениям
в нее включались названия кодировок?).
Другая сторона -- это возможности пользователя по управлению
перекодировкой и воздействие перекодировки на сообщение.
Пользователю может понадобиться перекодировка в нескольких целях:
- сохранить сообщение
- процитировать/переслать
- и самая частая: просмотреть.
Последний случай особый. Перекодировку при просмотре было бы правильнее
сделать задачей не модуля перекодировки сообщений.
Сейчас в PINE пользователь определяет цепочку преобразований для
совершения перекодировки. Перекодировка может совершаться в двух (или
трех) режимах: автоматическая (из кодировки, укзанной в сообщении, в
кодировку по умолчанию) и ручная (по заданной цепочке правил) (и можно как
особый третий случай выделить "никакую", т.е. ручную с пустым набором
правил). Эти режимы применимы не только при просмотре, но и при других
действиях (более того, при просмотре аналогичные режимы должны
реализовываться по-другому).
Какой выбор кодировок предоставлять пользователю? Давать ему сразу
огромный список не надо, но любая кодировка должна быть ему доступна.
(Этого в PINE пока нет.)
Как перекодировка отражается на сообщении? Во-первых, можно отдельно
перекодировать заголовки и тело. Во-вторых, в заголовках ведется слежение
за совершаемыми преобразованиями: PINE сейчас добавляет в новое сообщение
заголовки типа X-Recoded-From, X-Recoded-To, X-Recoded-By (по-моему, это
перестало работать, поэтому я не смог проверить) и меняет значение
Content-Type.
Сказанное тут -- смесь из того, что есть в нашем PINE на самом деле, и еще
нереализованных моих идей. Согласовать, по-моему, стоит то, как
перекодировка отражается на заголовках. Еще хотелось бы иметь единое
решение для установления соответствия между названиями кодировок
документов и системными кодировками. Посмотреть бы еще на то, как
перекодируют разные браузеры/MUA и другие схожие программы.
Какие есть мнения, комментарии?
--
С наилучшими пожеланиями,
Ivan Z.
Подробная информация о списке рассылки community