nataraj: (Default)
Swami Dhyan Nataraj ([personal profile] nataraj) wrote2008-01-14 10:53 pm

Вопрос по перлу (html2fb2)

Есть замечательный perl-скрипт html2fb2 писаный неким товарищем Mike Matsnev

Скрипт этот открывает файл, если имя задано, или берет STDOUT, скармливает открытый файл-хэндл HTML::Parser'у и дальше делает что надо.

Все бы хорошо, но возникает одна проблема... HTML::Parser не умеет правильно раскрывать амперсант-последовательности для случая когда его кормят уникодом не сказав что это уникод... (то есть когда в строке уникод но не выставлен флаг UTF8.) Но если открывать уникодный html-файл без доп ухищерений, то именно такие данные из него и приходят.

При этом скрипт сам, на момент открытия файла не всегда знает какая кодировка там будет, потому что в если ничего не сказано явно, то он по возможности берет кодировку из META в заголовке...

Эта мета ловиться парсером, но на момент когда она ловится, файл уже открыт... И из этого открытого файла уже сыпятся уникодная разнобайтица...

Проблема бы легко решалась бы, если бы контент файла загружался целиком, и можно было бы регекспить и преобразовывать его по самое неболуйся...

Но скрипт изначально задуман как фильтр (или какое там правильное слово... короче они не накапливает информацию, а по мере чтения выплевывает вывод, не дожидаясь пока все прочитается), и у нас есть ровно один шанс чтобы сделать все правильно... (Второй раз на STDIN никто ничего посылать не будет)

Вот... Короче я не понимаю как это сделать идеологически правильно не переиначивая всю идею скрипта... :-/

Есть кто-то кто может сказать что-то умное по этому поводу?
vitus_wagner: My photo 2005 (Default)

[personal profile] vitus_wagner 2008-01-14 08:14 pm (UTC)(link)
HTML::Parser-у совершенно необязательно скармливать хэндл. Можно и строку.
Т.е. зачитать файл или STDIN в строку самому, поанализировать на предмет meta и потом отдавать парсеру.
HTML-файлы книг они МАЛЕНЬКИЕ. Нет никакой необходимости читать их по кускам, даже если снаружи это выглядит как фильтр.
ext_613079: Default userpic (Default)

[identity profile] shaplov.livejournal.com 2008-01-14 08:18 pm (UTC)(link)
Да, я понимаю... Я наверное так и сделаю...

Но к этой задаче у меня еще и чисто академический интерес... Она таки не имеет нормального решения?

[identity profile] beldmit.livejournal.com 2008-01-14 08:16 pm (UTC)(link)
Коля, а ты не в курсе - как fb2 переконвертить в pdb?
ext_613079: Default userpic (Default)

[identity profile] shaplov.livejournal.com 2008-01-14 08:27 pm (UTC)(link)
Я не знаю...
Либо написать, либо конвертировать fb2 во что-то что можно потом конвертировать в pdb...

Вроде бы cpan говорит о http://search.cpan.org/~bdfoy/p5-Palm-1.009/lib/PDB.pm

Но мне это писать совершенно незачем...
vitus_wagner: My photo 2005 (Default)

[personal profile] vitus_wagner 2008-01-15 09:04 am (UTC)(link)
Посмотри на www.fictionbook.org - вроде был там конвертер.