Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Smalltalk
Перезагрузить страницу Русификация Squeak Smalltalk
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
vk vk вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.05.2004
По умолчанию Русификация Squeak Smalltalk - 12.05.2004, 02:36

Господа сквикеры, будет настроение и время - потестируйте, пожалуйста, эту штуковину:

http://vk.infolio.ru/squeak/

Буду благодарен за критику.
Ответить с цитированием
  (#2 (permalink)) Старый
danio danio вне форума
Member
 
Сообщений: 366
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.01.2004
По умолчанию 13.05.2004, 20:16

Большое спасибо за импульс в этом направлении (я правда не под виндовз) - у меня у самого энтузиазма не хватало разобраться как это сделать. Пусть для начала это будут корявые хаки, главное - русскоязычных пользователей squeak будет больше- а там все будет хорошо

Вот аналогичный путь для Unix VM(я во FreeBSD, но для Linux думаю все бедет аналогично).

Шрифты:
нужно любые иксовые русские шрифты pcf перевести в bdf формат для которого в Squeak есть импортер BDFFontReader

Я пользовался утилитой pcf2bdf из портов FreeBSD(cd /usr/ports/x11-fonts/pcf2bdf; make install clean). Подвернувшиеся под руку фонты конвертируем и переименовываем в вид вроде (croxc01.bdf croxcb01.bdf croxcbo01.bdf croxco01.bdf
croxc02.bdf...) - должно быть две цифры перед расширением, чтобы не перелопачивать импортер, лучше это делать скриптом.

Полученые bdf кое-где имеют пустые строки не там где их ожидает BDFFontReader - меняем
BDFFontReader>>getLine на:
Код:
getLine
    | line |
    [line isEmptyOrNil] whileTrue: [line _ self upTo: Character cr].
    ^line
чтоб он не спотыкался.
В таблице КОИ на 255 позиции находится $Ъ, Squeak как я понял, использует этот символ для вывода всех непечатных символов. Чтобы не было переносов строк в виде Ъ и т.п. - другое вмешательсво:
BDFFontReader>>read (ищем блок собственно добавления символов в таблицу под закомментаринным "form isNil ifFalse: [form morphEdit].") и меняем блок на:
Код:
(form notNil and: [encoding ~=255]) ifTrue: [
      dwidth _ dwidth - 1.
      width _ dwidth max: (bbx at: 1).
      maxWidth _ maxWidth max: width.
      minAscii _ minAscii min: encoding.
      maxAscii _ maxAscii max: encoding.
      strikeWidth _ strikeWidth + width.
      chars add: array.
      (encoding = 32) ifTrue:
    [| ff |
    ff _ array copy.
    ff at: 2 put: 255.
    chars add: ff].
  ].
Это игнорирует Ъ, а при добавлении пробела засовывает пробел заодно и в 255 позицию для нормального отображения текстов с непечатными вкаплениями Прописную Ъ в Squeak и кои8 мы при таком раскладе не увидим (ну да ладно)

Вроде все готово для интсалляции шрифтов в Workspace делаем:
Код:
fontNames _ #('croxc' 'croxcb' ).
fontNames do: [:name || family fontArray textStyle |
    family _ name capitalized.
    BDFFontReader convertFilesNamed: name toFamilyNamed: family inDirectoryNamed: '/usr/home/danil/squeak'.
    fontArray _ StrikeFont readStrikeFont2Family: family.
    textStyle _ TextStyle fontArray: fontArray.
    TextConstants at: family asSymbol put: textStyle.]
(нужно указать директорию где лежат bdf)

Выставляя шрифты в качестве дефолтных обнаруживаем - что можем смотреть, но не можем трогать руками. Unix VM не передает в image эти символы вообще. Берем http://www-sor.inria.fr/~piumarta/squeak/ исходники VM (если вы на Squeak в unix - то они уже скорей всего у вас есть)

В sqUnixX11.c
видим два варианта обработки клавиатуры x2sqKeyPlain (без интернациализации) и x2sqKeyInput(с интернациализацией)
Видим как указателю x2sqKey по умолчанию идет x2sqKeyPlain.
Ниже есть ф-я static void display_parseEnvironment(void) в которой:
Код:
if (getenv("LC_CTYPE") || getenv("LC_ALL"))
    x2sqKey= x2sqKeyInput;
Однако, она почему-то не вызывается и можно хоть обвыставлять переменные окружения. Не будем разбираться что да как, а выставим по умолчанию то, что нам надо:
Код:
typedef int (*x2sqKey_t)(XKeyEvent *xevt);

static int x2sqKeyPlain(XKeyEvent *xevt);
static int x2sqKeyInput(XKeyEvent *xevt);

static x2sqKey_t x2sqKey= x2sqKeyInput;
пересобираем и перставляем Squeak и у нас теплые ноги - все работает

Это быстрая грязная дорога для тех кому срочно надо, а я потихоньку подберу шрифты и выложу пакет на SqueakMap
Ответить с цитированием
  (#3 (permalink)) Старый
vk vk вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.05.2004
По умолчанию 13.05.2004, 20:28

Цитата:
Originally posted by danio
[b]Шрифты:
нужно любые иксовые русские шрифты pcf перевести в bdf формат для которого в Squeak есть импортер BDFFontReader
Супер! Я добавил на своей страничке ссылку на этот тред.

P.S. И вот мы имеем уже две кодировки в Squeak - win1251/koi8. Может, стандартизировать что? Или расширить filein/fileout - добавить перекодировку?
Ответить с цитированием
  (#4 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию koi8 & cp1251 - 14.05.2004, 10:50

Цитата:
Originally posted by danio
[b]P.S. И вот мы имеем уже две кодировки в Squeak - win1251/koi8. Может, стандартизировать что? Или расширить filein/fileout - добавить перекодировку?
Самый простой способ - взять cp1251 за "основную". И, в файле sqUnixCharConv.c, заменить значения некоторых переменных. Я не проверял, но копать гдето там.
Обратить внимание на:
Код:
void *sqTextEncoding= (void *)"MACINTOSH";
void *uxXWinEncoding= (void *)"ISO-8859-1";
.
Попробовать, что-то вроде:
Код:
void *sqTextEncoding= (void *)"CP-1251";
.
Это, при наличии iconv[/code]
Ответить с цитированием
  (#5 (permalink)) Старый
danio danio вне форума
Member
 
Сообщений: 366
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.01.2004
По умолчанию 14.05.2004, 14:20

Если вдруг по сети начнут плавать русскоязычные пакеты - то лучше взять виндовую кодировку (хотя кодировку 1251 нужно будет еще туда добавить и разобраться как оно работает - у меня создалось впечатление, что в unix vm оно только наполовину сделано). Но так пока можно каждому в своем гнезде посидеть, если не будет явной необходимости.
Squeak сидит на чемоданах - на следующую версию запланирована юниконизация и куча изменений формата, компилятора и т.п. - затевать что-то серьезное - все равно что кап ремонт делать в квартире в доме идущем под снос. Я думаю скоро эти решения резко устареют (у меня подозрение, что в unix это недоделано из этих же соображений).
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 06.10.2004, 17:05

Да юникод уже давно пора использовать...
Ответить с цитированием
  (#7 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 08.10.2004, 17:30

Цитата:
Originally posted by Alexander Temerev
[b]Да юникод уже давно пора использовать...
Как я понимаю, версия версия 3.8 (текущая 3.7) будет включать пакет с поддержкой уникода. Как оно будет работать - посмотрим.
Ответить с цитированием
  (#8 (permalink)) Старый
danio danio вне форума
Member
 
Сообщений: 366
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.01.2004
По умолчанию 19.08.2005, 12:11

3.8 давно вышла, на носу 3.9.
Надо что-то, в конце концов, делать с нормальной русификацией

Я в данный момент занимаюсь этим, но осознаю, что может не хватить пороху, поэтому хотелось бы знать - не примет ли кто-нибудь участие.

Сделать нужно следующее:

1) Шрифты для squeak unicode, с русскими символами
2) Собственно инфрастуктуру поддержки русского - LanguageEnvironment, конверторы, Locale и т.д.
3) Понять, как должна таки работать с этим Unix VM, и согласовать фиксы, если они необходимы (японцам, чехам и, если, посмотреть выше в треде, и нам приходилось лазить в VM, интересно - за одним и тем же?)
4) Если уж совсем нечем заняться, то и перевод самой среды.

По к-ву требуемых мозговых усилий, я оцениваю пункты в пропорции примерно так: 4:6:2:1.

Пункт 1 вес`ом из-за плотной забаженности соответствующей инфраструктуры squeak - тому кто этим займется, придется глубоко погрузиться в тему шрифтов в общем и формата TrueType в частности, (если считать, что самое легкое - это сконвертить Microsoft шрифты или свободнодоступные русские ttf в порыве борьбы за лицензионную чистоту). Успех японцев указывает, что это преодолимо.

Пункт 2(чем я сейчас занимаюсь), - просто надо как следует разобраться, баги, как мне сейчас кажется, особо фиксить не придется, но работы, есс-но много.

Пункт 3 - не очень сложно, хотя может быть нудно.

Пункт 4 - При условии выполненных предыдущих пунктов, - перевод, просто перевод (он может быть плохим или хорошим, но сам акт - должен доступен даже начинающему).

Если есть добровольцы, предлагаю на выбор п1 или п2. От мысли, что придется делать и то и другое мне немного не по себе Желательно, чтобы п.2 зависит от п1., но многое можно сделать независимо.

У кого есть мысли?
Вообще, народу сколько пользуется Squeak сейчас?
Все кошерней и кошенрней становиться, ведь
Ответить с цитированием
  (#9 (permalink)) Старый
danio danio вне форума
Member
 
Сообщений: 366
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.01.2004
По умолчанию 17.10.2005, 16:42

пока вот так (работает, в версиях 3.9-6680 по 6690 - в более новых что-то поменялось в рисовании unicode шрифтов, конфликт с моими изменениями, надо смотреть):

http://minnow.cc.gatech.edu/squeak/5773

[/img]
Ответить с цитированием
  (#10 (permalink)) Старый
Andrei N.Sobchuck Andrei N.Sobchuck вне форума
Member
 
Сообщений: 88
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.06.2005
По умолчанию 20.10.2005, 14:04

Цитата:
Originally posted by danio
[b]пока вот так (работает, в версиях 3.9-6680 по 6690 - в более новых что-то поменялось в рисовании unicode шрифтов, конфликт с моими изменениями, надо смотреть)
Классно. Проталкивай в основную ветку.
Ответить с цитированием
  (#11 (permalink)) Старый
danio danio вне форума
Member
 
Сообщений: 366
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.01.2004
По умолчанию 18.01.2008, 00:20

Код:
You guys! You guys! This is soooooooooo awesome ! (c) Cartman
Полез смотреть svn-репозиторий для unix-VM и обнаружил там коммиты трехмесячной давности, реализующие ту же функциональность, что и в новых VM для Mac и Windows - ucs4 поле (грубо говоря юникод пойнт) в буфере событий. Как назло, это случилось после того как я развонялся в squeak-dev на тему отставания и плохой поддержки юникс-вм :)
Это означает, что вот это же решение, что и здесь http://www.hardforum.ru/t76247 работает и для линукса. То есть клавиатурный обработчик уже сейчас будет единый для трех платформ.

Итак:
1) Шрифты:
забудьте ttfFontReaderRefactored, для всех трех платформ есть отличный плагин TrueType с антиалиасингом
2) Все VM адекватно поддерживают юникод - не надо ничего там ковырять корявыми ручонками
3) LanguageEnvironment, если не заморачиваться, обратной совместимостью, написать теперь несложно - и оно будет
Ответить с цитированием
  (#12 (permalink)) Старый
MITRICH MITRICH вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.01.2008
По умолчанию 06.02.2008, 23:05

Ну, я сечас - есть тот кто в танке...
поподробней полледний пост можно?
Ну что бы
Цитата:
ничего там ковырять корявыми ручонками
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Русификация wmvare player 3.1.5 gluks28 Любые вопросы от новичков 0 08.02.2012 12:59
Русификация Turbo C++ 3.0 imported_мартек Вопросы начинающих программистов 0 26.12.2010 20:20
Squeak. Рисование по таймеру imported_NIK_ Smalltalk 3 14.12.2009 23:05
Русский язык в Squeak danio Smalltalk 12 30.08.2008 01:01
Работа с сетью в Squeak rv82 Smalltalk 2 11.06.2008 07:57
Русификация Vistы vitalekk Софт и программы 1 12.05.2008 19:03
Как переписать программу с SmallTalk V на VisualAge SmallTalk Novikov Smalltalk 1 25.10.2007 15:43
Дифференцирование в Squeak steel_rat Smalltalk 13 19.06.2006 11:14
Русификация Dolphin 5 как это сделать gerasim_sergey Smalltalk 0 10.12.2005 23:39
Как поменять Squeak интерфейс Life_Freedom_Love Smalltalk 1 05.04.2005 19:29
Squeak как с ним работать Daniq Smalltalk 7 28.03.2005 15:47



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов