Страница 1 из 16

Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 11.01.2010 20:51:56
Сквозняк
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Цель данного проекта русификация линуксовой консольной fp-ide, исправление её багов, улучшения и т.д. Обсуждение растянулось на много страниц, поэтому, по мере необходимости, в первом сообщении буду выкладывать ссылки на сборники патчей для fp-ide, собранные бинарники, репозитории с пакетами и т.д.
_____________________________
Минирепозиторий на яндексдиске с rpm пакетами и архивами для сборки fpc иде с gdb7.5.1 и прочими паскалевскими файлами https://yadi.sk/d/nZWxv0fhcarML Иде можно вытаскивать из соответствующего собранного пакета и переименовав копировать в /usr/local/bin
_____________________________
Репозиторий: ftp://ftp.mageialinux.ru/mageia2/SRPMS/ (пакет называется fp-ide)
Дистрибутив (live): http://forum.mageialinux.ru/viewtopic.p ... 7293#p7293
Более подробно тут: viewtopic.php?p=71019#p71019
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Компилятор 2.0.2 последний, редактор которого нормально отображал русские буквы. Уже вышла версия 2.4.0 и надеяться на то что разработчики что-то исправят не приходится. Судя по исходникам, предполагается, пользователи fp кодят в cp437 - какое дело французам до кодировок cp866 и cp1251. Нужно самим сделать необходимые исправления и отправить разработчикам готовый вариант на утвержение. Кое что я уже исправил, но опасаюсь, буржуйские разработчики не оценят моих познаний в иностранных языках :mrgreen:

Для разработки понадобятся исходники компилятора http://freepascal.org/down/source/sources.var Компиляция: командой make all из каталога fpc-2.4.0, перед повторной компиляцией удалить файл build-stamp.i386-linux Собака зарыта в файле fpc-2.4.0/rtl/unix/video.pp Мой вариант исправленного файла и уже скомпиленного редактора fp http://kran100.narod.ru/1/fpc-240-1386-linux.zip
Запускать fp нужно в косоли с кодировкой utf8, сразу после запуска кнопкой меню переключиться на cp866.
Код: Выделить всё
  function transform_cp850_to_iso01(const st:string):string;//----------трансформация текста и псевдографики

  var i:byte;
      c:char;
      converted:word;

  begin
    transform_cp850_to_iso01:='';
    for i:=1 to length(st) do
      begin
        c:=st[i];
        case c of
          #0..#31:
            converted:=convert_lowascii_to_iso01[c];
          #128..#175,#224..#241: converted:=byte(c); //--CP866-------изменено---для использования запустить редактор с UTF8 кодироакой консоли, после переключиться в CP866
          #176..#223,#242..#245:    //---------------изменено
            converted:=convert_cp850_to_iso01[c];
          else
            converted:=byte(c);
        end;
        if converted and $ff00=$f800 then
          begin
            if not in_ACS then
              begin
                transform_cp850_to_iso01:=transform_cp850_to_iso01+ACSIn;
                in_ACS:=true;
              end;
          end
        else
          if in_ACS then
            begin
              transform_cp850_to_iso01:=transform_cp850_to_iso01+ACSOut+
                                        Attr2Ansi(LastAttr,0);
              in_ACS:=false;
            end;
        c:=char(converted and $ff);
        transform_cp850_to_iso01:=transform_cp850_to_iso01+c;
      end;
  end;

Если запускать редактор не с utf8 кодировкой, русские буквы необходимо дополнительно преобразовывать. Проблема в том что программно невозможно узнать кодировку включенную в консоли кнопкой - переменная LANG при этом не меняется.string;//----------трансформация текста и псевдографики

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 12.01.2010 00:35:42
Максим
Сквозняк писал(а):Уже вышла версия 2.4.0 и надеяться на то что разработчики что-то исправят не приходится.

Надеяться приходится. :mrgreen:

