LINUX.ORG.RU

[XWindow]Замена на экране символа ё на ö

 


0

1

Хочу полностью сменить кириллицу на экране на латиницу.
Hoču polnostwu smenitw kirillicu na ěkrane na latinicu.

Файл, отвечающий за ввод символов с клавиатуры я нашел:
/usr/share/X11/xkb/symbols/ru

Что отвечает за вывод символов и их вид на экране:
1) в иксах (XWindow)?
2) в консоли?

Есть ли какие-то штатные механизмы, или только лезть в «нутро»?
Кто знает, скажите, или хотя бы намекните.

P.S. Этот вопрос слишком сложный для Desktop, поэтому запостил сюда.

★★★★★
Ответ на: комментарий от Novator

Жесть. Скриншот взрывает мозг.
Могущество опенсорс в действии.

geekless ★★
()
Ответ на: комментарий от x3al

Латинизация кириллицы в Linux

Пока тема не закрылась, скину чуть обновленный патч
/home/user/freetype2/src/base/ftobjs.c:

//после строки 3180

const char cyr_lat_remap_file[] = "/etc/fonts/remap.conf";
int cyr_lat_remap_on = 0;
unsigned int cyr_lat_chars[2][66] = {
  {0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x401, 0x416, 0x417, 0x418, 0x419, 0x41A, 0x41B, 0x41C, 0x41D, 0x41E,
   0x41F, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42A, 0x42B, 0x42C, 0x42D, 0x42E, 0x42F,
   0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x451, 0x436, 0x437, 0x438, 0x439, 0x43A, 0x43B, 0x43C, 0x43D, 0x43E,
   0x43F, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44A, 0x44B, 0x44C, 0x44D, 0x44E, 0x44F},
  {0x041, 0x042, 0x056, 0x047, 0x044, 0x045, 0x0D4, 0x17D, 0x05A, 0x049, 0x059, 0x04B, 0x04C, 0x04D, 0x04E, 0x04F,
   0x050, 0x052, 0x053, 0x054, 0x055, 0x046, 0x048, 0x043, 0x10C, 0x160, 0x15E, 0x059, 0x04A, 0x176, 0x11A, 0x0DB, 0x0C2,
   0x061, 0x062, 0x076, 0x067, 0x064, 0x065, 0x0F4, 0x17E, 0x07A, 0x069, 0x079, 0x06B, 0x06C, 0x06D, 0x06E, 0x06F,
   0x070, 0x072, 0x073, 0x074, 0x075, 0x066, 0x068, 0x063, 0x10D, 0x161, 0x15F, 0x079, 0x06A, 0x177, 0x11B, 0x0FB, 0x0E2}};

  /* documentation is in freetype.h */

  FT_EXPORT_DEF( FT_UInt )
  FT_Get_Char_Index( FT_Face   face,
                     FT_ULong  charcode )
  {
    FT_UInt  result = 0;

    if ( charcode > 0x0FF && cyr_lat_remap_on ) {
      int i = 0;
      while ( (i < 66) && (cyr_lat_chars[0][i] != charcode) )
        i++;
      if (i < 66)
        charcode = cyr_lat_chars[1][i];
    }

    if ( face && face->charmap )
    {
      FT_CMap  cmap = FT_CMAP( face->charmap );


      if ( charcode > 0xFFFFFFFFUL )
      {
        FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
        FT_TRACE1(( " 0x%x is truncated\n", charcode ));
      }
      result = cmap->clazz->char_index( cmap, (FT_UInt32)charcode );
    }
    return result;
  }

...
...
...

//после строки 4320

  FT_EXPORT_DEF( FT_Error )
  FT_New_Library( FT_Memory    memory,
                  FT_Library  *alibrary )
  {
...
    library->refcount = 1;

    if ( access(cyr_lat_remap_file, F_OK ) != -1 )
      cyr_lat_remap_on = 1;
    else
      cyr_lat_remap_on = 0;

    /* That's ok now */
    *alibrary = library;

    return FT_Err_Ok;
...

«Латинизация» включается при запуске любой программы, если существует файл:
/etc/fonts/remap.conf
(планировал хранить здесь таблицу маппинга, а не в коде, но руки так и не дошли доделать - сейчас наличие файла является переключателем)

Скриншот: http://rghost.net/3960759/image.png

Novator ★★★★★
() автор топика
Ответ на: Латинизация кириллицы в Linux от Novator

все хотело собрать, идея нравится, но вот хотелось что бы выглядело немного подругому, типа я - ya, тоесть более привычно, без этих немецких и прочих символов. Заменить 1 символ на 2 не получится?

Novell-ch ★★★★★
()
Ответ на: комментарий от Novell-ch

На ходу, в библиотеке freetype, думаю не получится, т.к. она отвечает только за рендеринг символов.

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

Если отказаться хотя бы от 3х йотированных гласных (ё,ю,я), то нужно вводить дополнительно 15 мягких согласных (бь, вь, гь, дь, зь, кь, ль, мь, нь, пь, рь, сь, ть, фь, хь), ведь в русском алфавите 33 буквы дают 42 звука.

А в твоем случае слова типа «няня», «являясь» будут уродски выглядеть:
nyanya
yavlyayas'

сравни:
nânâ
âvlââsŷ

Фонетически правильно было бы вообще так:
ňaňa
yavłayaš

в таком алфавите 42 буквы, но переход на него будет чрезвычайно труден для населения (и при этом максимально лёгок для обучения детей!!!)

Novator ★★★★★
() автор топика
Ответ на: комментарий от Novator
For example, in Year 1 that useless letter "c" would be dropped to be replased either by "k" or "s", and likewise "x" would no longer be part of the alphabet. The only kase in which "c" would be retained would be the "ch" formation, which will be dealt with later. Year 2 might reform "w" spelling, so that "which" and "one" would take the same konsonant, wile Year 3 might well abolish "y" replasing it with "i" and Iear 4 might fiks the "g/j" anomali wonse and for all.

Jenerally, then, the improvement would kontinue iear bai iear with Iear 5 doing awai with useless double konsonants, and Iears 6-12 or so modifaiing vowlz and the rimeining voist and unvoist konsonants. Bai Iear 15 or sou, it wud fainali bi posibl tu meik ius ov thi ridandant letez "c", "y" and "x" -- bai now jast a memori in the maindz ov ould doderez -- tu riplais "ch", "sh", and "th" rispektivli.

Fainali, xen, aafte sam 20 iers ov orxogrefkl riform, wi wud hev a lojikl, kohirnt speling in ius xrewawt xe Ingliy-spiking werld. 

(c) M. Twain
Xenesz ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.