[Pharo-project] Streams. Status and where to go?

Igor Stasenko siguctua at gmail.com
Sun Feb 28 00:10:44 EST 2010


Hi, i'm also did some hacking. I uploaded XTream-Wrappers-sig.1 into SqS/XTream.

There is a basic XtreamWrapper class, which should work transparently
for any stream (hopefully ;).
Next, in subclass i created converter. Sure thing i could also add a
buffered wrapper, but maybe later :)

Here some benchmarks. The file i used to test is utf-8 russian doc
text - in attachment..

| str |
str := (StandardFileStream readOnlyFileNamed: 'unitext.txt') readXtream.
{
[ str reset. (XtreamUTF8Converter on: str readXtream) upToEnd ] bench.
[ str reset. (UTF8Decoder new source: str readXtream) upToEnd ] bench.
}
#('21.71314741035857 per second.' '14.0371688414393 per second.')
 #('22.16896345116836 per second.' '14.5186953062848 per second.')

Next, buffered

| str |
str := (StandardFileStream readOnlyFileNamed: 'unitext.txt') readXtream.
{
[ str reset. (XtreamUTF8Converter on: str readXtream buffered) upToEnd ] bench.
[ str reset. (UTF8Decoder new source: str readXtream buffered) upToEnd ] bench.
}
#('58.52976428286057 per second.' '25.44225800039754 per second.')
#('58.90575079872205 per second.' '25.87064676616916 per second.')


I'm also tried double-buffering, but neither my class nor yours
currently works with it:

| str |
str := (StandardFileStream readOnlyFileNamed: 'unitext.txt') readXtream.
{
[ str reset. (XtreamUTF8Converter on: str readXtream buffered)
buffered upToEnd ] bench.
[ str reset. (UTF8Decoder new source: str readXtream buffered)
buffered upToEnd ] bench.
}

Please , take a look. There are some quirks which not because i
cleaned up decoding/encoding code.
See XtreamWrapper>>upToEnd implementation.


-- 
Best regards,
Igor Stasenko AKA sig.
-------------- next part --------------
                         Unicode Wizard: Плагин для FAR
                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    (Файл, который обычно читают первым ;-))

                Проголосуйте, пожалуйста, за UWizard на плагринге:
             http://plugring.farmanager.com/cgi-bin/voter.cgi?ID=337
                       Для вас пустяк, а мне приятно :-)


   Для поддержки разработки программы можно пожертвовать некоторую сумму. Вот
     мои кошельки в системе WebMoney.ru (www.wmtransfer.com): Z787475721790
        (для USD), E876273527569 (для Euro), R538290555814 (для рублей).


1. Что это за программа
2. Зачем она вообще появилась
3. Как она работает
4. Системные требования
5. Регистрация
6. Установка и удаление
7. Настройки в ini-файле
8. Где брать новые версии
9. Благодарности

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Что это за программа

   Это плагин для FAR'а, предназначен для "редактирования" и "просмотра" файлов
в кодировке Unicode,  UTF-7,  UTF-8,  quoted-printable  и  base64  (для  base64
реализовано только декодирование  и  только  в  редакторе).  UWizard  позволяет
считать подобные файлы архивами. Войдя в такой "архив" вы увидите  там  файл  с
содержимым оригинального файла, но уже  в  кодировке  OEM,  который  вы  можете
помимо всего прочего редактировать(!),  причем  его  изменения  скажутся  и  на
оригинальном файле. UWizard также запускается в  редакторе  и  обрабатывает  по
запросу весь файл или только выделенную его часть.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2. Зачем она вообще появилась

   Давно хотел написать плагин, создающий свою панель, да попробовать не на чем
было :) А тут недавно поставил новый winrar, а  он,  оказывается,  экспортирует
свои настройки в unicode. "И ты, Брут?" - подумал я... Женя,  конечно,  отмазку
сразу выдал на гора - это, мол, regedit шалит, но мне от этого легче не  стало.
В результате где-то через полчаса после этих событий на свет появился  UWizard,
причем он даже заработал с первой попытки. Надеюсь, вам  он  будет  служить  не
хуже, чем мне, несмотря на то, что его первую версию в  сеть  я  выложил  13-го
числа. В Пятницу.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3. Как она работает

   Нажмите enter на каком-нибудь файле. Если  этот  файл  начинается  с  0xFFFE