Насколько я понимаю, подобным же образом IDE уже была исправлена в SVN trunk (FPC 2.5.1). Можно ожидать, что эти изменения будут влиты в ветку FPC 2.4.1.
Так что убедитесь, что не делаете лишней работы.

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 12.01.2010 01:20:11
Сквозняк
Убедился, скачал архив исходников 2.5.1 скомпилил, запустил из консоли (по умолчанию там utf8)после переключился, взгляд в будущее:
Изображение
Изображение
А если сразу грузиться с cp866 получим:
Изображение
Изображение
В утф8 кодировке тоже особо не попишешь, кои8-р печатает слова с большим содержанием букв "Б". Не знаю где вы работоспособные улучшения обнаружили, точно после компиляции в линуксе?
Самая свежая версия скачанная по ссылке
svn checkout http://svn.freepascal.org/svn/fpc/trunk fpc
показывает аналогичную хрень. А всего-то для получения работоспособного улучшения в версии 2.4.0 нужно исправить пару строчек. Пока новые исходники не смотрел но там могли наворотить такое что двумя строчками уже не обойдёшься.

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 21.12.2010 00:59:42
consordo
с русскими не работает такая программа, если заменить на латинские, все нормально. что делать?

Код: Выделить всё
LABEL m1,met5;
VAR n,k : Integer;
VAR     bukva : Char;
BEGIN
WriteLn ('Введи строчную букву русского алфавита');
ReadLn (bukva);
UTF8ToConsole case bukva of
'а','е','и','о','у','ы','э','ю','я' :WriteLn('гласная');
'б','з','в','г','д','ж' :WriteLn('согласная звонкая');
'п','с','ф','к','т','ш' :WriteLn('согласная глухая');
'й','л','м','н','р','х','ц','ч','щ','ъ','ь' :WriteLn('другая');
else WriteLn('Таких букв не знаю')
end;

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 21.12.2010 04:58:35
СерП
Если у вас в системе кодировка UTF-8, то русские буквы в переменную типа char не поместятся: она занимает один байт, а русские буквы в UTF-8 два. Это уже не char, это уже string. Если исходный код также в кодировке UTF-8, то компилятор должен ругаться на конструкцию case: русские буквы фактически строки, а строки в качестве вариантов она не принимает. А если кодировка другая, то что у вас делает UTF8ToConsole, да ещё перед case?
У меня на Linux с UTF-8 вот такой код работает нормально:
Код: Выделить всё
  const
  rusbukvi = 'аеиоуыэюябзвгджпсфктшйлмнрхцчщъь';
  var  bukva: String;
begin
  WriteLn ('Введи строчную букву русского алфавита');
  ReadLn (bukva);
  case Pos (UTF8Decode (bukva), UTF8Decode (rusbukvi)) of
   1..9: WriteLn('гласная');
  10..15: WriteLn('согласная звонкая');
  16..21: WriteLn('согласная глухая');
  22..32: WriteLn('другая');
  0: WriteLn('Таких букв не знаю');
  end;
end.

Менее наглядно, чем с буквами в case, но работает.

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 25.01.2011 18:55:10
Сквозняк
Для совместимости с лазарусным кодом мне понадобился 64 битный fp. Насколько жизнеспособной будет идея встраивания сгенерированных в лазарусе модулей в редактируемый в fp код, не знаю, но он их скомпилировать вполне способен, нерабочими :twisted: Для запуска нужно пересобрать через fpc
Проблема в злосчастной табличке "No Browser info available" которая выскакивает при каждом клике мышью по коду. Причём появляется она только в 64 битных версиях редактора. Первая нагугленная на неё жалоба датируется аж 2005 годом. Ничего удивительного в том, что желающих исправлять код, написанный в лучших традициях C, не нашлось:
Код: Выделить всё
Anc:=SearchObjectForSymbol(S^.Ancestor);
           OpenSymbolBrowser(0,20,
                PS^.Items^.At(Index)^.GetName,
                PS^.Items^.At(Index)^.GetText,
                PS^.Items^.At(Index),nil,
                Symbols,PS^.Items^.At(Index)^.References,Anc,PS^.MemInfo);
Пришлось обойтись заглушкой в файле fpsymbol.pas
Код: Выделить всё
         end
       else
         begin
           P:=@Name;
           ErrorBox(msg_symbolnotfound,@P);
         end;
     end
   else
   //ErrorBox(msg_nobrowserinfoavailable,nil); отключаем вредную табличку  [[[[[[[[[[[[[[[[[
   begin end; //патч [[[[[[[[[[[[[[[[[[[
end;
С патчем табличка не выскакивает, можно выделять текст и использовать комбинации клавиш "Ctrl+c", "Ctrl+v" и "Ctrl+Delete". По крайней мере, в konsole это работает.
В версии 2.4.2 продолжилась порча модуля fpcsrc/rtl/unix/video.pp, но пропатченный, от версии 2.4.0, для сборки fp вполне подходит. Также, для этой версии иде необходима мистическая библиотека libtinfo.so.5 Взять её можно из пакета девятой федоры ncurses-libs-5.6-18.20080628.fc9.x86_64.rpm
Библиотека, патченые исходники и особранные fp версий 2.4.0 и 2.4.2 для платформы x86-64_linux http://kran100.narod.ru/1/fp_2.40_2.4.2_x86_64.tar.gz Собрано без поддержки gdb.

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 06.10.2012 15:15:19
alex_alex_alex1
Сквозняк писал(а):Запускать fp нужно в косоли с кодировкой utf8, сразу после запуска кнопкой меню переключиться на cp866.

Где эта кнопка меню?

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 07.10.2012 10:09:21
SSerge
alex_alex_alex1 писал(а):Где эта кнопка меню?

В свойствах окна некоторых разновидностей терминалов оконной среды KDE. :D
В остальных оконных менеджерах обычно ее нету.

...Не майтесь ерундой.
Есть IDE Lazarus, вполне прилично поддерживающая консольные проекты; есть в конце концов нормальные текстовые редакторы. И есть определенные соображения, почему must be в консольных проектах с русскоязыщиной работать только через исходники в UTF-8 и только с помощью FPC версии большей 2.7.0, и только через UnicodeStrings. Иначе с течением времени код ваш вам придется писать заново. Вам это надо?

Я бы не ждал вменяемых изменений в редакторах FP; даже если будут сделаны, следующее поколение обязательно испортит. Поскольку, как тут говорилось FP "написан в традициях С", причем отнюдь не лучших. И вряд ли его кто-то перепишет для UnicodeString - слишком много низкоуровневого кода. Однобайтные же кодировки - путь абсолютно тупиковый, особенно если тщательно взглянуть на линию развития прототипа.

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 06.11.2012 02:14:20
Сквозняк
alex_alex_alex1 писал(а):
Сквозняк писал(а):Запускать fp нужно в косоли с кодировкой utf8, сразу после запуска кнопкой меню переключиться на cp866.

Где эта кнопка меню?

Использую консоль konsole из KDE, в настройках темы синий цвет заменил на чёрный, увеличил шрифт monospace.
Изображение

Добавлено спустя 18 минут 3 секунды:
SSerge писал(а):...Не майтесь ерундой.
Есть IDE Lazarus, вполне прилично поддерживающая консольные проекты; есть в конце концов нормальные текстовые редакторы. И есть определенные соображения, почему must be в консольных проектах с русскоязыщиной работать только через исходники в UTF-8 и только с помощью FPC версии большей 2.7.0, и только через UnicodeStrings. Иначе с течением времени код ваш вам придется писать заново. Вам это надо?

В лазарусе жуткое ШГ которое невозможно исправить через настройки. Этот редактор разработан не для процедурщины а для прописывания действий в обработчики событий. Он даже нормально с восьмибитными кодировками работать не умеет - портит непонятные символы при каждом удобном случае. Автодополнение, тоже, сделано не для процедурщины - раз и засыпал без предупреждения порцию какого-то мусора а ты потом разбирайся, полезный он или логику поломал. UnicodeStrings нужен не для каждого модуля и по большому счёту он дельфийская затычка, т.к. для записи символов UTF-8 нужно резервировать не 2 а как минимум 4 байта (а лучше 5 - в нулевом элементе хранить длину) чтобы обходиться без архивации данных. Если в коде не используется UnicodeStrings, то и больших проблем в будущем не предвидится. Весь код его использующий, если таковой будет, можно вынести в отдельный модуль.