(Unicode), 0xFEFF  (Unicode  Big  Endian),  0xEFBBBF  (UTF-8)  или  его  данные
удовлетворяют UTF-8_MASK (см. настройки в ini-файле), то UWizard  откроет  свою
панель. Панель можно открыть и из командной строки  (см.  синтаксис  команды  в
справке). При таком запуске в случае попытки открытия юникодного файла  UWizard
откроет свою панель  даже  при  отсутствии  0xFEFF/0xFFFE,  но  в  этом  случае
считается, что плагину подсунут файл, который мог бы начинаться 0xFFFE.

   Файл в появившейся панели можно просматривать, редактировать,  копировать  с
панели. Его редактирование приведет к соответствующему изменению  оригинального
файла в unicode, UTF-7, UTF-8, quoted-printable.

   Не обращайте большого внимания на размер "файла" в панели плагина, ибо он не
всегда соответствует действительности (точнее - для  unicode  соответствует,  а
для всего остального - нет).

   А еще плагин предоставляет свои услуги в редакторе. UWizard умеет кодировать
содержимое редактируемого файла из текущей кодировки редактора в  UTF-7,  UTF-8
или quoted-printable и преобразовывать в кодировку редактора данные в  Unicode,
UTF-7, UTF-8 или quoted-printable.

   Также можно перекодировать файлы и открывать их в  редакторе  или  программе
просмотра   без   создания   панели   плагина,   для    этого    воспользуйтесь
соответствующими префиксами командной строки или  откройте  плагин  из  "команд
внешних модулей" (см. справку).

   На самом деле, конечно, прямого редактирования файла в указанных  кодировках
вы не добьетесь (это по определенным причинам сейчас сделать в Фаре  невозможно
вообще),  просто   Фар   при   помощи   UWizard   делает   все   преобразования
unicode/utf-7/utf-8/quoted-printable<->oem  незаметно  для  пользователя.   Для
редактирования файлов на русском и английском языке  этого  вполне  достаточно,
как это будет работать с другими языками - не знаю, не тестировал.

   Для перекодирования  из  OEM  в  Unicode  используется  стандартная  функция
Windows (MultiByteToWideChar из kernel32.dll), если по каким-либо причинам  вам
не нравится результат ее работы, то можно дополнительно вручную указать,  какие
символы OEM в какие соответствующие символы Unicode нужно  перекодировать.  Для
этого в специальный файл с именем uwizard.uni (если вы переименовали  плагин  в
myuw.dll, то этот специальный файл должен  иметь  имя  myuw.uni)  прописываются
пары "код_oem=код_unicode", где:
   код_oem    : двухзначный hex-код символа в кодировке OEM
   код_unicode: соответствующий ему четырехзначный hex-код символа
                в кодировке Unicode
   Пример     : 01=263A
   Этот файл должен лежать рядом с uwizard.dll, если он отсутствует или пустой,
то перекодировка идет как обычно - только с использованием MultiByteToWideChar.
Пример такого файла находится в дистрибутиве. Если вы  создали  на  его  основе
свой, который считаете более правильным, то присылайте его мне, чтобы вместе  с
плагином распространялся именно он.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4. Системные требования

   Чтобы плагин просто заработал, требуется FAR  Manager  1.70  beta  4  (build
1282) и выше.
   Чтобы включилась поддержка UTF-7/UTF-8, требуется NT/2000/ME/98, а под 95 вы
эту поддержку не заметите. По крайней мере, так говорится  в  msdn,  приходится
этому верить :-)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5. Регистрация

   Прочтите, пожалуйста, лицензию (License.txt) - там все написано.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6. Установка и удаление

   Установить можно так же, как  и  большинство  прочих  плагинов  для  Фара:
   - Создайте подкаталог с произвольным именем в Far\Plugins и скопируйте  туда