И вряд ли его кто-то перепишет для UnicodeString

Чтобы писать сообщения в консоль или в окошки гуя UnicodeString необязателен.

Однобайтные же кодировки - путь абсолютно тупиковый, особенно если тщательно взглянуть на линию развития прототипа.

Код пишется в однобайтовой кодировке, многобайтовые применяются для комментов и некоторых данных.

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 06.11.2012 05:17:41
SSerge
Сквозняк писал(а):Этот редактор разработан не для процедурщины а для прописывания действий в обработчики событий. Он даже нормально с восьмибитными кодировками работать не умеет - портит непонятные символы при каждом удобном случае.


Ну так не надо работать с восьмибитными кодировками то...

Сквозняк писал(а):Чтобы писать сообщения в консоль или в окошки гуя UnicodeString необязателен.


А вот тут вы заблуждаетесь, ибо скрытый механизм трансляции строк - единственное существующее на сегодняшний момент корректное средство консольного ввода/вывода без надуманных костылей. Понятно, почему это вам не нравится, но де-факто так. И более того - когда нибудь вы таки станете перед фактом, что string=UnicodeString без вариантов; и будет оно скорее всего UCS4, а не USC2, как сейчас. Что-то никто не шарахается от четырехбайтных wchar_t/wstring в g++ и четырехбайтных же символов в нынешней JAVA

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 06.11.2012 12:47:35
Сквозняк
SSerge писал(а):Ну так не надо работать с восьмибитными кодировками то...

Это программисту в каждом конкретном случае решать а редактор не должен вредить. Запилить нормальную не повреждающую конвертацию символов возможно, технически это не сложнее превращения символов в вопросики или квадратики.

Чтобы писать сообщения в консоль или в окошки гуя UnicodeString необязателен.


А вот тут вы заблуждаетесь, ибо скрытый механизм трансляции строк - единственное существующее на сегодняшний момент корректное средство консольного ввода/вывода без надуманных костылей. Понятно, почему это вам не нравится, но де-факто так. И более того - когда нибудь вы таки станете перед фактом, что string=UnicodeString без вариантов; и будет оно скорее всего UCS4, а не USC2, как сейчас. Что-то никто не шарахается от четырехбайтных wchar_t/wstring в g++ и четырехбайтных же символов в нынешней JAVA

Линукс пишут не на дельфи а на С/С++ который ничего не желает знать про дельфийские решения и вводимая строка это одномерный массив который обрабатывает система, и это правильное и универсальное решение. К счастью, кодировка консоли в лине меняется в любой момент в самой консоли а не в реестре, потому принудительная не отключаемая трансляция строк скорее вредна чем полезна.

Если какие-нибудь бракоделы выбросят из паскаля shortstring и ansistring (обе нужны) и заменят их единой кракозяброй по жабьему сценарию, то надо будет транслировать в другую кодировку ключи коммандной строки что есть маразм.

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 23.12.2012 18:59:17
alex_alex_alex1
Ребята, допишите, пожалуйста, патч чтобы можно было кодировку CP866 через LANG задавать или в крайнем случае прямо в исходниках задать ее жестко.

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 02.01.2013 03:43:01
alex_alex_alex1
Требуется помощь http://forum.mageialinux.ru/viewtopic.p ... 6693#p6693 в полной руссификации fp-ide, которая затрагивает и возможность ввода кириллицы, и руссификацию интерфейса. Кто в кодировках понимает - подключайтесь, нужны патчи.

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 02.01.2013 07:22:34
SSerge
alex_alex_alex1
FreeVision надо переводить на UnicodeStrings (UCS2) или хотя бы UTF8, а не костыликами минимализма заниматься. Проблема то глобальна и принципиальна, поэтому "полная русификация" fp-ide без решения этой проблемы - бессмысленное копание в грязи.

Re: Прикручивание русского языка к FP в линуксе

СообщениеДобавлено: 02.01.2013 14:44:16
alex_alex_alex1
SSerge писал(а):alex_alex_alex1
FreeVision надо переводить на UnicodeStrings (UCS2) или хотя бы UTF8

Переводите и давайте патчи.