файлы uwizard.dll, *.ini, *.uni, *.hlf и *.lng.
   - Перезапустите FAR
   - Теперь, если вы нажмете enter на файле  в  кодировке  unicode  или  utf-8,
плагин покажет себя во всей красе :) (плагин можно  запускать  и  из  командной
строки и открывать из меню плагинов - подробности в справке).

   Удаление плагина:
   - Сотрите каталог с плагином, который вы  создали  при  установке  (возможно
потребуется перезапустить Фар, чтобы тот "освободил" uwizard.dll)
   - Удалите записи плагина в реестр (например, при помощи uninstall.reg)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7. Настройки в ini-файле

   Дополнительные настройки плагина  хранятся  в  файле  uwizard.ini  (если  вы
переименовали плагин в myuw.dll, то этот  специальный  файл  должен  иметь  имя
myuw.ini), который должен лежать рядом с uwizard.dll. Вот пример такого файла:
------ начало  ------
[settings]
Prefix="UW:UTF7:UTF8:QP:UBE:UWA"
AddToPanelMenu=1
PrcOFP=1
SIA=0
UTF-8_MASK="<[?]xml*encoding=["']utf-8["']*[?]>*"
------ кончало ------

   Переменная Prefix содержит, как это ни странно, префиксы для запуска плагина
из командной  строки,  перечисленные  через  двоеточие.  Первый  префикс  нужно
использовать для открытия файлов в  кодировке  Unicode,  второй  -  для  UTF-7,
третий - для UTF-8, четвертый - для quoted-printable, пятый - для  Unicode  Big
Endian, а последний - для  автоопределения  (см.  описание  меню  в  панелях  в
справке).

   AddToPanelMenu - указывает, добавлять ли пункт плагина  в  меню  плагинов  в
панелях: 1 - добавлять, 0 - нет. По умолчанию - 1.

   PrcOFP - указывает, включаться ли плагину в дело по  потрошению  файла,  при
нажатии на каком-нибудь файле в панели этой  невзрачной  на  вид,  но  пугающей
своими возможностями кнопки "Enter".  Если  вы  сбросите  ее  в  0,  то  плагин
соответственно будет игнорировать ваши потуги с enter'ом на файлах в  кодировке
unicode или UTF-8, а запустить его будет можно только из командной  строки  или
из меню плагинов. По умолчанию - 1.

   SIA - указывает, участвовать плагину в поиске архивов (Alt-F7, "[x] Искать в
архивах") или нет. Если переменная равна 1, то плагин участвует в таком поиске,
если 0 - не участвует. По умолчанию - 0.

   UTF-8_MASK - описывает начало файла в кодировке UTF-8 при  в  формате  маски
файлов (я не захотел вставлять в такой  простой  плагин  работу  с  регулярными
выражениями ;-) FAR. Эта переменная используется для автоопределения  файлов  в
кодировке UTF-8 наряду с маской 0xEFBBBF. В подобный  файл  при  его  изменении
символы 0xEFBBBF уже не добавляются. По умолчанию значение равно пустой строке.

   Если эти  переменные  не  найдены,  то  их  можно  создать.  Изменения  этих
переменных скажутся на работе UWizard только после перезапуска Фара.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8. Где брать новые версии

   В первую очередь мои творения появляются здесь: http://www.moris.ru/~spinoza

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9. Благодарности

   Спасибо Вадиму Егорову (zg at bmg.lv, zg.times.lv) за код декодирования Base64,
Alex  Yaroslavsky  (trexinc at yandex.ru,  http://trexinc.narod.ru)   за   перевод
справки   (hlf)   на   английский   язык,    Pavel    Rezny    (rezny at email.cz,
http://groups.yahoo.com/group/easyctl) за перевод  справки  (hlf)  и  сообщений
(lng) на чешский  язык,  majvan  (om3tn at psg.sk,  http://www.majvan.host.sk)  за
перевод справки (hlf) и сообщений на словацкий язык.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Благодарю за использование Unicode Wizard.

                                                                  Иван Синтюрин
                                                       Thu 26 Jan 18:28:38 2006


More information about the Pharo-dev mailing list